1 /* Additional metadata for a diagnostic.
2 Copyright (C) 2019-2024 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 #ifndef GCC_DIAGNOSTIC_METADATA_H
22 #define GCC_DIAGNOSTIC_METADATA_H
26 /* A bundle of additional metadata that can be associated with a
29 This supports an optional CWE identifier, and zero or more
32 class diagnostic_metadata
35 /* Abstract base class for referencing a rule that has been violated,
36 such as within a coding standard, or within a specification. */
40 virtual char *make_description () const = 0;
41 virtual char *make_url () const = 0;
44 /* Concrete subclass. */
45 class precanned_rule
: public rule
48 precanned_rule (const char *desc
, const char *url
)
49 : m_desc (desc
), m_url (url
)
52 char *make_description () const final override
54 return m_desc
? xstrdup (m_desc
) : NULL
;
57 char *make_url () const final override
59 return m_url
? xstrdup (m_url
) : NULL
;
67 diagnostic_metadata () : m_cwe (0) {}
68 virtual ~diagnostic_metadata () {}
70 /* Hook for SARIF output to allow for adding diagnostic-specific
71 properties to the result object's property bag. */
73 maybe_add_sarif_properties (sarif_object
&/*result_obj*/) const
77 void add_cwe (int cwe
) { m_cwe
= cwe
; }
78 int get_cwe () const { return m_cwe
; }
80 /* Associate R with the diagnostic. R must outlive
82 void add_rule (const rule
&r
)
84 m_rules
.safe_push (&r
);
87 unsigned get_num_rules () const { return m_rules
.length (); }
88 const rule
&get_rule (unsigned idx
) const { return *(m_rules
[idx
]); }
92 auto_vec
<const rule
*> m_rules
;
95 #endif /* ! GCC_DIAGNOSTIC_METADATA_H */