33package space.whitememory.pythoninlayparams.types.hints
44
55import com.intellij.psi.PsiElement
6- import com.intellij.util.containers.toArray
76import com.jetbrains.python.PyNames
87import com.jetbrains.python.codeInsight.typing.PyTypingTypeProvider
9- import com.jetbrains.python.psi.PyClass
108import com.jetbrains.python.psi.PyElement
119import com.jetbrains.python.psi.PyFunction
1210import com.jetbrains.python.psi.PyLambdaExpression
1311import com.jetbrains.python.psi.types.*
1412
1513enum class HintGenerator {
16- UNION_TYPE () {
17- override fun handleType (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails >? {
18- if (type !is PyUnionType ) {
19- return null
20- }
14+ UNION_TYPE {
15+ override fun handleType (
16+ element : PyElement ,
17+ type : PyType ? ,
18+ typeEvalContext : TypeEvalContext
19+ ): List <InlayInfoDetails >? {
20+ if (type !is PyUnionType ) return null
2121
2222 val generatedValues = type.members
2323 .filterNotNull()
@@ -48,11 +48,13 @@ enum class HintGenerator {
4848 }
4949 },
5050
51- ASYNC_TYPE () {
52- override fun handleType (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails >? {
53- if (type == null || element !is PyFunction ) {
54- return null
55- }
51+ ASYNC_TYPE {
52+ override fun handleType (
53+ element : PyElement ,
54+ type : PyType ? ,
55+ typeEvalContext : TypeEvalContext
56+ ): List <InlayInfoDetails >? {
57+ if (type == null || element !is PyFunction ) return null
5658
5759 if (type is PyCollectionType && type.classQName == PyTypingTypeProvider .COROUTINE && element.isAsync) {
5860 return generateTypeHintText(
@@ -64,8 +66,12 @@ enum class HintGenerator {
6466 }
6567 },
6668
67- COLLECTION_TYPE () {
68- override fun handleType (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails >? {
69+ COLLECTION_TYPE {
70+ override fun handleType (
71+ element : PyElement ,
72+ type : PyType ? ,
73+ typeEvalContext : TypeEvalContext
74+ ): List <InlayInfoDetails >? {
6975 if (
7076 type is PyCollectionType
7177 && type.name != null
@@ -87,7 +93,8 @@ enum class HintGenerator {
8793 )
8894 }
8995
90- val elements = type.elementTypes.mapNotNull { generateTypeHintText(element, it, typeEvalContext) }.flatten()
96+ val elements =
97+ type.elementTypes.mapNotNull { generateTypeHintText(element, it, typeEvalContext) }.flatten()
9198
9299 if (elements.isEmpty()) {
93100 return listOf (
@@ -110,11 +117,13 @@ enum class HintGenerator {
110117 }
111118 },
112119
113- TUPLE_TYPE () {
114- override fun handleType (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails >? {
115- if (type !is PyTupleType ) {
116- return null
117- }
120+ TUPLE_TYPE {
121+ override fun handleType (
122+ element : PyElement ,
123+ type : PyType ? ,
124+ typeEvalContext : TypeEvalContext
125+ ): List <InlayInfoDetails >? {
126+ if (type !is PyTupleType ) return null
118127
119128 val baseInlayDetail = resolvePsiReference(type, PyNames .TUPLE )
120129
@@ -151,14 +160,15 @@ enum class HintGenerator {
151160 }
152161 },
153162
154- CLASS_TYPE () {
155- override fun handleType (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails >? {
156- if (type !is PyClassType ) {
157- return null
158- }
163+ CLASS_TYPE {
164+ override fun handleType (
165+ element : PyElement ,
166+ type : PyType ? ,
167+ typeEvalContext : TypeEvalContext
168+ ): List <InlayInfoDetails >? {
169+ if (type !is PyClassType ) return null
159170
160171 val baseInlayDetail = resolvePsiReference(type, type.declarationElement?.name!! )
161-
162172 val classInlayDetails = listOf (InlayInfoDetails (baseInlayDetail))
163173
164174 if (type.isDefinition) {
@@ -170,19 +180,19 @@ enum class HintGenerator {
170180 return listOf (inlayDetail)
171181 }
172182
173- if (! type.isDefinition) {
174- return classInlayDetails
175- }
183+ if (! type.isDefinition) return classInlayDetails
176184
177185 return null
178186 }
179187 },
180188
181- FUNCTION_TYPE () {
182- override fun handleType (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails >? {
183- if (type !is PyFunctionType ) {
184- return null
185- }
189+ FUNCTION_TYPE {
190+ override fun handleType (
191+ element : PyElement ,
192+ type : PyType ? ,
193+ typeEvalContext : TypeEvalContext
194+ ): List <InlayInfoDetails >? {
195+ if (type !is PyFunctionType ) return null
186196
187197 val parametersText = when (type.callable) {
188198 is PyLambdaExpression -> type.callable.parameterList.getPresentableText(false , typeEvalContext)
@@ -213,15 +223,23 @@ enum class HintGenerator {
213223 }
214224 },
215225
216- ANY_TYPE () {
217- override fun handleType (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails > {
226+ ANY_TYPE {
227+ override fun handleType (
228+ element : PyElement ,
229+ type : PyType ? ,
230+ typeEvalContext : TypeEvalContext
231+ ): List <InlayInfoDetails > {
218232 val baseInlayDetail = resolvePsiReference(type, type?.name ? : PyNames .UNKNOWN_TYPE )
219233
220234 return listOf (InlayInfoDetails (baseInlayDetail))
221235 }
222236 };
223237
224- abstract fun handleType (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails >?
238+ abstract fun handleType (
239+ element : PyElement ,
240+ type : PyType ? ,
241+ typeEvalContext : TypeEvalContext
242+ ): List <InlayInfoDetails >?
225243
226244 companion object {
227245
@@ -230,13 +248,17 @@ enum class HintGenerator {
230248 return PsiInlayInfoDetail (name, it)
231249 } ? : TextInlayInfoDetail (name)
232250 }
233- fun generateTypeHintText (element : PyElement , type : PyType ? , typeEvalContext : TypeEvalContext ): List <InlayInfoDetails > =
251+
252+ fun generateTypeHintText (
253+ element : PyElement ,
254+ type : PyType ? ,
255+ typeEvalContext : TypeEvalContext
256+ ): List <InlayInfoDetails > =
234257 values().firstNotNullOf { it.handleType(element, type, typeEvalContext) }
235258 }
236259}
237260
238261
239- @Suppress(" UnstableApiUsage" )
240262data class InlayInfoDetails (
241263 val rootInlayInfo : InlayInfoDetail ? ,
242264 val details : List <InlayInfoDetails > = listOf(),
@@ -246,5 +268,5 @@ data class InlayInfoDetails(
246268
247269sealed class InlayInfoDetail (val text : String )
248270
249- class TextInlayInfoDetail (text : String ): InlayInfoDetail(text)
250- class PsiInlayInfoDetail (text : String , val element : PsiElement ): InlayInfoDetail(text)
271+ class TextInlayInfoDetail (text : String ) : InlayInfoDetail(text)
272+ class PsiInlayInfoDetail (text : String , val element : PsiElement ) : InlayInfoDetail(text)
0 commit comments