Skip to content

Commit 660439d

Browse files
feat(typescript-plugin): include leading dot in style block class reference spans (#5852)
1 parent 8cd7a65 commit 660439d

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

packages/typescript-plugin/lib/common.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ export function postprocessLanguageService<T>(
213213
const proxyCache = new Map<string | symbol, Function | undefined>();
214214
const getProxyMethod = (target: ts.LanguageService, p: string | symbol): Function | undefined => {
215215
switch (p) {
216+
case 'findReferences':
217+
return findReferences(target[p]);
216218
case 'getCompletionsAtPosition':
217219
return getCompletionsAtPosition(target[p]);
218220
case 'getCompletionEntryDetails':
@@ -240,6 +242,44 @@ export function postprocessLanguageService<T>(
240242
},
241243
});
242244

245+
function findReferences(
246+
findReferences: ts.LanguageService['findReferences'],
247+
): ts.LanguageService['findReferences'] {
248+
return (fileName, ...rest) => {
249+
const result = findReferences(fileName, ...rest);
250+
if (!result) {
251+
return result;
252+
}
253+
// #5719
254+
for (const { references } of result) {
255+
for (const reference of references) {
256+
const sourceScript = language.scripts.get(asScriptId(reference.fileName));
257+
const root = sourceScript?.generated?.root;
258+
if (!sourceScript || !(root instanceof VueVirtualCode)) {
259+
continue;
260+
}
261+
const styles = root.sfc.styles;
262+
if (!styles.length) {
263+
return result;
264+
}
265+
const isInStyle = styles.some(style =>
266+
reference.textSpan.start >= style.startTagEnd
267+
&& reference.textSpan.start + reference.textSpan.length <= style.endTagStart
268+
);
269+
if (!isInStyle) {
270+
continue;
271+
}
272+
const leadingChar = sourceScript.snapshot.getText(reference.textSpan.start - 1, reference.textSpan.start);
273+
if (leadingChar === '.') {
274+
reference.textSpan.start--;
275+
reference.textSpan.length++;
276+
}
277+
}
278+
}
279+
return result;
280+
};
281+
}
282+
243283
function getCompletionsAtPosition(
244284
getCompletionsAtPosition: ts.LanguageService['getCompletionsAtPosition'],
245285
): ts.LanguageService['getCompletionsAtPosition'] {

0 commit comments

Comments
 (0)