diff --git a/python/psi-api/src/com/jetbrains/python/psi/PyNamedParameter.java b/python/psi-api/src/com/jetbrains/python/psi/PyNamedParameter.java index 2577fbde35c5..9fe3c40a961c 100644 --- a/python/psi-api/src/com/jetbrains/python/psi/PyNamedParameter.java +++ b/python/psi-api/src/com/jetbrains/python/psi/PyNamedParameter.java @@ -30,6 +30,14 @@ public interface PyNamedParameter extends PyParameter, PsiNamedElement, PsiNameI boolean isKeywordContainer(); + /** + * Parameter is considered "keyword-only" if it appears after named or unnamed positional vararg parameter. + * See PEP-3102 for more details. + * + * @return whether this parameter is keyword-only + */ + boolean isKeywordOnly(); + /** * @param includeDefaultValue if true, include the default value after an " = ". * @return Canonical representation of parameter. Includes asterisks for *param and **param, and name. diff --git a/python/src/com/jetbrains/python/inspections/quickfix/AddCallSuperQuickFix.java b/python/src/com/jetbrains/python/inspections/quickfix/AddCallSuperQuickFix.java index 65dfe4537216..34a794499716 100644 --- a/python/src/com/jetbrains/python/inspections/quickfix/AddCallSuperQuickFix.java +++ b/python/src/com/jetbrains/python/inspections/quickfix/AddCallSuperQuickFix.java @@ -295,7 +295,7 @@ public class AddCallSuperQuickFix implements LocalQuickFix { else if (param.getText().startsWith("*")) { positionalContainer = param; } - else if (positionalContainer == null && singleStarParam == null) { + else if (param.getAsNamed() == null || !param.getAsNamed().isKeywordOnly()) { if (param.hasDefaultValue()) { myOptionalParams.add(param); } diff --git a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java index 76e96692194c..82df921c8b5e 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java @@ -124,6 +124,26 @@ public class PyNamedParameterImpl extends PyBaseElementImpl