diff --git a/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java b/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java index cf8cb3366cd0..0362c6d4d1cf 100644 --- a/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/references/PyReferenceImpl.java @@ -147,9 +147,12 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference PsiElement definition = instruction.getElement(); NameDefiner definer = null; // TODO: This check may slow down resolving, but it is the current solution to the comprehension scopes problem - final PyComprehensionElement defComprh = PsiTreeUtil.getParentOfType(definition, PyComprehensionElement.class); - if (defComprh != null && defComprh != PsiTreeUtil.getParentOfType(element, PyComprehensionElement.class)) { - continue; + final PyComprehensionElement definitionComprehension = PsiTreeUtil.getParentOfType(definition, PyComprehensionElement.class); + if (definitionComprehension != null) { + final PyComprehensionElement elementComprehension = PsiTreeUtil.getParentOfType(element, PyComprehensionElement.class); + if (elementComprehension == null || !PsiTreeUtil.isAncestor(definitionComprehension, elementComprehension, false)) { + continue; + } } if (definition instanceof NameDefiner && !(definition instanceof PsiNamedElement)) { definer = (NameDefiner)definition; diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/nestedComprehensions.py b/python/testData/inspections/PyUnresolvedReferencesInspection/nestedComprehensions.py new file mode 100644 index 000000000000..f7d036e5edd9 --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/nestedComprehensions.py @@ -0,0 +1,2 @@ +def f(xs, ys): + return [[(x, y) for y in ys] for x in xs] \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java index 3fab2969cc9f..559dd988529d 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java @@ -97,6 +97,11 @@ public class PyUnresolvedReferencesInspectionTest extends PyTestCase { doTest(); } + // PY-6316 + public void testNestedComprehensions() { + doTest(); + } + private void doMultiFileTest() { myFixture.copyFileToProject("inspections/PyUnresolvedReferencesInspection/__init__.py", "PyUnresolvedReferencesInspection/__init__.py"); myFixture.copyFileToProject("inspections/PyUnresolvedReferencesInspection/" + getTestName(true) + ".py",