From 24de0e38c7d9557fcbd13b691b4cf2b80499de90 Mon Sep 17 00:00:00 2001 From: Serghei <43180231+xyrolle@users.noreply.github.com> Date: Thu, 22 Oct 2026 16:02:01 +0300 Subject: [PATCH] fix: keep the case of Svelte file paths with --tsgo-experimental-api --- .changeset/tsgo-api-file-casing.md | 6 +++++ .../features/DiagnosticsProvider.ts | 5 +++- .../features/diagnostics/index.test.ts | 27 +++++++++++++++++++ .../typescript-go/testfiles/Upper.svelte | 3 +++ .../typescript-go/testfiles/tsconfig.json | 3 +++ 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 .changeset/tsgo-api-file-casing.md create mode 100644 packages/language-server/test/plugins/typescript-go/testfiles/Upper.svelte create mode 100644 packages/language-server/test/plugins/typescript-go/testfiles/tsconfig.json diff --git a/.changeset/tsgo-api-file-casing.md b/.changeset/tsgo-api-file-casing.md new file mode 100644 index 000000000..90b1e163f --- /dev/null +++ b/.changeset/tsgo-api-file-casing.md @@ -0,0 +1,6 @@ +--- +'svelte-language-server': patch +'svelte-check': patch +--- + +fix: report Svelte compiler and CSS diagnostics under the file's real path with `--tsgo-experimental-api` on case-insensitive file systems diff --git a/packages/language-server/src/plugins/typescript-go/features/DiagnosticsProvider.ts b/packages/language-server/src/plugins/typescript-go/features/DiagnosticsProvider.ts index 272d9c871..a9a855948 100644 --- a/packages/language-server/src/plugins/typescript-go/features/DiagnosticsProvider.ts +++ b/packages/language-server/src/plugins/typescript-go/features/DiagnosticsProvider.ts @@ -193,7 +193,10 @@ export class SvelteCheckTSGoDiagnosticsProvider implements DiagnosticsProvider { } getAllSvelteFiles(): string[] { - return Array.from(this.files.keys()).filter(isSvelteFilePath); + // not the keys, which are lowercase on case-insensitive file systems + return Array.from(this.files.values(), (snapshot) => snapshot.filePath).filter( + isSvelteFilePath + ); } mapAndFilterDiagnostics( diff --git a/packages/language-server/test/plugins/typescript-go/features/diagnostics/index.test.ts b/packages/language-server/test/plugins/typescript-go/features/diagnostics/index.test.ts index ae4537d06..2b426ba6e 100644 --- a/packages/language-server/test/plugins/typescript-go/features/diagnostics/index.test.ts +++ b/packages/language-server/test/plugins/typescript-go/features/diagnostics/index.test.ts @@ -12,6 +12,7 @@ import { Document } from '../../../../../src/lib/documents'; import ts from 'typescript'; import { getPackageInfo } from '../../../../../src/importPackage'; import assert from 'assert'; +import sinon from 'sinon'; const isSvelte5Plus = Number(VERSION.split('.')[0]) >= 5; @@ -40,6 +41,32 @@ describe('SvelteCheckTSGoDiagnosticsProvider', function () { workspaceDir: fixturesDir }); + afterEach(() => sinon.restore()); + + it('returns Svelte file paths in their original case', async () => { + const syncApi = await import('@typescript/native-preview/unstable/sync'); + const tsAst = await import('@typescript/native-preview/unstable/ast'); + const tsconfig = path.join(__dirname, '../../testfiles/tsconfig.json'); + // The file map lowercases its keys on case-insensitive file systems + sinon.stub(ts.sys, 'useCaseSensitiveFileNames').value(false); + const service = new SvelteCheckTSGoDiagnosticsProvider( + syncApi, + tsAst, + tsconfig, + 'svelte2tsx', + (filePath, content) => new Document(pathToUrl(filePath), content) + ); + sinon.restore(); + try { + await service.getProject(); + assert.deepStrictEqual(service.getAllSvelteFiles(), [ + normalizePath(path.join(path.dirname(tsconfig), 'Upper.svelte')) + ]); + } finally { + service.dispose(); + } + }); + after(() => { for (const provider of providerPool.values()) { provider.dispose(); diff --git a/packages/language-server/test/plugins/typescript-go/testfiles/Upper.svelte b/packages/language-server/test/plugins/typescript-go/testfiles/Upper.svelte new file mode 100644 index 000000000..702431c1f --- /dev/null +++ b/packages/language-server/test/plugins/typescript-go/testfiles/Upper.svelte @@ -0,0 +1,3 @@ + diff --git a/packages/language-server/test/plugins/typescript-go/testfiles/tsconfig.json b/packages/language-server/test/plugins/typescript-go/testfiles/tsconfig.json new file mode 100644 index 000000000..16a0f353b --- /dev/null +++ b/packages/language-server/test/plugins/typescript-go/testfiles/tsconfig.json @@ -0,0 +1,3 @@ +{ + "compilerOptions": { "strict": true, "types": [] } +}