1use anyhow::Result;
2
3use std::path::PathBuf;
4
5pub mod analysis;
6pub mod visitor;
7pub mod walker;
8
9pub struct Report {
10 pub unused_items: Vec<UnusedItem>,
11 pub count: usize,
12}
13
14pub struct UnusedItem {
15 pub name: String,
16 pub kind: String,
17 pub location: String,
18}
19
20pub fn run(path: PathBuf, verbose: bool, filters: Vec<String>) -> Result<Report> {
21 let files = walker::get_rust_files(&path)?;
23 if verbose {
24 println!("Found {} Rust files.", files.len());
25 }
26
27 let (definitions, usages) = analysis::analyze(files, verbose)?;
31
32 let unused_items = analysis::diff(definitions, usages, filters);
34
35 Ok(Report {
36 count: unused_items.len(),
37 unused_items,
38 })
39}