diff options
Diffstat (limited to 'gcc/diagnostic-format-sarif.h')
-rw-r--r-- | gcc/diagnostic-format-sarif.h | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/gcc/diagnostic-format-sarif.h b/gcc/diagnostic-format-sarif.h index 524a0c7..6446257 100644 --- a/gcc/diagnostic-format-sarif.h +++ b/gcc/diagnostic-format-sarif.h @@ -27,10 +27,20 @@ along with GCC; see the file COPYING3. If not see class logical_location; +/* Enum for choosing what format to serializing the generated SARIF into. */ + +enum class sarif_serialization_kind +{ + json, + + num_values +}; + extern diagnostic_output_file diagnostic_output_format_open_sarif_file (diagnostic_context &context, line_maps *line_maps, - const char *base_file_name); + const char *base_file_name, + enum sarif_serialization_kind serialization_kind); extern void diagnostic_output_format_init_sarif_stderr (diagnostic_context &context, @@ -50,6 +60,34 @@ diagnostic_output_format_init_sarif_stream (diagnostic_context &context, bool formatted, FILE *stream); +/* Abstract base class for handling JSON output vs other kinds of + serialization of the json tree. */ + +class sarif_serialization_format +{ +public: + virtual ~sarif_serialization_format () {} + virtual void write_to_file (FILE *outf, + const json::value &top) = 0; +}; + +/* Concrete subclass for serializing SARIF as JSON. */ + +class sarif_serialization_format_json : public sarif_serialization_format +{ +public: + sarif_serialization_format_json (bool formatted) + : m_formatted (formatted) + { + } + void write_to_file (FILE *outf, const json::value &top) final override; + +private: + bool m_formatted; +}; + +/* Control of SARIF generation. */ + enum class sarif_version { v2_1_0, @@ -73,7 +111,7 @@ extern std::unique_ptr<diagnostic_output_format> make_sarif_sink (diagnostic_context &context, const line_maps &line_maps, const char *main_input_filename_, - bool formatted, + std::unique_ptr<sarif_serialization_format> serialization_format, const sarif_generation_options &sarif_gen_opts, diagnostic_output_file output_file); |