diff --git a/tsc/internal/fourslash/tests/completionsInEmptyTupleType_test.go b/tsc/internal/fourslash/tests/completionsInEmptyTupleType_test.go new file mode 100644 index 0000000000000..7462d911ce262 --- /dev/null +++ b/tsc/internal/fourslash/tests/completionsInEmptyTupleType_test.go @@ -0,0 +1,54 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/fourslash" + . "github.com/microsoft/TypeScript/tsc/internal/fourslash/tests/util" + "github.com/microsoft/TypeScript/tsc/internal/testutil" +) + +func TestCompletionsInEmptyTupleType(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `type UserTuple = [["name", string], ["age", number], ["address", string]]; +type AdminTuple = [/*1*/]; +type OtherTuple = [string, /*2*/]; +type QueryTuple = [typeof /*3*/]; + +const User: UserTuple = [["name", "2333"], ["age", 2333], ["address", "2333"]];` + f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) + defer done() + f.VerifyCompletions(t, []string{"1", "2"}, &fourslash.CompletionsExpectedList{ + IsIncomplete: false, + ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ + CommitCharacters: &DefaultCommitCharacters, + EditRange: Ignored, + }, + Items: &fourslash.CompletionsExpectedItems{ + Includes: []fourslash.CompletionsExpectedItem{ + "UserTuple", + }, + Excludes: []string{ + "User", + }, + }, + }) + + // After `typeof` in a tuple type we are back in a value location, so type-only symbols shouldn't be offered. + f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{ + IsIncomplete: false, + ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{ + CommitCharacters: &DefaultCommitCharacters, + EditRange: Ignored, + }, + Items: &fourslash.CompletionsExpectedItems{ + Includes: []fourslash.CompletionsExpectedItem{ + "User", + }, + Excludes: []string{ + "UserTuple", + }, + }, + }) +} diff --git a/tsc/internal/ls/completions.go b/tsc/internal/ls/completions.go index 2aef35353d1b1..1606b5e13f05a 100644 --- a/tsc/internal/ls/completions.go +++ b/tsc/internal/ls/completions.go @@ -3361,6 +3361,8 @@ func isContextTokenTypeLocation(contextToken *ast.Node) bool { return parentKind == ast.KindTypeParameter case ast.KindSatisfiesKeyword: return parentKind == ast.KindSatisfiesExpression + case ast.KindOpenBracketToken, ast.KindCommaToken: + return parentKind == ast.KindTupleType } } return false