Shortcomings in computing diagnostics for extension methods #24787
Labels
Area-Compilers
Bug
Concept-Design Debt
Engineering Debt, Design Debt, or poor product code quality
Concept-Diagnostic Clarity
The issues deals with the ease of understanding of errors and warnings.
help wanted
The issue is "up for grabs" - add a comment if you are interested in working on it
Milestone
I was recently implementing support for dotnet/csharplang#98 and discovered a regression in the quality of diagnostic for the situation in test
DelegatesFromInvalidOverloads
.It is caused by a combination of two shortcomings in the computation of diagnostics. First, in
BindExtensionMethod
when we fail to find an applicable extension method, we only report a diagnostic for the first extension method group that failed, even if some other extension method group contains a much better candidate. In the case of this test the first extension method group contains a method with the wrong number of parameters, while the second one has an extension method that fails only because of its return type mismatch.Second, in
OverloadResolutionResult<TMember>.ReportDiagnostics<T>
, we do not report a diagnostic for the failureMemberResolutionKind.NoCorrespondingParameter
, leaving it to the caller to notice that we failed to produce a diagnostic (the caller has to grub through the diagnostic bag to see that there is no error there) and then the caller has to produce a generic error message, which we see below. It does not appear that all callers have that test, though, suggesting there may be a latent bug of missing diagnostics.The text was updated successfully, but these errors were encountered: