Skip to content

Commit 1e6f96f

Browse files
committed
fix: 修复com/example/ide/psi/CssModulesIndexedStylesVarPsiReferenceContributor.kt补全无限递归
1 parent c7ad944 commit 1e6f96f

1 file changed

Lines changed: 15 additions & 13 deletions

File tree

src/main/kotlin/com/example/ide/psi/CssModulesIndexedStylesVarPsiReferenceContributor.kt

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package com.example.ide.psi
33

44
import com.example.ide.completion.findReferenceStyleFile
55
import com.intellij.lang.ecmascript6.psi.ES6ImportedBinding
6+
import com.intellij.lang.javascript.JSTokenTypes
7+
import com.intellij.lang.javascript.psi.JSFile
8+
import com.intellij.lang.javascript.psi.JSIndexedPropertyAccessExpression
69
import com.intellij.lang.javascript.psi.JSLiteralExpression
710
import com.intellij.lang.javascript.psi.JSReferenceExpression
811
import com.intellij.patterns.PlatformPatterns
@@ -64,32 +67,31 @@ class CssModuleDotReferenceProvider : PsiReferenceProvider() {
6467
}
6568
}
6669

67-
68-
// Filter for styles.className syntax
69-
private val DOT_ACCESS_FILTER = PlatformPatterns.psiElement(JSReferenceExpression::class.java).and(
70+
// Filter for styles["className"] syntax
71+
private val INDEXED_ACCESS_FILTER = PlatformPatterns.psiElement(JSLiteralExpression::class.java).and(
7072
FilterPattern(
7173
object : ElementFilter {
7274
override fun isAcceptable(element: Any?, context: PsiElement?): Boolean {
73-
74-
return element is JSReferenceExpression
75-
&& element.reference?.resolve() !== null
76-
&& (element.reference?.resolve() as ES6ImportedBinding).findReferencedElements()
77-
.isNotEmpty()
78-
&& (element.reference?.resolve() as ES6ImportedBinding).findReferencedElements()
79-
.first() is StylesheetFile
75+
return element is JSLiteralExpression
76+
&& element.parent is JSIndexedPropertyAccessExpression
77+
&& context != null
78+
&& context.containingFile is JSFile
79+
&& isStyleIndex(element)
80+
&& element.node.firstChildNode?.elementType == JSTokenTypes.STRING_LITERAL
8081
}
8182

8283
override fun isClassAcceptable(hintClass: Class<*>?): Boolean {
83-
return JSReferenceExpression::class.java.isAssignableFrom(hintClass!!)
84+
return JSLiteralExpression::class.java.isAssignableFrom(hintClass!!)
8485
}
8586
}
8687
))
8788

89+
8890
class CssModulesIndexedStylesVarPsiReferenceContributor : PsiReferenceContributor() {
8991
override fun registerReferenceProviders(@NotNull registrar: PsiReferenceRegistrar) {
90-
// Register provider for styles.className syntax
92+
// Register provider for styles["className"] syntax
9193
registrar.registerReferenceProvider(
92-
DOT_ACCESS_FILTER, CssModuleDotReferenceProvider()
94+
INDEXED_ACCESS_FILTER, CssModuleIndexedReferenceProvider()
9395
)
9496
}
9597
}

0 commit comments

Comments
 (0)