From 49a12dcbbbf974c98885cefe5ec9659166bd9d7b Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Fri, 25 Mar 2022 00:30:26 +0200 Subject: [PATCH] fix(47081): show completion list in parenthesized object literal arguments (#47104) --- src/services/completions.ts | 9 +++++++-- .../fourslash/completionListInObjectLiteral7.ts | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/completionListInObjectLiteral7.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index 9fbbdfd339e..4af2079616e 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -3913,9 +3913,14 @@ namespace ts.Completions { if (type) { return type; } - if (isBinaryExpression(node.parent) && node.parent.operatorToken.kind === SyntaxKind.EqualsToken && node === node.parent.left) { + const parent = walkUpParenthesizedExpressions(node.parent); + if (isBinaryExpression(parent) && parent.operatorToken.kind === SyntaxKind.EqualsToken && node === parent.left) { // Object literal is assignment pattern: ({ | } = x) - return typeChecker.getTypeAtLocation(node.parent); + return typeChecker.getTypeAtLocation(parent); + } + if (isExpression(parent)) { + // f(() => (({ | }))); + return typeChecker.getContextualType(parent); } return undefined; } diff --git a/tests/cases/fourslash/completionListInObjectLiteral7.ts b/tests/cases/fourslash/completionListInObjectLiteral7.ts new file mode 100644 index 00000000000..6f933ffb470 --- /dev/null +++ b/tests/cases/fourslash/completionListInObjectLiteral7.ts @@ -0,0 +1,17 @@ +/// + +////type Foo = { foo: boolean }; +////function f(shape: Foo): any; +////function f(shape: () => Foo): any; +////function f(arg: any) { +//// return arg; +////} +//// +////f({ /*1*/ }); +////f(() => ({ /*2*/ })); +////f(() => (({ /*3*/ }))); + +verify.completions({ + marker: ["1", "2", "3"], + exact: ["foo"] +});