diff --git a/python/python-psi-api/src/com/jetbrains/python/psi/PyKeywordPattern.java b/python/python-psi-api/src/com/jetbrains/python/psi/PyKeywordPattern.java index 44d4ca58b42d..6de78c7d5779 100644 --- a/python/python-psi-api/src/com/jetbrains/python/psi/PyKeywordPattern.java +++ b/python/python-psi-api/src/com/jetbrains/python/psi/PyKeywordPattern.java @@ -9,4 +9,8 @@ public interface PyKeywordPattern extends PyAstKeywordPattern, PyPattern { default @Nullable PyPattern getValuePattern() { return (PyPattern)PyAstKeywordPattern.super.getValuePattern(); } + + default @Nullable PyClassPattern getContainingClassPattern() { + return getParent().getParent() instanceof PyClassPattern classPattern ? classPattern : null; + } } diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleTypeProvider.kt b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleTypeProvider.kt index d1e79d73108e..32732ce5fa44 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleTypeProvider.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/stdlib/PyNamedTupleTypeProvider.kt @@ -252,10 +252,9 @@ class PyNamedTupleTypeProvider : PyTypeProviderBase() { qualifierType: PyClassLikeType, context: TypeEvalContext, ): PyCallableType? { - val call = anchor as? PyCallExpression ?: return null val parameters = mutableListOf() val resultType = qualifierType.toInstance() - val elementGenerator = PyElementGenerator.getInstance(call.project) + val elementGenerator = PyElementGenerator.getInstance(anchor.project) if (qualifierType.isDefinition) { parameters.add(PyCallableParameterImpl.nonPsi(PyNames.CANONICAL_SELF, resultType)) @@ -266,8 +265,9 @@ class PyNamedTupleTypeProvider : PyTypeProviderBase() { fields.keys.mapTo(parameters) { PyCallableParameterImpl.nonPsi(it, null, ellipsis) } - return if (resultType is PyNamedTupleType) { + return if (resultType is PyNamedTupleType && anchor is PyCallExpression) { val newFields = mutableMapOf() + val call = anchor for (argument in call.arguments) { if (argument is PyKeywordArgument) { diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/references/PyKeywordPatternReference.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/references/PyKeywordPatternReference.java index 4b0fed08979d..05d2cb6c9620 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/references/PyKeywordPatternReference.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/references/PyKeywordPatternReference.java @@ -19,14 +19,11 @@ import com.jetbrains.python.psi.types.PyInstantiableType; import com.jetbrains.python.psi.types.TypeEvalContext; import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; import java.util.Set; -import static com.jetbrains.python.psi.PyUtil.as; - public final class PyKeywordPatternReference extends PsiReferenceBase.Poly { public PyKeywordPatternReference(@NotNull PyKeywordPattern keywordPattern) { super(keywordPattern, keywordPattern.getKeywordElement().getTextRangeInParent(), false); @@ -34,7 +31,7 @@ public final class PyKeywordPatternReference extends PsiReferenceBase.Poly