diff --git a/src/services/completions.ts b/src/services/completions.ts index 285095e727a0c..ef16b782c2971 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 });