On Sat, 2024-12-07 at 10:19 -0500, Jason Merrill wrote: > On 11/15/24 8:02 PM, David Malcolm wrote: > > This patch is a followup to: > > "c++: use diagnostic nesting [PR116253]" > > > > Following Sy Brand's UX suggestions in P2429R0 for example 1, this > > patch > > tweaks print_z_candidates to add a note about the number of > > candidates, > > and adds a candidate number to each one. > > > > Various examples of output can be seen in the testsuite part of the > > patch. > > > > Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. > > OK for trunk? > > > > gcc/cp/ChangeLog: > > * call.cc (print_z_candidates): Count the number of > > candidates and issue a note stating the count at an > > intermediate nesting level. Number the individual > > candidates. > > > > gcc/testsuite/ChangeLog: > > * g++.dg/concepts/diagnostic9.C: Update expected > > results for candidate count and numbering. > > * g++.dg/concepts/nested-diagnostics-1-truncated.C: > > * g++.dg/concepts/nested-diagnostics-1.C: Likewise. > > * g++.dg/concepts/nested-diagnostics-2.C: Likewise. > > * g++.dg/cpp23/explicit-obj-lambda11.C: Likewise. > > * g++.dg/cpp2a/desig4.C: Likewise. > > * g++.dg/cpp2a/desig6.C: Likewise. > > * g++.dg/cpp2a/spaceship-eq15.C: Likewise. > > * g++.dg/diagnostic/function-color1.C: Likewise. > > * g++.dg/diagnostic/param-type-mismatch-2.C: Likewise. > > * g++.dg/diagnostic/pr100716-1.C: Likewise. > > * g++.dg/diagnostic/pr100716.C: Likewise. > > * g++.dg/lookup/operator-2.C: Likewise. > > * g++.dg/lookup/pr80891-5.C: Likewise. > > * g++.dg/modules/adhoc-1_b.C: Likewise. > > * g++.dg/modules/err-1_c.C: Likewise. > > * g++.dg/modules/err-1_d.C: Likewise. > > * g++.dg/other/return2.C: Likewise. > > * g++.dg/overload/error6.C: Likewise. > > * g++.dg/template/local6.C: Likewise. > > > > Signed-off-by: David Malcolm <dmalc...@redhat.com> > > --- > > gcc/cp/call.cc | 16 ++++++- > > gcc/testsuite/g++.dg/concepts/diagnostic9.C | 2 +- > > .../concepts/nested-diagnostics-1-truncated.C | 25 +++++------ > > .../g++.dg/concepts/nested-diagnostics-1.C | 43 ++++++++++---- > > ----- > > .../g++.dg/concepts/nested-diagnostics-2.C | 27 ++++++------ > > .../g++.dg/cpp23/explicit-obj-lambda11.C | 3 +- > > gcc/testsuite/g++.dg/cpp2a/desig4.C | 4 +- > > gcc/testsuite/g++.dg/cpp2a/desig6.C | 4 +- > > gcc/testsuite/g++.dg/cpp2a/spaceship-eq15.C | 8 ++-- > > .../g++.dg/diagnostic/function-color1.C | 2 +- > > .../g++.dg/diagnostic/param-type-mismatch-2.C | 10 ++++- > > gcc/testsuite/g++.dg/diagnostic/pr100716-1.C | 14 +++--- > > gcc/testsuite/g++.dg/diagnostic/pr100716.C | 14 +++--- > > gcc/testsuite/g++.dg/lookup/operator-2.C | 2 +- > > gcc/testsuite/g++.dg/lookup/pr80891-5.C | 6 +-- > > gcc/testsuite/g++.dg/modules/adhoc-1_b.C | 4 +- > > gcc/testsuite/g++.dg/modules/err-1_c.C | 10 ++--- > > gcc/testsuite/g++.dg/modules/err-1_d.C | 6 +-- > > gcc/testsuite/g++.dg/other/return2.C | 2 +- > > gcc/testsuite/g++.dg/overload/error6.C | 4 +- > > gcc/testsuite/g++.dg/template/local6.C | 2 +- > > 21 files changed, 116 insertions(+), 92 deletions(-) > > > > diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc > > index db9eb1a55cfc..f820419ee4ff 100644 > > --- a/gcc/cp/call.cc > > +++ b/gcc/cp/call.cc > > @@ -4134,6 +4134,16 @@ print_z_candidates (location_t loc, struct > > z_candidate *candidates, > > > > auto_diagnostic_nesting_level sentinel; > > > > + int num_candidates = 0; > > + for (auto iter = candidates; iter; iter = iter->next) > > + ++num_candidates; > > + > > + inform_n (loc, > > + num_candidates, "we found %i candidate", "we found %i > > candidates", > > The use of 'we' here is novel, especially since we're talking about > objective properties of the TU. I'd say "there are".
FWIW I actually prefer the wording "I found" (like does Elm). Flow's style guide: https://calebmer.com/2019/07/01/writing-good-compiler-error-messages.html says "Write messages in first person plural. That is, use “we”. For example “we see an error”. This personifies the compiler as a team of people looking for bugs in the developer’s code. By personifying our type checker error messages feel like a dialogue. Elm’s error messages are famous for using first person: “I see an error”. First person feels a bit uncomfortable to me. A compiler is certainly not a single person, nor is it built by a single person. I prefer “we” as a compromise." Sy Brand suggests "we found" in P2429R0, where they have in their notes: "Rephrased the error in terms of "we can't find a matching function" rather than "no matching function"." As you note, we're talking about objective properties of the TU, and using "we" is a novel wording. Given that, I'll change it to "there are" (impersonal present tense), but I wonder if this approach always works if we're also offering suggestions. For example, if, say, I forget a * or & on a param at a callsite, I'd prefer the compiler focus on the suggestion for what I probably meant to type rather perhaps numerous rejected candidates for what I actually typed (if that makes sense). But maybe that's just too hard to implement given C++'s complexity... > > Do we want this line at all for the case of 1 candidate? In P2429R0 example 1 has a single candidate, and Sy Brand's proposed design shows the line for that case, with: "We found 1 candidate:" so I'm inclined to say "yes". Thanks Dave