I'd like to ping this patch kit. I've already pushed "[PATCH 1/3] diagnostics: add support for nested diagnostics [PR116253]" but was hoping for review from C++ maintainers for patches 2 and 3:
[PATCH 2/3] c++: consolidate location printing in error.cc [PR116253] https://gcc.gnu.org/pipermail/gcc-patches/2024-November/668469.html [PATCH 3/3] c++: use diagnostic nesting [PR116253] https://gcc.gnu.org/pipermail/gcc-patches/2024-November/668470.html Screenshot: https://gcc.gnu.org/bugzilla/attachment.cgi?id=59580 There are also some followups I posted last week that IMHO further improve the readability of template errors: [PATCH 1/2] c++: print z candidate count and number them https://gcc.gnu.org/pipermail/gcc-patches/2024-November/669035.html [PATCH 2/2] diagnostics: suppress "note: " prefix in nested diagnostics [PR116253] https://gcc.gnu.org/pipermail/gcc-patches/2024-November/669034.html Screenshot with those followups: https://gcc.gnu.org/bugzilla/attachment.cgi?id=59611 Thanks! Dave On Tue, 2024-11-12 at 09:02 -0500, David Malcolm wrote: > The following patch kit adds experimental support for nested > diagnostics to g++. > > As noted in P3358R0 ("SARIF for Structured Diagnostics"), C++ > diagnostics involving concepts can be made much more readable > by capturing the hierarchical structure of the diagnostics > and displaying this structure to the user (perhaps via > a UI that allows the user to drill down into the aspects > of the issue they are interested in). > > Implementing this for GCC requires several things: > > (a) extending the diagnostics subsystem so that it can > represent hierarchically structured diagnostics internally > > (b) extending the output formats (text and SARIF) to > present/export such hierarchical structures > > (c) extending the C++ frontend to capture the hierarchical > structure > > and all of these tasks are interrelated: for example, > we can't fix (c) if we don't have (a) and (b), and providing a > good user experience is likely to require iterating on all three > aspects. > > Patch 1 of this patch kit implements (a) and (b), adding a plugin > to the test case to inject a placeholder hierarchical diagnostic, > adding SARIF output support (based on P3358R0), and text output > support. > > The most natural way to present textual output is to use indentation, > so patch 1 does this. However, our existing textual format uses the > source location as a prefix, e.g. > PATH/foo.cc: error: message goes here > and unfortunately this makes the indented hierarchy unreadable > (especially if a tree of diagnostics spans multiple source files). > > So for this patch kit I've retained the existing textual presentation > by default; viewing the structure via indentation requires that > the user opt-in to a new text output style. The patch implements > this via a new "experiment-nesting" key in the text output scheme, > so the option is: > -fdiagnostics-set-output=text:experimental-nesting=yes > This is deliberately rather verbose to signal to the user that > they're opting-in to the new approach. > > An example of the hierarchical text output can be seen in patch 3. > > Patch 2 of the kit does some consolidation to the C++ FE in how > locations are printed, as a preliminary cleanup. > > Patch 3 of the kit adds the hierarchical structuring to the C++ FE. > > I've successfully bootstrapped & regrtested the kit on > x86_64-pc-linux-gnu. > > I think I can self-approve patch 1; are patches 2 and 3 OK for the > C++ FE? > > David Malcolm (3): > diagnostics: add support for nested diagnostics [PR116253] > c++: consolidate location printing in error.cc [PR116253] > c++: use diagnostic nesting [PR116253] > > gcc/c-family/c-opts.cc | 2 +- > gcc/cp/call.cc | 69 ++++---- > gcc/cp/constraint.cc | 5 + > gcc/cp/error.cc | 164 +++++++++++----- > -- > gcc/diagnostic-core.h | 12 ++ > gcc/diagnostic-format-sarif.cc | 16 +- > gcc/diagnostic-format-text.cc | 121 ++++++++++++- > gcc/diagnostic-format-text.h | 34 +++- > gcc/diagnostic-global-context.cc | 12 ++ > gcc/diagnostic-show-locus.cc | 5 + > gcc/diagnostic.cc | 29 +++- > gcc/diagnostic.h | 15 +- > gcc/doc/invoke.texi | 18 ++ > gcc/opts-diagnostic.cc | 32 +++- > .../concepts/nested-diagnostics-1-truncated.C | 41 +++++ > .../g++.dg/concepts/nested-diagnostics-1.C | 51 ++++++ > .../g++.dg/concepts/nested-diagnostics-2.C | 37 ++++ > .../plugin/diagnostic-test-nesting-sarif.c | 16 ++ > .../plugin/diagnostic-test-nesting-sarif.py | 39 +++++ > ...c-test-nesting-text-indented-show-levels.c | 24 +++ > ...ostic-test-nesting-text-indented-unicode.c | 24 +++ > .../diagnostic-test-nesting-text-indented.c | 24 +++ > .../diagnostic-test-nesting-text-plain.c | 8 + > .../plugin/diagnostic_plugin_test_nesting.c | 145 ++++++++++++++++ > gcc/testsuite/gcc.dg/plugin/plugin.exp | 6 + > 25 files changed, 838 insertions(+), 111 deletions(-) > create mode 100644 gcc/testsuite/g++.dg/concepts/nested-diagnostics- > 1-truncated.C > create mode 100644 gcc/testsuite/g++.dg/concepts/nested-diagnostics- > 1.C > create mode 100644 gcc/testsuite/g++.dg/concepts/nested-diagnostics- > 2.C > create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test- > nesting-sarif.c > create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test- > nesting-sarif.py > create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test- > nesting-text-indented-show-levels.c > create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test- > nesting-text-indented-unicode.c > create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test- > nesting-text-indented.c > create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test- > nesting-text-plain.c > create mode 100644 > gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_nesting.c >