diff --git a/README.md b/README.md index 89d9fb4..b2f0736 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,8 @@ The exit code gives an indication whether unused dependencies have been found: - [ ] make the reporting more granular for `[dependencies]`, `[dev-dependencies]` and `[build-dependencies]` - [ ] add tests - [ ] print things nicely -- [ ] ignore `[package.metadata.cargo-shear] ignored = ["crate"]` +- [x] ignore `[package.metadata.cargo-shear] ignored = ["crate"]` + ## Prior Arts diff --git a/src/lib.rs b/src/lib.rs index 0d83709..423d10d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -118,7 +118,23 @@ impl CargoShear { }) .collect::>(); - let mod_names = package_deps_map.keys().cloned().collect::>(); + let ignored_names = package + .metadata + .as_object() + .and_then(|object| object.get("cargo-shear").and_then(|object| object.get("ignored"))) + .and_then(|ignored| { + ignored.as_array().map(|ignored| { + ignored.iter().filter_map(|item| item.as_str()).collect::>() + }) + }) + .unwrap_or_default(); + + let mod_names = package_deps_map + .keys() + .filter(|name| !ignored_names.contains(name.as_str())) + .cloned() + .collect::>(); + let rust_file_deps = Self::get_package_dependencies_from_rust_files(package)?; let unused_deps = mod_names.difference(&rust_file_deps).collect::>(); if unused_deps.is_empty() {