mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-04 17:20:55 +07:00
Don't convert invalid identifiers to parameters.
This commit is contained in:
@@ -77,7 +77,7 @@ public class ConvertVariadicParamIntention extends PyBaseIntentionAction {
|
|||||||
final PyExpression firstArgument = ArrayUtil.getFirstElement(call.getArguments());
|
final PyExpression firstArgument = ArrayUtil.getFirstElement(call.getArguments());
|
||||||
final String firstArgumentValue = PyStringLiteralUtil.getStringValue(firstArgument);
|
final String firstArgumentValue = PyStringLiteralUtil.getStringValue(firstArgument);
|
||||||
if (firstArgumentValue != null &&
|
if (firstArgumentValue != null &&
|
||||||
PyNames.isIdentifierString(firstArgumentValue) &&
|
PyNames.isIdentifier(firstArgumentValue) &&
|
||||||
(caretInParameterList || PsiTreeUtil.isAncestor(call, element, true))) {
|
(caretInParameterList || PsiTreeUtil.isAncestor(call, element, true))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ public class ConvertVariadicParamIntention extends PyBaseIntentionAction {
|
|||||||
final PyExpression indexExpression = subscription.getIndexExpression();
|
final PyExpression indexExpression = subscription.getIndexExpression();
|
||||||
final String indexValue = PyStringLiteralUtil.getStringValue(indexExpression);
|
final String indexValue = PyStringLiteralUtil.getStringValue(indexExpression);
|
||||||
if (indexValue != null &&
|
if (indexValue != null &&
|
||||||
PyNames.isIdentifierString(indexValue) &&
|
PyNames.isIdentifier(indexValue) &&
|
||||||
(caretInParameterList || PsiTreeUtil.isAncestor(subscription, element, true))) {
|
(caretInParameterList || PsiTreeUtil.isAncestor(subscription, element, true))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -137,6 +137,7 @@ public class ConvertVariadicParamIntention extends PyBaseIntentionAction {
|
|||||||
.ofNullable(subscription.getIndexExpression())
|
.ofNullable(subscription.getIndexExpression())
|
||||||
.map(indexExpression -> PyUtil.as(indexExpression, PyStringLiteralExpression.class))
|
.map(indexExpression -> PyUtil.as(indexExpression, PyStringLiteralExpression.class))
|
||||||
.map(PyStringLiteralExpression::getStringValue)
|
.map(PyStringLiteralExpression::getStringValue)
|
||||||
|
.filter(PyNames::isIdentifier)
|
||||||
.map(indexValue -> elementGenerator.createExpressionFromText(LanguageLevel.forElement(function), indexValue))
|
.map(indexValue -> elementGenerator.createExpressionFromText(LanguageLevel.forElement(function), indexValue))
|
||||||
.ifPresent(
|
.ifPresent(
|
||||||
parameter -> {
|
parameter -> {
|
||||||
@@ -161,9 +162,10 @@ public class ConvertVariadicParamIntention extends PyBaseIntentionAction {
|
|||||||
.map(ArrayUtil::getFirstElement)
|
.map(ArrayUtil::getFirstElement)
|
||||||
.map(firstArgument -> PyUtil.as(firstArgument, PyStringLiteralExpression.class))
|
.map(firstArgument -> PyUtil.as(firstArgument, PyStringLiteralExpression.class))
|
||||||
.map(PyStringLiteralExpression::getStringValue)
|
.map(PyStringLiteralExpression::getStringValue)
|
||||||
|
.filter(PyNames::isIdentifier)
|
||||||
.ifPresent(
|
.ifPresent(
|
||||||
indexValue -> {
|
indexValue -> {
|
||||||
final PyNamedParameter parameterWithDefaultValue = getParameterWithDefaultValue(elementGenerator, call, indexValue);
|
final PyNamedParameter parameterWithDefaultValue = createParameterWithDefaultValue(elementGenerator, call, indexValue);
|
||||||
final PyExpression parameter = elementGenerator.createExpressionFromText(LanguageLevel.forElement(function), indexValue);
|
final PyExpression parameter = elementGenerator.createExpressionFromText(LanguageLevel.forElement(function), indexValue);
|
||||||
final PyParameter keywordContainer = getKeywordContainer(function);
|
final PyParameter keywordContainer = getKeywordContainer(function);
|
||||||
|
|
||||||
@@ -239,7 +241,7 @@ public class ConvertVariadicParamIntention extends PyBaseIntentionAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static PyNamedParameter getParameterWithDefaultValue(@NotNull PyElementGenerator elementGenerator,
|
private static PyNamedParameter createParameterWithDefaultValue(@NotNull PyElementGenerator elementGenerator,
|
||||||
@NotNull PyCallExpression call,
|
@NotNull PyCallExpression call,
|
||||||
@NotNull String parameterName) {
|
@NotNull String parameterName) {
|
||||||
final PyExpression[] arguments = call.getArguments();
|
final PyExpression[] arguments = call.getArguments();
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
def foo(**kwargs<caret>):
|
||||||
|
return kwargs["bar"] + kwargs["&"] + kwargs.get("|") + kwargs["not"]
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
def foo(bar, **kwargs):
|
||||||
|
return bar + kwargs["&"] + kwargs.get("|") + kwargs["not"]
|
||||||
@@ -227,6 +227,10 @@ public class PyIntentionTest extends PyTestCase {
|
|||||||
doNegativeTest(PyBundle.message("INTN.convert.variadic.param"));
|
doNegativeTest(PyBundle.message("INTN.convert.variadic.param"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testConvertVariadicParamInvalidIdentifiers() {
|
||||||
|
doTest(PyBundle.message("INTN.convert.variadic.param"));
|
||||||
|
}
|
||||||
|
|
||||||
public void testConvertTripleQuotedString() { //PY-2697
|
public void testConvertTripleQuotedString() { //PY-2697
|
||||||
doTest(PyBundle.message("INTN.triple.quoted.string"));
|
doTest(PyBundle.message("INTN.triple.quoted.string"));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user