diff --git a/python/python-psi-api/resources/META-INF/PythonPsi.xml b/python/python-psi-api/resources/META-INF/PythonPsi.xml index 15585484a3f6..29863960a786 100644 --- a/python/python-psi-api/resources/META-INF/PythonPsi.xml +++ b/python/python-psi-api/resources/META-INF/PythonPsi.xml @@ -4,6 +4,7 @@ interface="com.jetbrains.python.psi.resolve.PyReferenceResolveProvider" dynamic="true"/> + ? + + companion object { + private val EP_NAME: ExtensionPointName = ExtensionPointName.create("Pythonid.typeHintProvider"); + + fun parseTypeHint(typeHint: PyExpression, alias: PyQualifiedNameOwner?, resolved: PsiElement, context: TypeEvalContext): Ref? { + return EP_NAME.extensionList.firstNotNullOfOrNull { it.parseTypeHint(typeHint, alias, resolved, context) } + } + } +} diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java index 4c9931d4b32f..fab73b8ce606 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/typing/PyTypingTypeProvider.java @@ -865,6 +865,15 @@ public final class PyTypingTypeProvider extends PyTypeProviderWithCustomContext< context.getTypeAliasStack().add(alias); } try { + final Ref typeHintFromProvider = PyTypeHintProvider.Companion.parseTypeHint( + typeHint, + alias, + resolved, + context.getTypeContext() + ); + if (typeHintFromProvider != null) { + return typeHintFromProvider; + } final Ref typeFromParenthesizedExpression = getTypeFromParenthesizedExpression(resolved, context); if (typeFromParenthesizedExpression != null) { return typeFromParenthesizedExpression;