Dogfooding Findings
Using normalize on itself. Patterns and observations from CLI usage.
View Primitive
What Works:
- Fuzzy path resolution:
view skeleton.rsfindscrates/normalize/src/skeleton.rs - Symbol paths:
view skeleton.rs/SkeletonExtractor - Underscore/hyphen equivalence:
normalize-apimatchesnormalize_api --depthcontrols expansion level--jsonfor structured output
Gaps:
- No
--types-onlyfilter (would show only structs/enums/traits) - No
--fisheyemode (show imported module signatures)
Analyze Primitive
What Works:
--health: codebase metrics (files, lines, complexity summary, grade)--complexity: per-function cyclomatic complexity with risk levels- Threshold filter:
-t 10shows only functions above threshold - Works without index (filesystem fallback)
Gaps:
- Security scanning not integrated (bandit, semgrep, cargo-audit)
Investigation Flow
Effective pattern for understanding unfamiliar code:
normalize view .- get tree structurenormalize view <file>- file skeleton with symbolsnormalize analyze --complexity- find complex areasnormalize view <file>/<symbol>- drill into specific symbol
Token Efficiency
- Use shallow depth (
--depth 1) for overview - Symbol paths (
file/Symbol) avoid loading entire file --json | jqfor extracting specific fields- Health check before diving into specifics
CLI Conventions
Global flags:
--jsonfor structured output--prettyfor human-friendly display (tables, colors, alignment)- Default is token-efficient (minimal decoration)
- All commands work with fuzzy paths
Future Improvements
--types-onlyfilter for architectural overview--fisheyeto show imported dependencies inline--visibility public|allfilter- Cross-language import resolution (Rust
use, TypeScriptimport)