loc-rs 0.2.6

Advanced Lines of Code counter with function extraction, git integration, and parallel processing
# loc-rs Architecture

This document explains how `loc-rs` is organized and how data flows through the scan pipeline.

## High-Level Flow

1. `src/main.rs` parses CLI args.
2. `src/counter/mod.rs` builds scan config and discovers files.
3. Files are classified as text/binary and analyzed for line metrics.
4. Optional function extraction runs per supported language.
5. `src/display/mod.rs` renders terminal output.
6. `src/export/*` writes JSON/JSONL/CSV/HTML reports when requested.

## Module Responsibilities

- `src/cli/mod.rs`
  - Clap argument definitions and help text.
- `src/config/mod.rs`
  - Global config loading from platform config directory.
- `src/language/mod.rs`
  - Language-extension mapping, alias resolution, comment specs, default exclusions.
- `src/counter/mod.rs`
  - File discovery, content analysis, binary detection, git integration, scan orchestration.
- `src/extractors/*`
  - Tree-sitter-backed per-language function extraction implementations.
- `src/models/mod.rs`
  - Core data structures (`FileInfo`, `FunctionInfo`, `ScanResult`, extension stats).
- `src/display/mod.rs`
  - Summary, breakdown, tree view, and function analysis output.
- `src/export/*`
  - Report serialization and export format handling.

## Discovery Strategy

- In git repos (default): uses `git ls-files` to align with tracked/unignored files.
- Outside git: uses recursive filesystem walk with exclusion sets.
- `.locignore` allows project-specific ignores.
- Hidden files are skipped by default unless `--include-hidden` is used.

## Function Extraction Model

- Extraction is opt-in (`-f` or `--func-analysis`, or config default).
- Extractors parse ASTs via Tree-sitter grammar crates.
- Output includes name, line range, method/class flags, and complexity estimate.
- Complexity is a keyword-based cyclomatic approximation used consistently across extractors.

## Output Model

- Summary metrics always include total lines, text file count, and code/comment/blank splits.
- Function/class lines appear only when extraction is enabled.
- Detailed breakdown (`-d`) includes per-extension metrics, plus function counts when extraction is enabled.

## Testing Surface

- Unit tests: comment parsing, binary detection, extension resolution, extractor behavior.
- Integration tests: CLI behavior and export format validity.
- Key integration files:
  - `tests/cli.rs`
  - `tests/core.rs`
  - `tests/export.rs`