@@ -165,20 +165,19 @@ fun buildLookupElementHelper(
165165 val lookupString = CssEscapeUtil .escapeSpecialCssChars(name)
166166 val lineNumber = (css as CssRuleset ).selectors.first().lineNumber
167167 val lookup = if (isNeedWrapByChar) " '$lookupString '" else lookupString
168- val ele = LookupElementBuilder .createWithSmartPointer(lookup, css)
169- .bold()
170- .withPsiElement(css)
171- .withIcon(AllIcons .Xml .Css_class )
172- .withPresentableText(lookup)
173- .withCaseSensitivity(true )
174- .withTailText(" " .repeat(SpaceSize ) + " ($location :$lineNumber )" , true )
175-
176- return PrioritizedLookupElement .withPriority(ele, CssCompletionUtil .CSS_SELECTOR_SUFFIX_PRIORITY .toDouble())
168+ return LookupElementBuilder .createWithSmartPointer(lookup, css).apply {
169+ bold()
170+ withPsiElement(css)
171+ withIcon(AllIcons .Xml .Css_class )
172+ withPresentableText(lookup)
173+ withCaseSensitivity(true )
174+ withTailText(" " .repeat(SpaceSize ) + " ($location :$lineNumber )" , true )
175+ }.let { PrioritizedLookupElement .withPriority(it, CssCompletionUtil .CSS_SELECTOR_SUFFIX_PRIORITY .toDouble()) }
177176}
178177
179178private fun toGetStylesheetFile (ref : PsiReference ? ): StylesheetFile ? {
180179 // 增强解析逻辑:支持直接 resolve 到 StylesheetFile、PsiFile,或 ES6ImportedBinding,
181- // 并尝试沿引用链继续解析,提升命中率和鲁棒性 。
180+ // 并尝试沿引用链继续解析,提升命中率��鲁棒性 。
182181 val resolved = ref?.resolve() ? : return null
183182 return when (resolved) {
184183 is StylesheetFile -> resolved
@@ -191,26 +190,17 @@ private fun toGetStylesheetFile(ref: PsiReference?): StylesheetFile? {
191190 }
192191}
193192
194- fun resolveStylesheetFromReference (element : PsiElement ? ): StylesheetFile ? {
195- if (element == null ) return null
196-
197- // 字符串字面量的情况:查找最近的引用表达式(支持多种父级结构)
198- if (element is JSLiteralExpression ) {
199- // 优先查找索引访问 foo["bar"] 的首子表达式
200- val indexed = PsiTreeUtil .getParentOfType(element, JSIndexedPropertyAccessExpression ::class .java)
201- val candidateRef = (indexed?.firstChild as ? JSReferenceExpression )
202- // 否则向上查找通用的 JSReferenceExpression(例如 foo.bar 或 更复杂结构)
203- ? : PsiTreeUtil .getParentOfType(element, JSReferenceExpression ::class .java)
204-
205- return toGetStylesheetFile(candidateRef?.reference)
206- }
207-
208- // 直接是引用表达式:优先用自身的 reference,再退回到 firstChild 的 reference(兼容旧逻辑)
209- if (element is JSReferenceExpression ) {
210- return toGetStylesheetFile(element.reference ? : element.firstChild?.reference)
193+ fun resolveStylesheetFromReference (element : PsiElement ? ): StylesheetFile ? = element?.let {
194+ when (it) {
195+ is JSLiteralExpression -> {
196+ val indexed = PsiTreeUtil .getParentOfType(it, JSIndexedPropertyAccessExpression ::class .java)
197+ val candidateRef = (indexed?.firstChild as ? JSReferenceExpression )
198+ ? : PsiTreeUtil .getParentOfType(it, JSReferenceExpression ::class .java)
199+ toGetStylesheetFile(candidateRef?.reference)
200+ }
201+ is JSReferenceExpression -> toGetStylesheetFile(it.reference ? : it.firstChild?.reference)
202+ else -> null
211203 }
212-
213- return null
214204}
215205
216206/* *
0 commit comments