Skip to content

Commit 01a9e6d

Browse files
committed
Visit TokenStream in generated syntax tree traversals
1 parent 22bd069 commit 01a9e6d

File tree

7 files changed

+84
-58
lines changed

7 files changed

+84
-58
lines changed

codegen/src/fold.rs

+11-9
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Defi
207207
};
208208
}
209209

210-
let traits_body = if s.ident == "Span" {
210+
let traits_body = if s.ident == "Span" || s.ident == "TokenStream" {
211211
quote!(i)
212212
} else {
213213
quote!(#fold_fn(self, i))
@@ -219,14 +219,16 @@ fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Defi
219219
}
220220
});
221221

222-
impls.extend(quote! {
223-
pub fn #fold_fn<F>(f: &mut F, node: #ty) -> #ty
224-
where
225-
F: Fold + ?Sized,
226-
{
227-
#fold_impl
228-
}
229-
});
222+
if s.ident != "TokenStream" {
223+
impls.extend(quote! {
224+
pub fn #fold_fn<F>(f: &mut F, node: #ty) -> #ty
225+
where
226+
F: Fold + ?Sized,
227+
{
228+
#fold_impl
229+
}
230+
});
231+
}
230232

231233
if s.ident == "Attribute" {
232234
let features = cfg::features(&s.features, DocCfg::Ordinary);

codegen/src/gen.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use inflections::Inflect;
33
use proc_macro2::{Ident, Span, TokenStream};
44
use syn_codegen::{Data, Definitions, Features, Node};
55

6-
pub const TERMINAL_TYPES: [&str; 2] = ["Ident", "Span"];
6+
pub const TERMINAL_TYPES: [&str; 3] = ["Ident", "Span", "TokenStream"];
77

88
pub fn under_name(name: &str) -> Ident {
99
Ident::new(&name.to_snake_case(), Span::call_site())

codegen/src/visit.rs

+11-9
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Defi
183183
Some(quote!('ast))
184184
};
185185

186-
let traits_body = if s.ident == "Span" {
186+
let traits_body = if s.ident == "Span" || s.ident == "TokenStream" {
187187
None
188188
} else {
189189
Some(quote! {
@@ -197,14 +197,16 @@ fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Defi
197197
}
198198
});
199199

200-
impls.extend(quote! {
201-
pub fn #visit_fn<'ast, V>(v: &mut V, node: &#ast_lifetime #ty)
202-
where
203-
V: Visit<'ast> + ?Sized,
204-
{
205-
#visit_impl
206-
}
207-
});
200+
if s.ident != "TokenStream" {
201+
impls.extend(quote! {
202+
pub fn #visit_fn<'ast, V>(v: &mut V, node: &#ast_lifetime #ty)
203+
where
204+
V: Visit<'ast> + ?Sized,
205+
{
206+
#visit_impl
207+
}
208+
});
209+
}
208210
}
209211

210212
pub fn generate(defs: &Definitions) -> Result<()> {

codegen/src/visit_mut.rs

+11-9
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Defi
186186
}
187187
}
188188

189-
let traits_body = if s.ident == "Span" {
189+
let traits_body = if s.ident == "Span" || s.ident == "TokenStream" {
190190
None
191191
} else {
192192
Some(quote! {
@@ -200,14 +200,16 @@ fn node(traits: &mut TokenStream, impls: &mut TokenStream, s: &Node, defs: &Defi
200200
}
201201
});
202202

203-
impls.extend(quote! {
204-
pub fn #visit_mut_fn<V>(v: &mut V, node: &mut #ty)
205-
where
206-
V: VisitMut + ?Sized,
207-
{
208-
#visit_mut_impl
209-
}
210-
});
203+
if s.ident != "TokenStream" {
204+
impls.extend(quote! {
205+
pub fn #visit_mut_fn<V>(v: &mut V, node: &mut #ty)
206+
where
207+
V: VisitMut + ?Sized,
208+
{
209+
#visit_mut_impl
210+
}
211+
});
212+
}
211213

212214
if s.ident == "Attribute" {
213215
let features = cfg::features(&s.features, DocCfg::Ordinary);

src/gen/fold.rs

+28-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/gen/visit.rs

+11-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)