From e6c76e7d4a029c796ba651205e0fcc30befa24d7 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 2 Jul 2025 14:45:32 -0700 Subject: [PATCH] Make `projecttestutil.Setup` generic, avoid casts. --- internal/ls/completions_test.go | 6 +- internal/ls/definition_test.go | 2 +- internal/ls/findallreferences_test.go | 2 +- internal/ls/signaturehelp_test.go | 2 +- internal/project/ata_test.go | 84 +++++++++---------- internal/project/service_test.go | 66 +++++++-------- .../projecttestutil/projecttestutil.go | 4 +- 7 files changed, 83 insertions(+), 83 deletions(-) diff --git a/internal/ls/completions_test.go b/internal/ls/completions_test.go index 58edd4b59b..2b294e1087 100644 --- a/internal/ls/completions_test.go +++ b/internal/ls/completions_test.go @@ -2051,7 +2051,7 @@ func runTest(t *testing.T, files map[string]string, expected map[string]*testCas if mainFileName == "" { mainFileName = defaultMainFileName } - parsedFiles := make(map[string]any) + parsedFiles := make(map[string]string) parsedFiles[defaultTsconfigFileName] = `{}` var markerPositions map[string]*fourslash.Marker for fileName, content := range files { @@ -2126,9 +2126,9 @@ func assertIncludesItem(t *testing.T, actual *lsproto.CompletionList, expected * return false } -func createLanguageService(ctx context.Context, fileName string, files map[string]any) (*ls.LanguageService, func()) { +func createLanguageService(ctx context.Context, fileName string, files map[string]string) (*ls.LanguageService, func()) { projectService, _ := projecttestutil.Setup(files, nil) - projectService.OpenFile(fileName, files[fileName].(string), core.GetScriptKindFromFileName(fileName), "") + projectService.OpenFile(fileName, files[fileName], core.GetScriptKindFromFileName(fileName), "") project := projectService.Projects()[0] return project.GetLanguageServiceForRequest(ctx) } diff --git a/internal/ls/definition_test.go b/internal/ls/definition_test.go index a932e3eed9..29cc6aa134 100644 --- a/internal/ls/definition_test.go +++ b/internal/ls/definition_test.go @@ -54,7 +54,7 @@ func runDefinitionTest(t *testing.T, input string, expected map[string]lsproto.D file := testData.Files[0].FileName() markerPositions := testData.MarkerPositions ctx := projecttestutil.WithRequestID(t.Context()) - languageService, done := createLanguageService(ctx, file, map[string]any{ + languageService, done := createLanguageService(ctx, file, map[string]string{ file: testData.Files[0].Content, }) defer done() diff --git a/internal/ls/findallreferences_test.go b/internal/ls/findallreferences_test.go index 7030fd85c7..2041c65636 100644 --- a/internal/ls/findallreferences_test.go +++ b/internal/ls/findallreferences_test.go @@ -15,7 +15,7 @@ func runFindReferencesTest(t *testing.T, input string, expectedLocations map[str testData := fourslash.ParseTestData(t, input, "/file1.ts") markerPositions := testData.MarkerPositions ctx := projecttestutil.WithRequestID(t.Context()) - service, done := createLanguageService(ctx, testData.Files[0].FileName(), map[string]any{ + service, done := createLanguageService(ctx, testData.Files[0].FileName(), map[string]string{ testData.Files[0].FileName(): testData.Files[0].Content, }) defer done() diff --git a/internal/ls/signaturehelp_test.go b/internal/ls/signaturehelp_test.go index 4b5eeff285..36be7655de 100644 --- a/internal/ls/signaturehelp_test.go +++ b/internal/ls/signaturehelp_test.go @@ -1021,7 +1021,7 @@ func runSignatureHelpTest(t *testing.T, input string, expected map[string]verify file := testData.Files[0].FileName() markerPositions := testData.MarkerPositions ctx := projecttestutil.WithRequestID(t.Context()) - languageService, done := createLanguageService(ctx, file, map[string]any{ + languageService, done := createLanguageService(ctx, file, map[string]string{ file: testData.Files[0].Content, }) defer done() diff --git a/internal/project/ata_test.go b/internal/project/ata_test.go index cced33e9f6..e7c392faa9 100644 --- a/internal/project/ata_test.go +++ b/internal/project/ata_test.go @@ -21,7 +21,7 @@ func TestAta(t *testing.T) { t.Run("local module should not be picked up", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": `const c = require('./config');`, "/user/username/projects/project/config.js": `export let x = 1`, "/user/username/projects/project/jsconfig.json": `{ @@ -34,7 +34,7 @@ func TestAta(t *testing.T) { TypesRegistry: []string{"config"}, }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") assert.Equal(t, len(service.Projects()), 1) _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") assert.Equal(t, p.Kind(), project.KindConfigured) @@ -50,7 +50,7 @@ func TestAta(t *testing.T) { t.Run("configured projects", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": ``, "/user/username/projects/project/tsconfig.json": `{ "compilerOptions": { "allowJs": true }, @@ -70,7 +70,7 @@ func TestAta(t *testing.T) { }, }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") assert.Equal(t, len(service.Projects()), 1) _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") assert.Equal(t, p.Kind(), project.KindConfigured) @@ -92,7 +92,7 @@ func TestAta(t *testing.T) { t.Run("inferred projects", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": ``, "/user/username/projects/project/package.json": `{ "name": "test", @@ -108,7 +108,7 @@ func TestAta(t *testing.T) { }, }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") assert.Equal(t, len(service.Projects()), 1) _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") assert.Equal(t, p.Kind(), project.KindInferred) @@ -130,7 +130,7 @@ func TestAta(t *testing.T) { t.Run("type acquisition with disableFilenameBasedTypeAcquisition:true", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/jquery.js": ``, "/user/username/projects/project/tsconfig.json": `{ "compilerOptions": { "allowJs": true }, @@ -142,7 +142,7 @@ func TestAta(t *testing.T) { TypesRegistry: []string{"jquery"}, }, }) - service.OpenFile("/user/username/projects/project/jquery.js", files["/user/username/projects/project/jquery.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/jquery.js", files["/user/username/projects/project/jquery.js"], core.ScriptKindJS, "") assert.Equal(t, len(service.Projects()), 1) _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/jquery.js") assert.Equal(t, p.Kind(), project.KindConfigured) @@ -158,7 +158,7 @@ func TestAta(t *testing.T) { t.Run("deduplicate from local @types packages", func(t *testing.T) { t.Skip("Todo - implement removing local @types from include list") t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": "", "/user/username/projects/project/node_modules/@types/node/index.d.ts": "declare var node;", "/user/username/projects/project/jsconfig.json": `{ @@ -170,7 +170,7 @@ func TestAta(t *testing.T) { TypesRegistry: []string{"node"}, }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") assert.Equal(t, len(service.Projects()), 1) _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") assert.Equal(t, p.Kind(), project.KindConfigured) @@ -185,7 +185,7 @@ func TestAta(t *testing.T) { t.Run("Throttle - scheduled run install requests without reaching limit", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project1/app.js": "", "/user/username/projects/project1/file3.d.ts": "", "/user/username/projects/project1/jsconfig.json": `{ @@ -210,8 +210,8 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project1/app.js", files["/user/username/projects/project1/app.js"].(string), core.ScriptKindJS, "") - service.OpenFile("/user/username/projects/project2/app.js", files["/user/username/projects/project2/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project1/app.js", files["/user/username/projects/project1/app.js"], core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project2/app.js", files["/user/username/projects/project2/app.js"], core.ScriptKindJS, "") _, p1 := service.EnsureDefaultProjectForFile("/user/username/projects/project1/app.js") _, p2 := service.EnsureDefaultProjectForFile("/user/username/projects/project2/app.js") var installStatuses []project.TypingsInstallerStatus @@ -227,7 +227,7 @@ func TestAta(t *testing.T) { t.Run("Throttle - scheduled run install requests reaching limit", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project1/app.js": "", "/user/username/projects/project1/file3.d.ts": "", "/user/username/projects/project1/jsconfig.json": `{ @@ -271,8 +271,8 @@ func TestAta(t *testing.T) { } } - service.OpenFile("/user/username/projects/project1/app.js", files["/user/username/projects/project1/app.js"].(string), core.ScriptKindJS, "") - service.OpenFile("/user/username/projects/project2/app.js", files["/user/username/projects/project2/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project1/app.js", files["/user/username/projects/project1/app.js"], core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project2/app.js", files["/user/username/projects/project2/app.js"], core.ScriptKindJS, "") _, p1 := service.EnsureDefaultProjectForFile("/user/username/projects/project1/app.js") _, p2 := service.EnsureDefaultProjectForFile("/user/username/projects/project2/app.js") // Order is determinate since second install will run only after completing first one @@ -286,7 +286,7 @@ func TestAta(t *testing.T) { t.Run("discover from node_modules", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": "", "/user/username/projects/project/package.json": `{ "dependencies": { @@ -309,7 +309,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") status := <-host.ServiceOptions.InstallStatus assert.Equal(t, status, project.TypingsInstallerStatus{ @@ -322,7 +322,7 @@ func TestAta(t *testing.T) { // Explicit types prevent automatic inclusion from package.json listing t.Run("discover from node_modules empty types", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": "", "/user/username/projects/project/package.json": `{ "dependencies": { @@ -349,7 +349,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") status := <-host.ServiceOptions.InstallStatus assert.Equal(t, status, project.TypingsInstallerStatus{ @@ -362,7 +362,7 @@ func TestAta(t *testing.T) { // A type reference directive will not resolve to the global typings cache t.Run("discover from node_modules explicit types", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": "", "/user/username/projects/project/package.json": `{ "dependencies": { @@ -389,7 +389,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") status := <-host.ServiceOptions.InstallStatus assert.Equal(t, status, project.TypingsInstallerStatus{ @@ -402,7 +402,7 @@ func TestAta(t *testing.T) { // However, explicit types will not prevent unresolved imports from pulling in typings t.Run("discover from node_modules empty types has import", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": `import "jquery";`, "/user/username/projects/project/package.json": `{ "dependencies": { @@ -429,7 +429,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") status := <-host.ServiceOptions.InstallStatus assert.Equal(t, status, project.TypingsInstallerStatus{ @@ -441,7 +441,7 @@ func TestAta(t *testing.T) { t.Run("discover from bower_components", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": ``, "/user/username/projects/project/jsconfig.json": `{}`, "/user/username/projects/project/bower_components/jquery/index.js": "", @@ -455,7 +455,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus @@ -470,7 +470,7 @@ func TestAta(t *testing.T) { t.Run("discover from bower.json", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": ``, "/user/username/projects/project/jsconfig.json": `{}`, "/user/username/projects/project/bower.json": `{ @@ -487,7 +487,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus @@ -502,7 +502,7 @@ func TestAta(t *testing.T) { t.Run("Malformed package.json should be watched", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": ``, "/user/username/projects/project/package.json": `{ "dependencies": { "co } }`, } @@ -514,7 +514,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus @@ -546,7 +546,7 @@ func TestAta(t *testing.T) { t.Run("should install typings for unresolved imports", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": ` import * as fs from "fs"; import * as commander from "commander"; @@ -563,7 +563,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus @@ -580,7 +580,7 @@ func TestAta(t *testing.T) { t.Run("should redo resolution that resolved to '.js' file after typings are installed", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": ` import * as commander from "commander"; `, @@ -594,7 +594,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus @@ -610,7 +610,7 @@ func TestAta(t *testing.T) { t.Run("expired cache entry (inferred project, should install typings)", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": "", "/user/username/projects/project/package.json": `{ "name": "test", @@ -643,7 +643,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus @@ -658,7 +658,7 @@ func TestAta(t *testing.T) { t.Run("non-expired cache entry (inferred project, should not install typings)", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": "", "/user/username/projects/project/package.json": `{ "name": "test", @@ -689,7 +689,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus @@ -704,7 +704,7 @@ func TestAta(t *testing.T) { t.Run("expired cache entry (inferred project, should install typings) lockfile3", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": "", "/user/username/projects/project/package.json": `{ "name": "test", @@ -737,7 +737,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus @@ -752,7 +752,7 @@ func TestAta(t *testing.T) { t.Run("non-expired cache entry (inferred project, should not install typings) lockfile3", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/user/username/projects/project/app.js": "", "/user/username/projects/project/package.json": `{ "name": "test", @@ -783,7 +783,7 @@ func TestAta(t *testing.T) { }, }) - service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/user/username/projects/project/app.js", files["/user/username/projects/project/app.js"], core.ScriptKindJS, "") _, p := service.EnsureDefaultProjectForFile("/user/username/projects/project/app.js") // Order is determinate since second install will run only after completing first one status := <-host.ServiceOptions.InstallStatus diff --git a/internal/project/service_test.go b/internal/project/service_test.go index 3e39e14096..be56f6c930 100644 --- a/internal/project/service_test.go +++ b/internal/project/service_test.go @@ -19,7 +19,7 @@ func TestService(t *testing.T) { t.Skip("bundled files are not embedded") } - defaultFiles := map[string]any{ + defaultFiles := map[string]string{ "/home/projects/TS/p1/tsconfig.json": `{ "compilerOptions": { "noLib": true, @@ -39,7 +39,7 @@ func TestService(t *testing.T) { t.Parallel() service, _ := projecttestutil.Setup(defaultFiles, nil) assert.Equal(t, len(service.Projects()), 0) - service.OpenFile("/home/projects/TS/p1/src/index.ts", defaultFiles["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", defaultFiles["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") assert.Equal(t, len(service.Projects()), 1) p := service.Projects()[0] assert.Equal(t, p.Kind(), project.KindConfigured) @@ -51,7 +51,7 @@ func TestService(t *testing.T) { t.Run("create inferred project", func(t *testing.T) { t.Parallel() service, _ := projecttestutil.Setup(defaultFiles, nil) - service.OpenFile("/home/projects/TS/p1/config.ts", defaultFiles["/home/projects/TS/p1/config.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/config.ts", defaultFiles["/home/projects/TS/p1/config.ts"], core.ScriptKindTS, "") // Find tsconfig, load, notice config.ts is not included, create inferred project assert.Equal(t, len(service.Projects()), 2) _, proj := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/config.ts") @@ -61,7 +61,7 @@ func TestService(t *testing.T) { t.Run("inferred project for in-memory files", func(t *testing.T) { t.Parallel() service, _ := projecttestutil.Setup(defaultFiles, nil) - service.OpenFile("/home/projects/TS/p1/config.ts", defaultFiles["/home/projects/TS/p1/config.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/config.ts", defaultFiles["/home/projects/TS/p1/config.ts"], core.ScriptKindTS, "") service.OpenFile("^/untitled/ts-nul-authority/Untitled-1", "x", core.ScriptKindTS, "") service.OpenFile("^/untitled/ts-nul-authority/Untitled-2", "y", core.ScriptKindTS, "") assert.Equal(t, len(service.Projects()), 2) @@ -74,11 +74,11 @@ func TestService(t *testing.T) { t.Run("inferred project JS file", func(t *testing.T) { t.Parallel() - jsFiles := map[string]any{ + jsFiles := map[string]string{ "/home/projects/TS/p1/index.js": `import { x } from "./x";`, } service, _ := projecttestutil.Setup(jsFiles, nil) - service.OpenFile("/home/projects/TS/p1/index.js", jsFiles["/home/projects/TS/p1/index.js"].(string), core.ScriptKindJS, "") + service.OpenFile("/home/projects/TS/p1/index.js", jsFiles["/home/projects/TS/p1/index.js"], core.ScriptKindJS, "") assert.Equal(t, len(service.Projects()), 1) project := service.Projects()[0] assert.Assert(t, project.GetProgram().GetSourceFile("/home/projects/TS/p1/index.js") != nil) @@ -90,7 +90,7 @@ func TestService(t *testing.T) { t.Run("update script info eagerly and program lazily", func(t *testing.T) { t.Parallel() service, _ := projecttestutil.Setup(defaultFiles, nil) - service.OpenFile("/home/projects/TS/p1/src/x.ts", defaultFiles["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/x.ts", defaultFiles["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "") info, proj := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/x.ts") programBefore := proj.GetProgram() err := service.ChangeFile( @@ -128,7 +128,7 @@ func TestService(t *testing.T) { t.Run("unchanged source files are reused", func(t *testing.T) { t.Parallel() service, _ := projecttestutil.Setup(defaultFiles, nil) - service.OpenFile("/home/projects/TS/p1/src/x.ts", defaultFiles["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/x.ts", defaultFiles["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "") _, proj := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/x.ts") programBefore := proj.GetProgram() indexFileBefore := programBefore.GetSourceFile("/home/projects/TS/p1/src/index.ts") @@ -166,7 +166,7 @@ func TestService(t *testing.T) { files := maps.Clone(defaultFiles) files["/home/projects/TS/p1/y.ts"] = `export const y = 2;` service, _ := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") assert.Check(t, service.DocumentStore().GetScriptInfoByPath(serviceToPath(service, "/home/projects/TS/p1/y.ts")) == nil) // Avoid using initial file set after this point files = nil //nolint:ineffassign @@ -212,7 +212,7 @@ func TestService(t *testing.T) { "include": ["src/index.ts"] }` service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts") programBefore := project.GetProgram() assert.Equal(t, len(programBefore.GetSourceFiles()), 2) @@ -277,8 +277,8 @@ func TestService(t *testing.T) { t.Parallel() files := maps.Clone(defaultFiles) service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "") - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") assert.Equal(t, service.DocumentStore().SourceFileCount(), 2) // Avoid using initial file set after this point files = nil //nolint:ineffassign @@ -307,8 +307,8 @@ func TestService(t *testing.T) { files := maps.Clone(defaultFiles) delete(files, "/home/projects/TS/p1/tsconfig.json") service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "") - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") // Avoid using initial file set after this point files = nil //nolint:ineffassign @@ -345,8 +345,8 @@ func TestService(t *testing.T) { }` files["/home/projects/TS/p2/src/index.ts"] = `import { x } from "../../p1/src/x";` service, _ := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") - service.OpenFile("/home/projects/TS/p2/src/index.ts", files["/home/projects/TS/p2/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p2/src/index.ts", files["/home/projects/TS/p2/src/index.ts"], core.ScriptKindTS, "") assert.Equal(t, len(service.Projects()), 2) // Avoid using initial file set after this point files = nil //nolint:ineffassign @@ -370,8 +370,8 @@ func TestService(t *testing.T) { }` files["/home/projects/TS/p2/src/index.ts"] = `import { x } from "../../p1/src/x";` service, _ := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") - service.OpenFile("/home/projects/TS/p2/src/index.ts", files["/home/projects/TS/p2/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p2/src/index.ts", files["/home/projects/TS/p2/src/index.ts"], core.ScriptKindTS, "") assert.Equal(t, len(service.Projects()), 2) // Avoid using initial file set after this point files = nil //nolint:ineffassign @@ -391,8 +391,8 @@ func TestService(t *testing.T) { t.Parallel() files := maps.Clone(defaultFiles) service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "") - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts") programBefore := project.GetProgram() // Avoid using initial file set after this point @@ -415,7 +415,7 @@ func TestService(t *testing.T) { t.Parallel() files := maps.Clone(defaultFiles) service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts") programBefore := project.GetProgram() // Avoid using initial file set after this point @@ -436,7 +436,7 @@ func TestService(t *testing.T) { t.Run("change config file", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/home/projects/TS/p1/tsconfig.json": `{ "compilerOptions": { "noLib": true, @@ -450,7 +450,7 @@ func TestService(t *testing.T) { } service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts") program := project.GetProgram() assert.Equal(t, len(program.GetSemanticDiagnostics(projecttestutil.WithRequestID(t.Context()), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0) @@ -476,7 +476,7 @@ func TestService(t *testing.T) { t.Run("delete explicitly included file", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/home/projects/TS/p1/tsconfig.json": `{ "compilerOptions": { "noLib": true, @@ -487,7 +487,7 @@ func TestService(t *testing.T) { "/home/projects/TS/p1/src/index.ts": `import { x } from "./x";`, } service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts") program := project.GetProgram() assert.Equal(t, len(program.GetSemanticDiagnostics(projecttestutil.WithRequestID(t.Context()), program.GetSourceFile("/home/projects/TS/p1/src/index.ts"))), 0) @@ -509,7 +509,7 @@ func TestService(t *testing.T) { t.Run("delete wildcard included file", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/home/projects/TS/p1/tsconfig.json": `{ "compilerOptions": { "noLib": true @@ -520,7 +520,7 @@ func TestService(t *testing.T) { "/home/projects/TS/p1/src/x.ts": `let y = x;`, } service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/x.ts", files["/home/projects/TS/p1/src/x.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/x.ts") program := project.GetProgram() assert.Equal(t, len(program.GetSemanticDiagnostics(projecttestutil.WithRequestID(t.Context()), program.GetSourceFile("/home/projects/TS/p1/src/x.ts"))), 0) @@ -541,7 +541,7 @@ func TestService(t *testing.T) { t.Run("create explicitly included file", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/home/projects/TS/p1/tsconfig.json": `{ "compilerOptions": { "noLib": true @@ -551,7 +551,7 @@ func TestService(t *testing.T) { "/home/projects/TS/p1/src/index.ts": `import { y } from "./y";`, } service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts") program := project.GetProgram() @@ -599,7 +599,7 @@ func TestService(t *testing.T) { t.Run("create failed lookup location", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/home/projects/TS/p1/tsconfig.json": `{ "compilerOptions": { "noLib": true @@ -609,7 +609,7 @@ func TestService(t *testing.T) { "/home/projects/TS/p1/src/index.ts": `import { z } from "./z";`, } service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts") program := project.GetProgram() @@ -640,7 +640,7 @@ func TestService(t *testing.T) { t.Run("create wildcard included file", func(t *testing.T) { t.Parallel() - files := map[string]any{ + files := map[string]string{ "/home/projects/TS/p1/tsconfig.json": `{ "compilerOptions": { "noLib": true @@ -650,7 +650,7 @@ func TestService(t *testing.T) { "/home/projects/TS/p1/src/index.ts": `a;`, } service, host := projecttestutil.Setup(files, nil) - service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"].(string), core.ScriptKindTS, "") + service.OpenFile("/home/projects/TS/p1/src/index.ts", files["/home/projects/TS/p1/src/index.ts"], core.ScriptKindTS, "") _, project := service.EnsureDefaultProjectForFile("/home/projects/TS/p1/src/index.ts") program := project.GetProgram() diff --git a/internal/testutil/projecttestutil/projecttestutil.go b/internal/testutil/projecttestutil/projecttestutil.go index 204dee8d9e..3a83290c20 100644 --- a/internal/testutil/projecttestutil/projecttestutil.go +++ b/internal/testutil/projecttestutil/projecttestutil.go @@ -86,7 +86,7 @@ func (p *ProjectServiceHost) Client() project.Client { var _ project.ServiceHost = (*ProjectServiceHost)(nil) -func Setup(files map[string]any, testOptions *TestTypingsInstaller) (*project.Service, *ProjectServiceHost) { +func Setup[FileContents any](files map[string]FileContents, testOptions *TestTypingsInstaller) (*project.Service, *ProjectServiceHost) { host := newProjectServiceHost(files) if testOptions != nil { host.TestOptions = &testOptions.TestTypingsInstallerOptions @@ -212,7 +212,7 @@ func appendTypesRegistryConfig(builder *strings.Builder, index int, entry string builder.WriteString(fmt.Sprintf("\n \"%s\": {%s\n }", entry, TypesRegistryConfigText())) } -func newProjectServiceHost(files map[string]any) *ProjectServiceHost { +func newProjectServiceHost[FileContents any](files map[string]FileContents) *ProjectServiceHost { fs := bundled.WrapFS(vfstest.FromMap(files, false /*useCaseSensitiveFileNames*/)) host := &ProjectServiceHost{ fs: fs,