Skip to content

Commit 333d73e

Browse files
authored
feat(language-service): add style scoped and module completion (#4705)
1 parent 23dbcea commit 333d73e

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

packages/language-server/tests/completions.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,23 @@ describe('Completions', async () => {
2323
"script setup lang="tsx"",
2424
"script setup lang="jsx"",
2525
"style lang="css"",
26+
"style lang="css" scoped",
27+
"style lang="css" module",
2628
"style lang="scss"",
29+
"style lang="scss" scoped",
30+
"style lang="scss" module",
2731
"style lang="less"",
32+
"style lang="less" scoped",
33+
"style lang="less" module",
2834
"style lang="stylus"",
35+
"style lang="stylus" scoped",
36+
"style lang="stylus" module",
2937
"style lang="postcss"",
38+
"style lang="postcss" scoped",
39+
"style lang="postcss" module",
3040
"style lang="sass"",
41+
"style lang="sass" scoped",
42+
"style lang="sass" module",
3143
"template lang="pug"",
3244
]
3345
`);

packages/language-service/lib/plugins/vue-sfc.ts

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -195,16 +195,11 @@ export function create(): LanguageServicePlugin {
195195
styleItem.kind = 17 satisfies typeof vscode.CompletionItemKind.File;
196196
styleItem.detail = '.css';
197197
for (const lang of styleLangs) {
198-
result.items.push({
199-
...styleItem,
200-
kind: 17 satisfies typeof vscode.CompletionItemKind.File,
201-
detail: lang === 'postcss' ? '.css' : `.${lang}`,
202-
label: styleItem.label + ' lang="' + lang + '"',
203-
textEdit: styleItem.textEdit ? {
204-
...styleItem.textEdit,
205-
newText: styleItem.textEdit.newText + ' lang="' + lang + '"',
206-
} : undefined,
207-
});
198+
result.items.push(
199+
getStyleCompletionItem(styleItem, lang),
200+
getStyleCompletionItem(styleItem, lang, 'scoped'),
201+
getStyleCompletionItem(styleItem, lang, 'module')
202+
);
208203
}
209204
}
210205

@@ -253,3 +248,20 @@ export function create(): LanguageServicePlugin {
253248
}
254249
}
255250
}
251+
252+
function getStyleCompletionItem(
253+
styleItem: vscode.CompletionItem,
254+
lang: string,
255+
attr?: string
256+
): vscode.CompletionItem {
257+
return {
258+
...styleItem,
259+
kind: 17 satisfies typeof vscode.CompletionItemKind.File,
260+
detail: lang === 'postcss' ? '.css' : `.${lang}`,
261+
label: styleItem.label + ' lang="' + lang + '"' + (attr ? ` ${attr}` : ''),
262+
textEdit: styleItem.textEdit ? {
263+
...styleItem.textEdit,
264+
newText: styleItem.textEdit.newText + ' lang="' + lang + '"' + (attr ? ` ${attr}` : ''),
265+
} : undefined
266+
};
267+
}

0 commit comments

Comments
 (0)