mago_analyzer/plugin/hook/
declaration.rs1use mago_codex::metadata::class_like::ClassLikeMetadata;
4use mago_codex::metadata::function_like::FunctionLikeMetadata;
5use mago_syntax::ast::Class;
6use mago_syntax::ast::Enum;
7use mago_syntax::ast::Function;
8use mago_syntax::ast::Interface;
9use mago_syntax::ast::Trait;
10
11use crate::plugin::context::HookContext;
12use crate::plugin::hook::HookResult;
13use crate::plugin::provider::Provider;
14
15pub trait ClassDeclarationHook: Provider {
21 fn on_enter_class(
23 &self,
24 _class: &Class<'_>,
25 _metadata: &ClassLikeMetadata,
26 _context: &mut HookContext<'_, '_>,
27 ) -> HookResult<()> {
28 Ok(())
29 }
30
31 fn on_leave_class(
33 &self,
34 _class: &Class<'_>,
35 _metadata: &ClassLikeMetadata,
36 _context: &mut HookContext<'_, '_>,
37 ) -> HookResult<()> {
38 Ok(())
39 }
40}
41
42pub trait InterfaceDeclarationHook: Provider {
44 fn on_enter_interface(
46 &self,
47 _interface: &Interface<'_>,
48 _metadata: &ClassLikeMetadata,
49 _context: &mut HookContext<'_, '_>,
50 ) -> HookResult<()> {
51 Ok(())
52 }
53
54 fn on_leave_interface(
56 &self,
57 _interface: &Interface<'_>,
58 _metadata: &ClassLikeMetadata,
59 _context: &mut HookContext<'_, '_>,
60 ) -> HookResult<()> {
61 Ok(())
62 }
63}
64
65pub trait TraitDeclarationHook: Provider {
67 fn on_enter_trait(
69 &self,
70 _trait_: &Trait<'_>,
71 _metadata: &ClassLikeMetadata,
72 _context: &mut HookContext<'_, '_>,
73 ) -> HookResult<()> {
74 Ok(())
75 }
76
77 fn on_leave_trait(
79 &self,
80 _trait_: &Trait<'_>,
81 _metadata: &ClassLikeMetadata,
82 _context: &mut HookContext<'_, '_>,
83 ) -> HookResult<()> {
84 Ok(())
85 }
86}
87
88pub trait EnumDeclarationHook: Provider {
90 fn on_enter_enum(
92 &self,
93 _enum_: &Enum<'_>,
94 _metadata: &ClassLikeMetadata,
95 _context: &mut HookContext<'_, '_>,
96 ) -> HookResult<()> {
97 Ok(())
98 }
99
100 fn on_leave_enum(
102 &self,
103 _enum_: &Enum<'_>,
104 _metadata: &ClassLikeMetadata,
105 _context: &mut HookContext<'_, '_>,
106 ) -> HookResult<()> {
107 Ok(())
108 }
109}
110
111pub trait FunctionDeclarationHook: Provider {
117 fn on_enter_function(
119 &self,
120 _function: &Function<'_>,
121 _metadata: &FunctionLikeMetadata,
122 _context: &mut HookContext<'_, '_>,
123 ) -> HookResult<()> {
124 Ok(())
125 }
126
127 fn on_leave_function(
129 &self,
130 _function: &Function<'_>,
131 _metadata: &FunctionLikeMetadata,
132 _context: &mut HookContext<'_, '_>,
133 ) -> HookResult<()> {
134 Ok(())
135 }
136}