14 #include <hilti/rt/3rdparty/ArticleEnumClass-v2/EnumClass.h> 16 #include <hilti/ast/ctor.h> 17 #include <hilti/ast/node.h> 18 #include <hilti/ast/type.h> 19 #include <hilti/base/logger.h> 20 #include <hilti/base/result.h> 21 #include <hilti/base/util.h> 22 #include <hilti/compiler/coercion.h> 23 #include <hilti/compiler/context.h> 54 template<
typename Result,
typename... Args>
55 using Hook = std::optional<std::function<
Result(Args...)>>;
228 const std::vector<Plugin>&
plugins()
const {
return _plugins; }
243 const Plugin& hiltiPlugin()
const;
251 template<
typename PluginMember>
253 for (
const auto& p : plugin::registry().plugins() ) {
268 return pluginForExtension(std::move(ext)).
hasValue();
273 return util::transform(_plugins, [](
auto& p) {
return p.extension; });
284 void register_(
const Plugin& p);
287 std::vector<Plugin> _plugins;
292 Plugin create_hilti_plugin();
auto supportedExtensions() const
Definition: plugin.h:272
bool hasHookFor(PluginMember hook)
Definition: plugin.h:252
Hook< Result< Node >, std::istream &, hilti::rt::filesystem::path > parse
Definition: plugin.h:92
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > ast_transform
Definition: plugin.h:206
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > ast_normalize
Definition: plugin.h:143
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > ast_validate_pre
Definition: plugin.h:174
bool supportsExtension(hilti::rt::filesystem::path ext) const
Definition: plugin.h:267
std::vector< hilti::rt::filesystem::path > cxx_includes
Definition: plugin.h:73
const std::vector< Plugin > & plugins() const
Definition: plugin.h:228
bool hasValue() const
Definition: result.h:152
std::string component
Definition: plugin.h:58
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > ast_coerce
Definition: plugin.h:153
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > ast_build_scopes
Definition: plugin.h:133
Hook< std::optional< Type >, Type, const Type &, bitmask< CoercionStyle > > coerce_type
Definition: plugin.h:123
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > ast_resolve
Definition: plugin.h:163
Hook< std::vector< hilti::rt::filesystem::path >, std::shared_ptr< hilti::Context > > library_paths
Definition: plugin.h:82
std::optional< std::function< Result(Args...)> > Hook
Definition: plugin.h:55
hilti::rt::filesystem::path extension
Definition: plugin.h:67
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > ast_validate_post
Definition: plugin.h:184
Hook< bool, const Node &, hilti::printer::Stream & > ast_print
Definition: plugin.h:195
Hook< std::optional< Ctor >, Ctor, const Type &, bitmask< CoercionStyle > > coerce_ctor
Definition: plugin.h:106