GCC Middle and Back End API Reference
sarif-sink.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_DIAGNOSTICS_SARIF_SINK_H
22#define GCC_DIAGNOSTICS_SARIF_SINK_H
23
24#include "json.h"
25#include "diagnostics/sink.h"
28
29namespace diagnostics {
30
31namespace digraphs {
32 class digraph;
33 class node;
34 class edge;
35}
36
37/* Enum for choosing what format to serializing the generated SARIF into. */
38
45
46extern output_file
47open_sarif_output_file (context &dc,
48 line_maps *line_maps,
49 const char *base_file_name,
50 enum sarif_serialization_kind serialization_kind);
51
52extern sink &
53init_sarif_stderr (context &dc,
54 const line_maps *line_maps,
55 bool formatted);
56extern sink &
57init_sarif_file (context &dc,
58 line_maps *line_maps,
59 bool formatted,
60 const char *base_file_name);
61extern sink &
62init_sarif_stream (context &dc,
63 const line_maps *line_maps,
64 bool formatted,
65 FILE *stream);
66
67/* Abstract base class for handling JSON output vs other kinds of
68 serialization of the json tree. */
69
71{
72public:
74 virtual void write_to_file (FILE *outf,
75 const json::value &top) = 0;
76 virtual void dump (FILE *out, int indent) const = 0;
77};
78
79/* Concrete subclass for serializing SARIF as JSON. */
80
82{
83public:
85 : m_formatted (formatted)
86 {
87 }
88 void write_to_file (FILE *outf, const json::value &top) final override;
89 void dump (FILE *out, int indent) const final override;
90
91private:
93};
94
95/* Control of SARIF generation. */
96
104
105/* A bundle of state for controlling what to put in SARIF output,
106 such as which version of SARIF to generate
107 (as opposed to SARIF *serialization* options, such as formatting). */
108
110{
112
113 void dump (FILE *out, int indent) const;
114
117};
118
119extern std::unique_ptr<sink>
121 const line_maps &line_maps,
122 std::unique_ptr<sarif_serialization_format> serialization_format,
123 const sarif_generation_options &sarif_gen_opts,
124 output_file output_file_);
125
126class sarif_builder;
128
129/* Concrete subclass of json::object for SARIF property bags
130 (SARIF v2.1.0 section 3.8). */
131
133{
134public:
135 void set_logical_location (const char *property_name,
137 logical_locations::key logical_loc);
138 void set_graph (const char *property_name,
140 sarif_location_manager *sarif_location_mgr,
141 const digraphs::digraph &g);
142};
143
144/* Concrete subclass of json::object for SARIF objects that can
145 contain property bags (as per SARIF v2.1.0 section 3.8.1, which has:
146 "In addition to those properties that are explicitly documented, every
147 object defined in this document MAY contain a property named properties
148 whose value is a property bag.") */
149
151{
152public:
154};
155
156/* Subclass of sarif_object for SARIF "graph" objects
157 (SARIF v2.1.0 section 3.39). */
158
160{
161};
162
163/* Subclass of sarif_object for SARIF "node" objects
164 (SARIF v2.1.0 section 3.40). */
165
167{
168};
169
170/* Subclass of sarif_object for SARIF "edge" objects
171 (SARIF v2.1.0 section 3.41). */
172
174{
175};
176
177extern std::unique_ptr<sarif_graph>
179 sarif_builder *builder,
180 sarif_location_manager *sarif_location_mgr);
181
182extern std::unique_ptr<sarif_node>
184 sarif_builder *builder,
185 sarif_location_manager *sarif_location_mgr);
186
187extern std::unique_ptr<sarif_edge>
189 sarif_builder *builder);
190
191} // namespace diagnostics
192
193#endif /* ! GCC_DIAGNOSTICS_SARIF_SINK_H */
Definition diagnostics/context.h:253
Definition digraphs.h:88
Definition digraphs.h:314
Definition digraphs.h:217
Definition logical-locations.h:101
Definition output-file.h:32
Definition sarif-sink.cc:762
Definition sarif-sink.h:174
Definition sarif-sink.h:160
Definition sarif-sink.cc:371
Definition sarif-sink.h:167
Definition sarif-sink.h:151
sarif_property_bag & get_or_create_properties()
Definition sarif-sink.cc:1010
Definition sarif-sink.h:133
void set_logical_location(const char *property_name, sarif_builder &, logical_locations::key logical_loc)
Definition sarif-sink.cc:2859
void set_graph(const char *property_name, sarif_builder &, sarif_location_manager *sarif_location_mgr, const digraphs::digraph &g)
Definition sarif-sink.cc:2995
sarif_serialization_format_json(bool formatted)
Definition sarif-sink.h:84
bool m_formatted
Definition sarif-sink.h:92
void write_to_file(FILE *outf, const json::value &top) final override
Definition sarif-sink.cc:702
void dump(FILE *out, int indent) const final override
Definition sarif-sink.cc:710
Definition sarif-sink.h:71
virtual ~sarif_serialization_format()
Definition sarif-sink.h:73
virtual void write_to_file(FILE *outf, const json::value &top)=0
virtual void dump(FILE *out, int indent) const =0
Definition json.h:149
Definition json.h:122
Definition libgdiagnostics.cc:220
static const char * output_file
Definition collect2.cc:215
gcc::context * g
Definition context.cc:29
static const char * base_file_name(const char *file_name)
Definition genautomata.cc:9229
Definition diagnostics/context.h:39
Definition coretypes.h:167
output_file open_sarif_output_file(context &dc, line_maps *line_maps, const char *base_file_name, enum sarif_serialization_kind serialization_kind)
Definition sarif-sink.cc:4253
std::unique_ptr< sarif_edge > make_sarif_edge(const digraphs::edge &e, sarif_builder *builder)
Definition sarif-sink.cc:2969
sink & init_sarif_stream(context &dc, const line_maps *line_maps, bool formatted, FILE *stream)
Definition sarif-sink.cc:4311
std::unique_ptr< sarif_node > make_sarif_node(const digraphs::node &n, sarif_builder *builder, sarif_location_manager *sarif_location_mgr)
Definition sarif-sink.cc:2920
std::unique_ptr< sink > make_sarif_sink(context &dc, const line_maps &line_maps, std::unique_ptr< sarif_serialization_format > serialization, const sarif_generation_options &sarif_gen_opts, output_file output_file_)
Definition sarif-sink.cc:4330
sink & init_sarif_file(context &dc, line_maps *line_maps, bool formatted, const char *base_file_name)
Definition sarif-sink.cc:4282
sink & init_sarif_stderr(context &dc, const line_maps *line_maps, bool formatted)
Definition sarif-sink.cc:4190
sarif_version
Definition sarif-sink.h:98
@ num_versions
Definition sarif-sink.h:102
@ v2_1_0
Definition sarif-sink.h:99
@ v2_2_prerelease_2024_08_08
Definition sarif-sink.h:100
sarif_serialization_kind
Definition sarif-sink.h:40
@ num_values
Definition sarif-sink.h:43
std::unique_ptr< sarif_graph > make_sarif_graph(const digraphs::digraph &g, sarif_builder *builder, sarif_location_manager *sarif_location_mgr)
Definition sarif-sink.cc:2886
Definition json-parsing.h:27
Definition sarif-sink.h:110
void dump(FILE *out, int indent) const
Definition sarif-sink.cc:4369
sarif_generation_options()
Definition sarif-sink.cc:4348
bool m_state_graph
Definition sarif-sink.h:116
enum sarif_version m_version
Definition sarif-sink.h:115
Definition gengtype.h:377