diff --git a/internal/fourslash/_scripts/failingTests.txt b/internal/fourslash/_scripts/failingTests.txt index f9a29650fd0..65f4002153e 100644 --- a/internal/fourslash/_scripts/failingTests.txt +++ b/internal/fourslash/_scripts/failingTests.txt @@ -556,7 +556,6 @@ TestSignatureHelpCallExpressionJs TestSpaceAfterReturn TestStringCompletionsImportOrExportSpecifier TestStringCompletionsVsEscaping -TestStringLiteralCompletionsWithinInferredObjectWhenItsKeysAreUsedOutsideOfIt TestSuggestionOfUnusedVariableWithExternalModule TestSymbolCompletionLowerPriority TestSyntheticImportFromBabelGeneratedFile1 @@ -570,7 +569,6 @@ TestTsxQuickInfo5 TestTsxQuickInfo6 TestTsxQuickInfo7 TestTypeCheckAfterResolve -TestTypeErrorAfterStringCompletionsInNestedCall TestTypeOperatorNodeBuilding TestUnclosedStringLiteralAutoformating TestWhiteSpaceTrimming diff --git a/internal/fourslash/_scripts/manualTests.txt b/internal/fourslash/_scripts/manualTests.txt index 4b7241b890a..a9b25dda2ae 100644 --- a/internal/fourslash/_scripts/manualTests.txt +++ b/internal/fourslash/_scripts/manualTests.txt @@ -124,3 +124,4 @@ stringLiteralCompletionsInPositionTypedUsingRest tripleSlashRefPathCompletionAbsolutePaths tripleSlashRefPathCompletionHiddenFile tsxCompletion12 +typeErrorAfterStringCompletionsInNestedCall diff --git a/internal/fourslash/tests/gen/typeErrorAfterStringCompletionsInNestedCall_test.go b/internal/fourslash/tests/manual/typeErrorAfterStringCompletionsInNestedCall_test.go similarity index 98% rename from internal/fourslash/tests/gen/typeErrorAfterStringCompletionsInNestedCall_test.go rename to internal/fourslash/tests/manual/typeErrorAfterStringCompletionsInNestedCall_test.go index 58dedfae0c3..78d03acaeb3 100644 --- a/internal/fourslash/tests/gen/typeErrorAfterStringCompletionsInNestedCall_test.go +++ b/internal/fourslash/tests/manual/typeErrorAfterStringCompletionsInNestedCall_test.go @@ -10,7 +10,6 @@ import ( ) func TestTypeErrorAfterStringCompletionsInNestedCall(t *testing.T) { - fourslash.SkipIfFailing(t) t.Parallel() defer testutil.RecoverAndFail(t, "Panic on fourslash test") const content = `// @stableTypeOrdering: true @@ -49,8 +48,8 @@ createMachine({ }, Items: &fourslash.CompletionsExpectedItems{ Exact: []fourslash.CompletionsExpectedItem{ - "ALOHAx", "ALOHA", + "ALOHAx", "LUNCH_TIME", "MORNING", }, diff --git a/internal/ls/string_completions.go b/internal/ls/string_completions.go index 8a3a06b0a8e..d65036c147a 100644 --- a/internal/ls/string_completions.go +++ b/internal/ls/string_completions.go @@ -281,11 +281,13 @@ func (l *LanguageService) getStringLiteralCompletionEntries( fromProperties: stringLiteralCompletionsForObjectLiteral(typeChecker, parent.Parent), } } - result := fromContextualType(checker.ContextFlagsCompletions, node, typeChecker) - if result != nil { - return &stringLiteralCompletions{ - fromTypes: result, - } + if ast.FindAncestor(parent.Parent, ast.IsCallLikeExpression) != nil { + uniques := &collections.Set[string]{} + stringLiteralTypes := append( + getStringLiteralTypes(typeChecker.GetContextualType(node, checker.ContextFlagsNone), uniques, typeChecker), + getStringLiteralTypes(typeChecker.GetContextualType(node, checker.ContextFlagsCompletions), uniques, typeChecker)..., + ) + return toStringLiteralCompletionsFromTypes(stringLiteralTypes) } return &stringLiteralCompletions{ fromTypes: fromContextualType(checker.ContextFlagsNone, node, typeChecker), @@ -421,7 +423,10 @@ func (l *LanguageService) getStringLiteralCompletionEntries( func fromContextualType(contextFlags checker.ContextFlags, node *ast.Node, typeChecker *checker.Checker) *completionsFromTypes { // Get completion for string literal from string literal type // i.e. var x: "hi" | "hello" = "/*completion position*/" - types := getStringLiteralTypes(getContextualTypeFromParent(node, typeChecker, contextFlags), nil, typeChecker) + return toCompletionsFromTypes(getStringLiteralTypes(getContextualTypeFromParent(node, typeChecker, contextFlags), nil, typeChecker)) +} + +func toCompletionsFromTypes(types []*checker.StringLiteralType) *completionsFromTypes { if len(types) == 0 { return nil } @@ -431,6 +436,16 @@ func fromContextualType(contextFlags checker.ContextFlags, node *ast.Node, typeC } } +func toStringLiteralCompletionsFromTypes(types []*checker.StringLiteralType) *stringLiteralCompletions { + result := toCompletionsFromTypes(types) + if result == nil { + return nil + } + return &stringLiteralCompletions{ + fromTypes: result, + } +} + func fromUnionableLiteralType( grandparent *ast.Node, parent *ast.Node,