From d6ebed53b43ecd66ad0ca76cf12b3ff52bb9d83d Mon Sep 17 00:00:00 2001 From: Anton Bragin Date: Tue, 16 Jan 2018 15:56:43 +0300 Subject: [PATCH] PY-17843 PY-20371 Reference resolution for cimported names fixed --- .../CythonUsageBeforeDeclarationInspection.html | 5 +++++ .../python/psi/impl/PyFromImportStatementImpl.java | 14 +++++++++++--- .../python/fixtures/PyResolveTestCase.java | 2 ++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 python/resources/inspectionDescriptions/CythonUsageBeforeDeclarationInspection.html diff --git a/python/resources/inspectionDescriptions/CythonUsageBeforeDeclarationInspection.html b/python/resources/inspectionDescriptions/CythonUsageBeforeDeclarationInspection.html new file mode 100644 index 000000000000..97e4a1e2af14 --- /dev/null +++ b/python/resources/inspectionDescriptions/CythonUsageBeforeDeclarationInspection.html @@ -0,0 +1,5 @@ + + +This inspection warns about Cython variables being referenced before declaration. + + \ No newline at end of file diff --git a/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java index 4892fa6fc060..34bb81b07c21 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyFromImportStatementImpl.java @@ -23,6 +23,7 @@ import com.intellij.psi.*; import com.intellij.psi.scope.DelegatingScopeProcessor; import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.stubs.IStubElementType; +import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.QualifiedName; import com.intellij.util.ArrayUtil; import com.jetbrains.python.PyElementTypes; @@ -91,15 +92,22 @@ public class PyFromImportStatementImpl extends PyBaseElementImpl new PyImportElement[count]); + return stub.getChildrenByType(importElementType, count -> new PyImportElement[count]); } List result = new ArrayList<>(); - final ASTNode importKeyword = getNode().findChildByType(PyTokenTypes.IMPORT_KEYWORD); + final ASTNode importKeyword = getNode().findChildByType(importKeywordToken); if (importKeyword != null) { for (ASTNode node = importKeyword.getTreeNext(); node != null; node = node.getTreeNext()) { - if (node.getElementType() == PyElementTypes.IMPORT_ELEMENT) { + if (node.getElementType() == importElementType) { result.add((PyImportElement)node.getPsi()); } } diff --git a/python/testSrc/com/jetbrains/python/fixtures/PyResolveTestCase.java b/python/testSrc/com/jetbrains/python/fixtures/PyResolveTestCase.java index 9eb4261502f6..06164cdeb3cd 100644 --- a/python/testSrc/com/jetbrains/python/fixtures/PyResolveTestCase.java +++ b/python/testSrc/com/jetbrains/python/fixtures/PyResolveTestCase.java @@ -114,6 +114,8 @@ public abstract class PyResolveTestCase extends PyTestCase { } public static int findMarkerOffset(final PsiFile psiFile) { + // TODO: harmonize with CythonResolveTest synax + // TODO: check and fix work with single letter identifiers Document document = PsiDocumentManager.getInstance(psiFile.getProject()).getDocument(psiFile); assert document != null; int offset = -1;