Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions internal/fourslash/_scripts/convertFourslash.mts
Original file line number Diff line number Diff line change
Expand Up @@ -1619,6 +1619,7 @@ function stringToTristate(s: string): string {

function parseUserPreferences(arg: ts.ObjectLiteralExpression): string | undefined {
const inlayHintPreferences: string[] = [];
const moduleSpecifierPreferences: string[] = [];
const preferences: string[] = [];
for (const prop of arg.properties) {
if (ts.isPropertyAssignment(prop)) {
Expand All @@ -1643,19 +1644,19 @@ function parseUserPreferences(arg: ts.ObjectLiteralExpression): string | undefin
}
regexes.push(getGoStringLiteral(strElem.text));
}
preferences.push(`AutoImportSpecifierExcludeRegexes: []string{${regexes.join(", ")}}`);
moduleSpecifierPreferences.push(`AutoImportSpecifierExcludeRegexes: []string{${regexes.join(", ")}}`);
break;
case "importModuleSpecifierPreference":
if (!ts.isStringLiteralLike(prop.initializer)) {
return undefined;
}
preferences.push(`ImportModuleSpecifierPreference: ${prop.initializer.getText()}`);
moduleSpecifierPreferences.push(`ImportModuleSpecifierPreference: ${prop.initializer.getText()}`);
break;
case "importModuleSpecifierEnding":
if (!ts.isStringLiteralLike(prop.initializer)) {
return undefined;
}
preferences.push(`ImportModuleSpecifierEnding: ${prop.initializer.getText()}`);
moduleSpecifierPreferences.push(`ImportModuleSpecifierEnding: ${prop.initializer.getText()}`);
break;
case "includePackageJsonAutoImports":
if (!ts.isStringLiteralLike(prop.initializer)) {
Expand Down Expand Up @@ -1736,6 +1737,9 @@ function parseUserPreferences(arg: ts.ObjectLiteralExpression): string | undefin
if (inlayHintPreferences.length > 0) {
preferences.push(`InlayHints: lsutil.InlayHintsPreferences{${inlayHintPreferences.join(",")}}`);
}
if (moduleSpecifierPreferences.length > 0) {
preferences.push(`ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{${moduleSpecifierPreferences.join(",")}}`);
}
if (preferences.length === 0) {
return "nil /*preferences*/";
}
Expand Down
16 changes: 7 additions & 9 deletions internal/fourslash/fourslash.go
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ func NewFourslash(t *testing.T, capabilities *lsproto.ClientCapabilities, conten
in: inputWriter,
out: outputReader,
testData: &testData,
userPreferences: lsutil.NewDefaultUserPreferences(), // !!! parse default preferences for fourslash case?
userPreferences: lsutil.DefaultUserPreferences,
vfs: fs,
scriptInfos: scriptInfos,
converters: converters,
Expand Down Expand Up @@ -657,7 +657,7 @@ func (f *FourslashTest) Configure(t *testing.T, config *lsutil.UserPreferences)
}

func (f *FourslashTest) ConfigureWithReset(t *testing.T, config *lsutil.UserPreferences) (reset func()) {
originalConfig := f.userPreferences.Copy()
originalConfig := f.userPreferences
f.Configure(t, config)
return func() {
f.Configure(t, originalConfig)
Expand Down Expand Up @@ -1271,7 +1271,7 @@ func (f *FourslashTest) VerifyApplyCodeActionFromCompletion(t *testing.T, marker
userPreferences = options.UserPreferences
} else {
// Default preferences: enables auto-imports
userPreferences = lsutil.NewDefaultUserPreferences()
userPreferences = lsutil.DefaultUserPreferences
}

reset := f.ConfigureWithReset(t, userPreferences)
Expand Down Expand Up @@ -3126,10 +3126,8 @@ func (f *FourslashTest) BaselineAutoImportsCompletions(t *testing.T, markerNames
reset := f.ConfigureWithReset(t, &lsutil.UserPreferences{
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
ImportModuleSpecifierEnding: f.userPreferences.ImportModuleSpecifierEnding,
ImportModuleSpecifierPreference: f.userPreferences.ImportModuleSpecifierPreference,
ModuleSpecifier: f.userPreferences.ModuleSpecifier,
AutoImportFileExcludePatterns: f.userPreferences.AutoImportFileExcludePatterns,
AutoImportSpecifierExcludeRegexes: f.userPreferences.AutoImportSpecifierExcludeRegexes,
PreferTypeOnlyAutoImports: f.userPreferences.PreferTypeOnlyAutoImports,
})
defer reset()
Expand Down Expand Up @@ -3417,7 +3415,7 @@ func (f *FourslashTest) VerifyBaselineInlayHints(

preferences := testPreferences
if preferences == nil {
preferences = lsutil.NewDefaultUserPreferences()
preferences = lsutil.DefaultUserPreferences
}
reset := f.ConfigureWithReset(t, preferences)
defer reset()
Expand Down Expand Up @@ -3737,11 +3735,11 @@ type VerifyWorkspaceSymbolCase struct {

// `verify.navigateTo` in Strada.
func (f *FourslashTest) VerifyWorkspaceSymbol(t *testing.T, cases []*VerifyWorkspaceSymbolCase) {
originalPreferences := f.userPreferences.Copy()
originalPreferences := f.userPreferences
for _, testCase := range cases {
preferences := testCase.Preferences
if preferences == nil {
preferences = lsutil.NewDefaultUserPreferences()
preferences = lsutil.DefaultUserPreferences
}
f.Configure(t, preferences)
result := sendRequest(t, f, lsproto.WorkspaceSymbolInfo, &lsproto.WorkspaceSymbolParams{Query: testCase.Pattern})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ ignoredSym/*2*/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.Configure(t, &lsutil.UserPreferences{
AutoImportSpecifierExcludeRegexes: []string{".*ignoreme.*"},
ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{
AutoImportSpecifierExcludeRegexes: []string{".*ignoreme.*"},
},
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,5 @@ export function saveMe() {
defer done()
f.MarkTestAsStradaServer()
f.GoToFile(t, "/home/src/workspaces/project/web/src/Helper.ts")
f.VerifyImportFixModuleSpecifiers(t, "", []string{"../../common/src/MyModule"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"../../common/src/MyModule"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,5 @@ export function saveMe() {
defer done()
f.MarkTestAsStradaServer()
f.GoToFile(t, "/home/src/workspaces/project/web/src/Helper.ts")
f.VerifyImportFixModuleSpecifiers(t, "", []string{"@common/MyModule"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"@common/MyModule"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ export function add(a: number, b: number) {}
add/*imports*/;`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "imports", []string{"#src/add.ts"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative"})
f.VerifyImportFixModuleSpecifiers(t, "imports", []string{"#src/add.ts"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ export function something(name: string): any;
something/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"./src/a/b/c/something"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "relative"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"./src/a/b/c/something"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "relative"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ export function something(name: string): any;
something/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"./src/a/b/c/something"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "project-relative"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"./src/a/b/c/something"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "project-relative"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ export function something(name: string): any;
something/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"#a/b/c/something"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"#a/b/c/something"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative"}})
}
2 changes: 1 addition & 1 deletion internal/fourslash/tests/gen/autoImportPaths_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,5 @@ bar/**/
export const bar = 0;`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"package2/file1"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "shortest"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"package2/file1"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "shortest"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@ x/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient", "ambient/utils"}, nil /*preferences*/)
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"utils"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient", "ambient/utils"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/UTILS/"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/UTILS/i"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient", "ambient/utils"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/ambient/utils/"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/ambient\\/utils/"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/.*?$"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"^ambient/"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient/utils"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"ambient$"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient", "ambient/utils"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"oops("}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"utils"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient", "ambient/utils"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/UTILS/"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/UTILS/i"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient", "ambient/utils"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/ambient/utils/"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/ambient\\/utils/"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"/.*?$"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"^ambient/"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient/utils"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"ambient$"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"ambient", "ambient/utils"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"oops("}}})
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
IsIncomplete: false,
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ add/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"./utils"}, nil /*preferences*/)
f.VerifyImportFixModuleSpecifiers(t, "", []string{"@app/utils"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"^\\./"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"@app/utils"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"./utils"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative", AutoImportSpecifierExcludeRegexes: []string{"^@app/"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"utils"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"@app/utils"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"^\\./"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"@app/utils"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"./utils"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative", AutoImportSpecifierExcludeRegexes: []string{"^@app/"}}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"utils"}}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,5 @@ add/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"pkg", "pkg/utils"}, nil /*preferences*/)
f.VerifyImportFixModuleSpecifiers(t, "", []string{"pkg/utils"}, &lsutil.UserPreferences{AutoImportSpecifierExcludeRegexes: []string{"^pkg$"}})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"pkg/utils"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{AutoImportSpecifierExcludeRegexes: []string{"^pkg$"}}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@ export declare function customElement(name: string): any;
customElement/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"lit/decorators.js"}, &lsutil.UserPreferences{ImportModuleSpecifierEnding: "js"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"lit/decorators.js"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierEnding: "js"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,5 @@ f1();`,
`import { f1 } from "b/x";

f1();`,
}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative"})
}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,5 @@ f1();`,
`import { f1 } from "../b/x";

f1();`,
}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "relative"})
}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "relative"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ export { A } from "../foo/a";
export * from "./a";`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "sibling", []string{"proj/foo/a", "proj/src/utils", "proj", "proj/foo"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative"})
f.VerifyImportFixModuleSpecifiers(t, "parent", []string{"proj/foo", "proj/foo/a", "proj/src/utils", "proj"}, &lsutil.UserPreferences{ImportModuleSpecifierPreference: "non-relative"})
f.VerifyImportFixModuleSpecifiers(t, "sibling", []string{"proj/foo/a", "proj/src/utils", "proj", "proj/foo"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative"}})
f.VerifyImportFixModuleSpecifiers(t, "parent", []string{"proj/foo", "proj/foo/a", "proj/src/utils", "proj"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierPreference: "non-relative"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ A/*parent*/
export * from "./a";`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "sibling", []string{"./a", "./index", "../index"}, &lsutil.UserPreferences{ImportModuleSpecifierEnding: "index"})
f.VerifyImportFixModuleSpecifiers(t, "parent", []string{"../foo/a", "../foo/index", "../index"}, &lsutil.UserPreferences{ImportModuleSpecifierEnding: "index"})
f.VerifyImportFixModuleSpecifiers(t, "sibling", []string{"./a", "./index", "../index"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierEnding: "index"}})
f.VerifyImportFixModuleSpecifiers(t, "parent", []string{"../foo/a", "../foo/index", "../index"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierEnding: "index"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@ export function helloWorld() {}
helloWorld/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"#internals/example"}, &lsutil.UserPreferences{ImportModuleSpecifierEnding: "js"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"#internals/example"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierEnding: "js"}})
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,5 @@ import {} from "unified";
x/**/`
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyImportFixModuleSpecifiers(t, "", []string{"unified", "unified/types/ts3.444/index.js"}, &lsutil.UserPreferences{ImportModuleSpecifierEnding: "js"})
f.VerifyImportFixModuleSpecifiers(t, "", []string{"unified", "unified/types/ts3.444/index.js"}, &lsutil.UserPreferences{ModuleSpecifier: lsutil.ModuleSpecifierUserPreferences{ImportModuleSpecifierEnding: "js"}})
}
Loading
Loading