use mago_codex::metadata::class_like::ClassLikeMetadata;
use mago_codex::metadata::function_like::FunctionLikeMetadata;
use mago_syntax::ast::Class;
use mago_syntax::ast::Enum;
use mago_syntax::ast::Function;
use mago_syntax::ast::Interface;
use mago_syntax::ast::Trait;
use crate::plugin::context::HookContext;
use crate::plugin::hook::HookResult;
use crate::plugin::provider::Provider;
pub trait ClassDeclarationHook: Provider {
fn on_enter_class(
&self,
_class: &Class<'_>,
_metadata: &ClassLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
fn on_leave_class(
&self,
_class: &Class<'_>,
_metadata: &ClassLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
}
pub trait InterfaceDeclarationHook: Provider {
fn on_enter_interface(
&self,
_interface: &Interface<'_>,
_metadata: &ClassLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
fn on_leave_interface(
&self,
_interface: &Interface<'_>,
_metadata: &ClassLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
}
pub trait TraitDeclarationHook: Provider {
fn on_enter_trait(
&self,
_trait_: &Trait<'_>,
_metadata: &ClassLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
fn on_leave_trait(
&self,
_trait_: &Trait<'_>,
_metadata: &ClassLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
}
pub trait EnumDeclarationHook: Provider {
fn on_enter_enum(
&self,
_enum_: &Enum<'_>,
_metadata: &ClassLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
fn on_leave_enum(
&self,
_enum_: &Enum<'_>,
_metadata: &ClassLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
}
pub trait FunctionDeclarationHook: Provider {
fn on_enter_function(
&self,
_function: &Function<'_>,
_metadata: &FunctionLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
fn on_leave_function(
&self,
_function: &Function<'_>,
_metadata: &FunctionLikeMetadata,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
}