This cargo subcommand tries to detect pub methods that are unused in an entire workspace, by performing workspace-wide analysis.
The dead_code Rust compiler lint ignores pub methods, given that:
- The linter operates crate-by-crate.
- Unused
pubmethods could be used in another workspace crate, or be part of a public API.
See also the following discussions about this problem:
- rust-lang/rust-clippy#5828 (closed as Clippy does not perform workspace-level analyses).
- https://users.rust-lang.org/t/would-pub-workspace-be-possible/105503/2
$ cargo workspace-unused-pub --help
Detect unused pub methods in a workspace
Usage: cargo workspace-unused-pub [OPTIONS] [WORKSPACE]
Arguments:
[WORKSPACE] [default: current workspace]
Options:
--scip <SCIP>
--extensions <EXTENSIONS> [default: rs,html]
-h, --help Print help
-V, --version Print versionDetection is performed in multiple phases:
-
Open an SCIP code index, or generate one with rust-analyzer.
Opened SCIP file with 806 documentsNote that the index generation can take a significant amount of time on large workspaces.
-
Record methods and traits declarations.
Found 6722 declarations and 286 traits -
Phase 1: Find all methods that are seem never used. The following phases aim at removing false positives.
Pass 1: 1419 candidates -
Phase 2: Remove false positives stemming from
main, tests and trait methods.Pass 2 (mains, tests, trait methods): 189 candidates -
Phase 3: Perform a text search to remove false positives due to e.g. use in HTML templates:
Pass 3 (search): 43 candidates Found 43 possibly unused functionsThe extensions that are searched are defined by the
--extensionsflag.
The output of each phase (in the format above) can be viewed by setting the RUST_LOG=debug environment variable.
- https://github.com/est31/warnalyzer. When
cargo-workspace-unused-pubwas developed,warnalyzerrelied on the removed nightlysave-analysisfeature, and therefore required an older nightly compiler (see est31/warnalyzer#9). This issue is now addressed, andwarnanalyzerhas a SCIP backend.
- Automatically remove the unused functions (assuming a clean git repository is found).
- Build an approximate SCIP index with tree-sitter instead of rust-analyzer, for faster execution (e.g. in CI).
- Allow ignoring false positives with a special code comment or attribute.
- Support other objects than only methods (e.g. constants).
- Robustify the detection of test/main functions.
