Expand description
§rustloclib
A Rust-aware lines of code counter library that separates code, tests, comments, and blank lines.
§Overview
Unlike generic LOC counters (tokei, cloc, scc), this library understands Rust’s unique structure where tests live alongside production code. It uses AST-aware parsing to distinguish:
- Main: Production code (main/src code)
- Tests: Code within
#[test]or#[cfg(test)]blocks, or intests/directories - Examples: Code in
examples/directories - Comments: Regular comments (
//,/* */) - Docs: Documentation comments (
///,//!,/** */,/*! */) - Blank: Whitespace-only lines
§Features
- Rust-aware parsing: Properly handles
#[cfg(test)],#[test]attributes - Cargo workspace support: Can filter by crate within a workspace
- Glob filtering: Filter files/directories with glob patterns
- Pure Rust data types: Returns structured data, no I/O side effects
§Origins
The parsing logic is adapted from cargo-warloc by Maxim Gritsenko. We thank the original author for the excellent parsing implementation. cargo-warloc is MIT licensed.
§Example
ⓘ
use rustloclib::{count_file, count_workspace, CountOptions, FilterConfig};
// Count a single file
let stats = count_file("src/main.rs")?;
// Count an entire workspace
let result = count_workspace(".", CountOptions::new())?;
// Count specific crates with filtering
let filter = FilterConfig::new().exclude("**/generated/**")?;
let result = count_workspace(".", CountOptions::new()
.crates(vec!["my-lib".to_string()])
.filter(filter))?;Re-exports§
pub use counter::count_directory;pub use counter::count_file;pub use counter::count_workspace;pub use counter::CountOptions;pub use counter::CountResult;pub use diff::diff_commits;pub use diff::CrateDiffStats;pub use diff::DiffOptions;pub use diff::DiffResult;pub use diff::FileChangeType;pub use diff::FileDiffStats;pub use diff::LocStatsDiff;pub use diff::LocsDiff;pub use error::RustlocError;pub use filter::FilterConfig;pub use options::Aggregation;pub use options::Contexts;pub use stats::CrateStats;pub use stats::FileStats;pub use stats::LocStats;pub use stats::Locs;pub use stats::ModuleStats;pub use visitor::parse_file;pub use visitor::parse_string;pub use visitor::VisitorContext;pub use workspace::CrateInfo;pub use workspace::WorkspaceInfo;
Modules§
- counter
- High-level LOC counting API.
- diff
- Git diff analysis for LOC changes between commits.
- error
- Error types for rustloclib
- filter
- File filtering and discovery with glob pattern support.
- options
- Input options for LOC counting and diffing operations.
- stats
- Core data structures for LOC statistics
- visitor
- Rust source file visitor for LOC counting.
- workspace
- Cargo workspace discovery and crate enumeration.
Type Aliases§
- Result
- Result type for rustloclib operations