blob: 30cee0df4e8632344357ff62784f22092e6e628d [file] [log] [blame]
David Tolnay1e99fa32019-05-08 16:18:36 -07001use syn_codegen as types;
2
3pub const TERMINAL_TYPES: &[&str] = &["Span", "Ident"];
4
David Tolnay2fb3d482019-05-08 16:22:10 -07005pub fn traverse<S, F>(defs: &types::Definitions, node: F) -> S
David Tolnay1e99fa32019-05-08 16:18:36 -07006where
7 S: Default,
8 F: Fn(&mut S, &types::Node, &types::Definitions),
9{
10 let mut state = S::default();
11 for s in &defs.types {
David Tolnay2fb3d482019-05-08 16:22:10 -070012 node(&mut state, s, defs);
David Tolnay1e99fa32019-05-08 16:18:36 -070013 }
14 for tt in TERMINAL_TYPES {
15 let s = types::Node {
16 ident: tt.to_string(),
17 features: types::Features::default(),
18 data: types::Data::Private,
19 };
David Tolnay2fb3d482019-05-08 16:22:10 -070020 node(&mut state, &s, defs);
David Tolnay1e99fa32019-05-08 16:18:36 -070021 }
22 state
23}