diff --git a/crates/analyzer/src/analyze/crate_.rs b/crates/analyzer/src/analyze/crate_.rs index e72aac9..4daef58 100644 --- a/crates/analyzer/src/analyze/crate_.rs +++ b/crates/analyzer/src/analyze/crate_.rs @@ -94,21 +94,36 @@ pub fn analyze_crate(path: &str) -> Result<AnalysisResult> { // recursively find/read the public sub-modules let mut read_modules = vec![]; while let Some((parent_dir, module_name, parent)) = modules_to_read.pop() { - let (module_path, submodule_dir) = - if parent_dir.join(&module_name).with_extension("rs").exists() { - ( - parent_dir.join(&module_name).with_extension("rs"), - parent_dir.join(&module_name), - ) - } else if parent_dir.join(&module_name).join("mod.rs").exists() { - ( - parent_dir.join(&module_name).join("mod.rs"), - parent_dir.to_path_buf(), - ) - } else { - // TODO warn about missing module? - continue; - }; + let (module_path, submodule_dir) = if parent_dir + .join(&parent[1..].join("/")) + .join(&module_name) + .with_extension("rs") + .exists() + { + ( + parent_dir + .join(&parent[1..].join("/")) + .join(&module_name) + .with_extension("rs"), + parent_dir.join(&parent[1..].join("/")).join(&module_name), + ) + } else if parent_dir + .join(&parent[1..].join("/")) + .join(&module_name) + .join("mod.rs") + .exists() + { + ( + parent_dir + .join(&parent[1..].join("/")) + .join(&module_name) + .join("mod.rs"), + parent_dir.join(&parent[1..].join("/")).to_path_buf(), + ) + } else { + // TODO warn about missing module? + continue; + }; if read_modules.contains(&module_path) { continue;