forge_fmt/
macros.rs

1macro_rules! write_chunk {
2    ($self:expr, $format_str:literal) => {{
3        write_chunk!($self, $format_str,)
4    }};
5    ($self:expr, $format_str:literal, $($arg:tt)*) => {{
6        $self.write_chunk(&format!($format_str, $($arg)*).into())
7    }};
8    ($self:expr, $loc:expr) => {{
9        write_chunk!($self, $loc, "")
10    }};
11    ($self:expr, $loc:expr, $format_str:literal) => {{
12        write_chunk!($self, $loc, $format_str,)
13    }};
14    ($self:expr, $loc:expr, $format_str:literal, $($arg:tt)*) => {{
15        let chunk = $self.chunk_at($loc, None, None, format_args!($format_str, $($arg)*),);
16        $self.write_chunk(&chunk)
17    }};
18    ($self:expr, $loc:expr, $end_loc:expr, $format_str:literal) => {{
19        write_chunk!($self, $loc, $end_loc, $format_str,)
20    }};
21    ($self:expr, $loc:expr, $end_loc:expr, $format_str:literal, $($arg:tt)*) => {{
22        let chunk = $self.chunk_at($loc, Some($end_loc), None, format_args!($format_str, $($arg)*),);
23        $self.write_chunk(&chunk)
24    }};
25    ($self:expr, $loc:expr, $end_loc:expr, $needs_space:expr, $format_str:literal, $($arg:tt)*) => {{
26        let chunk = $self.chunk_at($loc, Some($end_loc), Some($needs_space), format_args!($format_str, $($arg)*),);
27        $self.write_chunk(&chunk)
28    }};
29}
30
31macro_rules! writeln_chunk {
32    ($self:expr) => {{
33        writeln_chunk!($self, "")
34    }};
35    ($self:expr, $format_str:literal) => {{
36        writeln_chunk!($self, $format_str,)
37    }};
38    ($self:expr, $format_str:literal, $($arg:tt)*) => {{
39        write_chunk!($self, "{}\n", format_args!($format_str, $($arg)*))
40    }};
41    ($self:expr, $loc:expr) => {{
42        writeln_chunk!($self, $loc, "")
43    }};
44    ($self:expr, $loc:expr, $format_str:literal) => {{
45        writeln_chunk!($self, $loc, $format_str,)
46    }};
47    ($self:expr, $loc:expr, $format_str:literal, $($arg:tt)*) => {{
48        write_chunk!($self, $loc, "{}\n", format_args!($format_str, $($arg)*))
49    }};
50    ($self:expr, $loc:expr, $end_loc:expr, $format_str:literal) => {{
51        writeln_chunk!($self, $loc, $end_loc, $format_str,)
52    }};
53    ($self:expr, $loc:expr, $end_loc:expr, $format_str:literal, $($arg:tt)*) => {{
54        write_chunk!($self, $loc, $end_loc, "{}\n", format_args!($format_str, $($arg)*))
55    }};
56}
57
58macro_rules! write_chunk_spaced {
59    ($self:expr, $loc:expr, $needs_space:expr, $format_str:literal) => {{
60        write_chunk_spaced!($self, $loc, $needs_space, $format_str,)
61    }};
62    ($self:expr, $loc:expr, $needs_space:expr, $format_str:literal, $($arg:tt)*) => {{
63        let chunk = $self.chunk_at($loc, None, $needs_space, format_args!($format_str, $($arg)*),);
64        $self.write_chunk(&chunk)
65    }};
66}
67
68macro_rules! buf_fn {
69    ($vis:vis fn $name:ident(&self $(,)? $($arg_name:ident : $arg_ty:ty),*) $(-> $ret:ty)?) => {
70        $vis fn $name(&self, $($arg_name : $arg_ty),*) $(-> $ret)? {
71            if self.temp_bufs.is_empty() {
72                self.buf.$name($($arg_name),*)
73            } else {
74                self.temp_bufs.last().unwrap().$name($($arg_name),*)
75            }
76        }
77    };
78    ($vis:vis fn $name:ident(&mut self $(,)? $($arg_name:ident : $arg_ty:ty),*) $(-> $ret:ty)?) => {
79        $vis fn $name(&mut self, $($arg_name : $arg_ty),*) $(-> $ret)? {
80            if self.temp_bufs.is_empty() {
81                self.buf.$name($($arg_name),*)
82            } else {
83                self.temp_bufs.last_mut().unwrap().$name($($arg_name),*)
84            }
85        }
86    };
87}
88
89macro_rules! return_source_if_disabled {
90    ($self:expr, $loc:expr) => {{
91        let loc = $loc;
92        if $self.inline_config.is_disabled(loc) {
93            trace!("Returning because disabled: {loc:?}");
94            return $self.visit_source(loc)
95        }
96    }};
97    ($self:expr, $loc:expr, $suffix:literal) => {{
98        let mut loc = $loc;
99        let has_suffix = $self.extend_loc_until(&mut loc, $suffix);
100        if $self.inline_config.is_disabled(loc) {
101            $self.visit_source(loc)?;
102            trace!("Returning because disabled: {loc:?}");
103            if !has_suffix {
104                write!($self.buf(), "{}", $suffix)?;
105            }
106            return Ok(())
107        }
108    }};
109}
110
111macro_rules! visit_source_if_disabled_else {
112    ($self:expr, $loc:expr, $block:block) => {{
113        let loc = $loc;
114        if $self.inline_config.is_disabled(loc) {
115            $self.visit_source(loc)?;
116        } else $block
117    }};
118}
119
120pub(crate) use buf_fn;
121pub(crate) use return_source_if_disabled;
122pub(crate) use visit_source_if_disabled_else;
123pub(crate) use write_chunk;
124pub(crate) use write_chunk_spaced;
125pub(crate) use writeln_chunk;