From 879e7ddbee02ece1a63dd01aba54a2d2e4991a1d Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Mon, 30 May 2022 17:58:43 +0800 Subject: [PATCH] fix: avoid html emmet active in style block close #1358 --- .../src/languageFeatures/complete.ts | 11 +++++++++++ packages/vue-language-service/src/plugins/emmet.ts | 6 ++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/vue-language-service/src/languageFeatures/complete.ts b/packages/vue-language-service/src/languageFeatures/complete.ts index b591ee9af..03fd73539 100644 --- a/packages/vue-language-service/src/languageFeatures/complete.ts +++ b/packages/vue-language-service/src/languageFeatures/complete.ts @@ -125,6 +125,9 @@ export function register(context: LanguageServiceRuntimeContext) { mainCompletion: undefined, }; + // monky fix https://github.com/johnsoncodehk/volar/issues/1358 + let isFirstMapping = true; + if (vueDocument) { const embeddeds = vueDocument.file.getEmbeddeds(); @@ -140,6 +143,9 @@ export function register(context: LanguageServiceRuntimeContext) { if (!plugin.complete?.on) continue; + if (plugin.complete.isAdditional && !isFirstMapping) + continue; + if (completionContext?.triggerCharacter && !plugin.complete.triggerCharacters?.includes(completionContext.triggerCharacter)) continue; @@ -188,6 +194,8 @@ export function register(context: LanguageServiceRuntimeContext) { list: completionList, }); } + + isFirstMapping = false; } return true; @@ -203,6 +211,9 @@ export function register(context: LanguageServiceRuntimeContext) { if (!plugin.complete?.on) continue; + if (plugin.complete.isAdditional && !isFirstMapping) + continue; + if (completionContext?.triggerCharacter && !plugin.complete.triggerCharacters?.includes(completionContext.triggerCharacter)) continue; diff --git a/packages/vue-language-service/src/plugins/emmet.ts b/packages/vue-language-service/src/plugins/emmet.ts index bbd884a75..6a2c5b129 100644 --- a/packages/vue-language-service/src/plugins/emmet.ts +++ b/packages/vue-language-service/src/plugins/emmet.ts @@ -3,8 +3,6 @@ import * as emmet from '@vscode/emmet-helper'; export default function (): EmbeddedLanguageServicePlugin { - let emmetConfig: any; - return { complete: { @@ -33,10 +31,10 @@ export default function (): EmbeddedLanguageServicePlugin { async function getEmmetConfig(syntax: string): Promise { - emmetConfig = await useConfigurationHost()?.getConfiguration('emmet') ?? {}; - + const emmetConfig: any = await useConfigurationHost()?.getConfiguration('emmet') ?? {}; const syntaxProfiles = Object.assign({}, emmetConfig['syntaxProfiles'] || {}); const preferences = Object.assign({}, emmetConfig['preferences'] || {}); + // jsx, xml and xsl syntaxes need to have self closing tags unless otherwise configured by user if (syntax === 'jsx' || syntax === 'xml' || syntax === 'xsl') { syntaxProfiles[syntax] = syntaxProfiles[syntax] || {};