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

程序员李三十一
• 阅读 327

上下文

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

那如何统计代码量呢?

传统做法

通过find+wc命令完成

$ find . -name "*.go" | xargs wc -l

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

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

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

有效统计 cloc

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

安装

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

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、逗号分隔值等。
  • 支持分类别统计文件数、空白行数、注释行数和代码行数。

基本使用

$ cloc ./                    # 可统计目录
$ cloc perl-5.22.0.tar.gz    # 也可直接统计压缩包

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

$ cloc $(git ls-files) 
# 或
$ cloc --vcs git             
# 或过滤 svn 
$ cloc --vcs svn

高级用法

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

统计单个文件

#$ 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
-------------------------------------------------------------------------------

统计文件夹

$ 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参数过滤掉不计入统计的路径

$ 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参数进行统计结果的筛选。

$ 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

统计文件夹下多个子目录

$ 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
-------------------------------------------------------------------------------

更多命令

$ cloc --help

支持的语言

$ cloc --show-lang

通过 docker 运行

$ docker run --rm -v $PWD:/tmp aldanial/cloc ./

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

❤️❤️❤️读者每一份热爱都是笔者前进的动力! 我是三十一[1],感谢各位朋友:求点赞、求评论、求转发,大家下期见!

References

往期文章

  • 入门篇:从 etcd 名字的由来,到安装部署和使用姿势
  • 如何看待 Python(PyScript) 可以做浏览器前端开发语言?
  • 深度总结,带你玩转 NVIDIA GPU
  • 还活在上个时代,Etcd 3.0 实现分布式锁竟如此简单
  • 从 0 到 1,如何徒手撸一个 Python 插件系统?
  • 一站式机器学习开业平台 MLflow 怎么样?
点赞
收藏
评论区
推荐文章
lucien-ma lucien-ma
2年前
Git基础命令教程
Git学习git之前,我们需要先明白一个概念,版本控制!版本控制什么是版本控制版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。实现跨区域多人协同开发追踪和记载一个或者多个文件的历史记录组织和保护你的源代码和文档统计工作量
Wesley13 Wesley13
2年前
SQL性能简单优化(作为初级程序员的想法)
随笔背景:虽然参与正式项目开发已经近两年了,但是之前涉及的数据都不是很大,就算数据量够了,但是也没涉及到统计,所以之前开发的时候仅仅注意业务逻辑是否正确,代码是否精简。本次做的一个项目,写数据统计的接口,刚开始也只是注意逻辑,不过后来数据量仅仅到了40万的时候,一个按照年龄区段获取各年龄的普及率接口竟然花了近一分钟,所以开始了我的优化路程。一、从SQL上
Wesley13 Wesley13
2年前
(转)通过gitlab统计git提交的代码量
git的代码量大多数都是根据命令行统计,或者根据第三方插件统计。但是都不满足我的需求,因为我们代码都由gitlab管理,于是想到了通过gitlab暴露出来的接口获取数据。第一步,生成私钥登录你的gitlab申请私钥private\_token!(https://img2018.cnblogs.com/blog/1117944
笑出腹肌!程序员从不撒谎,但注释却会!
好买网(www.goodmai.com)IT技术交易平台所以,世上本没有注释,代码写多了,也便有了注释。1、这是一个被代码耽误的诗人2、来一份1987年的代码看看3、产品经理要对此负责4、不敢看,也不敢问5、Nike官网robots.txt上的注释6、程序员正确发牢骚的地方7、阅读源码的人,心里一定的崩溃的8、第一天上班看到这段注释就想辞职。9、我
Stella981 Stella981
2年前
HGDB wal文件产生量统计
目录环境文档用途详细信息环境系统平台:Linuxx86RedHatEnterpriseLinux5,Linuxx86RedHatEnterpriseLinux6,Linuxx86SLES11,Linuxx8664RedHatEnterpriseLinux5,Linuxx8664RedH
Stella981 Stella981
2年前
Joomla如何在网站中添加流量统计代码
查看网站统计是每个站长比不可少的工作。那么如何给Joomla网站添加一个统计代码,来有效的管理自己的网站呢?这里以百度流量统计为例,演示怎么给JoomlaT3Framework架构网站怎么添加统计代码。 接下来我们来看看具体的操作步骤:登录后台管理界面,在顶部导航栏中找到扩展管理中的模板管理,选择风格管理,点击!怎么给joomla
Stella981 Stella981
2年前
Intellij idea利用Statistic插件统计项目代码行数
1.插件介绍统计项目中各个文件的数量,大小,行数,平均等信息根据扩展名自定义统计详细行数信息,包括总行数,代码行数,代码行数占比,注释行数,注释行数占比,空白行数,空白行数占比自定义选择多个文件,统计各个文件信息本插件需要JDK8或以上版本2.插件安装利用在线或离线方式安装Statistic插件到idea中
Wesley13 Wesley13
2年前
ubuntu下搭建opengrok
opengrok是一个开源的查看代码的工具,当需要索引的源码量较大时,相比起sourceinsight要好很多,这篇文章就介绍一下opengrok的安装,及如何建立工程代码的索引.附上官网地址opengrok(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fopengrok.gith
Wesley13 Wesley13
2年前
APP可视化埋点原理大揭秘
一、背景运营者能够对用户行为进行分析的前提,是对大量数据的掌握。在以往,这个数据通常是由开发者在控件点击、页面等事件中,一行行地编写埋点代码来完成数据收集的。然而传统的操作模式每当升级改版时,开发和测试人员就需要重复不断对代码进行更新,整个流程耗时长,无法满足业务的需求。为帮助开发者解决这一痛点,个推应用统计“个数”推出“可视化埋点”这一技术
Stella981 Stella981
2年前
Linux统计文件行数
语法:wc\选项\文件…说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。该命令各选项含义如下:  c统计字节数。  l统计行数。  w统计字数。这些选项可以组合使用。输出列的顺序和数目不受选项的顺
程序员李三十一
程序员李三十一
Lv1
我很难说清楚是什么阻止了我回头找你的冲动
文章
1
粉丝
0
获赞
0
热门文章

暂无数据