diff --git a/packages/language-service/lib/plugins/vue-sfc.ts b/packages/language-service/lib/plugins/vue-sfc.ts index 77cd43d625..9b7834aa13 100644 --- a/packages/language-service/lib/plugins/vue-sfc.ts +++ b/packages/language-service/lib/plugins/vue-sfc.ts @@ -174,15 +174,21 @@ export function create(): LanguageServicePlugin { }, async provideCompletionItems(document, position, context, token) { - const result = await htmlPluginInstance.provideCompletionItems?.(document, position, context, token) + const result = await htmlPluginInstance.provideCompletionItems?.(document, position, context, token); if (!result) { return; } - result.items = [ - ...result.items.filter(item => item.label !== '!DOCTYPE' && item.label !== 'Custom Blocks'), - createCompletionItemWithTs(result.items.find(item => item.label === 'script')!), - createCompletionItemWithTs(result.items.find(item => item.label === 'script setup')!), - ] + result.items = result.items.filter(item => item.label !== '!DOCTYPE' && item.label !== 'Custom Blocks'); + for (const scriptItem of result.items.filter(item => item.label === 'script' || item.label === 'script setup')) { + result.items.push({ + ...scriptItem, + label: scriptItem.label + ' lang="ts"', + textEdit: scriptItem.textEdit ? { + ...scriptItem.textEdit, + newText: scriptItem.textEdit.newText + ' lang="ts"', + } : undefined, + }); + } return result; }, }; @@ -198,14 +204,3 @@ export function create(): LanguageServicePlugin { } } } - -function createCompletionItemWithTs(base: vscode.CompletionItem): vscode.CompletionItem { - return { - ...base, - label: base.label + ' lang="ts"', - textEdit: { - ...base.textEdit!, - newText: base.textEdit!.newText + ' lang="ts"', - } - }; -}