Tutorial part 8: message buffers¶
In previous examples, we finished a diagnostic with a call to
diagnostic_finish(), which takes a format string and arguments
to determine the text message of the diagnostic.
Sometimes this approach is inconvenient, such as where you might want to
build up a message programatically from a series of components.
Additionally, you might have existing code that uses fprintf, whereas
diagnostic_finish() has its
own formatting conventions which are
not the same as printf.
For this reason libgdiagnostics (from LIBGDIAGNOSTICS_ABI_3 onwards)
supports diagnostic_message_buffer, which can be used to accumulate a
message before using it.
You create a diagnostic_message_buffer using
diagnostic_message_buffer_new().
There are various API entrypoints for accumulating text into the buffer.
For example:
Running this will produce this text output:
.. code-block:: console
$ ./test-message-buffer.c.exe ./test-message-buffer.c.exe: error: this is a string; foo; int: 42 str: mostly harmless; this is a link ‘this is quoted’ highlight A highlight B (1).
where in a suitably-capable terminal if a text sink is directly connected to a tty:
the
this is a linkwill be a clickable hyperlink (and the URL will be captured in SARIF output).the quoted text will be in bold
the
highlight Aandhighlight Btext will be colorizedthe event ID will be colorized (and will be a URL in SARIF output if used within a
diagnostic_execution_path).
Moving on¶
That’s the end of the tutorial. For more information on libgdiagnostics, see the topic guide.