comprehension element defines a separate scope (PY-1618)

This commit is contained in:
Dmitry Jemerov
2010-08-26 20:56:54 +04:00
parent edf8e67c96
commit 9ba9477ab2
6 changed files with 24 additions and 2 deletions

View File

@@ -299,8 +299,8 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference
final String elementName = ((PsiNamedElement)element).getName();
if ((Comparing.equal(myElement.getReferencedName(), elementName) || PyNames.INIT.equals(elementName)) && !haveQualifiers(element)) {
if (element instanceof PyParameter || element instanceof PyTargetExpression) {
PsiElement ourContainer = PsiTreeUtil.getParentOfType(getElement(), PsiNamedElement.class, PyLambdaExpression.class);
PsiElement theirContainer = PsiTreeUtil.getParentOfType(element, PsiNamedElement.class, PyLambdaExpression.class);
PsiElement ourContainer = PsiTreeUtil.getParentOfType(getElement(), PsiNamedElement.class, PyLambdaExpression.class, PyComprehensionElement.class);
PsiElement theirContainer = PsiTreeUtil.getParentOfType(element, PsiNamedElement.class, PyLambdaExpression.class, PyComprehensionElement.class);
if (ourContainer != null && ourContainer == theirContainer) {
return true;
}

View File

@@ -0,0 +1,4 @@
parameter_lists_copy = [m for m in parameter_lists]
for <caret>m in parameter_lists_copy:
if param_index >= len(m.GetParameters()):
parameter_lists.remove(m)

View File

@@ -0,0 +1,3 @@
foo = 2
elements = [x for x in range(5) if x == foo]
print f<caret>oo

View File

@@ -0,0 +1,3 @@
bar = 2
elements = [x for x in range(5) if x == bar]
print bar

View File

@@ -0,0 +1,4 @@
parameter_lists_copy = [m for m in parameter_lists]
for bar in parameter_lists_copy:
if param_index >= len(bar.GetParameters()):
parameter_lists.remove(bar)

View File

@@ -41,6 +41,14 @@ public class PyRenameTest extends PyLightFixtureTestCase {
doTest("_x");
}
public void testRenameLocalWithComprehension() { // PY-1618
doTest("bar");
}
public void testRenameLocalWithComprehension2() { // PY-1618
doTest("bar");
}
private void doTest(final String newName) {
myFixture.configureByFile("refactoring/rename/" + getTestName(true) + ".py");
myFixture.renameElementAtCaret(newName);