代码行数统计神器对决:tokei vs scc vs cloc
在日常开发中,你一定遇到过这些场景:
-
想统计项目 代码总行数
-
想看看 各语言占比
-
想评估 技术债规模
-
想分析 代码增长趋势
很多人第一反应是:
find . -name "*.java" | xargs wc -l
但这种方法有很多问题:
-
不会识别 注释 / 空行
-
无法识别 不同语言
-
不支持 忽略 vendor / build 目录
-
统计结果 不准确
于是就有了专门的 代码统计工具。
今天介绍三个最常用、最强大的工具:
|
|
|
|---|---|
| tokei |
|
| scc |
|
| cloc |
|
一、代码统计到底在统计什么
代码统计一般会区分:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
例如:
Language Files Blank Comment CodeGo 12 120 90 1500Java 50 800 400 9000Markdown 5 10 0 200
这些数据可以帮助我们:
-
判断 代码复杂度
-
评估 维护成本
-
分析 语言比例
二、三大代码统计工具
1 cloc(最经典)
cloc = Count Lines Of Code
最古老、最稳定的统计工具。
官网:
https://github.com/AlDanial/cloc
特点:
-
支持 200+ 语言
-
统计 代码 / 注释 / 空行
-
支持 diff 对比
-
支持 JSON/CSV 输出
安装:
Mac
brew install cloc
Linux
apt install cloc
基础使用
统计当前项目:
cloc .
示例输出:
Language files blank comment code---------------------------------------Go 15 120 80 1300Java 20 300 150 5000---------------------------------------SUM: 35 420 230 6300
忽略目录
例如忽略:
-
node_modules
-
build
-
vendor
cloc . --exclude-dir=node_modules,build,vendor
统计指定语言
cloc . --include-lang=Go,Java
输出 JSON
cloc . --json
适合做 CI统计分析。
对比两个版本代码
这是 cloc 的杀手功能。
cloc old_version new_version
输出:
added linesremoved linesmodified lines
可以用来:
-
统计 PR代码规模
-
评估 代码增长
三、tokei:最快的代码统计工具
如果说 cloc 是经典,
那么 tokei 就是速度王者。
项目地址:
https://github.com/XAMPPRocky/tokei
Rust 编写,速度非常快。
安装
Mac
brew install tokei
Linux
cargo install tokei
基础使用
tokei
输出示例:
Language Files Lines Code Comments Blanks--------------------------------------------------Rust 5 1200 900 200 100Markdown 3 200 150 0 50--------------------------------------------------Total 8 1400 1050 200 150
忽略目录
tokei --exclude node_modules,target
输出 JSON
tokei -o json
统计指定目录
tokei src
统计 Git 仓库
tokei .
默认会自动忽略:
.gitignore
四、scc:功能最强的统计工具
如果说:
-
cloc 最经典
-
tokei 最快
那么:
scc = 功能最强
项目:
https://github.com/boyter/scc
作者用 Go 写的。
支持:
-
代码复杂度
-
语言检测
-
Git统计
-
多线程加速
安装
Mac
brew install scc
Linux
go install github.com/boyter/scc@latest
基础使用
scc
示例:
Language Files Lines Code Comment Blank---------------------------------------------Go 10 1200 900 200 100Java 20 6000 4500 900 600---------------------------------------------Total 30 7200 5400 1100 700
统计复杂度
scc 独有功能:
scc --complexity
输出:
Cyclomatic Complexity
可以看到代码复杂度。
排序输出
scc --sort code
按代码行排序。
统计某种语言
scc --include-ext go,java
输出 JSON
scc --format json
五、真实工程场景
1 统计项目规模
scc .
快速了解:
-
项目代码规模
-
技术栈占比
2 统计 PR 代码量
cloc old new
用于:
-
Code Review
-
PR规模评估
3 CI 自动统计
GitHub Action:
tokei -o json > code_stats.json
生成:
-
代码趋势
-
语言比例
4 技术债分析
例如:
Comment / Code 比例
如果:
Comment < 5%
说明:
文档严重不足。
七、三大工具对比
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
总结:
稳定首选
cloc
追求速度
tokei
工程级统计
scc
八、工程师必备组合
推荐 CLI 工具组合:
代码搜索
ripgrep
模糊查找
fzf
代码统计
scc / tokei
九、一个有趣的事实
很多工程师会用代码行数评估项目规模。但实际上:代码行数 ≠ 软件复杂度
十、结语
代码统计工具看似简单,
但却是 理解项目结构的重要工具。
推荐工程师都安装:
scctokeicloc
三条命令就能快速了解任何项目。
文章推荐
ripgrep + fzf:工程师必备高效搜索系统
ripgrep:比grep更快的搜索神器
fzf:让你的命令行效率提升10倍的神器
夜雨聆风