Skip to content
Open
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
10d3a93
added userpref gating for package.json auto imports
johnfav03 Oct 2, 2025
50f4996
removed from modulespecifiers
johnfav03 Oct 3, 2025
fb5e4c6
readd modulespecifiers and remove uint8 type
johnfav03 Oct 3, 2025
994f144
resolved merge with main
johnfav03 Oct 3, 2025
bc76488
updated types.go
johnfav03 Oct 3, 2025
a393ad3
Revert "Merge branch 'auto-imports-user-prefs' of github.com:johnfav0…
johnfav03 Oct 3, 2025
5a2f812
fixed build issue
johnfav03 Oct 3, 2025
e5d159c
base impl for allowRenameOfImportPath
johnfav03 Oct 9, 2025
77d48cb
Merge remote-tracking branch 'origin/main' into auto-imports-user-prefs
johnfav03 Oct 9, 2025
a47163a
merged main
johnfav03 Oct 31, 2025
ed180a7
Merge remote-tracking branch 'origin/main' into auto-imports-user-prefs
johnfav03 Oct 31, 2025
ef336de
fixed circular import
johnfav03 Nov 10, 2025
159f8ee
added moduleSpecifierEnding tests
johnfav03 Nov 11, 2025
693293c
accepted baselines
johnfav03 Nov 11, 2025
aaa3344
added testing for moduleSpecifierPreferences
johnfav03 Nov 11, 2025
b8d42ed
Merge remote-tracking branch 'origin/main' into auto-imports-user-prefs
johnfav03 Nov 11, 2025
241f86b
added countPathComponents to fix completionsImportBaseUrl_test
johnfav03 Nov 13, 2025
691e397
added test and baseline for includePackageJsonAutoImports
johnfav03 Nov 13, 2025
13cd47d
Merge remote-tracking branch 'origin/main' into auto-imports-user-prefs
johnfav03 Nov 13, 2025
538523a
updated failing tests
johnfav03 Nov 13, 2025
c6f595e
removed all logic for packageJsonAutoImports
johnfav03 Nov 13, 2025
024607e
minor fix
johnfav03 Nov 13, 2025
7a949d8
added logic and test for autoImportFileExcludePatterns
johnfav03 Nov 14, 2025
3b4613f
added test for autoImportSpecifierExcludeRegexes
johnfav03 Nov 14, 2025
4ffec53
added baseline
johnfav03 Nov 14, 2025
76824fa
Merge remote-tracking branch 'origin/main' into auto-imports-user-prefs
johnfav03 Nov 14, 2025
f6f2138
changed allowRenameOfImportPath to tristate and added test case
johnfav03 Nov 17, 2025
1563fd4
Merge remote-tracking branch 'origin/main' into auto-imports-user-prefs
johnfav03 Nov 17, 2025
3a6d88d
changed preferTypeOnlyAutoImports to tristate and added test case
johnfav03 Nov 17, 2025
b163584
fixed countpathcomponents error
johnfav03 Nov 17, 2025
2f31862
fixed rename pref passing
johnfav03 Nov 17, 2025
d48bc8d
removed usecasesensitivefilenames as a parameter
johnfav03 Nov 17, 2025
3cc227e
removed allowRenameOfImportPath from modulespecifiers types
johnfav03 Nov 17, 2025
61b88e7
Merge branch 'main' into auto-imports-user-prefs
johnfav03 Nov 17, 2025
fc72e82
updated failing tests
johnfav03 Nov 17, 2025
0ec24ee
removed baseurl and updated preference test
johnfav03 Nov 21, 2025
7ae74c3
Merge remote-tracking branch 'origin/main' into auto-imports-user-prefs
johnfav03 Nov 21, 2025
82056d6
reupdated failing
johnfav03 Nov 21, 2025
729ee17
removed random rename
johnfav03 Nov 24, 2025
559c2b0
removed extraneous codepath
johnfav03 Nov 24, 2025
a5ccfc3
Merge remote-tracking branch 'upstream/main' into auto-imports-user-p…
johnfav03 Nov 24, 2025
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
5 changes: 5 additions & 0 deletions internal/fourslash/fourslash.go
Original file line number Diff line number Diff line change
Expand Up @@ -2169,6 +2169,11 @@ 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,
AutoImportFileExcludePatterns: f.userPreferences.AutoImportFileExcludePatterns,
AutoImportSpecifierExcludeRegexes: f.userPreferences.AutoImportSpecifierExcludeRegexes,
PreferTypeOnlyAutoImports: f.userPreferences.PreferTypeOnlyAutoImports,
})
defer reset()

Expand Down
53 changes: 53 additions & 0 deletions internal/fourslash/tests/autoImportFileExcludePatterns_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package fourslash_test

import (
"testing"

"github.com/microsoft/typescript-go/internal/core"
"github.com/microsoft/typescript-go/internal/fourslash"
. "github.com/microsoft/typescript-go/internal/fourslash/tests/util"
"github.com/microsoft/typescript-go/internal/ls/lsutil"
"github.com/microsoft/typescript-go/internal/testutil"
)

func TestAutoImportFileExcludePatterns(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @Filename: foo.ts
export const mySymbol = 1;
// @Filename: ignoreme.ts
export const ignoredSymbol = 2;
// @Filename: bar.ts
mySym/*1*/
ignoredSym/*2*/`

f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
f.Configure(t, &lsutil.UserPreferences{
AutoImportFileExcludePatterns: []string{"*ignoreme.ts"},
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
})

// Verify that mySymbol is included, but ignoredSymbol is excluded from completions
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
CommitCharacters: &DefaultCommitCharacters,
EditRange: Ignored,
},
Items: &fourslash.CompletionsExpectedItems{
Includes: []fourslash.CompletionsExpectedItem{"mySymbol"},
},
})
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
CommitCharacters: &DefaultCommitCharacters,
EditRange: Ignored,
},
Items: &fourslash.CompletionsExpectedItems{
Excludes: []string{"ignoredSymbol"},
},
})

// Baseline the auto-imports
f.BaselineAutoImportsCompletions(t, []string{"1", "2"})
}
53 changes: 53 additions & 0 deletions internal/fourslash/tests/autoImportSpecifierExcludeRegexes_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package fourslash_test

import (
"testing"

"github.com/microsoft/typescript-go/internal/core"
"github.com/microsoft/typescript-go/internal/fourslash"
. "github.com/microsoft/typescript-go/internal/fourslash/tests/util"
"github.com/microsoft/typescript-go/internal/ls/lsutil"
"github.com/microsoft/typescript-go/internal/testutil"
)

func TestAutoImportSpecifierExcludeRegexes(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @Filename: foo.ts
export const mySymbol = 1;
// @Filename: ignoreme.ts
export const ignoredSymbol = 2;
// @Filename: bar.ts
mySym/*1*/
ignoredSym/*2*/`

f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
f.Configure(t, &lsutil.UserPreferences{
AutoImportSpecifierExcludeRegexes: []string{".*ignoreme.*"},
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
})

// Verify that mySymbol is included, but ignoredSymbol is excluded from completions
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
CommitCharacters: &DefaultCommitCharacters,
EditRange: Ignored,
},
Items: &fourslash.CompletionsExpectedItems{
Includes: []fourslash.CompletionsExpectedItem{"mySymbol"},
},
})
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
CommitCharacters: &DefaultCommitCharacters,
EditRange: Ignored,
},
Items: &fourslash.CompletionsExpectedItems{
Excludes: []string{"ignoredSymbol"},
},
})

// Baseline the auto-imports
f.BaselineAutoImportsCompletions(t, []string{"1", "2"})
}
48 changes: 48 additions & 0 deletions internal/fourslash/tests/importAllowRenameOfImportPath_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package fourslash_test

import (
"testing"

"github.com/microsoft/typescript-go/internal/core"
"github.com/microsoft/typescript-go/internal/fourslash"
"github.com/microsoft/typescript-go/internal/ls/lsutil"
"github.com/microsoft/typescript-go/internal/testutil"
)

func TestAllowRenameOfImportPath(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @Filename: /a.ts
export const x = 0;
// @Filename: /dir/index.ts
export const x = 0;
// @Filename: /b.ts
import * as a from "./[|a|]";
import * as dir from "./[|dir|]";
import * as dir2 from "./dir/[|index|]";
// @Filename: /c.js
const a = require("./[|a|]");
`

f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
prefsTrue := &lsutil.UserPreferences{
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
AllowRenameOfImportPath: core.TSTrue,
}
prefsFalse := &lsutil.UserPreferences{
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
AllowRenameOfImportPath: core.TSFalse,
}
markers := []string{"a", "dir", "index"}
f.Configure(t, prefsTrue)
f.GoToEachMarker(t, markers, func(marker *fourslash.Marker, index int) {
f.VerifyRenameSucceeded(t, prefsTrue)
})

f.Configure(t, prefsFalse)
f.GoToEachMarker(t, markers, func(marker *fourslash.Marker, index int) {
f.VerifyRenameFailed(t, prefsFalse)
})
}
116 changes: 116 additions & 0 deletions internal/fourslash/tests/importModuleSpecifierEnding_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package fourslash_test

import (
"testing"

"github.com/microsoft/typescript-go/internal/core"
"github.com/microsoft/typescript-go/internal/fourslash"
. "github.com/microsoft/typescript-go/internal/fourslash/tests/util"
"github.com/microsoft/typescript-go/internal/ls/lsutil"
"github.com/microsoft/typescript-go/internal/modulespecifiers"
"github.com/microsoft/typescript-go/internal/testutil"
)

func TestImportModuleSpecifierEndingAuto(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @Filename: /project/helper/index.ts
export const helperFunc = () => {};
// @Filename: /project/index.ts
helper/**/`

f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
f.Configure(t, &lsutil.UserPreferences{
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
ImportModuleSpecifierEnding: modulespecifiers.ImportModuleSpecifierEndingPreferenceAuto,
})
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
CommitCharacters: &DefaultCommitCharacters,
EditRange: Ignored,
},
Items: &fourslash.CompletionsExpectedItems{
Includes: []fourslash.CompletionsExpectedItem{"helperFunc"},
},
})
f.BaselineAutoImportsCompletions(t, []string{""})
}

func TestImportModuleSpecifierEndingMinimal(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @Filename: /project/helper/index.ts
export const helperFunc = () => {};
// @Filename: /project/index.ts
helper/**/`

f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
f.Configure(t, &lsutil.UserPreferences{
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
ImportModuleSpecifierEnding: modulespecifiers.ImportModuleSpecifierEndingPreferenceMinimal,
})
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
CommitCharacters: &DefaultCommitCharacters,
EditRange: Ignored,
},
Items: &fourslash.CompletionsExpectedItems{
Includes: []fourslash.CompletionsExpectedItem{"helperFunc"},
},
})
f.BaselineAutoImportsCompletions(t, []string{""})
}

func TestImportModuleSpecifierEndingIndex(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @Filename: /project/helper/index.ts
export const helperFunc = () => {};
// @Filename: /project/index.ts
helper/**/`

f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
f.Configure(t, &lsutil.UserPreferences{
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
ImportModuleSpecifierEnding: modulespecifiers.ImportModuleSpecifierEndingPreferenceIndex,
})
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
CommitCharacters: &DefaultCommitCharacters,
EditRange: Ignored,
},
Items: &fourslash.CompletionsExpectedItems{
Includes: []fourslash.CompletionsExpectedItem{"helperFunc"},
},
})
f.BaselineAutoImportsCompletions(t, []string{""})
}

func TestImportModuleSpecifierEndingJs(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @Filename: /project/helper/index.ts
export const helperFunc = () => {};
// @Filename: /project/index.ts
helper/**/`

f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
f.Configure(t, &lsutil.UserPreferences{
IncludeCompletionsForModuleExports: core.TSTrue,
IncludeCompletionsForImportStatements: core.TSTrue,
ImportModuleSpecifierEnding: modulespecifiers.ImportModuleSpecifierEndingPreferenceJs,
})
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
CommitCharacters: &DefaultCommitCharacters,
EditRange: Ignored,
},
Items: &fourslash.CompletionsExpectedItems{
Includes: []fourslash.CompletionsExpectedItem{"helperFunc"},
},
})
f.BaselineAutoImportsCompletions(t, []string{""})
}
Loading