diff --git a/extensions/vscode/package.json b/extensions/vscode/package.json index 4869a643b3..ff9ef6929e 100644 --- a/extensions/vscode/package.json +++ b/extensions/vscode/package.json @@ -483,8 +483,8 @@ "@types/node": "^22.10.4", "@types/semver": "^7.5.3", "@types/vscode": "1.88.0", - "@volar/typescript": "2.4.26", - "@volar/vscode": "2.4.26", + "@volar/typescript": "2.4.27", + "@volar/vscode": "2.4.27", "@vscode/vsce": "^3.2.1", "@vue/compiler-sfc": "^3.5.0", "@vue/language-core": "3.1.8", diff --git a/packages/component-meta/package.json b/packages/component-meta/package.json index 6fb7ebe85f..28c1dc9a25 100644 --- a/packages/component-meta/package.json +++ b/packages/component-meta/package.json @@ -13,7 +13,7 @@ "directory": "packages/component-meta" }, "dependencies": { - "@volar/typescript": "2.4.26", + "@volar/typescript": "2.4.27", "@vue/language-core": "3.1.8", "path-browserify": "^1.0.1", "vue-component-type-helpers": "3.1.8" diff --git a/packages/language-core/package.json b/packages/language-core/package.json index 01cd5e0ef2..c5bde2241b 100644 --- a/packages/language-core/package.json +++ b/packages/language-core/package.json @@ -13,7 +13,7 @@ "directory": "packages/language-core" }, "dependencies": { - "@volar/language-core": "2.4.26", + "@volar/language-core": "2.4.27", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", @@ -25,7 +25,7 @@ "@types/node": "^22.10.4", "@types/path-browserify": "^1.0.1", "@types/picomatch": "^4.0.0", - "@volar/typescript": "2.4.26", + "@volar/typescript": "2.4.27", "@vue/compiler-sfc": "^3.5.0" }, "peerDependencies": { diff --git a/packages/language-plugin-pug/package.json b/packages/language-plugin-pug/package.json index 3bdd0ae1f0..beacd7ece3 100644 --- a/packages/language-plugin-pug/package.json +++ b/packages/language-plugin-pug/package.json @@ -13,7 +13,7 @@ "directory": "packages/language-plugin-pug" }, "dependencies": { - "@volar/source-map": "2.4.26", + "@volar/source-map": "2.4.27", "volar-service-pug": "0.0.68" }, "devDependencies": { diff --git a/packages/language-server/package.json b/packages/language-server/package.json index 5b5875c857..30718b0225 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -16,7 +16,7 @@ "directory": "packages/language-server" }, "dependencies": { - "@volar/language-server": "2.4.26", + "@volar/language-server": "2.4.27", "@vue/language-core": "3.1.8", "@vue/language-service": "3.1.8", "@vue/typescript-plugin": "3.1.8", @@ -27,6 +27,6 @@ }, "devDependencies": { "@typescript/server-harness": "latest", - "@volar/test-utils": "2.4.26" + "@volar/test-utils": "2.4.27" } } diff --git a/packages/language-server/tests/moduleResolution.spec.ts b/packages/language-server/tests/moduleResolution.spec.ts new file mode 100644 index 0000000000..61c51ef9cc --- /dev/null +++ b/packages/language-server/tests/moduleResolution.spec.ts @@ -0,0 +1,83 @@ +import type { TextDocument } from '@volar/language-server'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import { afterEach, expect, test } from 'vitest'; +import { URI } from 'vscode-uri'; +import { getLanguageServer, testWorkspacePath } from './server.js'; + +test('#5818 clears missing module error after renaming to an existing filename', async () => { + const server = await getLanguageServer(); + const workspaceDir = path.join(testWorkspacePath, 'tsconfigProject'); + const mainPath = path.join(workspaceDir, 'module-rename-main.vue'); + const oldComponentPath = path.join(workspaceDir, 'module-rename-comp.vue'); + const newComponentPath = path.join(workspaceDir, 'module-rename-comp-renamed.vue'); + + createFile(oldComponentPath, ''); + const mainContent = ` + + `; + const document = await openDocument(server, mainPath, mainContent); + + const diagnosticsBefore = await getSemanticDiagnostics(server, document.uri); + expect(diagnosticsBefore.some(diagnostic => diagnostic.code === 2307)).toBe(true); + + fs.renameSync(oldComponentPath, newComponentPath); + createdFiles.push(newComponentPath); + + await expect.poll( + async () => { + const diagnosticsAfter = await getSemanticDiagnostics(server, document.uri); + return diagnosticsAfter.some(diagnostic => diagnostic.code === 2307); + }, + { + interval: 100, + timeout: 5000, + }, + ).toBe(false); +}); + +const openedDocuments: TextDocument[] = []; +const createdFiles: string[] = []; + +afterEach(async () => { + const server = await getLanguageServer(); + for (const document of openedDocuments) { + await server.close(document.uri); + } + for (const file of createdFiles) { + if (fs.existsSync(file)) { + fs.rmSync(file); + } + } + openedDocuments.length = 0; + createdFiles.length = 0; +}); + +function createFile(fileName: string, content: string) { + fs.writeFileSync(fileName, content); + createdFiles.push(fileName); +} + +async function openDocument(server: Awaited>, fileName: string, content: string) { + createFile(fileName, content); + const uri = URI.file(fileName); + const document = await server.open(uri.toString(), 'vue', content); + if (openedDocuments.every(doc => doc.uri !== document.uri)) { + openedDocuments.push(document); + } + return document; +} + +async function getSemanticDiagnostics(server: Awaited>, uri: string) { + const res = await server.tsserver.message({ + seq: server.nextSeq(), + command: 'semanticDiagnosticsSync', + arguments: { + file: URI.parse(uri).fsPath, + }, + }); + expect(res.success).toBe(true); + return res.body as any[]; +} diff --git a/packages/language-service/package.json b/packages/language-service/package.json index 900027017a..7f737a4d85 100644 --- a/packages/language-service/package.json +++ b/packages/language-service/package.json @@ -17,7 +17,7 @@ "update-html-data": "node ./scripts/update-html-data.js" }, "dependencies": { - "@volar/language-service": "2.4.26", + "@volar/language-service": "2.4.27", "@vue/language-core": "3.1.8", "@vue/shared": "^3.5.0", "path-browserify": "^1.0.1", @@ -34,8 +34,8 @@ "devDependencies": { "@types/node": "^22.10.4", "@types/path-browserify": "^1.0.1", - "@volar/kit": "2.4.26", - "@volar/typescript": "2.4.26", + "@volar/kit": "2.4.27", + "@volar/typescript": "2.4.27", "@vue/compiler-dom": "^3.5.0", "@vue/typescript-plugin": "3.1.8", "vscode-css-languageservice": "^6.3.1" diff --git a/packages/tsc/package.json b/packages/tsc/package.json index be89aeaa95..1d06a45ca3 100644 --- a/packages/tsc/package.json +++ b/packages/tsc/package.json @@ -20,7 +20,7 @@ "typescript": ">=5.0.0" }, "dependencies": { - "@volar/typescript": "2.4.26", + "@volar/typescript": "2.4.27", "@vue/language-core": "3.1.8" }, "devDependencies": { diff --git a/packages/typescript-plugin/package.json b/packages/typescript-plugin/package.json index 93c0278640..a6480b7137 100644 --- a/packages/typescript-plugin/package.json +++ b/packages/typescript-plugin/package.json @@ -13,7 +13,7 @@ "directory": "packages/typescript-plugin" }, "dependencies": { - "@volar/typescript": "2.4.26", + "@volar/typescript": "2.4.27", "@vue/language-core": "3.1.8", "@vue/shared": "^3.5.0", "path-browserify": "^1.0.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a1acd994e..41ecb1b182 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,11 +48,11 @@ importers: specifier: 1.88.0 version: 1.88.0 '@volar/typescript': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@volar/vscode': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vscode/vsce': specifier: ^3.2.1 version: 3.3.2 @@ -93,8 +93,8 @@ importers: packages/component-meta: dependencies: '@volar/typescript': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vue/language-core': specifier: 3.1.8 version: link:../language-core @@ -120,8 +120,8 @@ importers: packages/language-core: dependencies: '@volar/language-core': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vue/compiler-dom': specifier: ^3.5.0 version: 3.5.13 @@ -154,8 +154,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 '@volar/typescript': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vue/compiler-sfc': specifier: ^3.5.0 version: 3.5.13 @@ -163,8 +163,8 @@ importers: packages/language-plugin-pug: dependencies: '@volar/source-map': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 volar-service-pug: specifier: 0.0.68 version: 0.0.68 @@ -182,8 +182,8 @@ importers: packages/language-server: dependencies: '@volar/language-server': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vue/language-core': specifier: 3.1.8 version: link:../language-core @@ -204,14 +204,14 @@ importers: specifier: latest version: 0.3.5 '@volar/test-utils': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 packages/language-service: dependencies: '@volar/language-service': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vue/language-core': specifier: 3.1.8 version: link:../language-core @@ -223,25 +223,25 @@ importers: version: 1.0.1 volar-service-css: specifier: 0.0.68 - version: 0.0.68(@volar/language-service@2.4.26) + version: 0.0.68(@volar/language-service@2.4.27) volar-service-emmet: specifier: 0.0.68 - version: 0.0.68(@volar/language-service@2.4.26) + version: 0.0.68(@volar/language-service@2.4.27) volar-service-html: specifier: 0.0.68 - version: 0.0.68(@volar/language-service@2.4.26) + version: 0.0.68(@volar/language-service@2.4.27) volar-service-json: specifier: 0.0.68 - version: 0.0.68(@volar/language-service@2.4.26) + version: 0.0.68(@volar/language-service@2.4.27) volar-service-pug: specifier: 0.0.68 version: 0.0.68 volar-service-pug-beautify: specifier: 0.0.68 - version: 0.0.68(@volar/language-service@2.4.26) + version: 0.0.68(@volar/language-service@2.4.27) volar-service-typescript: specifier: 0.0.68 - version: 0.0.68(@volar/language-service@2.4.26) + version: 0.0.68(@volar/language-service@2.4.27) vscode-html-languageservice: specifier: ^5.2.0 version: 5.4.0 @@ -256,11 +256,11 @@ importers: specifier: ^1.0.1 version: 1.0.3 '@volar/kit': - specifier: 2.4.26 - version: 2.4.26(typescript@5.9.3) + specifier: 2.4.27 + version: 2.4.27(typescript@5.9.3) '@volar/typescript': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vue/compiler-dom': specifier: ^3.5.0 version: 3.5.13 @@ -274,8 +274,8 @@ importers: packages/tsc: dependencies: '@volar/typescript': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vue/language-core': specifier: 3.1.8 version: link:../language-core @@ -290,8 +290,8 @@ importers: packages/typescript-plugin: dependencies: '@volar/typescript': - specifier: 2.4.26 - version: 2.4.26 + specifier: 2.4.27 + version: 2.4.27 '@vue/language-core': specifier: 3.1.8 version: link:../language-core @@ -1301,34 +1301,34 @@ packages: '@vitest/utils@3.1.3': resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} - '@volar/kit@2.4.26': - resolution: {integrity: sha512-shgNg7PbV8SIxxQLOQh5zMr8KV0JvdG9If0MwJb5L1HMrBU91jBxR0ANi2OJPMMme6/l1vIYm4hCaO6W2JaEcQ==} + '@volar/kit@2.4.27': + resolution: {integrity: sha512-ilZoQDMLzqmSsImJRWx4YiZ4FcvvPrPnFVmL6hSsIWB6Bn3qc7k88J9yP32dagrs5Y8EXIlvvD/mAFaiuEOACQ==} peerDependencies: typescript: '*' - '@volar/language-core@2.4.26': - resolution: {integrity: sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==} + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} '@volar/language-hub@0.0.1': resolution: {integrity: sha512-2eOUnlMKTyjtlXIVd+6pfAtcuVugxCOgpNgcLWmlPuncQTG5C1E5mTDL/PUMw7aEnLySUOtMTIp8lT3vk/7w6Q==} - '@volar/language-server@2.4.26': - resolution: {integrity: sha512-Xsyu+VDgM8TyVkQfBz2aIViSEOgH2un0gIJlp0M8rssDDLCqr4ssQzwHOyPf7sT7UIjrlAMnJvRkC/u0mmgtYw==} + '@volar/language-server@2.4.27': + resolution: {integrity: sha512-SymGNkErcHg8GjiG65iQN8sLkhqu1pwKhFySmxeBuYq5xFYagKBW36eiNITXQTdvT0tutI1GXcXdq/FdE/IyjA==} - '@volar/language-service@2.4.26': - resolution: {integrity: sha512-ZBPRR1ytXttSV5X4VPvEQR/glxs+7/4IOJIBCOW3/EJk4z77R4mF2y4wM3fNgOXXZT5h16j3sC5w+LGNkz2VlA==} + '@volar/language-service@2.4.27': + resolution: {integrity: sha512-SxKZ8yLhpWa7Y5e/RDxtNfm7j7xsXp/uf2urijXEffRNpPSmVdfzQrFFy5d7l8PNpZy+bHg+yakmqBPjQN+MOw==} - '@volar/source-map@2.4.26': - resolution: {integrity: sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==} + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} - '@volar/test-utils@2.4.26': - resolution: {integrity: sha512-fdQLb6f4WT+I17SM066FfkJM0jPeUOLeIdIRSrTfP33HWbRpyRk+i/fxX5yHkxWGDtMTR64nG8Zrrr/Y3H08ew==} + '@volar/test-utils@2.4.27': + resolution: {integrity: sha512-MNEinNWSE+3i1h9pqpb9kf0XDkX6Ujj4SY4UQvfAcSZKKCclfvPz/1Te7O8yCiQdTC+D91FKMi6ciSHbw/5TCg==} - '@volar/typescript@2.4.26': - resolution: {integrity: sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==} + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} - '@volar/vscode@2.4.26': - resolution: {integrity: sha512-etAnzd4+SxWHPk+AvbfP9ykVjGIiDanRcxFAW2nJVDqnSMxf68zSKxCrKrdrpjJnw4waCMzTmwncq9puG4sIJA==} + '@volar/vscode@2.4.27': + resolution: {integrity: sha512-E0ImlGes0QhvbBLf8GzoDWjfTO+ZsBfXHpPDeDjfVzjxNVQ0f8IGWd4+6kuQtObaS538/9fWyJLjUFh+hAwN1A==} '@vscode/emmet-helper@2.11.0': resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} @@ -4685,9 +4685,9 @@ snapshots: '@clack/prompts': 0.8.2 '@tsslint/config': 2.0.4(typescript@5.9.3) '@tsslint/core': 2.0.4 - '@volar/language-core': 2.4.26 + '@volar/language-core': 2.4.27 '@volar/language-hub': 0.0.1 - '@volar/typescript': 2.4.26 + '@volar/typescript': 2.4.27 glob: 10.4.5 json5: 2.2.3 typescript: 5.9.3 @@ -4889,26 +4889,26 @@ snapshots: loupe: 3.1.3 tinyrainbow: 2.0.0 - '@volar/kit@2.4.26(typescript@5.9.3)': + '@volar/kit@2.4.27(typescript@5.9.3)': dependencies: - '@volar/language-service': 2.4.26 - '@volar/typescript': 2.4.26 + '@volar/language-service': 2.4.27 + '@volar/typescript': 2.4.27 typesafe-path: 0.2.2 typescript: 5.9.3 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/language-core@2.4.26': + '@volar/language-core@2.4.27': dependencies: - '@volar/source-map': 2.4.26 + '@volar/source-map': 2.4.27 '@volar/language-hub@0.0.1': {} - '@volar/language-server@2.4.26': + '@volar/language-server@2.4.27': dependencies: - '@volar/language-core': 2.4.26 - '@volar/language-service': 2.4.26 - '@volar/typescript': 2.4.26 + '@volar/language-core': 2.4.27 + '@volar/language-service': 2.4.27 + '@volar/typescript': 2.4.27 path-browserify: 1.0.1 request-light: 0.7.0 vscode-languageserver: 9.0.1 @@ -4916,29 +4916,29 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/language-service@2.4.26': + '@volar/language-service@2.4.27': dependencies: - '@volar/language-core': 2.4.26 + '@volar/language-core': 2.4.27 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/source-map@2.4.26': {} + '@volar/source-map@2.4.27': {} - '@volar/test-utils@2.4.26': + '@volar/test-utils@2.4.27': dependencies: - '@volar/language-core': 2.4.26 - '@volar/language-server': 2.4.26 + '@volar/language-core': 2.4.27 + '@volar/language-server': 2.4.27 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - '@volar/typescript@2.4.26': + '@volar/typescript@2.4.27': dependencies: - '@volar/language-core': 2.4.26 + '@volar/language-core': 2.4.27 path-browserify: 1.0.1 vscode-uri: 3.1.0 - '@volar/vscode@2.4.26': + '@volar/vscode@2.4.27': dependencies: path-browserify: 1.0.1 vscode-languageclient: 9.0.1 @@ -7315,55 +7315,55 @@ snapshots: - supports-color - terser - volar-service-css@0.0.68(@volar/language-service@2.4.26): + volar-service-css@0.0.68(@volar/language-service@2.4.27): dependencies: vscode-css-languageservice: 6.3.5 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.26 + '@volar/language-service': 2.4.27 - volar-service-emmet@0.0.68(@volar/language-service@2.4.26): + volar-service-emmet@0.0.68(@volar/language-service@2.4.27): dependencies: '@emmetio/css-parser': 0.4.1 '@emmetio/html-matcher': 1.3.0 '@vscode/emmet-helper': 2.11.0 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.26 + '@volar/language-service': 2.4.27 - volar-service-html@0.0.68(@volar/language-service@2.4.26): + volar-service-html@0.0.68(@volar/language-service@2.4.27): dependencies: vscode-html-languageservice: 5.4.0 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.26 + '@volar/language-service': 2.4.27 - volar-service-json@0.0.68(@volar/language-service@2.4.26): + volar-service-json@0.0.68(@volar/language-service@2.4.27): dependencies: vscode-json-languageservice: 5.6.1 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.26 + '@volar/language-service': 2.4.27 - volar-service-pug-beautify@0.0.68(@volar/language-service@2.4.26): + volar-service-pug-beautify@0.0.68(@volar/language-service@2.4.27): dependencies: '@johnsoncodehk/pug-beautify': 0.2.2 optionalDependencies: - '@volar/language-service': 2.4.26 + '@volar/language-service': 2.4.27 volar-service-pug@0.0.68: dependencies: - '@volar/language-service': 2.4.26 + '@volar/language-service': 2.4.27 muggle-string: 0.4.1 pug-lexer: 5.0.1 pug-parser: 6.0.0 - volar-service-html: 0.0.68(@volar/language-service@2.4.26) + volar-service-html: 0.0.68(@volar/language-service@2.4.27) vscode-html-languageservice: 5.4.0 vscode-languageserver-textdocument: 1.0.12 - volar-service-typescript@0.0.68(@volar/language-service@2.4.26): + volar-service-typescript@0.0.68(@volar/language-service@2.4.27): dependencies: path-browserify: 1.0.1 semver: 7.7.2 @@ -7372,7 +7372,7 @@ snapshots: vscode-nls: 5.2.0 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.26 + '@volar/language-service': 2.4.27 vscode-css-languageservice@6.3.5: dependencies: