mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
Fixed IntellijIdeaRulezzz in completion (PY-5821, PY-6037)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.jetbrains.python.psi.impl.references;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.codeInsight.completion.CompletionUtil;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.lang.ASTNode;
|
||||
@@ -498,22 +499,25 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference
|
||||
final List<LookupElement> ret = Lists.newArrayList();
|
||||
|
||||
// Use real context here to enable correct completion and resolve in case of PyExpressionCodeFragment!!!
|
||||
final PsiElement realContext = PyPsiUtils.getRealContext(myElement);
|
||||
final PsiElement originalElement = CompletionUtil.getOriginalElement(myElement);
|
||||
final PyQualifiedExpression element = originalElement instanceof PyQualifiedExpression ?
|
||||
(PyQualifiedExpression)originalElement : myElement;
|
||||
final PsiElement realContext = PyPsiUtils.getRealContext(element);
|
||||
|
||||
// include our own names
|
||||
final int underscores = PyUtil.getInitialUnderscores(myElement.getName());
|
||||
final CompletionVariantsProcessor processor = new CompletionVariantsProcessor(myElement);
|
||||
final int underscores = PyUtil.getInitialUnderscores(element.getName());
|
||||
final CompletionVariantsProcessor processor = new CompletionVariantsProcessor(element);
|
||||
final ScopeOwner owner = realContext instanceof ScopeOwner ? (ScopeOwner)realContext : ScopeUtil.getScopeOwner(realContext);
|
||||
if (owner != null) {
|
||||
PyResolveUtil.scopeCrawlUp(processor, owner, null);
|
||||
}
|
||||
|
||||
// in a call, include function's arg names
|
||||
PythonDataflowUtil.collectFunctionArgNames(myElement, ret);
|
||||
PythonDataflowUtil.collectFunctionArgNames(element, ret);
|
||||
|
||||
// include builtin names
|
||||
processor.setNotice("__builtin__");
|
||||
final PyFile builtinsFile = PyBuiltinCache.getInstance(getElement()).getBuiltinsFile();
|
||||
final PyFile builtinsFile = PyBuiltinCache.getInstance(element).getBuiltinsFile();
|
||||
if (builtinsFile != null) {
|
||||
PyResolveUtil.scopeCrawlUp(processor, builtinsFile, null);
|
||||
}
|
||||
|
||||
3
python/testData/completion/exceptName.after.py
Normal file
3
python/testData/completion/exceptName.after.py
Normal file
@@ -0,0 +1,3 @@
|
||||
try:
|
||||
import foo
|
||||
except ImportError, bar:
|
||||
3
python/testData/completion/exceptName.py
Normal file
3
python/testData/completion/exceptName.py
Normal file
@@ -0,0 +1,3 @@
|
||||
try:
|
||||
import foo
|
||||
except ImportError, bar<caret>:
|
||||
1
python/testData/completion/globalName.after.py
Normal file
1
python/testData/completion/globalName.after.py
Normal file
@@ -0,0 +1 @@
|
||||
global foo
|
||||
1
python/testData/completion/globalName.py
Normal file
1
python/testData/completion/globalName.py
Normal file
@@ -0,0 +1 @@
|
||||
global foo<caret>
|
||||
@@ -528,4 +528,14 @@ public class PythonCompletionTest extends PyTestCase {
|
||||
public void testOldStyleClassAttributes() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
// PY-5821
|
||||
public void testGlobalName() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
// PY-6037
|
||||
public void testExceptName() {
|
||||
doTest();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user