@@ -570,8 +570,8 @@ namespace ts {
570
570
getFullyQualifiedName,
571
571
getResolvedSignature: (node, candidatesOutArray, argumentCount) =>
572
572
getResolvedSignatureWorker(node, candidatesOutArray, argumentCount, CheckMode.Normal),
573
- getResolvedSignatureForStringLiteralCompletions: (node, candidatesOutArray, argumentCount, argumentIndex ) =>
574
- getResolvedSignatureWorker(node, candidatesOutArray, argumentCount, CheckMode.Normal, argumentIndex ),
573
+ getResolvedSignatureForStringLiteralCompletions: (node, candidatesOutArray, editingArgument ) =>
574
+ getResolvedSignatureWorker(node, candidatesOutArray, /* argumentCount*/ undefined , CheckMode.Normal, editingArgument ),
575
575
getResolvedSignatureForSignatureHelp: (node, candidatesOutArray, argumentCount) =>
576
576
getResolvedSignatureWorker(node, candidatesOutArray, argumentCount, CheckMode.IsForSignatureHelp),
577
577
getExpandedParameters,
@@ -741,29 +741,37 @@ namespace ts {
741
741
getMemberOverrideModifierStatus,
742
742
};
743
743
744
- function getResolvedSignatureWorker(nodeIn: CallLikeExpression, candidatesOutArray: Signature[] | undefined, argumentCount: number | undefined, checkMode: CheckMode, argumentIndex ?: number ): Signature | undefined {
744
+ function getResolvedSignatureWorker(nodeIn: CallLikeExpression, candidatesOutArray: Signature[] | undefined, argumentCount: number | undefined, checkMode: CheckMode, editingArgument ?: Node ): Signature | undefined {
745
745
let node = getParseTreeNode(nodeIn, isCallLikeExpression);
746
- if (node && argumentIndex !== undefined) {
746
+ if (node && editingArgument !== undefined) {
747
747
const replacementArg = setParentRecursive(factory.createAsExpression(factory.createStringLiteral(""), factory.createKeywordTypeNode(SyntaxKind.UnknownKeyword)), /*incremental*/ false);
748
748
switch (node.kind) {
749
749
case SyntaxKind.CallExpression:
750
- node = factory.updateCallExpression(node, node.expression, node.typeArguments, [
751
- ...node.arguments.slice(0, argumentIndex),
752
- replacementArg,
753
- ...node.arguments.slice(argumentIndex + 1),
754
- ]);
750
+ node = factory.updateCallExpression(node, node.expression, node.typeArguments, node.arguments.map(arg => {
751
+ return arg === editingArgument ? replacementArg : arg;
752
+ }));
753
+ setParent(replacementArg, node);
755
754
break;
756
755
case SyntaxKind.NewExpression:
757
- node = factory.updateNewExpression(node, node.expression, node.typeArguments, [
758
- ...node.arguments?.slice(0, argumentIndex) || emptyArray,
759
- replacementArg,
760
- ...node.arguments?.slice(argumentIndex + 1) || emptyArray,
761
- ]);
756
+ node = factory.updateNewExpression(node, node.expression, node.typeArguments, map(node.arguments, arg => {
757
+ return arg === editingArgument ? replacementArg : arg;
758
+ }));
759
+ setParent(replacementArg, node);
760
+ break;
761
+ case SyntaxKind.JsxOpeningElement:
762
+ case SyntaxKind.JsxSelfClosingElement:
763
+ const replacementExpr = factory.createJsxExpression(/*dotDotDotToken*/ undefined, replacementArg);
764
+ node = factory.updateJsxOpeningLikeElement(node, node.tagName, node.typeArguments, factory.updateJsxAttributes(node.attributes, map(node.attributes.properties, attr => {
765
+ return tryCast(attr, isJsxAttribute)?.initializer === editingArgument
766
+ ? setParent(factory.updateJsxAttribute(attr as JsxAttribute, (attr as JsxAttribute).name, setParent(replacementExpr, attr)), attr.parent)
767
+ : attr;
768
+ })));
769
+ setParent(replacementArg, replacementExpr);
770
+ setParent(node.attributes, node);
762
771
break;
763
772
default:
764
773
Debug.failBadSyntaxKind(node);
765
774
}
766
- setParent(replacementArg, node);
767
775
setParent(node, nodeIn.parent);
768
776
}
769
777
apparentArgumentCount = argumentCount;
0 commit comments