From 4b3fb779db8866b0f557d9daf997d102a3330b8e Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 17 Jul 2023 02:19:46 +0000 Subject: [PATCH] Correct `use` resolution for submodule use statements Otherwise we fail to resolve a `use` that starts with a submodule of the current module. --- c-bindings-gen/src/types.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/c-bindings-gen/src/types.rs b/c-bindings-gen/src/types.rs index 6e60f82..398d024 100644 --- a/c-bindings-gen/src/types.rs +++ b/c-bindings-gen/src/types.rs @@ -474,9 +474,12 @@ impl<'mod_lifetime, 'crate_lft: 'mod_lifetime> ImportResolver<'mod_lifetime, 'cr let crate_name_ident = format_ident!("{}", crate_name); path.push(parse_quote!(#crate_name_ident)); } else if partial_path == "" && !dependencies.contains(&$ident) { - new_path = format!("{}::{}{}", crate_name, $ident, $path_suffix); - let crate_name_ident = format_ident!("{}", crate_name); - path.push(parse_quote!(#crate_name_ident)); + new_path = format!("{}::{}{}", module_path, $ident, $path_suffix); + for module in module_path.split("::") { + path.push(syn::PathSegment { ident: syn::Ident::new(module, Span::call_site()), arguments: syn::PathArguments::None }); + } + let ident_str = format_ident!("{}", $ident); + path.push(parse_quote!(#ident_str)); } else if format!("{}", $ident) == "self" { let mut path_iter = partial_path.rsplitn(2, "::"); path_iter.next().unwrap(); -- 2.39.5