diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java index 71d80a3b3cab..1d5f949942a2 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java @@ -8,6 +8,7 @@ import com.intellij.psi.stubs.IndexSink; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.io.StringRef; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.*; @@ -102,18 +103,21 @@ public class PyTargetExpressionElementType extends PyStubElementType 0 && children [0].getText().equals(qualifierNode.getText())) { + if (children.length > 0 && children[0].getText().equals(qualifierNode.getText())) { return true; } } return functionNode == null && qualifierNode == null; - } + } @Override public void indexStub(PyTargetExpressionStub stub, IndexSink sink) { diff --git a/python/testData/stubs/VariableInComprehension.py b/python/testData/stubs/VariableInComprehension.py new file mode 100644 index 000000000000..9d0858aa5bb7 --- /dev/null +++ b/python/testData/stubs/VariableInComprehension.py @@ -0,0 +1 @@ +print [xyzzy for xyzzy in range(1, 10)] diff --git a/python/testSrc/com/jetbrains/python/PyStubsTest.java b/python/testSrc/com/jetbrains/python/PyStubsTest.java index 1bfb7b07e970..6c022b8477a1 100644 --- a/python/testSrc/com/jetbrains/python/PyStubsTest.java +++ b/python/testSrc/com/jetbrains/python/PyStubsTest.java @@ -316,9 +316,17 @@ public class PyStubsTest extends PyLightFixtureTestCase { } public void testIfNameMain() { // PY-4008 + ensureVariableNotInIndex("xyzzy"); + } + + public void testVariableInComprehension() { // PY-4029 + ensureVariableNotInIndex("xyzzy"); + } + + private void ensureVariableNotInIndex(String name) { getTestFile(); GlobalSearchScope scope = GlobalSearchScope.allScope(myFixture.getProject()); - Collection result = PyVariableNameIndex.find("xyzzy", myFixture.getProject(), scope); + Collection result = PyVariableNameIndex.find(name, myFixture.getProject(), scope); assertEquals(0, result.size()); }