From 64b2788857f5e7810b048adf0dba4cddcbb6d7c6 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 1 Mar 2018 18:57:20 +0300 Subject: [PATCH] PY-28752 Show full origin when suggesting symbols from existing "from" imports --- .../python/codeInsight/imports/ImportCandidateHolder.java | 2 +- .../fullFromImportSourceNameInSuggestion/foo/__init__.py | 0 .../foo/bar/__init__.py | 0 .../fullFromImportSourceNameInSuggestion/foo/bar/baz.py | 6 ++++++ .../fullFromImportSourceNameInSuggestion/main.py | 3 +++ .../fullFromImportSourceNameInSuggestion/main_after.py | 3 +++ .../python/quickFixes/PyAddImportQuickFixTest.java | 7 ++++++- 7 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/__init__.py create mode 100644 python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/bar/__init__.py create mode 100644 python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/bar/baz.py create mode 100644 python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/main.py create mode 100644 python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/main_after.py diff --git a/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java b/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java index e80f593be376..f67bd5087c76 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/ImportCandidateHolder.java @@ -154,7 +154,7 @@ public class ImportCandidateHolder implements Comparable sb.append(StringUtil.repeat(".", fromImportStatement.getRelativeLevel())); final PyReferenceExpression source = fromImportStatement.getImportSource(); if (source != null) { - sb.append(source.getReferencedName()); + sb.append(source.asQualifiedName()); } } return sb.toString(); diff --git a/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/__init__.py b/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/bar/__init__.py b/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/bar/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/bar/baz.py b/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/bar/baz.py new file mode 100644 index 000000000000..6e91c1635528 --- /dev/null +++ b/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/foo/bar/baz.py @@ -0,0 +1,6 @@ +class ClassA: + pass + + +class ClassB: + pass diff --git a/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/main.py b/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/main.py new file mode 100644 index 000000000000..f0784a713e55 --- /dev/null +++ b/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/main.py @@ -0,0 +1,3 @@ +from foo.bar.baz import ClassA + +print(ClassA, ClassB) diff --git a/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/main_after.py b/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/main_after.py new file mode 100644 index 000000000000..b351c90feb83 --- /dev/null +++ b/python/testData/quickFixes/PyAddImportQuickFixTest/fullFromImportSourceNameInSuggestion/main_after.py @@ -0,0 +1,3 @@ +from foo.bar.baz import ClassA, ClassB + +print(ClassA, ClassB) diff --git a/python/testSrc/com/jetbrains/python/quickFixes/PyAddImportQuickFixTest.java b/python/testSrc/com/jetbrains/python/quickFixes/PyAddImportQuickFixTest.java index 4fca126d0f5c..7ffb73ffe9a0 100644 --- a/python/testSrc/com/jetbrains/python/quickFixes/PyAddImportQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/quickFixes/PyAddImportQuickFixTest.java @@ -100,7 +100,7 @@ public class PyAddImportQuickFixTest extends PyQuickFixTestCase { public void testExistingImportsAlwaysSuggestedFirstEvenIfLonger() { doMultiFileAutoImportTest("Import", quickfix -> { final List candidates = ContainerUtil.map(quickfix.getCandidates(), c -> c.getPresentableText("ClassB")); - assertOrderedEquals(candidates, "ClassB from path", "short.ClassB"); + assertOrderedEquals(candidates, "ClassB from long.pkg.path", "short.ClassB"); return false; }); } @@ -114,6 +114,11 @@ public class PyAddImportQuickFixTest extends PyQuickFixTestCase { }); } + // PY-28752 + public void testFullFromImportSourceNameInSuggestion() { + doMultiFileAutoImportTest("Import 'ClassB from foo.bar.baz'"); + } + private void doMultiFileAutoImportTest(@NotNull String hintPrefix) { doMultiFileAutoImportTest(hintPrefix, null); }