name: code-stats
description: "Analyze codebase with tokei (fast line counts by language) and difft (semantic AST-aware diffs). Get quick project overview without manual counting. Triggers on: how big is codebase, count lines of code, what languages, show semantic diff, compare files, code statistics."
compatibility: "Requires tokei and difft CLI tools. Install: brew install tokei difft (macOS) or cargo install tokei difftastic (cross-platform)."
allowed-tools: "Bash"
Code Statistics
Purpose
Quickly analyze codebase size, composition, and changes with token-efficient output.
Tools
| Tool |
Command |
Use For |
| tokei |
tokei |
Line counts by language |
| difft |
difft file1 file2 |
Semantic AST-aware diffs |
tokei - Code Statistics
Basic Usage
# Count all code in current directory
tokei
# Count specific directory
tokei src/
# Count multiple directories
tokei src/ lib/ tests/
# Count specific file
tokei src/main.rs
Output Options
# Compact single-line per language
tokei --compact
# Sort by lines of code
tokei --sort code
# Sort by number of files
tokei --sort files
# Sort by comments
tokei --sort comments
# Only show specific languages
tokei --type=TypeScript,JavaScript
# List all recognized languages
tokei --languages
Filtering
# Exclude directories
tokei --exclude node_modules --exclude vendor --exclude dist
# Exclude by pattern
tokei --exclude "*.test.*" --exclude "*.spec.*"
# Include hidden files
tokei --hidden
# Only count certain languages
tokei -t Python,Rust
Output Formats
# JSON output (for processing)
tokei --output json
# YAML output
tokei --output yaml
# CBOR output
tokei --output cbor
# Pipe JSON to jq
tokei --output json | jq '.TypeScript.code'
Sample Output
===============================================================================
Language Files Lines Code Comments Blanks
===============================================================================
TypeScript 45 12847 9823 1456 1568
JavaScript 12 2341 1876 234 231
JSON 8 456 456 0 0
Markdown 15 1234 0 1234 0
-------------------------------------------------------------------------------
Total 80 16878 12155 2924 1799
===============================================================================
Understanding Output
| Column |
Meaning |
| Files |
Number of files of this language |
| Lines |
Total lines (code + comments + blanks) |
| Code |
Non-blank, non-comment lines |
| Comments |
Comment lines |
| Blanks |
Empty lines |
difft - Semantic Diffs
Basic Usage
# Compare two files
difft old.py new.py
# Compare directories
difft dir1/ dir2/
# Compare with options
difft --color=always old.ts new.ts
Display Modes
# Side-by-side (default)
difft old.js new.js
# Inline (unified style)
difft --display=inline old.js new.js
# Show only changes
difft --skip-unchanged old.js new.js
Git Integration
# Use as git difftool
git difftool --tool=difftastic HEAD~1
# Configure as default difftool
git config --global diff.tool difftastic
git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
# Use for specific diff
GIT_EXTERNAL_DIFF=difft git diff HEAD~1
Language Support
# Force language detection
difft --language=python old.py new.py
# List supported languages
difft --list-languages
Why Semantic Diffs?
| Traditional diff |
difft |
| Line-by-line comparison |
AST-aware comparison |
| Shows moved lines as delete+add |
Shows as moved |
| Whitespace sensitive |
Ignores formatting changes |
| Can be noisy |
Focuses on semantic changes |
Comparison: tokei vs other tools
| Feature |
tokei |
cloc |
wc -l |
| Speed |
Fastest |
Slow |
Fast |
| Language detection |
Yes |
Yes |
No |
| Comment counting |
Yes |
Yes |
No |
| .gitignore respect |
Yes |
Yes |
No |
| JSON output |
Yes |
Yes |
No |
Common Workflows
Project Assessment
# Quick overview
tokei --compact --sort code
# Detailed breakdown to file
tokei > code-stats.txt
# Compare before/after refactor
tokei --output json > before.json
# ... make changes ...
tokei --output json > after.json
diff before.json after.json
Code Review
# Semantic diff for review
difft main.ts feature.ts
# Compare branches
git diff main feature -- "*.ts" | difft
# Review specific commit
GIT_EXTERNAL_DIFF=difft git show abc123
CI Integration
# Check codebase size limits
LINES=$(tokei --output json | jq '.Total.code')
if [ "$LINES" -gt 100000 ]; then
echo "Codebase exceeds 100k lines"
exit 1
fi
Quick Reference
| Task |
Command |
| Count all code |
tokei |
| Compact output |
tokei --compact |
| Sort by code |
tokei --sort code |
| TypeScript only |
tokei -t TypeScript |
| JSON output |
tokei --output json |
| Exclude dir |
tokei --exclude node_modules |
| Semantic diff |
difft file1 file2 |
| Inline diff |
difft --display=inline a b |
| Git diff |
GIT_EXTERNAL_DIFF=difft git diff |
When to Use
- Getting quick codebase overview
- Comparing code changes semantically
- Understanding project composition
- Reviewing refactoring impact
- Estimating project size
- Tracking codebase growth over time
- Code review with meaningful diffs