From 841562c1bb423f9d2bd80a2aed92876b37a7a75d Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Sun, 29 May 2022 02:37:58 +0800 Subject: [PATCH] fix: cannot watch external file change close #1343 --- packages/vue-language-server/src/project.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/vue-language-server/src/project.ts b/packages/vue-language-server/src/project.ts index b9641d7c5..f9dacc6bc 100644 --- a/packages/vue-language-server/src/project.ts +++ b/packages/vue-language-server/src/project.ts @@ -60,6 +60,7 @@ export async function createProject( const scripts = shared.createPathMap<{ version: number, + fileName: string, snapshot: ts.IScriptSnapshot | undefined, snapshotVersion: number | undefined, }>(); @@ -135,7 +136,7 @@ export async function createProject( const script = scripts.uriGet(change.uri); - if (script && change.type === vscode.FileChangeType.Changed) { + if (script && (change.type === vscode.FileChangeType.Changed || change.type === vscode.FileChangeType.Created)) { if (script.version >= 0) { script.version = -1; } @@ -188,7 +189,13 @@ export async function createProject( getDefaultLibFileName: options => ts.getDefaultLibFilePath(options), // TODO: vscode option for ts lib getProjectVersion: () => projectVersion.toString(), getTypeRootsVersion: () => typeRootVersion, - getScriptFileNames: () => parsedCommandLine.fileNames, + getScriptFileNames: () => { + const fileNames = new Set([...parsedCommandLine.fileNames]); + for (const script of scripts.values()) { + fileNames.add(script.fileName); + } + return [...fileNames]; + }, getCompilationSettings: () => parsedCommandLine.options, getVueCompilationSettings: () => parsedCommandLine.vueOptions, getScriptVersion, @@ -202,8 +209,7 @@ export async function createProject( return host; function getScriptVersion(fileName: string) { - return scripts.fsPathGet(fileName)?.version.toString() - ?? ''; + return scripts.fsPathGet(fileName)?.version.toString() ?? ''; } function getScriptSnapshot(fileName: string) { const script = scripts.fsPathGet(fileName); @@ -220,6 +226,7 @@ export async function createProject( else { scripts.fsPathSet(fileName, { version: -1, + fileName: fileName, snapshot: snapshot, snapshotVersion: -1, });