Share code a bit better

This commit is contained in:
Nathan Shively-Sanders 2019-06-20 15:40:29 -07:00
parent afecb87d3f
commit ef0a8759bd
2 changed files with 24 additions and 12 deletions

View file

@ -21510,22 +21510,30 @@ namespace ts {
// skip the checkApplicableSignature check. // skip the checkApplicableSignature check.
if (reportErrors) { if (reportErrors) {
if (candidatesForArgumentError) { if (candidatesForArgumentError) {
if (candidatesForArgumentError.length > 3) { if (candidatesForArgumentError.length === 1 || candidatesForArgumentError.length > 3) {
const c = candidatesForArgumentError[candidatesForArgumentError.length - 1]; const last = candidatesForArgumentError[candidatesForArgumentError.length - 1];
const chain = chainDiagnosticMessages(undefined, Diagnostics.Failed_to_find_a_suitable_overload_for_this_call_from_the_0_closest_overloads, candidatesForArgumentError.length); let chain: DiagnosticMessageChain | undefined = undefined;
if (candidatesForArgumentError.length > 3) {
getSignatureApplicabilityError(node, args, c, assignableRelation, CheckMode.Normal, /*reportErrors*/ true, () => chain); chain = chainDiagnosticMessages(chain, Diagnostics.The_last_overload_gave_the_following_error);
chain = chainDiagnosticMessages(chain, Diagnostics.Failed_to_find_a_suitable_overload_for_this_call_from_0_overloads, candidatesForArgumentError.length);
}
const r = getSignatureApplicabilityError(node, args, last, assignableRelation, CheckMode.Normal, /*reportErrors*/ true, () => chain);
Debug.assert(!!r && !!r[0]);
if (r) {
diagnostics.add(createDiagnosticForNodeFromMessageChain(r[0], r[1], undefined));
}
} }
else { else {
const related: DiagnosticRelatedInformation[] = []; const related: DiagnosticRelatedInformation[] = [];
const close = candidatesForArgumentError.filter(c => getMinArgumentCount(c) <= args.length && args.length <= getParameterCount(c)); for (const c of candidatesForArgumentError) {
for (const c of close) {
const chain = chainDiagnosticMessages(undefined, Diagnostics.Overload_0_gave_the_following_error, signatureToString(c)); const chain = chainDiagnosticMessages(undefined, Diagnostics.Overload_0_gave_the_following_error, signatureToString(c));
const r = getSignatureApplicabilityError(node, args, c, assignableRelation, CheckMode.Normal, /*reportErrors*/ true, () => chain); const r = getSignatureApplicabilityError(node, args, c, assignableRelation, CheckMode.Normal, /*reportErrors*/ true, () => chain);
if (!r || !r[0]) continue; // TODO:assert! Debug.assert(!!r && !!r[0]);
related.push(createDiagnosticForNodeFromMessageChain(r[0], r[1])); if (r) {
related.push(createDiagnosticForNodeFromMessageChain(r[0], r[1]));
}
} }
diagnostics.add(createDiagnosticForNodeFromMessageChain(node, chainDiagnosticMessages(undefined, Diagnostics.Failed_to_find_a_suitable_overload_for_this_call_from_the_0_closest_overloads, close.length), related)); diagnostics.add(createDiagnosticForNodeFromMessageChain(node, chainDiagnosticMessages(undefined, Diagnostics.Failed_to_find_a_suitable_overload_for_this_call_from_0_overloads, candidatesForArgumentError.length), related));
} }
} }
else if (candidateForArgumentArityError) { else if (candidateForArgumentArityError) {

View file

@ -2621,14 +2621,18 @@
"category": "Error", "category": "Error",
"code": 2754 "code": 2754
}, },
"Failed to find a suitable overload for this call from the {0} closest overloads.": { "Failed to find a suitable overload for this call from {0} overloads.": {
"category": "Error", "category": "Error",
"code": 2755 "code": 2755
}, },
"Overload '{0}' gave the following error.": { "The last overload gave the following error.": {
"category": "Error", "category": "Error",
"code": 2756 "code": 2756
}, },
"Overload '{0}' gave the following error.": {
"category": "Error",
"code": 2757
},
"Import declaration '{0}' is using private name '{1}'.": { "Import declaration '{0}' is using private name '{1}'.": {
"category": "Error", "category": "Error",