diff --git a/packages/vue-language-service-types/src/index.ts b/packages/vue-language-service-types/src/index.ts index 13874d148..8fc1079f3 100644 --- a/packages/vue-language-service-types/src/index.ts +++ b/packages/vue-language-service-types/src/index.ts @@ -65,6 +65,7 @@ export type EmbeddedLanguageServicePlugin = { complete?: { triggerCharacters?: string[], + isAdditional?: boolean, on?(document: TextDocument, position: vscode.Position, context?: vscode.CompletionContext): NullableResult, resolve?(item: vscode.CompletionItem, newPosition?: vscode.Position): NotNullableResult, }, diff --git a/packages/vue-language-service/src/languageFeatures/complete.ts b/packages/vue-language-service/src/languageFeatures/complete.ts index 90281e500..8a83d8353 100644 --- a/packages/vue-language-service/src/languageFeatures/complete.ts +++ b/packages/vue-language-service/src/languageFeatures/complete.ts @@ -143,7 +143,7 @@ export function register(context: LanguageServiceRuntimeContext) { if (completionContext?.triggerCharacter && !plugin.complete.triggerCharacters?.includes(completionContext.triggerCharacter)) continue; - if (cache!.mainCompletion && (!plugin.context?.isAdditionalCompletion || cache?.mainCompletion.documentUri !== sourceMap.mappedDocument.uri)) + if (cache!.mainCompletion && (!plugin.complete.isAdditional || cache?.mainCompletion.documentUri !== sourceMap.mappedDocument.uri)) continue; const embeddedCompletionList = await plugin.complete?.on(sourceMap.mappedDocument, embeddedRange.start, completionContext); @@ -151,7 +151,7 @@ export function register(context: LanguageServiceRuntimeContext) { if (!embeddedCompletionList || !embeddedCompletionList.items.length) continue; - if (!plugin.context?.isAdditionalCompletion) { + if (!plugin.complete.isAdditional) { cache!.mainCompletion = { documentUri: sourceMap.mappedDocument.uri }; } @@ -202,7 +202,7 @@ export function register(context: LanguageServiceRuntimeContext) { if (completionContext?.triggerCharacter && !plugin.complete.triggerCharacters?.includes(completionContext.triggerCharacter)) continue; - if (cache.mainCompletion && (!plugin.context?.isAdditionalCompletion || cache.mainCompletion.documentUri !== document.uri)) + if (cache.mainCompletion && (!plugin.complete.isAdditional || cache.mainCompletion.documentUri !== document.uri)) continue; const completionList = await plugin.complete?.on(document, position, completionContext); @@ -210,7 +210,7 @@ export function register(context: LanguageServiceRuntimeContext) { if (!completionList || !completionList.items.length) continue; - if (!plugin.context?.isAdditionalCompletion) { + if (!plugin.complete.isAdditional) { cache.mainCompletion = { documentUri: document.uri }; } @@ -240,7 +240,7 @@ export function register(context: LanguageServiceRuntimeContext) { return combineCompletionList(cache.data.map(cacheData => cacheData.list)); function sortPlugins(a: LanguageServicePlugin, b: LanguageServicePlugin) { - return (b.context?.isAdditionalCompletion ? -1 : 1) - (a.context?.isAdditionalCompletion ? -1 : 1); + return (b.complete?.isAdditional ? -1 : 1) - (a.complete?.isAdditional ? -1 : 1); } function combineCompletionList(lists: vscode.CompletionList[]) { diff --git a/packages/vue-language-service/src/languageService.ts b/packages/vue-language-service/src/languageService.ts index a052d9662..ac1553df4 100644 --- a/packages/vue-language-service/src/languageService.ts +++ b/packages/vue-language-service/src/languageService.ts @@ -58,13 +58,10 @@ export type LanguageServicePlugin = ReturnType(plugin: T, context?: { - isAdditionalCompletion?: boolean, -}) { +function defineLanguageServicePlugin(plugin: T) { return { id: pluginId++, ...plugin, - context, }; } diff --git a/packages/vue-language-service/src/plugins/emmet.ts b/packages/vue-language-service/src/plugins/emmet.ts index b6ade9180..e5dedc144 100644 --- a/packages/vue-language-service/src/plugins/emmet.ts +++ b/packages/vue-language-service/src/plugins/emmet.ts @@ -9,6 +9,8 @@ export default function (): EmbeddedLanguageServicePlugin { complete: { + isAdditional: true, + async on(textDocument, position) { const syntax = emmet.getEmmetMode(textDocument.languageId === 'vue' ? 'html' : textDocument.languageId);