diff options
author | David Malcolm <dmalcolm@redhat.com> | 2019-10-10 17:03:46 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2019-10-10 17:03:46 +0000 |
commit | b4c7ca2ef3915a0b2292499dabcaabefdca04d89 (patch) | |
tree | f5fd667cc19b7b0c467092967160fc6a00594a43 /gcc/diagnostic-format-json.cc | |
parent | 3245582f7d5cf4a5f69218add91a15aa606e8822 (diff) | |
download | gcc-b4c7ca2ef3915a0b2292499dabcaabefdca04d89.zip gcc-b4c7ca2ef3915a0b2292499dabcaabefdca04d89.tar.gz gcc-b4c7ca2ef3915a0b2292499dabcaabefdca04d89.tar.bz2 |
Documentation hyperlinks for [-Wname-of-option] (PR 87488)
This patch uses the support for pretty-printing escaped URLs added in
the previous patch (PR 87488) so that in a sufficiently capable terminal
the [-Wname-of-option] emitted at the end of each diagnostic becomes a
hyperlink to the documentation for that option on the GCC website.
I've tested it with Fedora 30's GNOME Terminal (3.32.2 with VTE 0.56.3);
the option text is printed with a dotted underline, hovering shows the
URL, and on right-clicking it offers menu items to visit/copy the URL.
gcc/ChangeLog:
PR 87488
* Makefile.in (CFLAGS-opts.o): Pass in DOCUMENTATION_ROOT_URL via
-D.
* configure.ac (--with-documentation-root-url): New option.
* configure: Regenerate.
* diagnostic-format-json.cc (json_end_diagnostic): If there is an
option URL, add it as a new string field of the diagnostic option.
* diagnostic.c (diagnostic_initialize): Initialize get_option_url.
(print_option_information): If get_option_url is non-NULL, call
it, and if the result is non-NULL, potentially emit an escape
sequence to markup the option text with the resulting URL.
* diagnostic.h (diagnostic_context::get_option_url): New callback.
* doc/invoke.texi (-fdiagnostics-format=): Add "option_url" to
example of JSON output.
* opts-diagnostic.h (get_option_url): New decl.
* opts.c (get_option_url): New function.
* toplev.c (general_init): Initialize the get_option_url callback.
gcc/testsuite/ChangeLog:
PR 87488
* c-c++-common/diagnostic-format-json-2.c: Expect an "option_url"
field.
* c-c++-common/diagnostic-format-json-3.c: Likewise.
* gfortran.dg/diagnostic-format-json-2.F90: Likewise.
* gfortran.dg/diagnostic-format-json-3.F90: Likewise.
* jit.dg/test-error-array-bounds.c (create_code): Ensure that
error messages don't contain escaped URLs.
From-SVN: r276843
Diffstat (limited to 'gcc/diagnostic-format-json.cc')
-rw-r--r-- | gcc/diagnostic-format-json.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/diagnostic-format-json.cc b/gcc/diagnostic-format-json.cc index 53c3b63..eb99952 100644 --- a/gcc/diagnostic-format-json.cc +++ b/gcc/diagnostic-format-json.cc @@ -154,6 +154,17 @@ json_end_diagnostic (diagnostic_context *context, diagnostic_info *diagnostic, free (option_text); } + if (context->get_option_url) + { + char *option_url = context->get_option_url (context, + diagnostic->option_index); + if (option_url) + { + diag_obj->set ("option_url", new json::string (option_url)); + free (option_url); + } + } + /* If we've already emitted a diagnostic within this auto_diagnostic_group, then add diag_obj to its "children" array. */ if (cur_group) |