使用 CLOC 统计代码行数

LinuxBeginner
立即练习

介绍

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

CLOC 工具界面
这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 97%。获得了学习者 99% 的好评率。

了解 CLOC 及其基本用法

CLOC(代码行数统计工具)是一款强大的实用工具,可帮助开发者通过统计多种编程语言的代码行、注释行和空行数量来分析代码库。

在这一步中,你将学习如何使用 CLOC 的基本语法来分析项目。

CLOC 基本命令

使用 CLOC 的基本语法如下:

cloc [options] <file/directory>

让我们使用 CLOC 来分析在设置过程中克隆的 Flask 项目:

  1. 点击任务栏中的终端图标打开终端。
  2. 导航到 Flask 项目目录:
cd ~/project/flask
  1. 运行基本的 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 选项,后面跟上用逗号分隔的文件扩展名列表:

  1. 如果你还未进入 Flask 项目目录,请导航到该目录:
cd ~/project/flask
  1. 运行 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 项目进行比较:

  1. 导航到项目目录:
cd ~/project
  1. 为一个简单的 Python 项目创建一个新目录:
mkdir sample_project
cd sample_project
  1. 创建几个包含一些代码的 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
  1. 现在,让我们使用 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 报告:

  1. 导航到 Flask 项目目录:
cd ~/project/flask
  1. 生成一个 CSV 报告:
cloc --csv --out=flask_stats.csv .
  1. 查看生成报告的内容:
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(代码行数统计工具)来分析代码库,并深入了解项目的构成。以下是你所完成内容的总结:

  1. 基本用法:你学会了如何使用基本的 cloc 命令来分析目录,并统计不同编程语言的代码行、注释行和空行的数量。
  2. 过滤和定位:你探索了如何使用 --include-ext 选项将分析重点放在特定文件类型上,以及如何使用 --exclude-dir 选项排除某些目录。
  3. 比较和报告:你学会了如何使用 --diff 选项比较不同的代码库,以及如何生成 CSV 和 XML 等各种格式的报告。
  4. 高级分析:你发现了一些高级选项,这些选项能提供更详细的见解,例如进度跟踪、重复文件检测、模式匹配和逐文件分析。

CLOC 是一款强大的工具,可供开发者、项目管理者和代码审计人员用来量化代码库的规模和复杂度。通过有效使用 CLOC,你可以:

  • 了解项目的构成
  • 跟踪编码生产力
  • 估算项目复杂度
  • 对代码架构和维护做出明智的决策
  • 生成用于文档记录和分析的报告

这些功能使 CLOC 成为开发者进行代码分析和项目管理的必备工具。