Skip to content

Commit

Permalink
Check auto-import completion for spread assignment (microsoft#56247)
Browse files Browse the repository at this point in the history
Co-authored-by: Daniel Rosenwasser <[email protected]>
  • Loading branch information
2 people authored and c0sta committed Dec 20, 2023
1 parent 899ddf4 commit cfbb206
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 6 deletions.
5 changes: 0 additions & 5 deletions src/services/completions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3424,7 +3424,6 @@ function getCompletionData(

const semanticStart = timestamp();
let completionKind = CompletionKind.None;
let isNonContextualObjectLiteral = false;
let hasUnresolvedAutoImports = false;
// This also gets mutated in nested-functions after the return
let symbols: Symbol[] = [];
Expand Down Expand Up @@ -3894,8 +3893,6 @@ function getCompletionData(
function shouldOfferImportCompletions(): boolean {
// If already typing an import statement, provide completions for it.
if (importStatementCompletion) return true;
// If current completion is for non-contextual Object literal shortahands, ignore auto-import symbols
if (isNonContextualObjectLiteral) return false;
// If not already a module, must have modules enabled.
if (!preferences.includeCompletionsForModuleExports) return false;
// If already using ES modules, OK to continue using them.
Expand Down Expand Up @@ -4340,7 +4337,6 @@ function getCompletionData(
if (objectLikeContainer.flags & NodeFlags.InWithStatement) {
return GlobalsSearch.Fail;
}
isNonContextualObjectLiteral = true;
return GlobalsSearch.Continue;
}
const completionsType = typeChecker.getContextualType(objectLikeContainer, ContextFlags.Completions);
Expand All @@ -4353,7 +4349,6 @@ function getCompletionData(
if (typeMembers.length === 0) {
// Edge case: If NumberIndexType exists
if (!hasNumberIndextype) {
isNonContextualObjectLiteral = true;
return GlobalsSearch.Continue;
}
}
Expand Down
70 changes: 70 additions & 0 deletions tests/cases/fourslash/completionForObjectProperty.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/// <reference path="fourslash.ts" />

// @Filename: /a.ts
//// export const foo = { bar: 'baz' };

// @Filename: /b.ts
//// const test = foo/*1*/

// @Filename: /c.ts
//// const test2 = {...foo/*2*/}

// @Filename: /d.ts
//// const test3 = [{...foo/*3*/}]

// @Filename: /e.ts
//// const test4 = { foo/*4*/ }

// @Filename: /f.ts
//// const test5 = { foo: /*5*/ }

// @Filename: /g.ts
//// const test6 = { unrelated: foo/*6*/ }

// @Filename: /i.ts
//// const test7: { foo/*7*/: "unrelated" }

// @Filename: /h.ts
//// const test8: { foo: string } = { foo/*8*/ }

verify.completions({
marker: "1",
includes: { name: "foo", source: "/a", hasAction: true, sortText: completion.SortText.AutoImportSuggestions },
isNewIdentifierLocation: true,
preferences: { includeCompletionsForModuleExports: true }
}, {
marker: "2",
includes: { name: "foo", source: "/a", hasAction: true, sortText: completion.SortText.AutoImportSuggestions },
isNewIdentifierLocation: false,
preferences: { includeCompletionsForModuleExports: true }
}, {
marker: "3",
includes: { name: "foo", source: "/a", hasAction: true, sortText: completion.SortText.AutoImportSuggestions },
isNewIdentifierLocation: false,
preferences: { includeCompletionsForModuleExports: true }
}, {
marker: "4",
includes: { name: "foo", source: "/a", hasAction: true, sortText: completion.SortText.AutoImportSuggestions },
isNewIdentifierLocation: true,
preferences: { includeCompletionsForModuleExports: true }
}, {
marker: "5",
includes: { name: "foo", source: "/a", hasAction: true, sortText: completion.SortText.AutoImportSuggestions },
isNewIdentifierLocation: false,
preferences: { includeCompletionsForModuleExports: true }
}, {
marker: "6",
includes: { name: "foo", source: "/a", hasAction: true, sortText: completion.SortText.AutoImportSuggestions },
isNewIdentifierLocation: false,
preferences: { includeCompletionsForModuleExports: true }
}, {
marker: "7",
excludes: "foo",
isNewIdentifierLocation: true,
preferences: { includeCompletionsForModuleExports: true }
}, {
marker: "8",
includes: { name: "foo", sortText: completion.SortText.LocationPriority },
isNewIdentifierLocation: false,
preferences: { includeCompletionsForModuleExports: true }
});
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

verify.completions({
marker: "",
exact: completion.globalsPlus(["foo"]),
includes: { name: "exportedConstant", source: "/a", hasAction: true, sortText: completion.SortText.AutoImportSuggestions },
isNewIdentifierLocation: true,
preferences: { includeCompletionsForModuleExports: true },
});

0 comments on commit cfbb206

Please sign in to comment.