kodept_macros/
lib.rs

1use tracing::warn;
2
3use kodept_ast::graph::{AnyNode, ChangeSet};
4use kodept_ast::utils::Execution;
5use kodept_ast::utils::Execution::Skipped;
6use kodept_ast::visit_side::VisitGuard;
7
8use crate::error::report::ReportMessage;
9use crate::traits::Context;
10
11pub mod default;
12pub mod erased;
13pub mod error;
14pub mod traits;
15
16pub fn warn_about_broken_rlt<T>() {
17    warn!(
18        expected = std::any::type_name::<T>(),
19        "Skipping some checks because node in RLT either doesn't exist or has different type."
20    );
21}
22
23pub trait Macro {
24    type Error: Into<ReportMessage>;
25    type Node: TryFrom<AnyNode>;
26
27    #[allow(unused_variables)]
28    fn transform(
29        &mut self,
30        guard: VisitGuard<Self::Node>,
31        context: &mut impl Context,
32    ) -> Execution<Self::Error, ChangeSet> {
33        Skipped
34    }
35}
36
37impl<M: Macro> Macro for &mut M {
38    type Error = M::Error;
39    type Node = M::Node;
40
41    fn transform(
42        &mut self,
43        guard: VisitGuard<Self::Node>,
44        context: &mut impl Context,
45    ) -> Execution<Self::Error, ChangeSet> {
46        M::transform(self, guard, context)
47    }
48}