介绍
CLOC(代码行数统计工具)是一款命令行工具,可分析目录中的文件,并统计多种编程语言的代码行、注释行和空行数量。对于想要了解项目构成、衡量工作效率或评估项目复杂度的开发者来说,它是非常有价值的工具。

了解 CLOC 及其基本用法
CLOC(代码行数统计工具)是一款强大的实用工具,可帮助开发者通过统计多种编程语言的代码行、注释行和空行数量来分析代码库。
在这一步中,你将学习如何使用 CLOC 的基本语法来分析项目。
CLOC 基本命令
使用 CLOC 的基本语法如下:
cloc [options] <file/directory>
让我们使用 CLOC 来分析在设置过程中克隆的 Flask 项目:
- 点击任务栏中的终端图标打开终端。
- 导航到 Flask 项目目录:
cd ~/project/flask
- 运行基本的 CLOC 命令来分析整个项目:
cloc .
. 表示当前目录,因此这个命令告诉 CLOC 分析当前目录及其子目录中的所有文件。
理解输出结果
运行命令后,CLOC 将显示一个包含以下信息的表格:
- 语言(Language):项目中检测到的编程语言
- 文件数(Files):每种语言的文件数量
- 空行数(Blank):空行的数量
- 注释行数(Comment):注释行的数量
- 代码行数(Code):代码行的数量
输出结果应该如下所示:
56 text files.
56 unique files.
16 files ignored.
github.com/AlDanial/cloc v 1.90 T=0.11 s (428.1 files/s, 72093.6 lines/s)
--------------------------------------------------------------------------------
Language files blank comment code
--------------------------------------------------------------------------------
Python 41 3061 2088 7012
Markdown 5 175 0 314
YAML 2 10 3 84
make 1 21 30 46
TOML 1 6 0 19
--------------------------------------------------------------------------------
SUM: 50 3273 2121 7475
--------------------------------------------------------------------------------
这个输出结果为你提供了 Flask 项目代码库构成的全面概述。
使用 CLOC 分析特定文件类型
CLOC 允许你分析特定的文件类型,或者在分析时排除某些文件。当处理包含多种编程语言的大型项目时,这一功能特别有用。
分析特定文件扩展名的文件
若要仅分析具有特定扩展名的文件,你可以使用 --include-ext 选项,后面跟上用逗号分隔的文件扩展名列表:
- 如果你还未进入 Flask 项目目录,请导航到该目录:
cd ~/project/flask
- 运行 CLOC 仅分析项目中的 Python 文件:
cloc --include-ext=py .
现在输出将仅显示项目中 Python 文件的信息:
41 text files.
41 unique files.
0 files ignored.
github.com/AlDanial/cloc v 1.90 T=0.05 s (886.0 files/s, 264066.7 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Python 41 3061 2088 7012
-------------------------------------------------------------------------------
SUM: 41 3061 2088 7012
-------------------------------------------------------------------------------
排除特定目录
你还可以使用 --exclude-dir 选项在分析时排除特定目录:
cloc --exclude-dir=tests .
此命令会分析 Flask 项目,但会排除 tests 目录。输出将显示除 tests 目录中的文件之外的所有项目文件的统计信息:
34 text files.
34 unique files.
14 files ignored.
github.com/AlDanial/cloc v 1.90 T=0.07 s (372.3 files/s, 45941.8 lines/s)
--------------------------------------------------------------------------------
Language files blank comment code
--------------------------------------------------------------------------------
Python 25 1546 1103 3421
Markdown 5 175 0 314
YAML 2 10 3 84
make 1 21 30 46
TOML 1 6 0 19
--------------------------------------------------------------------------------
SUM: 34 1758 1136 3884
--------------------------------------------------------------------------------
通过使用这些过滤选项,你可以将分析重点放在与你需求最相关的代码库特定部分。
比较项目并生成报告
CLOC 提供了比较不同项目和生成各种格式报告的功能。这些功能对于跟踪随时间的变化或比较不同的代码库特别有用。
比较两个目录
让我们创建一个简单的项目,用于与 Flask 项目进行比较:
- 导航到项目目录:
cd ~/project
- 为一个简单的 Python 项目创建一个新目录:
mkdir sample_project
cd sample_project
- 创建几个包含一些代码的 Python 文件:
echo 'def hello_world():
"""
A simple function that prints Hello World
"""
print("Hello, World!")
if __name__ == "__main__":
hello_world()' > main.py
echo 'class Calculator:
"""A simple calculator class"""
def add(self, a, b):
"""Add two numbers"""
return a + b
def subtract(self, a, b):
"""Subtract b from a"""
return a - b' > calculator.py
- 现在,让我们使用 CLOC 的
diff功能将这个示例项目与 Flask 项目进行比较:
cd ~/project
cloc --diff flask sample_project
输出将显示两个项目之间代码指标的差异:
2 text files.
2 unique files.
0 files ignored.
github.com/AlDanial/cloc v 1.90 T=0.01 s (195.2 files/s, 1756.8 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Python 2 3 4 11
-------------------------------------------------------------------------------
SUM: 2 3 4 11
-------------------------------------------------------------------------------
Diff by file type:
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Python 39 3058 2084 7001
Markdown 5 175 0 314
YAML 2 10 3 84
make 1 21 30 46
TOML 1 6 0 19
-------------------------------------------------------------------------------
SUM: 48 3270 2117 7464
-------------------------------------------------------------------------------
生成不同格式的报告
CLOC 可以生成多种格式的报告,包括 CSV 和 XML。让我们为 Flask 项目创建一个 CSV 报告:
- 导航到 Flask 项目目录:
cd ~/project/flask
- 生成一个 CSV 报告:
cloc --csv --out=flask_stats.csv .
- 查看生成报告的内容:
cat flask_stats.csv
你应该会看到以 CSV 格式呈现的 CLOC 分析结果:
files,language,blank,comment,code,"github.com/AlDanial/cloc v 1.90 T=0.09 s (571.3 files/s, 96263.8 lines/s)"
41,Python,3061,2088,7012
5,Markdown,175,0,314
2,YAML,10,3,84
1,make,21,30,46
1,TOML,6,0,19
50,SUM,3273,2121,7475
这种 CSV 格式对于导入到电子表格或其他数据分析工具中特别有用。
同样,你可以生成一个 XML 报告:
cloc --xml --out=flask_stats.xml .
这些报告功能使 CLOC 成为代码分析和项目管理的多功能工具。
CLOC 高级选项:深入代码分析
CLOC 提供了几个高级选项,用于更详细和自定义的分析。这些选项允许你更深入地了解你的代码库。
在分析期间显示进度
在分析大型项目时,查看进度很有帮助。使用 --progress-rate 选项来显示进度更新:
cd ~/project/flask
cloc --progress-rate=10 .
此命令将在处理完每 10 个文件后显示进度更新。
分析匹配模式的文件
你可以使用 --match-f 选项来分析匹配特定模式的文件:
cloc --match-f='test_.*\.py$' .
此命令仅计算以 "test_" 开头的 Python 文件的代码行数。输出将显示 Flask 项目中测试文件的统计信息:
15 text files.
15 unique files.
0 files ignored.
github.com/AlDanial/cloc v 1.90 T=0.03 s (541.8 files/s, 155547.1 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Python 15 1337 736 3193
-------------------------------------------------------------------------------
SUM: 15 1337 736 3193
-------------------------------------------------------------------------------
当你想要专注于大型项目中特定的文件模式时,此功能特别有用。
按文件显示结果
要查看按单个文件而不是仅按语言进行分析的细分,请使用 --by-file 选项:
cloc --by-file --include-ext=py src/
此命令分析 src 目录中的 Python 文件,并单独显示每个文件的结果:
7 text files.
7 unique files.
0 files ignored.
github.com/AlDanial/cloc v 1.90 T=0.01 s (648.3 files/s, 180431.1 lines/s)
-------------------------------------------------------------------------------
File blank comment code
-------------------------------------------------------------------------------
src/flask/ctx.py 123 193 539
src/flask/app.py 284 490 999
src/flask/blueprints.py 100 191 421
src/flask/cli.py 126 188 557
src/flask/helpers.py 136 227 538
src/flask/templating.py 28 60 123
src/flask/globals.py 22 63 74
-------------------------------------------------------------------------------
SUM: 819 1412 3251
-------------------------------------------------------------------------------
这种详细的视图可以帮助你确定哪些特定文件对你的代码库大小贡献最大。
这些高级选项使 CLOC 成为在各种场景中进行全面代码分析的通用工具。
总结
在本次实验中,你学习了如何使用 CLOC(代码行数统计工具)来分析代码库,并深入了解项目的构成。以下是你所完成内容的总结:
- 基本用法:你学会了如何使用基本的
cloc命令来分析目录,并统计不同编程语言的代码行、注释行和空行的数量。 - 过滤和定位:你探索了如何使用
--include-ext选项将分析重点放在特定文件类型上,以及如何使用--exclude-dir选项排除某些目录。 - 比较和报告:你学会了如何使用
--diff选项比较不同的代码库,以及如何生成 CSV 和 XML 等各种格式的报告。 - 高级分析:你发现了一些高级选项,这些选项能提供更详细的见解,例如进度跟踪、重复文件检测、模式匹配和逐文件分析。
CLOC 是一款强大的工具,可供开发者、项目管理者和代码审计人员用来量化代码库的规模和复杂度。通过有效使用 CLOC,你可以:
- 了解项目的构成
- 跟踪编码生产力
- 估算项目复杂度
- 对代码架构和维护做出明智的决策
- 生成用于文档记录和分析的报告
这些功能使 CLOC 成为开发者进行代码分析和项目管理的必备工具。



