From d6ce01047effb6ef567af0b8841805d3b0f07d55 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Mon, 11 Aug 2014 14:18:09 +0400 Subject: [PATCH] PY-13668 Fix anchor element for local import insertion --- .../python/codeInsight/imports/AddImportHelper.java | 3 +-- .../codeInsight/imports/ImportCandidateHolder.java | 2 +- python/testData/addImport/localFromImport.after.py | 1 + python/testData/addImport/localImport.after.py | 1 + .../addImport/localImportInlineBranch.after.py | 6 ++++++ python/testData/addImport/localImportInlineBranch.py | 3 +++ .../addImport/localImportInlineFunctionBody.after.py | 5 +++++ .../addImport/localImportInlineFunctionBody.py | 2 ++ .../testSrc/com/jetbrains/python/PyAddImportTest.java | 10 ++++++++++ 9 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 python/testData/addImport/localImportInlineBranch.after.py create mode 100644 python/testData/addImport/localImportInlineBranch.py create mode 100644 python/testData/addImport/localImportInlineFunctionBody.after.py create mode 100644 python/testData/addImport/localImportInlineFunctionBody.py diff --git a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java index 7b62252c3ac9..d33e97c1e7f9 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/AddImportHelper.java @@ -74,8 +74,7 @@ public class AddImportHelper { @Nullable public static PsiElement getLocalInsertPosition(@NotNull PyElement anchor) { - final PyStatement enclosingStatement = PsiTreeUtil.getParentOfType(anchor, PyStatement.class, false); - return enclosingStatement != null ? enclosingStatement.getFirstChild() : null; + return PsiTreeUtil.getParentOfType(anchor, PyStatement.class, false); } public enum ImportPriority { diff --git a/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java b/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java index 12515fe260c6..e75df5b9a0d0 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java @@ -52,7 +52,7 @@ class ImportCandidateHolder implements Comparable { * Creates new instance. * * @param importable an element that could be imported either from import element or from file. - * @param file the file which is the source of the importable + * @param file the file which is the source of the importable (module for symbols, containing directory for modules and packages) * @param importElement an existing import element that can be a source for the importable. * @param path import path for the file, as a qualified name (a.b.c) * For top-level imported symbols it's qualified name of containing module (or package for __init__.py). diff --git a/python/testData/addImport/localFromImport.after.py b/python/testData/addImport/localFromImport.after.py index f73b9c3ba83e..92920f79cf9f 100644 --- a/python/testData/addImport/localFromImport.after.py +++ b/python/testData/addImport/localFromImport.after.py @@ -1,5 +1,6 @@ def func(): for _ range(10): from package.module import foo + foo # \ No newline at end of file diff --git a/python/testData/addImport/localImport.after.py b/python/testData/addImport/localImport.after.py index 5b67e0d6dd2a..883e080132c9 100644 --- a/python/testData/addImport/localImport.after.py +++ b/python/testData/addImport/localImport.after.py @@ -1,6 +1,7 @@ def func(): try: import module + module # except: diff --git a/python/testData/addImport/localImportInlineBranch.after.py b/python/testData/addImport/localImportInlineBranch.after.py new file mode 100644 index 000000000000..c7f7d3881feb --- /dev/null +++ b/python/testData/addImport/localImportInlineBranch.after.py @@ -0,0 +1,6 @@ +def func(): + if True: + import module + + module +# \ No newline at end of file diff --git a/python/testData/addImport/localImportInlineBranch.py b/python/testData/addImport/localImportInlineBranch.py new file mode 100644 index 000000000000..89d4935d17b3 --- /dev/null +++ b/python/testData/addImport/localImportInlineBranch.py @@ -0,0 +1,3 @@ +def func(): + if True: module +# \ No newline at end of file diff --git a/python/testData/addImport/localImportInlineFunctionBody.after.py b/python/testData/addImport/localImportInlineFunctionBody.after.py new file mode 100644 index 000000000000..13d2a1e60805 --- /dev/null +++ b/python/testData/addImport/localImportInlineFunctionBody.after.py @@ -0,0 +1,5 @@ +def func(): + import module + + module +# \ No newline at end of file diff --git a/python/testData/addImport/localImportInlineFunctionBody.py b/python/testData/addImport/localImportInlineFunctionBody.py new file mode 100644 index 000000000000..b76c83016192 --- /dev/null +++ b/python/testData/addImport/localImportInlineFunctionBody.py @@ -0,0 +1,2 @@ +def func(): module +# \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyAddImportTest.java b/python/testSrc/com/jetbrains/python/PyAddImportTest.java index 0122b6762da9..f95187aff819 100644 --- a/python/testSrc/com/jetbrains/python/PyAddImportTest.java +++ b/python/testSrc/com/jetbrains/python/PyAddImportTest.java @@ -69,6 +69,16 @@ public class PyAddImportTest extends PyTestCase { doAddLocalImport("module", null); } + // PY-13668 + public void testLocalImportInlineFunctionBody() { + testLocalImport(); + } + + // PY-13668 + public void testLocalImportInlineBranch() { + testLocalImport(); + } + /** * Add local import statement * @param name reference name in corresponding import element