跳转到内容

代码行数统计工具 cloc

cloc(Count Lines of Code)是一款功能强大的开源命令行工具,专门用于统计源代码文件中的代码行数、注释行数和空行数。它使用Perl语言开发,支持多平台使用(Windows、Linux、macOS等)和超过300种编程语言的识别,可以帮助开发者快速了解项目规模、代码组成和质量。

  • 精确统计:区分代码行、注释行和空行,提供准确的项目规模评估
  • 多语言支持:支持超过300种编程语言,适应各种技术栈的项目
  • 灵活配置:提供丰富的参数选项,满足不同场景的统计需求
  • 跨平台兼容:可在Windows、Linux、macOS等主流操作系统上运行
  • 高效分析:支持分析单个文件、整个目录、压缩文件甚至版本控制工具中的代码

cloc 提供多种安装方式,适用于不同的操作系统环境:

Terminal window
npm install -g cloc

基于 Debian 的系统(如 Ubuntu):

Terminal window
sudo apt-get update
sudo apt-get install cloc

基于 Red Hat 的系统(如 Fedora):

Terminal window
sudo yum install cloc

基于 Arch Linux 的系统:

Terminal window
sudo pacman -S cloc

使用 Homebrew 安装:

Terminal window
brew install cloc

使用 MacPorts 安装:

Terminal window
sudo port install cloc

方法一:使用 Chocolatey 包管理器安装

Terminal window
choco install cloc

方法二:直接下载可执行文件

  1. 访问 cloc GitHub 发布页面
  2. 下载最新版本的 cloc-xxx.exe 文件
  3. 重命名为 cloc.exe 并放置在系统 PATH 环境变量包含的目录中(如 C:\Windows\System32

最简单的用法是在项目根目录下执行以下命令:

Terminal window
cloc .

执行后,cloc 会分析当前目录及其子目录中的所有文件,并生成统计报告。

cloc png

Terminal window
# 统计单个文件
cloc example.js
# 统计多个文件
cloc file1.py file2.py
# 统计指定目录
cloc ./src

cloc 支持直接分析压缩文件,无需解压:

Terminal window
cloc project.zip
cloc source.tar.gz

cloc 提供了丰富的命令行参数,以下是一些常用的选项:

Terminal window
# 排除单个目录
cloc . --exclude-dir=node_modules
# 排除多个目录(用逗号分隔)
cloc . --exclude-dir=node_modules,build,dist

显示每个文件的详细统计信息:

Terminal window
cloc --by-file .

将空白行和注释行显示为相对于代码行的百分比:

Terminal window
cloc --by-percent c .

只统计特定的编程语言:

Terminal window
# 只统计 JavaScript 和 Python 文件
cloc . --lang=javascript,python

当 cloc 无法识别某些文件类型时,可以手动指定:

Terminal window
cloc . --include-ext=xyz --force-lang=xyz,Python

比较两个版本的代码,统计新增、修改和删除的行数:

Terminal window
cloc --diff old_version/ new_version/

cloc 支持多种输出格式,包括:

Terminal window
# CSV 格式输出
cloc --csv . > report.csv
# JSON 格式输出
cloc --json . > report.json
# XML 格式输出
cloc --xml . > report.xml

使用正则表达式过滤文件:

Terminal window
# 只统计以 .test.js 结尾的文件
cloc --match-f='\.test\.js$' .
# 排除所有以 .min.js 结尾的文件
cloc --not-match-f='\.min\.js$' .

执行 cloc 命令后,会生成类似如下的统计报告:

15 text files.
15 unique files.
0 files ignored.
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
JavaScript 8 120 80 450
HTML 3 15 5 120
CSS 4 20 10 80
-------------------------------------------------------------------------------
SUM: 15 155 95 650
-------------------------------------------------------------------------------

报告各列的含义:

  • Language:编程语言类型
  • files:该语言的文件数量
  • blank:空行数
  • comment:注释行数
  • code:实际代码行数

cloc 不仅是一个简单的代码统计工具,还可以在项目管理中发挥重要作用:

通过统计代码行数,可以快速了解项目的整体规模和复杂度,为项目规划和资源分配提供参考。

定期使用 cloc 统计代码量变化,可以量化团队的开发进度,评估工作效率。

通过分析代码行与注释行的比例,可以在一定程度上评估代码的可读性和可维护性。良好的代码通常有适当的注释比例。

在进行代码重构前后使用 cloc 统计,可以评估重构的效果,如代码量减少、注释比例提高等。

Terminal window
# 分析前端项目,排除第三方依赖
cloc . --exclude-dir=node_modules,dist,build
Terminal window
# 比较v1和v2版本的API接口代码变化
cloc --diff api/v1 api/v2
Terminal window
# 生成包含百分比和按文件统计的详细报告,并导出为CSV
cloc --by-file --by-percent c . --csv > project_report.csv
  1. 合理排除第三方代码:在统计项目代码时,应排除 node_modules、vendor 等第三方依赖目录,以获得更准确的项目自身代码量

  2. 定期统计跟踪:可以将 cloc 集成到 CI/CD 流程中,定期生成代码统计报告,跟踪项目发展趋势

  3. 结合其他指标:代码行数只是评估项目的一个维度,应结合复杂度、bug率、测试覆盖率等其他指标综合评估

  4. 注意代码质量:不要单纯追求代码行数的增加,更应关注代码质量和可维护性

cloc 是一款功能强大、灵活易用的代码统计工具,通过提供精确的代码行数统计,可以帮助开发团队更好地了解项目规模、跟踪开发进度和评估代码质量。无论是小型个人项目还是大型企业级应用,cloc 都能提供有价值的统计信息,为项目管理和决策提供数据支持。

通过掌握 cloc 的基本用法和高级功能,开发者可以更有效地利用这一工具,提升项目管理水平和代码质量。