From ead9dfbdbddf1c5a1a52687380d659dd6cda3c41 Mon Sep 17 00:00:00 2001 From: Armando Aguirre Date: Tue, 24 Aug 2021 14:54:19 -0700 Subject: [PATCH] Fixed JS completions type spread (#45484) * Fix and updated tests * Added test * Revert "Fix and updated tests" This reverts commit 33829fa4a4a4cc0b54d3793ced9a31fa42930e3a. * Filter out empty access expression * PR feedback --- src/services/completions.ts | 11 +++++++---- tests/cases/fourslash/getJavaScriptCompletions22.ts | 12 ++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 tests/cases/fourslash/getJavaScriptCompletions22.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index 77dda768290bd..8f1ef686fb29a 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1338,13 +1338,16 @@ namespace ts.Completions { case SyntaxKind.PropertyAccessExpression: propertyAccessToConvert = parent as PropertyAccessExpression; node = propertyAccessToConvert.expression; - if ((isCallExpression(node) || isFunctionLike(node)) && - node.end === contextToken.pos && - node.getChildCount(sourceFile) && - last(node.getChildren(sourceFile)).kind !== SyntaxKind.CloseParenToken) { + const leftmostAccessExpression = getLeftmostAccessExpression(propertyAccessToConvert); + if (nodeIsMissing(leftmostAccessExpression) || + ((isCallExpression(node) || isFunctionLike(node)) && + node.end === contextToken.pos && + node.getChildCount(sourceFile) && + last(node.getChildren(sourceFile)).kind !== SyntaxKind.CloseParenToken)) { // This is likely dot from incorrectly parsed expression and user is starting to write spread // eg: Math.min(./**/) // const x = function (./**/) {} + // ({./**/}) return undefined; } break; diff --git a/tests/cases/fourslash/getJavaScriptCompletions22.ts b/tests/cases/fourslash/getJavaScriptCompletions22.ts new file mode 100644 index 0000000000000..86f82a346eeb5 --- /dev/null +++ b/tests/cases/fourslash/getJavaScriptCompletions22.ts @@ -0,0 +1,12 @@ +/// + +// Regresion test for GH#45436 + +// @allowNonTsExtensions: true +// @Filename: file.js +//// const abc = {}; +//// ({./*1*/}); + +goTo.marker('1'); +edit.insert('.'); +verify.completions({ exact: undefined });