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;