diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/ConvertVariadicParamIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/ConvertVariadicParamIntention.java index 5315a6ca17b0..296282ccd3cb 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/ConvertVariadicParamIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/ConvertVariadicParamIntention.java @@ -71,6 +71,10 @@ public class ConvertVariadicParamIntention extends PyBaseIntentionAction { final PyFunction function = PsiTreeUtil.getParentOfType(element, PyFunction.class); if (function != null) { + if (LanguageLevel.forElement(function).isOlderThan(LanguageLevel.PYTHON30) && function.getParameterList().hasPositionalContainer()) { + return false; + } + final boolean caretInParameterList = PsiTreeUtil.isAncestor(function.getParameterList(), element, true); for (PyCallExpression call : findKeywordContainerCalls(function)) { diff --git a/python/testData/intentions/convertVariadicParamPositionalContainerInPy2.py b/python/testData/intentions/convertVariadicParamPositionalContainerInPy2.py new file mode 100644 index 000000000000..177e304282ed --- /dev/null +++ b/python/testData/intentions/convertVariadicParamPositionalContainerInPy2.py @@ -0,0 +1,2 @@ +def foo(*args, **kwargs): + return kwargs["bar"] \ No newline at end of file diff --git a/python/testData/intentions/convertVariadicParamPositionalContainerInPy3.py b/python/testData/intentions/convertVariadicParamPositionalContainerInPy3.py new file mode 100644 index 000000000000..177e304282ed --- /dev/null +++ b/python/testData/intentions/convertVariadicParamPositionalContainerInPy3.py @@ -0,0 +1,2 @@ +def foo(*args, **kwargs): + return kwargs["bar"] \ No newline at end of file diff --git a/python/testData/intentions/convertVariadicParamPositionalContainerInPy3_after.py b/python/testData/intentions/convertVariadicParamPositionalContainerInPy3_after.py new file mode 100644 index 000000000000..2b3e0721d7bf --- /dev/null +++ b/python/testData/intentions/convertVariadicParamPositionalContainerInPy3_after.py @@ -0,0 +1,2 @@ +def foo(*args, bar, **kwargs): + return bar \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/intentions/PyIntentionTest.java b/python/testSrc/com/jetbrains/python/intentions/PyIntentionTest.java index f33a9239f6dc..9168ad318c41 100644 --- a/python/testSrc/com/jetbrains/python/intentions/PyIntentionTest.java +++ b/python/testSrc/com/jetbrains/python/intentions/PyIntentionTest.java @@ -231,6 +231,14 @@ public class PyIntentionTest extends PyTestCase { doTest(PyBundle.message("INTN.convert.variadic.param")); } + public void testConvertVariadicParamPositionalContainerInPy2() { + doNegativeTest(PyBundle.message("INTN.convert.variadic.param")); + } + + public void testConvertVariadicParamPositionalContainerInPy3() { + runWithLanguageLevel(LanguageLevel.PYTHON30, () -> doTest(PyBundle.message("INTN.convert.variadic.param"))); + } + public void testConvertTripleQuotedString() { //PY-2697 doTest(PyBundle.message("INTN.triple.quoted.string")); }