Skip to content

Commit ab7903c

Browse files
feat(ts-plugin): Use TS 5.3 updateLevel (vuejs#3649)
1 parent b88956f commit ab7903c

File tree

11 files changed

+174
-141
lines changed

11 files changed

+174
-141
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
},
2323
"devDependencies": {
2424
"@types/node": "latest",
25-
"@volar/language-service": "~1.10.3",
25+
"@volar/language-service": "~1.10.4",
2626
"typescript": "latest",
2727
"vite": "latest",
2828
"vitest": "latest"

packages/typescript-vue-plugin/src/index.ts

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as vue from '@vue/language-core';
2-
import { decorateLanguageService, decorateLanguageServiceHost, getExternalFiles } from '@vue/typescript';
2+
import { decorateLanguageService, decorateLanguageServiceHost, searchExternalFiles } from '@vue/typescript';
33
import type * as ts from 'typescript/lib/tsserverlibrary';
44

55
const externalFiles = new WeakMap<ts.server.Project, string[]>();
@@ -32,9 +32,18 @@ const init: ts.server.PluginModuleFactory = (modules) => {
3232
}
3333
}
3434
},
35-
getExternalFiles(project) {
36-
if (!externalFiles.has(project)) {
37-
externalFiles.set(project, getExternalFiles(ts, project, ['.vue']));
35+
getExternalFiles(project, updateLevel = -1) {
36+
if (
37+
// @ts-expect-error wait for TS 5.3
38+
updateLevel >= 1 satisfies ts.ProgramUpdateLevel.RootNamesAndUpdate
39+
|| !externalFiles.has(project)
40+
) {
41+
const oldFiles = externalFiles.get(project);
42+
const newFiles = searchExternalFiles(ts, project, ['.vue']);
43+
externalFiles.set(project, newFiles);
44+
if (oldFiles) {
45+
refreshDiagnosticsIfNeeded(project, oldFiles, newFiles);
46+
}
3847
}
3948
return externalFiles.get(project)!;
4049
},
@@ -43,3 +52,19 @@ const init: ts.server.PluginModuleFactory = (modules) => {
4352
};
4453

4554
export = init;
55+
56+
function refreshDiagnosticsIfNeeded(project: ts.server.Project, oldExternalFiles: string[], newExternalFiles: string[]) {
57+
let dirty = oldExternalFiles.length !== newExternalFiles.length;
58+
if (!dirty) {
59+
const set = new Set(oldExternalFiles);
60+
for (const file of newExternalFiles) {
61+
if (!set.has(file)) {
62+
dirty = true;
63+
break;
64+
}
65+
}
66+
}
67+
if (dirty) {
68+
project.refreshDiagnostics();
69+
}
70+
}

packages/vscode-vue/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@
742742
"devDependencies": {
743743
"@types/semver": "^7.5.3",
744744
"@types/vscode": "^1.82.0",
745-
"@volar/vscode": "~1.10.3",
745+
"@volar/vscode": "~1.10.4",
746746
"@vue/language-core": "1.8.18",
747747
"@vue/language-server": "1.8.18",
748748
"esbuild": "0.15.18",

packages/vue-component-meta/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"directory": "packages/vue-component-meta"
1414
},
1515
"dependencies": {
16-
"@volar/typescript": "~1.10.3",
16+
"@volar/typescript": "~1.10.4",
1717
"@vue/language-core": "1.8.18",
1818
"typesafe-path": "^0.2.2",
1919
"vue-component-type-helpers": "1.8.18"

packages/vue-language-core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
"directory": "packages/vue-language-core"
1414
},
1515
"dependencies": {
16-
"@volar/language-core": "~1.10.3",
17-
"@volar/source-map": "~1.10.3",
16+
"@volar/language-core": "~1.10.4",
17+
"@volar/source-map": "~1.10.4",
1818
"@vue/compiler-dom": "^3.3.0",
1919
"@vue/reactivity": "^3.3.0",
2020
"@vue/shared": "^3.3.0",

packages/vue-language-plugin-pug/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@vue/language-core": "1.8.18"
1717
},
1818
"dependencies": {
19-
"@volar/source-map": "~1.10.3",
19+
"@volar/source-map": "~1.10.4",
2020
"volar-service-pug": "0.0.14"
2121
}
2222
}

packages/vue-language-server/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
"directory": "packages/vue-language-server"
1717
},
1818
"dependencies": {
19-
"@volar/language-core": "~1.10.3",
20-
"@volar/language-server": "~1.10.3",
21-
"@volar/typescript": "~1.10.3",
19+
"@volar/language-core": "~1.10.4",
20+
"@volar/language-server": "~1.10.4",
21+
"@volar/typescript": "~1.10.4",
2222
"@vue/language-core": "1.8.18",
2323
"@vue/language-service": "1.8.18",
2424
"vscode-languageserver-protocol": "^3.17.5",

packages/vue-language-service/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
"update-html-data": "node ./scripts/update-html-data.js"
1818
},
1919
"dependencies": {
20-
"@volar/language-core": "~1.10.3",
21-
"@volar/language-service": "~1.10.3",
22-
"@volar/typescript": "~1.10.3",
20+
"@volar/language-core": "~1.10.4",
21+
"@volar/language-service": "~1.10.4",
22+
"@volar/typescript": "~1.10.4",
2323
"@vue/compiler-dom": "^3.3.0",
2424
"@vue/language-core": "1.8.18",
2525
"@vue/reactivity": "^3.3.0",
@@ -36,7 +36,7 @@
3636
"vscode-languageserver-textdocument": "^1.0.11"
3737
},
3838
"devDependencies": {
39-
"@volar/kit": "~1.10.3",
39+
"@volar/kit": "~1.10.4",
4040
"vscode-languageserver-protocol": "^3.17.5",
4141
"vscode-uri": "^3.0.8"
4242
}

packages/vue-typescript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"directory": "packages/vue-typescript"
1414
},
1515
"dependencies": {
16-
"@volar/typescript": "~1.10.3",
16+
"@volar/typescript": "~1.10.4",
1717
"@vue/language-core": "1.8.18"
1818
}
1919
}

packages/vue-typescript/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { createLanguageServiceHost, getDocumentRegistry, decorateLanguageService
22
import * as vue from '@vue/language-core';
33
import type * as ts from 'typescript/lib/tsserverlibrary';
44

5-
export { getProgram, decorateLanguageServiceHost, getExternalFiles } from '@volar/typescript';
5+
export { getProgram, decorateLanguageServiceHost, searchExternalFiles } from '@volar/typescript';
66

77
export function createLanguageService(
88
host: vue.TypeScriptLanguageHost,

0 commit comments

Comments
 (0)