Skip to content

Commit 0f16db8

Browse files
authored
fix(typescript-plugin): missing module error after renaming file (#5839)
1 parent 4277ab6 commit 0f16db8

File tree

10 files changed

+178
-95
lines changed

10 files changed

+178
-95
lines changed

extensions/vscode/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,8 @@
483483
"@types/node": "^22.10.4",
484484
"@types/semver": "^7.5.3",
485485
"@types/vscode": "1.88.0",
486-
"@volar/typescript": "2.4.26",
487-
"@volar/vscode": "2.4.26",
486+
"@volar/typescript": "2.4.27",
487+
"@volar/vscode": "2.4.27",
488488
"@vscode/vsce": "^3.2.1",
489489
"@vue/compiler-sfc": "^3.5.0",
490490
"@vue/language-core": "3.1.8",

packages/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/component-meta"
1414
},
1515
"dependencies": {
16-
"@volar/typescript": "2.4.26",
16+
"@volar/typescript": "2.4.27",
1717
"@vue/language-core": "3.1.8",
1818
"path-browserify": "^1.0.1",
1919
"vue-component-type-helpers": "3.1.8"

packages/language-core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"directory": "packages/language-core"
1414
},
1515
"dependencies": {
16-
"@volar/language-core": "2.4.26",
16+
"@volar/language-core": "2.4.27",
1717
"@vue/compiler-dom": "^3.5.0",
1818
"@vue/shared": "^3.5.0",
1919
"alien-signals": "^3.0.0",
@@ -25,7 +25,7 @@
2525
"@types/node": "^22.10.4",
2626
"@types/path-browserify": "^1.0.1",
2727
"@types/picomatch": "^4.0.0",
28-
"@volar/typescript": "2.4.26",
28+
"@volar/typescript": "2.4.27",
2929
"@vue/compiler-sfc": "^3.5.0"
3030
},
3131
"peerDependencies": {

packages/language-plugin-pug/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"directory": "packages/language-plugin-pug"
1414
},
1515
"dependencies": {
16-
"@volar/source-map": "2.4.26",
16+
"@volar/source-map": "2.4.27",
1717
"volar-service-pug": "0.0.68"
1818
},
1919
"devDependencies": {

packages/language-server/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"directory": "packages/language-server"
1717
},
1818
"dependencies": {
19-
"@volar/language-server": "2.4.26",
19+
"@volar/language-server": "2.4.27",
2020
"@vue/language-core": "3.1.8",
2121
"@vue/language-service": "3.1.8",
2222
"@vue/typescript-plugin": "3.1.8",
@@ -27,6 +27,6 @@
2727
},
2828
"devDependencies": {
2929
"@typescript/server-harness": "latest",
30-
"@volar/test-utils": "2.4.26"
30+
"@volar/test-utils": "2.4.27"
3131
}
3232
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import type { TextDocument } from '@volar/language-server';
2+
import * as fs from 'node:fs';
3+
import * as path from 'node:path';
4+
import { afterEach, expect, test } from 'vitest';
5+
import { URI } from 'vscode-uri';
6+
import { getLanguageServer, testWorkspacePath } from './server.js';
7+
8+
test('#5818 clears missing module error after renaming to an existing filename', async () => {
9+
const server = await getLanguageServer();
10+
const workspaceDir = path.join(testWorkspacePath, 'tsconfigProject');
11+
const mainPath = path.join(workspaceDir, 'module-rename-main.vue');
12+
const oldComponentPath = path.join(workspaceDir, 'module-rename-comp.vue');
13+
const newComponentPath = path.join(workspaceDir, 'module-rename-comp-renamed.vue');
14+
15+
createFile(oldComponentPath, '<template>Comp</template>');
16+
const mainContent = `
17+
<script setup lang="ts">
18+
import Comp from './module-rename-comp-renamed.vue'
19+
</script>
20+
`;
21+
const document = await openDocument(server, mainPath, mainContent);
22+
23+
const diagnosticsBefore = await getSemanticDiagnostics(server, document.uri);
24+
expect(diagnosticsBefore.some(diagnostic => diagnostic.code === 2307)).toBe(true);
25+
26+
fs.renameSync(oldComponentPath, newComponentPath);
27+
createdFiles.push(newComponentPath);
28+
29+
await expect.poll(
30+
async () => {
31+
const diagnosticsAfter = await getSemanticDiagnostics(server, document.uri);
32+
return diagnosticsAfter.some(diagnostic => diagnostic.code === 2307);
33+
},
34+
{
35+
interval: 100,
36+
timeout: 5000,
37+
},
38+
).toBe(false);
39+
});
40+
41+
const openedDocuments: TextDocument[] = [];
42+
const createdFiles: string[] = [];
43+
44+
afterEach(async () => {
45+
const server = await getLanguageServer();
46+
for (const document of openedDocuments) {
47+
await server.close(document.uri);
48+
}
49+
for (const file of createdFiles) {
50+
if (fs.existsSync(file)) {
51+
fs.rmSync(file);
52+
}
53+
}
54+
openedDocuments.length = 0;
55+
createdFiles.length = 0;
56+
});
57+
58+
function createFile(fileName: string, content: string) {
59+
fs.writeFileSync(fileName, content);
60+
createdFiles.push(fileName);
61+
}
62+
63+
async function openDocument(server: Awaited<ReturnType<typeof getLanguageServer>>, fileName: string, content: string) {
64+
createFile(fileName, content);
65+
const uri = URI.file(fileName);
66+
const document = await server.open(uri.toString(), 'vue', content);
67+
if (openedDocuments.every(doc => doc.uri !== document.uri)) {
68+
openedDocuments.push(document);
69+
}
70+
return document;
71+
}
72+
73+
async function getSemanticDiagnostics(server: Awaited<ReturnType<typeof getLanguageServer>>, uri: string) {
74+
const res = await server.tsserver.message({
75+
seq: server.nextSeq(),
76+
command: 'semanticDiagnosticsSync',
77+
arguments: {
78+
file: URI.parse(uri).fsPath,
79+
},
80+
});
81+
expect(res.success).toBe(true);
82+
return res.body as any[];
83+
}

packages/language-service/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"update-html-data": "node ./scripts/update-html-data.js"
1818
},
1919
"dependencies": {
20-
"@volar/language-service": "2.4.26",
20+
"@volar/language-service": "2.4.27",
2121
"@vue/language-core": "3.1.8",
2222
"@vue/shared": "^3.5.0",
2323
"path-browserify": "^1.0.1",
@@ -34,8 +34,8 @@
3434
"devDependencies": {
3535
"@types/node": "^22.10.4",
3636
"@types/path-browserify": "^1.0.1",
37-
"@volar/kit": "2.4.26",
38-
"@volar/typescript": "2.4.26",
37+
"@volar/kit": "2.4.27",
38+
"@volar/typescript": "2.4.27",
3939
"@vue/compiler-dom": "^3.5.0",
4040
"@vue/typescript-plugin": "3.1.8",
4141
"vscode-css-languageservice": "^6.3.1"

packages/tsc/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"typescript": ">=5.0.0"
2121
},
2222
"dependencies": {
23-
"@volar/typescript": "2.4.26",
23+
"@volar/typescript": "2.4.27",
2424
"@vue/language-core": "3.1.8"
2525
},
2626
"devDependencies": {

packages/typescript-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"directory": "packages/typescript-plugin"
1414
},
1515
"dependencies": {
16-
"@volar/typescript": "2.4.26",
16+
"@volar/typescript": "2.4.27",
1717
"@vue/language-core": "3.1.8",
1818
"@vue/shared": "^3.5.0",
1919
"path-browserify": "^1.0.1"

0 commit comments

Comments
 (0)