From b32be70880e5ca5765d23d9085896f7af7b29598 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Mon, 21 Mar 2022 16:34:23 +0800 Subject: [PATCH] fix: doesn't respect `html.autoCreateQuotes` setting close #840 --- .../vue-language-service/src/commonPlugins/html.ts | 14 ++++++++++---- .../vue-language-service/src/documentService.ts | 1 + .../vue-language-service/src/languageService.ts | 1 + .../vue-language-service/src/vuePlugins/vue.ts | 8 ++++++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/vue-language-service/src/commonPlugins/html.ts b/packages/vue-language-service/src/commonPlugins/html.ts index 94d604ae0..92dba121a 100644 --- a/packages/vue-language-service/src/commonPlugins/html.ts +++ b/packages/vue-language-service/src/commonPlugins/html.ts @@ -8,6 +8,7 @@ export default function (host: { documentContext?: html.DocumentContext, fileSystemProvider?: html.FileSystemProvider, validLang?: string, + disableCustomData?: boolean, }): EmbeddedLanguageServicePlugin & { htmlLs: html.LanguageService, getHtmlDocument(document: TextDocument): html.HTMLDocument | undefined, @@ -20,10 +21,15 @@ export default function (host: { let inited = false; let customData: html.IHTMLDataProvider[] = []; - host.configurationHost?.onDidChangeConfiguration(async () => { - customData = await getCustomData(); - htmlLs.setDataProviders(true, customData); - }); + if (host.disableCustomData) { + inited = true; + } + else { + host.configurationHost?.onDidChangeConfiguration(async () => { + customData = await getCustomData(); + htmlLs.setDataProviders(true, customData); + }); + } return { diff --git a/packages/vue-language-service/src/documentService.ts b/packages/vue-language-service/src/documentService.ts index efa5739a4..e23aeb746 100644 --- a/packages/vue-language-service/src/documentService.ts +++ b/packages/vue-language-service/src/documentService.ts @@ -47,6 +47,7 @@ export function getDocumentService( // language support plugins const vuePlugin = useVuePlugin({ + configurationHost, getVueDocument, scriptTsLs: undefined, }); diff --git a/packages/vue-language-service/src/languageService.ts b/packages/vue-language-service/src/languageService.ts index 14a14f0a9..738dd4a3d 100644 --- a/packages/vue-language-service/src/languageService.ts +++ b/packages/vue-language-service/src/languageService.ts @@ -120,6 +120,7 @@ export function createLanguageService( const customPlugins = _customPlugins.map(plugin => defineLanguageServicePlugin(plugin)); const vuePlugin = defineLanguageServicePlugin( useVuePlugin({ + configurationHost, getVueDocument: (document) => vueDocuments.get(document.uri), scriptTsLs, }), diff --git a/packages/vue-language-service/src/vuePlugins/vue.ts b/packages/vue-language-service/src/vuePlugins/vue.ts index 5b8b88c44..a0290a001 100644 --- a/packages/vue-language-service/src/vuePlugins/vue.ts +++ b/packages/vue-language-service/src/vuePlugins/vue.ts @@ -5,7 +5,7 @@ import useHtmlPlugin from '../commonPlugins/html'; import * as vscode from 'vscode-languageserver-protocol'; import type * as ts2 from '@volar/typescript-language-service'; import { VueDocument } from '../vueDocuments'; -import { EmbeddedLanguageServicePlugin } from '@volar/vue-language-service-types'; +import { ConfigurationHost, EmbeddedLanguageServicePlugin } from '@volar/vue-language-service-types'; const dataProvider = html.newHTMLDataProvider('vue', { version: 1.1, @@ -93,11 +93,15 @@ const dataProvider = html.newHTMLDataProvider('vue', { }); export default function (host: { + configurationHost?: ConfigurationHost, getVueDocument(document: TextDocument): VueDocument | undefined, scriptTsLs: ts2.LanguageService | undefined, }): EmbeddedLanguageServicePlugin { - const htmlPlugin = useHtmlPlugin({ validLang: 'vue' }); + const htmlPlugin = useHtmlPlugin({ + configurationHost: host.configurationHost, + validLang: 'vue', + }); htmlPlugin.htmlLs.setDataProviders(false, [dataProvider]); return {