diff --git a/src/cargo-fmt/main.rs b/src/cargo-fmt/main.rs index 3c4d1c08b08..9a20b6374ab 100644 --- a/src/cargo-fmt/main.rs +++ b/src/cargo-fmt/main.rs @@ -252,12 +252,25 @@ fn get_targets_root_only(targets: &mut BTreeSet) -> Result<(), io::Error let workspace_root_path = PathBuf::from(&metadata.workspace_root).canonicalize()?; let in_workspace_root = workspace_root_path == current_dir; - for package in metadata.packages { - if in_workspace_root || PathBuf::from(&package.manifest_path) == current_dir_manifest { - for target in package.targets { - targets.insert(Target::from_target(&target)); - } - } + let package_targets = match metadata.packages.len() { + 1 => metadata.packages.into_iter().next().unwrap().targets, + _ => metadata + .packages + .into_iter() + .filter(|p| { + in_workspace_root + || PathBuf::from(&p.manifest_path) + .canonicalize() + .unwrap_or_default() + == current_dir_manifest + }) + .map(|p| p.targets) + .flatten() + .collect(), + }; + + for target in package_targets { + targets.insert(Target::from_target(&target)); } Ok(())