diff --git a/vue-language-tools/typescript-vue-plugin/src/index.ts b/vue-language-tools/typescript-vue-plugin/src/index.ts index 46f3d96df..15b062b05 100644 --- a/vue-language-tools/typescript-vue-plugin/src/index.ts +++ b/vue-language-tools/typescript-vue-plugin/src/index.ts @@ -5,6 +5,7 @@ import * as tsFaster from '@volar/typescript-faster'; const init: ts.server.PluginModuleFactory = (modules) => { const { typescript: ts } = modules; + const externalFiles = new Map(); const pluginModule: ts.server.PluginModule = { create(info) { @@ -21,11 +22,14 @@ const init: ts.server.PluginModuleFactory = (modules) => { scriptKind: ts.ScriptKind.Deferred, }]; const parsed = vue.createParsedCommandLine(ts, ts.sys, projectName, extraFileExtensions); - if (!parsed.fileNames.some(fileName => fileName.endsWith('.vue'))) { + const vueFileNames = parsed.fileNames.filter(fileName => fileName.endsWith('.vue')); + if (!vueFileNames.length) { // no vue file return info.languageService; } + externalFiles.set(info.project, vueFileNames); + // fix: https://github.com/johnsoncodehk/volar/issues/205 // @ts-expect-error info.project.__vue_getScriptKind = info.project.getScriptKind; @@ -87,6 +91,9 @@ const init: ts.server.PluginModuleFactory = (modules) => { }, }); }, + getExternalFiles(project) { + return externalFiles.get(project) ?? []; + }, }; return pluginModule; };