Compatibility inspection for dict unpacking in dict literals

This commit is contained in:
Andrey Vlasovskikh
2015-09-14 15:32:21 +03:00
parent 30c936a46d
commit 4b833b0af6
4 changed files with 20 additions and 10 deletions
@@ -172,28 +172,32 @@ public abstract class CompatibilityVisitor extends PyAnnotator {
super.visitPyStarExpression(node);
if (node.isAssignmentTarget()) {
boolean problem = false;
for (LanguageLevel level : myVersionsToProcess) {
if (level.isOlderThan(LanguageLevel.PYTHON30)) {
problem = true;
registerProblem(node, "Python versions < 3.0 do not support starred expressions as assignment targets");
break;
}
}
if (problem) {
registerProblem(node, "Python versions < 3.0 do not support starred expressions as assignment targets");
}
}
if (node.isUnpacking()) {
boolean problem = false;
for (LanguageLevel level : myVersionsToProcess) {
if (level.isOlderThan(LanguageLevel.PYTHON35)) {
problem = true;
registerProblem(node, "Python versions < 3.5 do not support starred expressions in tuples, lists, and sets");
break;
}
}
if (problem) {
registerProblem(node, "Python version < 3.5 do not support starred expressions in tuples, lists, and sets");
}
}
@Override
public void visitPyDoubleStarExpression(PyDoubleStarExpression node) {
super.visitPyDoubleStarExpression(node);
for (LanguageLevel level : myVersionsToProcess) {
if (level.isOlderThan(LanguageLevel.PYTHON35)) {
registerProblem(node, "Python versions < 3.5 do not support starred expressions in dicts");
break;
}
}
}
@@ -0,0 +1,2 @@
xs = {1: 2}
ys = {<warning descr="Python versions < 3.5 do not support starred expressions in dicts">**xs</warning>, 3: 4}
@@ -1,2 +1,2 @@
t = (1, <warning descr="Python version < 3.5 do not support starred expressions in tuples, lists, and sets">*(2, 3)</warning>)
t = (1, <warning descr="Python versions < 3.5 do not support starred expressions in tuples, lists, and sets">*(2, 3)</warning>)
a, <warning descr="Python versions < 3.0 do not support starred expressions as assignment targets">*b</warning>, c = t
@@ -159,6 +159,10 @@ public class PyCompatibilityInspectionTest extends PyTestCase {
doTest(LanguageLevel.PYTHON35);
}
public void testDoubleStarUnpacking() {
doTest(LanguageLevel.PYTHON35);
}
private void doTest(@NotNull LanguageLevel level) {
runWithLanguageLevel(level, new Runnable() {
@Override