GCC Middle and Back End API Reference
diagnostic-format-sarif.h
Go to the documentation of this file.
1/* SARIF output for diagnostics.
2 Copyright (C) 2023-2025 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 3, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
20
21#ifndef GCC_DIAGNOSTIC_FORMAT_SARIF_H
22#define GCC_DIAGNOSTIC_FORMAT_SARIF_H
23
24#include "json.h"
25#include "diagnostic-format.h"
27#include "logical-location.h"
28
29/* Enum for choosing what format to serializing the generated SARIF into. */
30
37
40 line_maps *line_maps,
41 const char *base_file_name,
42 enum sarif_serialization_kind serialization_kind);
43
46 const line_maps *line_maps,
47 bool formatted);
50 line_maps *line_maps,
51 bool formatted,
52 const char *base_file_name);
55 const line_maps *line_maps,
56 bool formatted,
57 FILE *stream);
58
59/* Abstract base class for handling JSON output vs other kinds of
60 serialization of the json tree. */
61
63{
64public:
66 virtual void write_to_file (FILE *outf,
67 const json::value &top) = 0;
68};
69
70/* Concrete subclass for serializing SARIF as JSON. */
71
73{
74public:
76 : m_formatted (formatted)
77 {
78 }
79 void write_to_file (FILE *outf, const json::value &top) final override;
80
81private:
83};
84
85/* Control of SARIF generation. */
86
94
95/* A bundle of state for controlling what to put in SARIF output,
96 such as which version of SARIF to generate
97 (as opposed to SARIF *serialization* options, such as formatting). */
98
105
106extern std::unique_ptr<diagnostic_output_format>
108 const line_maps &line_maps,
109 std::unique_ptr<sarif_serialization_format> serialization_format,
110 const sarif_generation_options &sarif_gen_opts,
112
113class sarif_builder;
114
115/* Concrete subclass of json::object for SARIF property bags
116 (SARIF v2.1.0 section 3.8). */
117
119{
120public:
121 void set_logical_location (const char *property_name,
123 logical_location logical_loc);
124};
125
126/* Concrete subclass of json::object for SARIF objects that can
127 contain property bags (as per SARIF v2.1.0 section 3.8.1, which has:
128 "In addition to those properties that are explicitly documented, every
129 object defined in this document MAY contain a property named properties
130 whose value is a property bag.") */
131
133{
134public:
136};
137
138#endif /* ! GCC_DIAGNOSTIC_FORMAT_SARIF_H */
Definition diagnostic.h:551
Definition diagnostic-output-file.h:28
Definition diagnostic-format.h:33
Definition json.h:147
Definition json.h:122
Definition diagnostic-format-sarif.cc:747
Definition diagnostic-format-sarif.h:133
sarif_property_bag & get_or_create_properties()
Definition diagnostic-format-sarif.cc:988
Definition diagnostic-format-sarif.h:119
void set_logical_location(const char *property_name, sarif_builder &, logical_location logical_loc)
Definition diagnostic-format-sarif.cc:2792
sarif_serialization_format_json(bool formatted)
Definition diagnostic-format-sarif.h:75
void write_to_file(FILE *outf, const json::value &top) final override
Definition diagnostic-format-sarif.cc:695
bool m_formatted
Definition diagnostic-format-sarif.h:82
Definition diagnostic-format-sarif.h:63
virtual ~sarif_serialization_format()
Definition diagnostic-format-sarif.h:65
virtual void write_to_file(FILE *outf, const json::value &top)=0
static const char * output_file
Definition collect2.cc:215
sarif_version
Definition diagnostic-format-sarif.h:88
@ num_versions
Definition diagnostic-format-sarif.h:92
@ v2_1_0
Definition diagnostic-format-sarif.h:89
@ v2_2_prerelease_2024_08_08
Definition diagnostic-format-sarif.h:90
diagnostic_output_format & diagnostic_output_format_init_sarif_stream(diagnostic_context &context, const line_maps *line_maps, bool formatted, FILE *stream)
Definition diagnostic-format-sarif.cc:4066
diagnostic_output_format & diagnostic_output_format_init_sarif_file(diagnostic_context &context, line_maps *line_maps, bool formatted, const char *base_file_name)
Definition diagnostic-format-sarif.cc:4037
sarif_serialization_kind
Definition diagnostic-format-sarif.h:32
@ num_values
Definition diagnostic-format-sarif.h:35
diagnostic_output_format & diagnostic_output_format_init_sarif_stderr(diagnostic_context &context, const line_maps *line_maps, bool formatted)
Definition diagnostic-format-sarif.cc:3945
std::unique_ptr< diagnostic_output_format > make_sarif_sink(diagnostic_context &context, const line_maps &line_maps, std::unique_ptr< sarif_serialization_format > serialization_format, const sarif_generation_options &sarif_gen_opts, diagnostic_output_file output_file)
Definition diagnostic-format-sarif.cc:4085
diagnostic_output_file diagnostic_output_format_open_sarif_file(diagnostic_context &context, line_maps *line_maps, const char *base_file_name, enum sarif_serialization_kind serialization_kind)
Definition diagnostic-format-sarif.cc:4008
static const char * base_file_name(const char *file_name)
Definition genautomata.cc:9229
logical_location_manager::key logical_location
Definition logical-location.h:173
Definition json-parsing.h:27
Definition gengtype.h:377
Definition diagnostic-format-sarif.h:100
enum sarif_version m_version
Definition diagnostic-format-sarif.h:103
sarif_generation_options()
Definition diagnostic-format-sarif.cc:4103