codestat-0.1.0 is not a library.
CodeStat
一个使用 Rust 编写的高性能代码统计工具,用于统计 Git 仓库或指定目录中的代码行数和编程语言分布。
特性
- ⚡ 极速: 使用并行处理 (Rayon) 和优化的文件遍历
- 🛡️ 安全: 纯 Rust 实现,内存安全,无数据竞争
- 📊 详细统计: 代码行、注释行、空行分别统计
- 🔍 智能检测: 支持 50+ 种编程语言
- 🎯 尊重 .gitignore: 自动忽略不应统计的文件
- 📁 灵活输出: 支持表格、JSON、CSV 格式
支持的编程语言
- 系统编程: Rust, C, C++, Go, Zig, Assembly
- Web 开发: JavaScript, TypeScript, HTML, CSS, SCSS, PHP
- JVM 语言: Java, Kotlin, Scala, Groovy, Clojure
- 移动开发: Swift, Objective-C, Dart
- 脚本语言: Python, Ruby, Perl, Shell, PowerShell
- 函数式: Haskell, Elixir, Erlang, F#, Lisp
- 数据科学: R, MATLAB, Julia
- 配置/标记: JSON, YAML, XML, TOML, Markdown
- 更多...
安装
从源码构建
编译后的二进制文件位于 target/release/codestat
使用方法
基本用法
# 统计当前目录
# 统计指定目录
# 统计单个文件
输出格式
# 表格格式 (默认)
# JSON 格式
# CSV 格式
高级选项
# 显示每个文件的统计
# 显示进度
# 包含隐藏文件
# 只统计特定语言
# 排除特定模式
# 禁用并行处理 (降低内存使用)
# 跟随符号链接
性能
经过深度优化,性能表现如下:
| 项目规模 | 文件数 | 代码行数 | 耗时 | 处理速度 |
|---|---|---|---|---|
| 小型 | 500 | 30K | 0.08s | 6,500 文件/s |
| 中型 | 4,600 | 1.6M | 0.42s | 11,000 文件/s |
| 大型 | 50K+ | 20M+ | ~3s | 15,000+ 文件/s |
优化亮点:
- 内存映射大文件(零拷贝)
- 字节级分析(无 UTF-8 验证开销)
- 智能负载均衡(按文件大小排序)
- 批量并行处理(减少任务切换)
与其他工具对比
| 工具 | 4,600 文件 | 特性 |
|---|---|---|
| codestat | 0.42s | Rust,零拷贝,并行 |
| tokei | ~0.6s | Rust,功能丰富 |
| cloc | ~4s | Perl,准确但慢 |
| scc | ~1s | Go,功能丰富 |
测试环境: macOS, M1 Pro, 16GB RAM
示例输出
表格格式
================================================================================
Language Files Lines Code Comments Blanks
--------------------------------------------------------------------------------
Rust 6 1108 951 40 117
TOML 1 22 20 0 2
--------------------------------------------------------------------------------
Total 7 1130 971 40 119
================================================================================
Statistics completed in 0.003s (2333 files/s, 376667 lines/s)
JSON 格式
性能 Benchmark
运行内置 benchmark 测试各模块性能:
典型测试结果 (M1 Pro)
【语言检测性能】
速度: 4,141,859 文件/秒
平均延迟: 241ns
【不同文件大小处理】
1KB: 38µs (26 MB/s)
10KB: 89µs (109 MB/s)
100KB: 558µs (175 MB/s)
1MB: 5.3ms (189 MB/s)
10MB: 40ms (250 MB/s)
【语言解析性能】
Markdown: 33µs (1000 lines)
Python: 70µs (1000 lines)
Rust: 76µs (1000 lines)
JavaScript: 82µs (1000 lines)
【并行加速】
串行: 23.7ms
并行: 3.7ms
加速比: 6.38x (80% 并行效率)
技术栈
- Rust 2024 Edition: 最新的 Rust 语言特性
- Rayon: 数据并行处理,工作窃取调度
- ignore: 智能文件遍历,支持 .gitignore
- memmap2: 内存映射大文件(零拷贝)
- clap: 命令行参数解析
- serde: JSON 序列化
优化技术详解
1. 零拷贝文件读取
- 小文件 (< 1MB): 预分配缓冲区一次性读取
- 大文件 (> 1MB): 使用
mmap内存映射,避免内核态到用户态的拷贝
2. 字节级解析
- 直接操作
&[u8],避免String的 UTF-8 验证开销 - 手写行扫描器,比
lines()迭代器更快 - 快速空行检测:
O(n)字节检查
3. 智能并行策略
- 小批量 (< 100 文件): 串行处理,避免并行开销
- 大批量: 按文件大小降序排序,实现负载均衡
- 批量处理: 减少 Rayon 任务切换开销
4. 算法优化
- 静态 HashMap:
OnceLock懒加载,O(1) 语言检测 - 字节查找: 简化版 Boyer-Moore 子串匹配
- 单次遍历: 一行代码完成所有统计类型
许可证
MIT License