From 840769d43f84972a2465ede65fe1d7c6526cbcb3 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Fri, 23 Jun 2017 16:52:03 +0300 Subject: [PATCH] PY-18816 Test that glued and long string literals are not saved in stubs --- .../python/psi/impl/stubs/PyTypingAliasStubType.java | 4 ++-- python/testData/stubs/TypeAliasStubs.py | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java index ea59fb65b7e7..1992379d3b02 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java @@ -39,7 +39,7 @@ import static com.jetbrains.python.psi.PyUtil.as; * @author Mikhail Golubev */ public class PyTypingAliasStubType extends CustomTargetExpressionStubType { - private static final int STRING_LITERAL_LENGTH_THRESHOLD = 120; + private static final int STRING_LITERAL_LENGTH_THRESHOLD = 100; private static final Pattern TYPE_ANNOTATION_LIKE = Pattern.compile("\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*" + "(\\.\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*)*" + @@ -96,7 +96,7 @@ public class PyTypingAliasStubType extends CustomTargetExpressionStubType STRING_LITERAL_LENGTH_THRESHOLD) { + if (pyString.getStringNodes().size() != 1 || pyString.getTextLength() > STRING_LITERAL_LENGTH_THRESHOLD) { return false; } final String content = pyString.getStringValue(); diff --git a/python/testData/stubs/TypeAliasStubs.py b/python/testData/stubs/TypeAliasStubs.py index f0a4c31e9a7d..76098acbb125 100644 --- a/python/testData/stubs/TypeAliasStubs.py +++ b/python/testData/stubs/TypeAliasStubs.py @@ -5,6 +5,9 @@ __version__ = '0.1' S1_ok = "foo" S2_ok = "foo.bar" S3_ok = "foo.bar[baz]" +too_long_string = "foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo.foo" +natural_text = "Foo is baz." +glued_string = 'foo' '.bar' # Such expressions are kept as qualified expressions in PyTargetExpressionStub # with initializer type of ReferenceExpression instead of custom stubs for