PY-13264 Consider qualifier of reference expression when collecting names used in function

This commit is contained in:
Mikhail Golubev
2014-11-25 17:36:29 +03:00
parent 614769c1fb
commit 800dc9e422
4 changed files with 15 additions and 3 deletions
@@ -158,6 +158,7 @@ public class PyRefactoringUtil {
@Override
public void visitPyReferenceExpression(PyReferenceExpression node) {
variables.add(node.getReferencedName());
super.visitPyReferenceExpression(node);
}
@Override
@@ -0,0 +1,5 @@
def select():
return 'spam'
def func():
return se<caret>lect().upper()
@@ -42,9 +42,9 @@ public abstract class PyIntroduceTestCase extends PyTestCase {
protected Collection<String> buildSuggestions(Class<? extends PyExpression> parentClass) {
myFixture.configureByFile(getTestName(true) + ".py");
IntroduceHandler handler = createHandler();
PyExpression expr = PsiTreeUtil.getParentOfType(myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset()),
parentClass);
final IntroduceHandler handler = createHandler();
final PyExpression expr = PsiTreeUtil.getParentOfType(myFixture.getFile().findElementAt(myFixture.getCaretOffset()), parentClass);
assertNotNull(expr);
return handler.getSuggestedNames(expr);
}
@@ -78,6 +78,12 @@ public class PyIntroduceVariableTest extends PyIntroduceTestCase {
assertFalse(strings.contains("dict"));
}
// PY-13264
public void testDontSuggestNameOfCalledFunction() {
final Collection<String> suggestions = buildSuggestions(PyCallExpression.class);
assertDoesntContain(suggestions, "select");
}
public void testSuggestNamesNotInScope() { // PY-4605
final Collection<String> strings = buildSuggestions(PyExpression.class);
assertTrue(strings.contains("myfunc1"));