Skip to content

Commit b85796c

Browse files
committed
Retain related info for 1-overloads
1 parent ef0a875 commit b85796c

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

src/compiler/checker.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11672,8 +11672,8 @@ namespace ts {
1167211672
}
1167311673

1167411674
function checkTypeRelatedToAndOptionallyElaborate(source: Type, target: Type, relation: Map<RelationComparisonResult>, errorNode: Node | undefined, expr: Expression | undefined, headMessage?: DiagnosticMessage, containingMessageChain?: () => DiagnosticMessageChain | undefined): boolean;
11675-
function checkTypeRelatedToAndOptionallyElaborate(source: Type, target: Type, relation: Map<RelationComparisonResult>, errorNode: Node | undefined, expr: Expression | undefined, headMessage?: DiagnosticMessage, containingMessageChain?: () => DiagnosticMessageChain | undefined, breakdown?: boolean): [Node, DiagnosticMessageChain] | false;
11676-
function checkTypeRelatedToAndOptionallyElaborate(source: Type, target: Type, relation: Map<RelationComparisonResult>, errorNode: Node | undefined, expr: Expression | undefined, headMessage?: DiagnosticMessage, containingMessageChain?: () => DiagnosticMessageChain | undefined, breakdown?: boolean): boolean | [Node, DiagnosticMessageChain] {
11675+
function checkTypeRelatedToAndOptionallyElaborate(source: Type, target: Type, relation: Map<RelationComparisonResult>, errorNode: Node | undefined, expr: Expression | undefined, headMessage?: DiagnosticMessage, containingMessageChain?: () => DiagnosticMessageChain | undefined, breakdown?: boolean): [Node, DiagnosticMessageChain, DiagnosticRelatedInformation[]?] | false;
11676+
function checkTypeRelatedToAndOptionallyElaborate(source: Type, target: Type, relation: Map<RelationComparisonResult>, errorNode: Node | undefined, expr: Expression | undefined, headMessage?: DiagnosticMessage, containingMessageChain?: () => DiagnosticMessageChain | undefined, breakdown?: boolean): boolean | [Node, DiagnosticMessageChain, DiagnosticRelatedInformation[]?] {
1167711677
if (isTypeRelatedTo(source, target, relation)) return breakdown ? false : true;
1167811678
if (!errorNode || !elaborateError(expr, source, target, relation, headMessage)) {
1167911679
return checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain, undefined, breakdown);
@@ -12361,7 +12361,7 @@ namespace ts {
1236112361
containingMessageChain?: () => DiagnosticMessageChain | undefined,
1236212362
errorOutputContainer?: { error?: Diagnostic },
1236312363
breakdown?: boolean
12364-
): false | [Node, DiagnosticMessageChain];
12364+
): false | [Node, DiagnosticMessageChain, DiagnosticRelatedInformation[]?];
1236512365
/**
1236612366
* Checks if 'source' is related to 'target' (e.g.: is a assignable to).
1236712367
* @param source The left-hand-side of the relation.
@@ -12381,7 +12381,7 @@ namespace ts {
1238112381
containingMessageChain?: () => DiagnosticMessageChain | undefined,
1238212382
errorOutputContainer?: { error?: Diagnostic },
1238312383
breakdown?: boolean
12384-
): boolean | [Node, DiagnosticMessageChain] {
12384+
): boolean | [Node, DiagnosticMessageChain, DiagnosticRelatedInformation[]?] {
1238512385
let errorInfo: DiagnosticMessageChain | undefined;
1238612386
let relatedInfo: [DiagnosticRelatedInformation, ...DiagnosticRelatedInformation[]] | undefined;
1238712387
let maybeKeys: string[];
@@ -12421,7 +12421,7 @@ namespace ts {
1242112421
}
1242212422
}
1242312423
if (breakdown) {
12424-
return [errorNode!, errorInfo];
12424+
return [errorNode!, errorInfo, relatedInfo ? [...(relatedInformation || []), ...relatedInfo]: relatedInformation];
1242512425
}
1242612426
const diag = createDiagnosticForNodeFromMessageChain(errorNode!, errorInfo, relatedInformation);
1242712427
if (relatedInfo) {
@@ -21129,9 +21129,6 @@ namespace ts {
2112921129
return checkTypeRelatedToAndOptionallyElaborate(attributesType, paramType, relation, reportErrors ? node.tagName : undefined, node.attributes, undefined, undefined, /*breakdown*/ true);
2113021130
}
2113121131

21132-
// TODO: This function is only used in overload resolution; it should instead return a [errorNode, messageChain] pair if there is a failure and undefined if not
21133-
// The first-round callers can used undefined=pass and the second-round callers can build their own errors from the pair.
21134-
// TODO: Still need to thread BREAKDOWN through checkTypeRealtedToAndOptionallyElaborate and all other checkType calls
2113521132
function getSignatureApplicabilityError(
2113621133
node: CallLikeExpression,
2113721134
args: ReadonlyArray<Expression>,
@@ -21518,19 +21515,19 @@ namespace ts {
2151821515
chain = chainDiagnosticMessages(chain, Diagnostics.Failed_to_find_a_suitable_overload_for_this_call_from_0_overloads, candidatesForArgumentError.length);
2151921516
}
2152021517
const r = getSignatureApplicabilityError(node, args, last, assignableRelation, CheckMode.Normal, /*reportErrors*/ true, () => chain);
21521-
Debug.assert(!!r && !!r[0]);
21518+
Debug.assert(!!r && !!r[0], "No error for last signature");
2152221519
if (r) {
21523-
diagnostics.add(createDiagnosticForNodeFromMessageChain(r[0], r[1], undefined));
21520+
diagnostics.add(createDiagnosticForNodeFromMessageChain(...r));
2152421521
}
2152521522
}
2152621523
else {
2152721524
const related: DiagnosticRelatedInformation[] = [];
2152821525
for (const c of candidatesForArgumentError) {
2152921526
const chain = chainDiagnosticMessages(undefined, Diagnostics.Overload_0_gave_the_following_error, signatureToString(c));
2153021527
const r = getSignatureApplicabilityError(node, args, c, assignableRelation, CheckMode.Normal, /*reportErrors*/ true, () => chain);
21531-
Debug.assert(!!r && !!r[0]);
21528+
Debug.assert(!!r && !!r[0], "No error for signature (1)");
2153221529
if (r) {
21533-
related.push(createDiagnosticForNodeFromMessageChain(r[0], r[1]));
21530+
related.push(createDiagnosticForNodeFromMessageChain(...r));
2153421531
}
2153521532
}
2153621533
diagnostics.add(createDiagnosticForNodeFromMessageChain(node, chainDiagnosticMessages(undefined, Diagnostics.Failed_to_find_a_suitable_overload_for_this_call_from_0_overloads, candidatesForArgumentError.length), related));

0 commit comments

Comments
 (0)