Command-line interface for the Singularity Root Cause Analysis Engine.
# Install from source
cargo install --path . --features cli
# Or use just
just install-cli# Build with Nix
nix build .#singularity-rca
# Run directly
nix run .#singularity-rca -- --help# Show help
singularity-rca --help
# Analyze a file
singularity-rca analyze src/lib.rs
# Analyze a directory (recursive)
singularity-rca analyze src/ --recursive
# Get metrics for a specific file
singularity-rca metrics src/lib.rs
# List supported languages
singularity-rca languages
# Check complexity
singularity-rca complexity src/ --threshold 10
# Generate HTML report
singularity-rca report src/ --output report.html --format html
# Compare two versions
singularity-rca compare v1/src v2/src --diffAnalyze a file or directory for code quality metrics.
singularity-rca analyze <PATH> [OPTIONS]
Options:
-l, --language <LANG> Language to analyze (auto-detect if not specified)
--insights Include advanced insight metrics
-r, --recursive Recursive directory analysis
-f, --format <FORMAT> Output format: table, json, pretty, csv [default: table]
-v, --verbose Enable verbose loggingExamples:
# Analyze single file
singularity-rca analyze src/main.rs
# Analyze directory recursively
singularity-rca analyze src/ --recursive
# Output as JSON
singularity-rca analyze src/ -r --format json
# Enable insights and verbose output
singularity-rca analyze src/ -r --insights -v
# Specify language explicitly
singularity-rca analyze script.txt --language pythonGet detailed metrics for a specific file.
singularity-rca metrics <PATH> [OPTIONS]
Options:
-l, --language <LANG> Language to analyze
-m, --metric <METRIC> Show only specific metric
-f, --format <FORMAT> Output format [default: table]Metrics:
cyclomatic- Cyclomatic complexitycognitive- Cognitive complexityhalstead- Halstead metricsloc- Lines of codemaintainability- Maintainability indexall- All metrics (default)
Examples:
# All metrics
singularity-rca metrics src/lib.rs
# Only cyclomatic complexity
singularity-rca metrics src/lib.rs --metric cyclomatic
# JSON output
singularity-rca metrics src/lib.rs --format jsonList all supported languages and their status.
singularity-rca languages [OPTIONS]
Options:
-f, --format <FORMAT> Output format [default: table]Example:
singularity-rca languages
singularity-rca languages --format jsonAnalyze code complexity and highlight high-complexity functions.
singularity-rca complexity <PATH> [OPTIONS]
Options:
-t, --threshold <NUM> Threshold for warning [default: 10]
--only-high Show only functions above threshold
-f, --format <FORMAT> Output format [default: table]Examples:
# Check with default threshold (10)
singularity-rca complexity src/
# Custom threshold
singularity-rca complexity src/ --threshold 15
# Show only high complexity functions
singularity-rca complexity src/ --only-highGenerate a comprehensive quality report.
singularity-rca report <PATH> [OPTIONS]
Options:
-o, --output <FILE> Output file for report
-f, --format <FORMAT> Report format: html, markdown, json, pdf [default: html]Examples:
# Generate HTML report to stdout
singularity-rca report src/
# Save to file
singularity-rca report src/ --output quality-report.html
# Markdown format
singularity-rca report src/ --output REPORT.md --format markdown
# JSON format for CI integration
singularity-rca report src/ --output report.json --format jsonCompare metrics between two versions of code.
singularity-rca compare <PATH1> <PATH2> [OPTIONS]
Options:
--diff Show improvement/regression details
-f, --format <FORMAT> Output format [default: table]Examples:
# Compare two directories
singularity-rca compare old-version/ new-version/
# Show detailed diff
singularity-rca compare v1.0/ v2.0/ --diff
# JSON output for automation
singularity-rca compare v1/ v2/ --format jsonAll commands support multiple output formats:
Pretty-printed table format for terminal viewing.
╔═══════════════════════╦═══════╦════════════╦═══════════╗
║ File ║ Lines ║ Complexity ║ Functions ║
╠═══════════════════════╬═══════╬════════════╬═══════════╣
║ src/lib.rs ║ 450 ║ 12 ║ 8 ║
║ src/analyzer.rs ║ 320 ║ 8 ║ 5 ║
╚═══════════════════════╩═══════╩════════════╩═══════════╝
Structured JSON output for programmatic processing.
{
"files": [
{
"file": "src/lib.rs",
"lines": 450,
"complexity": 12,
"functions": 8
}
]
}Human-readable emoji-enhanced output.
📄 src/lib.rs
Lines: 450
Complexity: 12
Functions: 8
CSV format for spreadsheet import.
File,Lines,Complexity,Functions
src/lib.rs,450,12,8
src/analyzer.rs,320,8,5The CLI is built with feature gates to minimize dependencies:
# Library only (no CLI dependencies)
cargo build --release
# CLI binary (includes CLI dependencies)
cargo build --release --features cli
# All features (including insight metrics)
cargo build --release --all-features
# Using just
just build-lib # Library only
just build-cli # CLI binary
just build-all # Everything| Feature | Description | Dependencies |
|---|---|---|
default |
Base library | Core dependencies only |
cli |
Command-line interface | clap, anyhow, comfy-table, indicatif |
insight-metrics |
Advanced AI-powered metrics | Additional analysis libraries |
nif |
Elixir NIF support | rustler |
# GitHub Actions example
- name: Install Singularity RCA CLI
run: cargo install --path . --features cli
- name: Analyze code quality
run: |
singularity-rca analyze src/ --recursive --format json > metrics.json
- name: Check complexity threshold
run: |
singularity-rca complexity src/ --threshold 15 --format json#!/bin/bash
# .git/hooks/pre-commit
echo "Checking code complexity..."
if ! singularity-rca complexity src/ --threshold 10 --only-high; then
echo "Error: Code complexity exceeds threshold"
exit 1
fianalyze:
singularity-rca analyze src/ --recursive
quality-report:
singularity-rca report src/ --output report.html
complexity-check:
singularity-rca complexity src/ --threshold 12# Enable debug logging
RUST_LOG=debug singularity-rca analyze src/
# Disable colored output
NO_COLOR=1 singularity-rca languages
# Custom log level
RUST_LOG=singularity=trace singularity-rca analyze src/ --verboseThe project includes a justfile with convenient CLI commands:
# Build CLI
just build-cli
# Run CLI help
just cli-help
# Analyze current directory
just run-cli
# Analyze specific path
just cli-analyze src/
# Show metrics
just cli-metrics src/lib.rs
# List languages
just cli-languages
# Check complexity
just cli-complexity src/ --threshold 15
# Generate report
just cli-report src/ --output report.html
# Compare versions
just cli-compare v1/ v2/- Use
--format jsonfor large outputs - Faster than table formatting - Specify language explicitly - Skips auto-detection
- Use
--only-highwith complexity - Reduces output size - Enable parallel processing - Set
RAYON_NUM_THREADSenvironment variable
# Optimize for speed
RAYON_NUM_THREADS=8 singularity-rca analyze large-project/ --recursive --format jsonCheck supported languages: singularity-rca languages
- Verify file is valid source code
- Try specifying language explicitly:
--language rust - Enable verbose mode:
--verbose
- Use
--format jsoninstead of table - Reduce parallelism if memory-constrained:
RAYON_NUM_THREADS=2
# Run in development mode
cargo run --features cli -- analyze src/
# With hot reload (using cargo-watch)
cargo watch -x 'run --features cli -- analyze src/'
# Build optimized binary
cargo build --release --features cli
# Profile binary size
just bloatSee the main CONTRIBUTING.md for contribution guidelines.
For CLI-specific contributions:
- All CLI code lives in
src/bin/cli.rs - Follow the clap derive API patterns
- Add tests in
tests/cli_tests.rs - Update this documentation
MIT OR Apache-2.0