ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

cloc 代码统计入门:一条命令看懂项目的空白行、注释行与代码行

cloc 代码统计入门:一条命令看懂项目的空白行、注释行与代码行

cloc 代码统计入门:一条命令看懂项目的空白行、注释行与代码行

【免费下载链接】cloccloc counts blank lines, comment lines, and physical lines of source code in many programming languages.项目地址: https://gitcode.com/gh_mirrors/cl/cloc

cloc 是一款开源代码统计工具,它按语言读取源码,逐行统计空白行、注释行和物理代码行,输出每种语言的行数明细。输入可以是单个文件、整个目录、压缩包,也可以是 Git 仓库中的某个版本。

cloc 统计的是什么

cloc 的核心工作是把每个源文件逐行归类成三种性质,这也是结果表里三列数字的由来:

  • blank 空白行:整行只有空白字符,反映排版疏密;
  • comment 注释行:单行注释和块注释都计入,注释占比高往往意味着文档写得细,也可能意味着注释和代码脱节;
  • code 物理代码行:真正承载逻辑的行,也就是常说的代码行数,同一语言内的多文件会汇总到这一行。

统计对象不限于散落的文件:传一个路径就递归整个目录树;tar.gz、zip 这类压缩包可以直接展开统计,不用先解压;配合--git还能锁定仓库里的某个 commit。扫描时它会自动跳过 .git、.svn 等版本控制目录,避免把对象文件和历史副本算进总数。

把 cloc 装进开发环境

最简单的路径是系统包管理器,Debian/Ubuntu 下一行装完:

sudo apt install cloc

装完用cloc --version确认版本即可。其余方式一句话带过:官方分发是一个单文件 Perl 脚本,拷到目标机器就能跑,不挑环境;如果不想污染本机,也可以按仓库里的 Dockerfile 起一个容器执行。

跑第一条统计命令,读懂结果表

先在一个文件上跑最简命令:

cloc hello.c

输出是一张按语言汇总的表:第一列Language是语言名,files是被统计的文件数,后面的blank、comment、code分别对应上面三种行。最后一行TOTAL把所有语言加总。读表时先看 TOTAL 判断整体规模,再看各语言占比;如果某个文件对应的语言没出现在表里,说明它没被识别,通常是扩展名不在内置语言表内。

按场景使用:版本对比、结果导出、范围过滤、批量统计

版本对比用法

要量化这个迭代到底改了多少,用cloc --diff v1.0 v2.0对比两个版本(两个目录或两个压缩包),输出每种语言在空白行、注释行、代码行上的增减,比翻 diff 更直观。

统计结果导出

统计结果要进 Excel 或 CI 报告时,加cloc --json --out=report.json src/导出 JSON,--csv、--xml、--md同理,换格式不换命令结构。

目录与语言过滤

第三方依赖和生成物会污染总数。cloc --exclude-dir=node_modules,build src/排除目录;反过来想只看某几种语言,用--include-lang=Python,JavaScript。

多项目批量统计

一组子项目想横向对比时,用一行 shell 循环,每个子目录输出一个 CSV,最后用表格软件汇总。

效率与边界处理

并行加速:大型 monorepo 单进程扫起来偏慢,cloc --processes=4 src/把工作分给 4 个进程,多核机器上提速明显。

文件大小限制:遍历目录时默认跳过超过 100 MB 的文件,因为内存占用约是单文件体积的 20 倍。确实需要统计超大文件时,用--max-file-size=500放宽阈值(单位 MB);注意这个限制只作用于目录遍历,文件作为参数显式传入时不检查。

无扩展名文件指定语言:没有扩展名的文件默认靠首行 shebang 猜脚本类型,猜不出的文件会被跳过,不会计入语言统计。用--lang-no-ext=Bash可以强制按指定语言计数,参数里写的是语言名,比如 Bash、Makefile。

cloc 适合放进例行动作,比如每周项目报告、PR 审查前的规模自检、CI 里的代码量趋势。它给出的数字客观且可复现,比凭印象估算项目大小更可靠。参数细节以 man 页源码 Unix/cloc.1.pod 为准,工具本体是单文件脚本 Unix/cloc,整体介绍见 README.md。

【免费下载链接】cloccloc counts blank lines, comment lines, and physical lines of source code in many programming languages.项目地址: https://gitcode.com/gh_mirrors/cl/cloc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进