13 #include <hilti/rt/3rdparty/ArticleEnumClass-v2/EnumClass.h> 15 #include <hilti/ast/ctor.h> 16 #include <hilti/ast/node.h> 17 #include <hilti/ast/type.h> 18 #include <hilti/base/logger.h> 19 #include <hilti/base/result.h> 20 #include <hilti/base/util.h> 21 #include <hilti/compiler/coercion.h> 22 #include <hilti/compiler/context.h> 53 template<
typename Result,
typename... Args>
54 using Hook = std::optional<std::function<
Result(Args...)>>;
241 const std::vector<Plugin>&
plugins()
const {
return _plugins; }
250 Result<Plugin> pluginForExtension(hilti::rt::filesystem::path ext)
const;
258 template<
typename PluginMember>
260 for (
const auto& p : plugin::registry().plugins() ) {
275 return pluginForExtension(std::move(ext)).
hasValue();
291 void register_(
const Plugin& p);
294 std::vector<Plugin> _plugins;
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > resolve_ids
Definition: plugin.h:142
auto supportedExtensions() const
Definition: plugin.h:279
bool hasHookFor(PluginMember hook)
Definition: plugin.h:259
Hook< Result< Node >, std::istream &, hilti::rt::filesystem::path > parse
Definition: plugin.h:91
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > resolve_operators
Definition: plugin.h:152
Hook< bool, std::shared_ptr< hilti::Context >, Node *, bool, Unit * > transform
Definition: plugin.h:209
bool supportsExtension(hilti::rt::filesystem::path ext) const
Definition: plugin.h:274
std::vector< hilti::rt::filesystem::path > cxx_includes
Definition: plugin.h:66
const std::vector< Plugin > & plugins() const
Definition: plugin.h:241
bool hasValue() const
Definition: result.h:148
std::string component
Definition: plugin.h:57
Hook< void, std::shared_ptr< hilti::Context >, std::vector< Node > *, Unit * > preserved_validate
Definition: plugin.h:197
Hook< bool, const Node &, hilti::printer::Stream & > print_ast
Definition: plugin.h:219
Hook< std::optional< Type >, Type, const Type &, bitmask< CoercionStyle > > coerce_type
Definition: plugin.h:122
Register(const Plugin &p)
Definition: plugin.h:309
Hook< void, std::shared_ptr< hilti::Context >, const std::vector< std::pair< ID, NodeRef > > &, Unit * > build_scopes
Definition: plugin.h:132
Hook< std::vector< hilti::rt::filesystem::path >, std::shared_ptr< hilti::Context > > library_paths
Definition: plugin.h:81
std::optional< std::function< Result(Args...)> > Hook
Definition: plugin.h:54
Hook< bool, std::shared_ptr< hilti::Context >, Node *, Unit * > apply_coercions
Definition: plugin.h:163
hilti::rt::filesystem::path extension
Definition: plugin.h:60
auto transform(const std::vector< X > &x, F f)
Definition: util.h:86
Hook< void, std::shared_ptr< hilti::Context >, Node *, Unit * > post_validate
Definition: plugin.h:185
Hook< void, std::shared_ptr< hilti::Context >, Node *, Unit *, bool * > pre_validate
Definition: plugin.h:175
Hook< std::optional< Ctor >, Ctor, const Type &, bitmask< CoercionStyle > > coerce_ctor
Definition: plugin.h:105