diff options
Diffstat (limited to 'gcc/diagnostics/client-data-hooks.h')
-rw-r--r-- | gcc/diagnostics/client-data-hooks.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/gcc/diagnostics/client-data-hooks.h b/gcc/diagnostics/client-data-hooks.h new file mode 100644 index 0000000..94c51b2 --- /dev/null +++ b/gcc/diagnostics/client-data-hooks.h @@ -0,0 +1,125 @@ +/* Additional metadata about a client for a diagnostic context. + Copyright (C) 2022-2025 Free Software Foundation, Inc. + Contributed by David Malcolm <dmalcolm@redhat.com> + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#ifndef GCC_DIAGNOSTICS_CLIENT_DATA_HOOKS_H +#define GCC_DIAGNOSTICS_CLIENT_DATA_HOOKS_H + +#include "diagnostics/logical-locations.h" + +namespace diagnostics { + +class sarif_object; +class client_version_info; + +/* A bundle of additional metadata, owned by the diagnostics::context, + for querying things about the client, like version data. */ + +class client_data_hooks +{ + public: + virtual ~client_data_hooks () {} + + /* Get version info for this client, or NULL. */ + virtual const client_version_info *get_any_version_info () const = 0; + + /* Get the current logical_locations::manager for this client, or null. */ + virtual const logical_locations::manager * + get_logical_location_manager () const = 0; + + /* Get the current logical location, or null. + If this returns a non-null logical location, then + get_logical_location_manager must return non-null. */ + virtual logical_locations::key + get_current_logical_location () const = 0; + + /* Get a sourceLanguage value for FILENAME, or return NULL. + See SARIF v2.1.0 Appendix J for suggested values. */ + virtual const char * + maybe_get_sarif_source_language (const char *filename) const = 0; + + /* Hook to allow client to populate a SARIF "invocation" object with + a custom property bag (see SARIF v2.1.0 section 3.8). */ + virtual void + add_sarif_invocation_properties (sarif_object &invocation_obj) const = 0; +}; + +class client_plugin_info; + +/* Abstract base class for a diagnostics::context to get at + version information about the client. */ + +class client_version_info +{ +public: + class plugin_visitor + { + public: + virtual void on_plugin (const client_plugin_info &) = 0; + }; + + virtual ~client_version_info () {} + + /* Get a string suitable for use as the value of the "name" property + (SARIF v2.1.0 section 3.19.8). */ + virtual const char *get_tool_name () const = 0; + + /* Create a string suitable for use as the value of the "fullName" property + (SARIF v2.1.0 section 3.19.9). */ + virtual char *maybe_make_full_name () const = 0; + + /* Get a string suitable for use as the value of the "version" property + (SARIF v2.1.0 section 3.19.13). */ + virtual const char *get_version_string () const = 0; + + /* Create a string suitable for use as the value of the "informationUri" + property (SARIF v2.1.0 section 3.19.17). */ + virtual char *maybe_make_version_url () const = 0; + + virtual void for_each_plugin (plugin_visitor &v) const = 0; +}; + +/* Abstract base class for a diagnostics::context to get at + information about a specific plugin within a client. */ + +class client_plugin_info +{ +public: + /* For use e.g. by SARIF "name" property (SARIF v2.1.0 section 3.19.8). */ + virtual const char *get_short_name () const = 0; + + /* For use e.g. by SARIF "fullName" property + (SARIF v2.1.0 section 3.19.9). */ + virtual const char *get_full_name () const = 0; + + /* For use e.g. by SARIF "version" property + (SARIF v2.1.0 section 3.19.13). */ + virtual const char *get_version () const = 0; +}; + +} // namespace diagnostics + +/* Factory function for making an instance of client_data_hooks + for use in the compiler (i.e. with knowledge of "tree", access to + langhooks, etc). */ + +extern std::unique_ptr<diagnostics::client_data_hooks> +make_compiler_data_hooks (); + +#endif /* ! GCC_DIAGNOSTICS_CLIENT_DATA_HOOKS_H */ |