diff --git a/tools/src/main.rs b/tools/src/main.rs index 2ce2263..f2074ce 100644 --- a/tools/src/main.rs +++ b/tools/src/main.rs @@ -90,7 +90,8 @@ fn main() { for item in &syntax.items { if let Item::Use(item_use) = item { - let path = path_to_string(&item_use.tree); + let path = use_tree_to_string(&item_use.tree); + decls.push(RustDecl { name: path.clone(), type_: "import".to_string(), @@ -376,3 +377,20 @@ fn generic_param_to_string(param: &syn::GenericParam) -> String { syn::GenericParam::Const(cnst) => cnst.ident.to_string(), } } + +fn use_tree_to_string(tree: &syn::UseTree) -> String { + match tree { + syn::UseTree::Path(p) => { + let base = p.ident.to_string(); + let nested = use_tree_to_string(&*p.tree); + format!("{}::{}", base, nested) + } + syn::UseTree::Name(n) => n.ident.to_string(), + syn::UseTree::Rename(r) => r.ident.to_string(), + syn::UseTree::Glob(_) => "*".to_string(), + syn::UseTree::Group(g) => { + let items: Vec = g.items.iter().map(use_tree_to_string).collect(); + items.join("::") + } + } +}