fixed PY-6589 Unnecessary backslash in expression: false negative for double parenthesis

This commit is contained in:
Ekaterina Tuzova
2012-06-21 10:07:43 +04:00
parent 4f1aa8137c
commit 97e563120e
2 changed files with 14 additions and 17 deletions
@@ -5,8 +5,8 @@ import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiWhiteSpace;
import com.intellij.psi.search.PsiElementProcessor;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.containers.Stack;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.actions.RemoveUnnecessaryBackslashQuickFix;
import com.jetbrains.python.psi.*;
@@ -53,17 +53,7 @@ public class PyUnnecessaryBackslashInspection extends PyInspection {
@Override
public void visitPyParenthesizedExpression(final PyParenthesizedExpression expression) {
Stack<PsiElement> stack = new Stack<PsiElement>();
stack.push(expression.getContainedExpression());
while (!stack.isEmpty()) {
PsiElement element = stack.pop();
findProblem(element);
if (element != null) {
for (PsiElement psiElement : element.getChildren()) {
stack.push(psiElement);
}
}
}
findProblem(expression);
}
@Override
@@ -92,14 +82,15 @@ public class PyUnnecessaryBackslashInspection extends PyInspection {
}
private void findProblem(@Nullable final PsiElement expression) {
PsiWhiteSpace[] children = PsiTreeUtil.getChildrenOfType(expression, PsiWhiteSpace.class);
if (children != null) {
for (PsiWhiteSpace ws : children) {
if (ws.getText().contains("\\")) {
PsiTreeUtil.processElements(expression, new PsiElementProcessor<PsiElement>() {
@Override
public boolean execute(@NotNull PsiElement ws) {
if (ws instanceof PsiWhiteSpace && ws.getText().contains("\\")) {
registerProblem(ws, "Unnecessary backslash in expression.", new RemoveUnnecessaryBackslashQuickFix());
}
return true;
}
}
});
}
}
}
@@ -52,3 +52,9 @@ v = [ "some"<warning descr="Unnecessary backslash in expression."> \</warning>
a = func('some '<warning descr="Unnecessary backslash in expression."> \</warning>
'string')
#PY-6589
a = ( <warning descr="Unnecessary backslash in expression."> \</warning>
(1, <warning descr="Unnecessary backslash in expression."> \</warning>
2),2)