From 5596a38acd36035d6ea976e45561a28a91398fd5 Mon Sep 17 00:00:00 2001 From: Bechma <19294519+Bechma@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:39:19 +0100 Subject: [PATCH] fix: handle absence of Cargo.toml in metadata retrieval Signed-off-by: Bechma <19294519+Bechma@users.noreply.github.com> --- crates/module-parser/src/metadata.rs | 4 ++++ crates/module-parser/src/source.rs | 10 +++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/crates/module-parser/src/metadata.rs b/crates/module-parser/src/metadata.rs index d18f149..3723324 100644 --- a/crates/module-parser/src/metadata.rs +++ b/crates/module-parser/src/metadata.rs @@ -50,6 +50,10 @@ pub fn resolve_source_from_metadata( path: &Path, query: &str, ) -> anyhow::Result> { + // If there's no Cargo.toml, there's no point to run cargo metadata + if !path.join("Cargo.toml").is_file() { + return Ok(None); + } let query = RustPathQuery::parse(query)?; let metadata = cargo_metadata::MetadataCommand::new() .current_dir(path) diff --git a/crates/module-parser/src/source.rs b/crates/module-parser/src/source.rs index c5c6a6f..1a3bd6c 100644 --- a/crates/module-parser/src/source.rs +++ b/crates/module-parser/src/source.rs @@ -50,13 +50,14 @@ pub fn extract_reexport_target( fn resolve_in_file(file_path: &Path, segments: &[&str]) -> anyhow::Result { let content = fs::read_to_string(file_path) .with_context(|| format!("failed to read Rust source from {}", file_path.display()))?; - let parsed = syn::parse_file(&content) + let mut parsed = syn::parse_file(&content) .with_context(|| format!("failed to parse Rust source from {}", file_path.display()))?; if segments.is_empty() { + parsed.items = parsed.items.into_iter().filter_map(filter_item).collect(); return Ok(ResolvedRustPath { source_path: file_path.to_path_buf(), - source: render_file(&filtered_file(parsed)), + source: render_file(&parsed), }); } @@ -222,11 +223,6 @@ fn module_path_override(module: &ItemMod) -> Option { }) } -fn filtered_file(mut file: File) -> File { - file.items = file.items.into_iter().filter_map(filter_item).collect(); - file -} - fn filter_inline_module(mut module: ItemMod) -> ItemMod { if let Some((brace, items)) = module.content.take() { let filtered_items = items.into_iter().filter_map(filter_item).collect();