diff --git a/python/src/com/jetbrains/python/codeInsight/PySuperAttributesCompletionContributor.java b/python/src/com/jetbrains/python/codeInsight/PySuperAttributesCompletionContributor.java index 7b8606722994..c6903c023876 100644 --- a/python/src/com/jetbrains/python/codeInsight/PySuperAttributesCompletionContributor.java +++ b/python/src/com/jetbrains/python/codeInsight/PySuperAttributesCompletionContributor.java @@ -22,7 +22,7 @@ import java.util.List; public class PySuperAttributesCompletionContributor extends CompletionContributor { public PySuperAttributesCompletionContributor() { extend(CompletionType.BASIC, - PlatformPatterns.psiElement().withParent(PyReferenceExpression.class), + PlatformPatterns.psiElement().withParents(PyReferenceExpression.class, PyExpressionStatement.class, PyStatementList.class, PyClass.class), new CompletionProvider() { @Override protected void addCompletions(@NotNull CompletionParameters parameters, @@ -30,17 +30,11 @@ public class PySuperAttributesCompletionContributor extends CompletionContributo @NotNull CompletionResultSet result) { PsiElement position = parameters.getOriginalPosition(); PyClass containingClass = PsiTreeUtil.getParentOfType(position, PyClass.class); - if (containingClass == null && position instanceof PsiWhiteSpace) { - position = PsiTreeUtil.prevLeaf(position); - containingClass = PsiTreeUtil.getParentOfType(position, PyClass.class); - } + if (containingClass == null) { return; } - PyFunction func = PsiTreeUtil.getParentOfType(position, PyFunction.class); - if (func != null) { - return; - } + List seenNames = Lists.newArrayList(); for (PyTargetExpression expr : containingClass.getClassAttributes()) { seenNames.add(expr.getName()); diff --git a/python/testData/completion/superClassAttributes.after.py b/python/testData/completion/superClassAttributes.after.py new file mode 100644 index 000000000000..f2e61a2d9707 --- /dev/null +++ b/python/testData/completion/superClassAttributes.after.py @@ -0,0 +1,6 @@ +class Foo: + attribute = 1 + + +class Boo(Foo): + attribute = \ No newline at end of file diff --git a/python/testData/completion/superClassAttributes.py b/python/testData/completion/superClassAttributes.py new file mode 100644 index 000000000000..a1977688577a --- /dev/null +++ b/python/testData/completion/superClassAttributes.py @@ -0,0 +1,6 @@ +class Foo: + attribute = 1 + + +class Boo(Foo): + attr \ No newline at end of file diff --git a/python/testData/completion/superClassAttributesNoCompletionInFunc.after.py b/python/testData/completion/superClassAttributesNoCompletionInFunc.after.py new file mode 100644 index 000000000000..3da0a2c45e28 --- /dev/null +++ b/python/testData/completion/superClassAttributesNoCompletionInFunc.after.py @@ -0,0 +1,7 @@ +class Foo: + attribute = 1 + + +class Boo(Foo): + def f(self): + attr \ No newline at end of file diff --git a/python/testData/completion/superClassAttributesNoCompletionInFunc.py b/python/testData/completion/superClassAttributesNoCompletionInFunc.py new file mode 100644 index 000000000000..3da0a2c45e28 --- /dev/null +++ b/python/testData/completion/superClassAttributesNoCompletionInFunc.py @@ -0,0 +1,7 @@ +class Foo: + attribute = 1 + + +class Boo(Foo): + def f(self): + attr \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java index 49f607d25a03..49b45ee1daf6 100644 --- a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java @@ -267,4 +267,12 @@ public class PythonCompletionTest extends PyLightFixtureTestCase { public void testNoIdentifiersInImport() { doTest(); } + + public void testSuperClassAttributes() { + doTest(); + } + + public void testSuperClassAttributesNoCompletionInFunc() { + doTest(); + } }