Crate rustloclib

Crate rustloclib 

Source
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 in tests/ 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