前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >wc 统计已过时,cloc 每一行代码都有效

wc 统计已过时,cloc 每一行代码都有效

作者头像
程序员荒生
发布2022-07-14 08:37:45
3090
发布2022-07-14 08:37:45
举报

上下文

我们通常用代码量来评判一个程序员技术的高低或一个项目的大小,阅读新项目源码时,也需要了解其代码量,心里有个预期。

那如何统计代码量呢?

传统做法

通过find+wc命令完成

代码语言:javascript
复制
$ find . -name "*.go" | xargs wc -l

60 ./etcd/tutorial/distributed_lock.go
...
3491 total

如上,统计命令显示了所有文件,一共有 3491 行代码。但是此处统计太过粗暴,wc 统计过程将注释、空白行等内容都被算作代码统计其中。

我们应该尝试更有效的统计方式。

有效统计 cloc

cloc(Count Lines of Code[0]) 是一个 Perl 语言开发的开源代码统计工具。支持多平台、多语言、分类别的统计目标文件或文件夹中源代码的文件数、空白行数、注释行数和代码行数。

安装

支持多种安装方式,几乎包含常用的所有安装方式。

代码语言:javascript
复制
npm install -g cloc              # https://www.npmjs.com/package/cloc
sudo apt install cloc            # Debian, Ubuntu
sudo yum install cloc            # Red Hat, Fedora
sudo dnf install cloc            # Fedora 22 or later
sudo pacman -S cloc              # Arch
sudo emerge -av dev-util/cloc    # Gentoo https://packages.gentoo.org/packages/dev-util/cloc
sudo apk add cloc                # Alpine Linux
doas pkg_add cloc                # OpenBSD
sudo pkg install cloc            # FreeBSD
sudo port install cloc           # macOS with MacPorts
brew install cloc                # macOS with Homebrew
choco install cloc               # Windows with Chocolatey
scoop install cloc               # Windows with Scoop

cloc 优势?

cloc 具有易于使用、可扩展和可移植的特性:

  • 安装方便,只需下载文件包运行即可。
  • 支持分类别统计多种语言:Java、Go、Python、C 等。
  • 支持分类别统计多种格式的结果:纯文本、SQL、JSON、XML、YAML、逗号分隔值等。
  • 支持分类别统计文件数、空白行数、注释行数和代码行数。

基本使用

代码语言:javascript
复制
$ cloc ./     # 可统计目录
$ cloc perl-5.22.0.tar.gz # 也可直接统计压缩包

对于前端同学,统计代码往往需要忽略最大的 node_modules 以及打包生成的 dist 文件,支持过滤逻辑,使用非常方便。

代码语言:javascript
复制
$ cloc $(git ls-files) 
# 或
$ cloc --vcs git    
# 或过滤 svn 
$ cloc --vcs svn

高级用法

使用方法也很简单,统计结果会按照语言分类统计源代码的空白行、注释行和物理行。具体如下:

统计单个文件

代码语言:javascript
复制
#$ cloc docker-compose-devcontainer.yml

       1 text file.
       1 unique file.
       0 files ignored.

github.com/AlDanial/cloc v 1.92  T=0.01 s (140.6 files/s, 4919.9 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
YAML                             1              3              1             31
-------------------------------------------------------------------------------

统计文件夹

代码语言:javascript
复制
$ cloc .

      54 text files.
      42 unique files.
      14 files ignored.

github.com/AlDanial/cloc v 1.92  T=0.14 s (290.8 files/s, 22637.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Go                              29            381            216           2468
Markdown                         6             28              0             55
...
-------------------------------------------------------------------------------
SUM:                            42            431            220           2618
-------------------------------------------------------------------------------

也同时支持通过--exclude-dir参数过滤掉不计入统计的路径

代码语言:javascript
复制
$ cloc . --exclude-dir=build

      52 text files.
      40 unique files.
      14 files ignored.

github.com/AlDanial/cloc v 1.92  T=0.07 s (605.9 files/s, 48999.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Go                              29            381            216           2468
Markdown                         5             27              0             54
...
-------------------------------------------------------------------------------
SUM:                            40            423            217           2595
-------------------------------------------------------------------------------

也支持按--by-file参数进行统计结果的筛选。

代码语言:javascript
复制
$ cloc . --by-file | head -n 10

      54 text files.
      42 unique files.
      14 files ignored.

github.com/AlDanial/cloc v 1.92  T=0.03 s (1380.3 files/s, 107434.2 lines/s)
-----------------------------------------------------------------------------------------
File                                                  blank        comment           code
-----------------------------------------------------------------------------------------
./etcd/tutorial/demo.go                                  53              0            291
./etcd/simple_raft/raft_log.go                           29             93            263

统计文件夹下多个子目录

代码语言:javascript
复制
$ for d in ./*/ ; do (cd "$d" && echo "$d" && cloc .); done
./go-bootcamp/
    1474 text files.
    1226 unique files.
     540 files ignored.

github.com/AlDanial/cloc v 1.92  T=7.16 s (171.2 files/s, 118482.4 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
JavaScript                     421          10606          84539         584311
...
-------------------------------------------------------------------------------
SUM:                          1226          18182         100323         729998
-------------------------------------------------------------------------------
./html-bootcamp/
      18 text files.
      15 unique files.
       5 files ignored.

github.com/AlDanial/cloc v 1.92  T=0.02 s (635.5 files/s, 9744.9 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
HTML                             4             28              8             89
...
-------------------------------------------------------------------------------
SUM:                            15             51             15            164
-------------------------------------------------------------------------------
./java-bootcamp/
       3 text files.
       1 unique file.
       3 files ignored.

github.com/AlDanial/cloc v 1.92  T=0.01 s (104.8 files/s, 524.2 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Markdown                         1              2              0              3
-------------------------------------------------------------------------------

更多命令

代码语言:javascript
复制
$ cloc --help

支持的语言

代码语言:javascript
复制
$ cloc --show-lang

通过 docker 运行

代码语言:javascript
复制
$ docker run --rm -v $PWD:/tmp aldanial/cloc ./

以上,就是今天的全部内容,包含了 cloc 安装和使用。当然,重要的内容往往篇幅较小,很推荐 docker 运行方式。

References

  • [0] Count Lines of Code: https://github.com/AlDanial/cloc
  • [1] 三十一: http://www.lee31.cn/assets/image/ThirtyOneLee.jpeg
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 李三十一 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上下文
  • 传统做法
  • 有效统计 cloc
    • 安装
      • cloc 优势?
      • 基本使用
      • 高级用法
        • 统计单个文件
          • 统计文件夹
            • 统计文件夹下多个子目录
              • 更多命令
                • 支持的语言
                • 通过 docker 运行
                • References
                相关产品与服务
                容器镜像服务
                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档