diff --git a/src/services/completions.ts b/src/services/completions.ts index 8b9228d3441ad..39218123dbbee 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -956,12 +956,13 @@ namespace ts.Completions { case SyntaxKind.PropertyAccessExpression: propertyAccessToConvert = parent as PropertyAccessExpression; node = propertyAccessToConvert.expression; - if (node.end === contextToken.pos && - isCallExpression(node) && + if ((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 call expression and user is starting to write spread + // 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/completionWritingSpreadLikeArgument.ts b/tests/cases/fourslash/completionWritingSpreadLikeArgument.ts new file mode 100644 index 0000000000000..3777c1d4e1a91 --- /dev/null +++ b/tests/cases/fourslash/completionWritingSpreadLikeArgument.ts @@ -0,0 +1,33 @@ +/// + +////const t0 = { +//// x: function (./*0*/) {} +////} +////const t1 = { +//// x: (./*1*/) => {} +////} +////const t2 = { +//// x: function foo(./*2*/) => {} +////} +////const t3 = { +//// x(./*3*/) {} +////} +//// +////const t4 = function (./*4*/) {} +////const t5 = (./*5*/) => {} +////function t6(./*6*/) {} +//// +////class Foo { +//// m(./*7*/) {} +////} + +for (const marker of test.markers()) { + goTo.marker(marker); + verify.completions({ exact: undefined }); + + edit.insert("."); + verify.completions({ exact: undefined }); + + edit.insert("."); + verify.completions({ exact: undefined }); +}