使用cloc统计代码行数

747 阅读3分钟

cloc(Count Lines of Code)是一款很棒的开源命令行工具,它能帮你详细统计项目中的文件数(files)、空白行数(blank)、注释行数(comment)和代码行数(code) 。它会自动识别多种编程语言,并且支持在多平台上使用。

项目地址:github.com/AlDanial/cl…

下面我为你介绍一下它的安装和常用方法。

🧑‍💻 安装 cloc

cloc 的安装方法很多,你可以根据自己常用的操作系统选择命令

操作系统/包管理器安装命令
npmnpm install -g cloc
Debian, Ubuntusudo apt install cloc
Red Hat, Fedorasudo yum install cloc
Fedora 22 or latersudo dnf install cloc
Archsudo pacman -S cloc
Gentoosudo emerge -av dev-util/cloc
Alpine Linuxsudo apk add cloc
OpenBSDdoas pkg_add cloc
FreeBSDsudo pkg install cloc
macOS with MacPortssudo port install cloc
macOS with Homebrewbrew install cloc
Windows with Chocolateychoco install cloc
Windows with Scoopscoop install cloc

📊 基本使用命令

安装好后,在终端或命令行中就可以使用 cloc 命令了。

  • 统计当前目录下的代码情况:在项目根目录下执行:

    bash

    cloc .
    

    这会对当前目录(包括子目录)中的所有源代码进行统计。

  • 统计指定目录或文件:只需将 . 替换为你的目录路径或文件路径即可:

    bash

    cloc /path/to/your/project
    cloc /path/to/your/file.py
    

🎯 常用选项和场景

cloc 提供了一些非常实用的选项来满足不同需求:

  • 排除特定目录:这在项目有很多依赖(如 node_modulesvendorPods 等)时非常有用,可以避免统计这些目录下的代码

    bash

    cloc . --exclude-dir=node_modules,Pods,venv
    
  • 排除特定语言:如果你不希望统计某些特定语言的文件(比如只想看后端代码,排除前端代码),可以使用

    bash

    cloc . --exclude-lang=CSS,HTML,Markdown
    
  • 仅统计特定语言:与排除语言相反,你可以只关注某几种语言

    bash

    cloc . --include-lang=Python,Java,JavaScript
    # 或者通过扩展名
    cloc . --include-ext=.py,.java,.js
    
  • 按文件查看统计结果:此选项会列出每个文件的详细统计信息,方便你查看具体哪个文件代码量最多

    bash

    cloc . --by-file
    
  • 将统计结果输出到文件:cloc 支持将统计结果输出为多种格式,便于保存或后续分析,如纯文本、CSV、JSON、XML、YAML 等

    bash

    cloc . --out=result.txt  # 输出为文本文件
    cloc . --csv --out=result.csv  # 输出为CSV文件
    cloc . --json --out=result.json  # 输出为JSON文件
    

💡 理解统计结果

执行 cloc 命令后,你会看到一个清晰的表格格式输出,例如

text

Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                          48            651           1211           5045
JavaScript                     10            188            121            875
CSS                             3             18             25            125
-------------------------------------------------------------------------------
SUM:                            61            857           1357           6045

在这个结果中:

  • files: 对应语言的文件数量。
  • blank: 空白行的数量。
  • comment: 注释行的数量。
  • code有效代码行数,这也是你通常最关心的数字。
    表格最后会有一个所有语言的汇总(SUM)。

🚨 注意特殊情况

  • cloc 对于压缩包(如 .tar.gz.zip)也可以直接统计

    bash

    cloc perl-5.22.0.tar.gz
    
  • 使用 --exclude-dir 时,目录名称要准确,且如果需要排除多个目录,用逗号分隔

  • cloc 的统计结果是基于它内置的语言定义。在极少数情况下,如果某些非常冷门的文件格式未被正确识别,你可能需要通过 --read-lang-def 选项来自定义语言定义

  • 通常认为 code 列就是有效代码行数,它已经排除了空白行和注释行。