Skip to content

Commit 5136925

Browse files
committed
refactor debug codegen
this will better support the new gated parsing mode
1 parent f7dbc28 commit 5136925

File tree

1 file changed

+57
-68
lines changed

1 file changed

+57
-68
lines changed

crates/formality-macros/src/debug.rs

Lines changed: 57 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -153,74 +153,7 @@ fn debug_variant_with_attr(
153153
}
154154

155155
stream.extend(match op {
156-
spec::FormalitySpecSymbol::Field {
157-
name,
158-
mode: FieldMode::Single | FieldMode::Optional,
159-
} => {
160-
quote_spanned! {
161-
name.span() =>
162-
write!(fmt, "{}", sep)?;
163-
write!(fmt, "{:?}", #name)?;
164-
sep = " ";
165-
}
166-
}
167-
168-
spec::FormalitySpecSymbol::Field {
169-
name,
170-
mode: FieldMode::Many,
171-
} => {
172-
quote_spanned! {
173-
name.span() =>
174-
for e in #name {
175-
write!(fmt, "{}", sep)?;
176-
write!(fmt, "{:?}", e)?;
177-
sep = " ";
178-
}
179-
}
180-
}
181-
182-
spec::FormalitySpecSymbol::Field {
183-
name,
184-
mode: FieldMode::Comma,
185-
} => {
186-
quote_spanned! {
187-
name.span() =>
188-
for e in #name {
189-
write!(fmt, "{}", sep)?;
190-
write!(fmt, "{:?}", e)?;
191-
sep = ", ";
192-
}
193-
sep = " ";
194-
}
195-
}
196-
197-
spec::FormalitySpecSymbol::Field {
198-
name,
199-
mode:
200-
FieldMode::DelimitedVec {
201-
open,
202-
optional,
203-
close,
204-
},
205-
} => {
206-
let open = Literal::character(*open);
207-
let close = Literal::character(*close);
208-
quote_spanned! {
209-
name.span() =>
210-
if !#optional || !#name.is_empty() {
211-
write!(fmt, "{}", sep)?;
212-
write!(fmt, "{}", #open)?;
213-
sep = "";
214-
for e in #name {
215-
write!(fmt, "{}", sep)?;
216-
write!(fmt, "{:?}", e)?;
217-
sep = ", ";
218-
}
219-
write!(fmt, "{}", #close)?;
220-
sep = " ";
221-
}
222-
}
223-
}
156+
spec::FormalitySpecSymbol::Field { name, mode } => debug_field_with_mode(name, mode),
224157

225158
spec::FormalitySpecSymbol::Keyword { ident } => {
226159
let literal = as_literal(ident);
@@ -270,6 +203,62 @@ fn debug_variant_with_attr(
270203
stream
271204
}
272205

206+
fn debug_field_with_mode(name: &Ident, mode: &FieldMode) -> TokenStream {
207+
match mode {
208+
FieldMode::Single | FieldMode::Optional => {
209+
quote_spanned! { name.span() =>
210+
write!(fmt, "{}", sep)?;
211+
write!(fmt, "{:?}", #name)?;
212+
sep = " ";
213+
}
214+
}
215+
216+
FieldMode::Many => {
217+
quote_spanned! { name.span() =>
218+
for e in #name {
219+
write!(fmt, "{}", sep)?;
220+
write!(fmt, "{:?}", e)?;
221+
sep = " ";
222+
}
223+
}
224+
}
225+
226+
FieldMode::Comma => {
227+
quote_spanned! { name.span() =>
228+
for e in #name {
229+
write!(fmt, "{}", sep)?;
230+
write!(fmt, "{:?}", e)?;
231+
sep = ", ";
232+
}
233+
sep = " ";
234+
}
235+
}
236+
237+
FieldMode::DelimitedVec {
238+
open,
239+
optional,
240+
close,
241+
} => {
242+
let open = Literal::character(*open);
243+
let close = Literal::character(*close);
244+
quote_spanned! { name.span() =>
245+
if !#optional || !#name.is_empty() {
246+
write!(fmt, "{}", sep)?;
247+
write!(fmt, "{}", #open)?;
248+
sep = "";
249+
for e in #name {
250+
write!(fmt, "{}", sep)?;
251+
write!(fmt, "{:?}", e)?;
252+
sep = ", ";
253+
}
254+
write!(fmt, "{}", #close)?;
255+
sep = " ";
256+
}
257+
}
258+
}
259+
}
260+
}
261+
273262
fn get_grammar_attr(attrs: &[Attribute]) -> Option<syn::Result<FormalitySpec>> {
274263
let attr = attrs.iter().find(|a| a.path().is_ident("grammar"))?;
275264
Some(attr.parse_args())

0 commit comments

Comments
 (0)