使用 cloc 统计你的代码量

2023-11-19

转自:使用 cloc 统计你的代码量

 

今天发现一个特别好用的工具 cloc,可以用它统计代码的行数。它可以识别多种开发语言,并在计算的时候忽略掉注释和空行。

我记得我上次申请软件著作权的时候,申请表格中要求提交代码量,当时为了计算行数,我写了类似于 find xxx -prune xxx | xargs grep -vE xxx | wc -l 的超长命令。

每年写年终总结统计工作量的时候,我也常常会用到类似的命令。

所以我今天突然发现这个工具的时候,还是很惊喜的。

在 macOS 上,可以通过 brew install cloc 来安装它,它支持包括 Windows 在内的多个系统。

npm install -g cloc                    # https://www.npmjs.com/package/cloc
sudo apt-get 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 pkg install cloc                  # FreeBSD
sudo port install cloc                 # Mac OS X with MacPorts
brew install cloc                      # Mac OS X with Homebrew
choco install cloc                     # Windows with Chocolatey

它有诸多优点:

  1. 下载安装方便。
  2. 能识别多种语言。
  3. 允许通过项目或语言等多种方式来输出统计结果。
  4. 多种输出格式,包括纯文本、SQL、JSON、XML、YAML 等。
  5. 能直接从压缩包里统计代码。
  6. 多种排错选项。
  7. 识别含有非常用字符和空格的文件、目录名。
  8. 没有外部依赖。
  9. 可在多种系统上运行。

由于它出色的灵活性,可以和多种工具结合使用。

比如写一个 cloc-git 的脚本,用来统计 git 远程项目的代码量。

#!/usr/bin/env bash
git clone --depth 1 "$1" temp-linecount-repo &&
  printf "('temp-linecount-repo' will be deleted automatically)\n\n\n" &&
  cloc temp-linecount-repo &&
  rm -rf temp-linecount-repo

运行结果如下:

$ cloc-git https://github.com/rails/rails.git
Cloning into 'temp-linecount-repo'...
remote: Counting objects: 3615, done.
remote: Compressing objects: 100% (3048/3048), done.
remote: Total 3615 (delta 174), reused 1576 (delta 52), pack-reused 0
Receiving objects: 100% (3615/3615), 6.08 MiB | 2.28 MiB/s, done.
Resolving deltas: 100% (174/174), done.
Checking connectivity... done.
('temp-linecount-repo' will be deleted automatically)


    3043 text files.
    2893 unique files.
     309 files ignored.

github.com/AlDanial/cloc v 1.70  T=19.61 s (141.1 files/s, 18560.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Ruby                          2152          47525          41996         213275
Markdown                        74          13832              0          34880
JavaScript                      23            732            747           3385
YAML                           144            307            584           2505
ERB                            318            248             11           1736
CSS                             20            157            120           1105
CoffeeScript                    11             87            104            318
HTML                            19             15              3            198
yacc                             1              4              0             45
SQL                              1              6              0             43
JSON                             1              0              0             24
builder                          2              0              0              6
DTD                              1              0              0              1
-------------------------------------------------------------------------------
SUM:                          2767          62913          43565         257521
-------------------------------------------------------------------------------

cloc 也支持使用 --diff 选项对两个版本的代码量进行比较。

但是在我尝试 cloc 使用 --diff 选项比较文件并输出结果的时候, 我发现了一个问题,cloc 输出的 yaml 或 json 文件内容是不正确的。如下所示:

---
# github.com/AlDanial/cloc
header :
...

same :
    language : CSS
    files_count : 3
    blank : 0
    comment : 25
    code : 2
    language : JavaScript
    files_count : 38
    blank : 0
    comment : 131
    code : 2177
    language : HTML
    files_count : 3
    blank : 0
    comment : 3
    code : 182
...

这是 diff 输出的 yaml 文件。注意 same 下面的 key 并不是根据开发语言区分的二级 Hash,而是所有结果都使用了同样的 key 名放在了一起。这样如果有其他工具读取输出文件,势必会导致前面同名 key 的值被后面的值覆盖。造成解析后会丢失绝大部分的报告内容。

这个问题我已经在项目提交了Issue,作者说过几天就将修复这个问题。

最后统计了一下我最近在做的项目。

$ cloc .
     365 text files.
     339 unique files.
     225 files ignored.

github.com/AlDanial/cloc v 1.70  T=9.31 s (16.3 files/s, 2338.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
YAML                             7             13             47          14366
JavaScript                      38              1            131           2177
Ruby                            72            396            728           1281
CoffeeScript                     7            148             29           1192
SASS                             4             34             19            347
ERB                             16             60              0            250
Markdown                         2            143              0            182
HTML                             3             15              3            182
CSS                              3              2             25              2
-------------------------------------------------------------------------------
SUM:                           152            812            982          19979
-------------------------------------------------------------------------------

最多的 YAML 代码是从业务库导出的基线数据。由于这是个基于 echarts 的业务数据可视化的项目,前端代码占的比重稍大了一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 cloc 统计你的代码量 的相关文章

  • Code::Blocks使用教程

    使用之前我们先准备一段代码 include lt stdio h gt include lt stdlib h gt int main printf 34 欢迎进入www dotcpp com编程网站 xff01 34 system 34
  • ReviewBoard+SVN配置强制code review

    本文需要在svn与reviewboard安装成功之后开始进行配置 xff0c 详情参考如下两篇文章根据实际情况操作 xff1a Ubuntu安装Apache 43 Svn 43 Submin https blog csdn net qq 2
  • 万字长文细说 Code Review 的正确姿势

    已剪辑自 https mp weixin qq com s GWLlRkF1b6LnyIYZi NSdQ 随着研发团队规模的逐步扩大 xff0c 新项目及新成员越来越多 xff0c 如何做好 code review xff0c 把控研发人员
  • Visual Studio Code 使用Git进行版本控制

    Visual Studio Code 使用Git进行版本控制 本来认为此类教程 xff0c 肯定是满网飞了 今天首次使用VS Code的Git功能 xff0c 翻遍了 所有中文教程 xff0c 竟没有一个靠谱的 遂动笔写一篇 请确保你安装了
  • 从github上下载的code文件夹图标上有个绿色对勾

    最近发现 xff0c 从github上下载的code文件夹图标上有个绿色对勾 xff0c 如下图 xff1a 经过问师兄和师父 xff0c 是因为这个文件夹中含有 git文件夹 xff0c 如下 xff1a 如果你的文件夹中没看到 git
  • [ROS]在VS Code下编写代码,汇总问题及解决办法

    Linux xff1a Ubuntu18 04 ROS xff1a melodic 在VS Code下编写代码 xff0c 汇总问题及解决办法 问题1 xff1a 编译C 43 43 代码可通过 xff0c 但抛出错误警告以及代码补全异常
  • VS code的git设置

    先建立一个空文件夹 在git窗口先点 初始化仓库 xff0c 再点侧边栏右上角的 更多 xff0c 选 远程 下的 添加远程存储仓库 输入远程仓库地址 xff0c 再输入仓库名称 打开 源代码管理存储库 视图 xff0c 点上面的git分支
  • 有效解决“SyntaxError: Non-UTF-8 code starting with” 语法错误

    在程序中出现中文的时候会有这种报错 xff0c 在代码的第一行加一句注释 xff0c 说明一下字符类型可以解决 coding 61 gbk coding utf 8这两种在我的程序里是亲测有效的
  • Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码

    前言 最近想要切换编辑工具 xff0c 之前工作中使用过 Source Insight xff0c Eclipse xff0c CLion 来写 C 43 43 代码 目前来说 Source Insight 已经非常古老 xff0c 只有编
  • Visual Studio和VS Code的区别

    1 Visual Studio简介 xff1a 是一个集成开发环境 IDE xff0c 安装完成后就能直接用 xff0c 编译工具 xff0c 调试工具 xff0c 各个语言的开发工具 xff0c 都是已经配置好的 xff0c 开箱即用 适
  • 802.11标准deauth报文的reason code中文版

    代码 原因 0 保留 1非特定原因 2以前的身份验证不再有效 3由于发送STA离开 xff08 或已经离开 xff09 ibs或ESS而被取消身份验证 4由于不活动而解除关联 5已解除关联 xff0c 因为AP无法处理所有当前关联的STA
  • python解析DataMatrix Code二维码

    span class token comment 安装 span span class token triple quoted string string 39 39 39 sudo apt get install libdmtx0a pi
  • VS Code中C/C++ 无法跳转到定义的解决办法

    VS code的跳转功能一直很迷 xff0c 时好时坏 xff0c 有些新的工程环境干脆用不了 经过一遍遍的baidu加上自己的摸索 xff0c 总结出一套经验 xff0c 应该可以解决大部分的情况了 一 首先 xff0c 当然是安装插件了
  • VS Code For Web 深入浅出 -- 进程间通信篇

    在上一篇中 xff0c 我们一起分析了 VS Code 整体的代码架构 xff0c 了解了 VS Code 是由前后端分离的方式开发的 且无论前端是基于 electron 还是 web xff0c 后端是本地还是云端 xff0c 其调用方式
  • 详解使用VS code搭建C语言环境遇到的那些坑(适合小白)

    Vs code搭建C语言环境 为啥想起来要装c环境 xff1f 是因为亲属家的大一新生小朋友问我关于c的问题 xff01 好吧 xff0c 学c语言那是20年前的事儿了 xff0c 但是在小朋友面前也不能跌份 xff0c 于是乎准备温习一下
  • websocket连接状态码

    最近在做websocket 需要用到这些 查资料记录下 官网 https developer mozilla org zh CN docs Web API CloseEvent CloseEvent code 只读 返回一个 unsigne
  • 【Struct(结构体)杂谈之六】无既是有---没有成员变量的Struct(结构体)

    没有成员变量的Struct 结构体 在开始本篇之前 想问大家一个问题 0是什么 呵呵 就是没有呗 那好 这5块钱拿去 就当抵我上次向你借的500块钱 什么 这哪和哪啊 这不一样 可是你自己说的 0就是 没有 我说不清 反正不行 你必须还我5
  • 下载google code中源码的几个工具

    Google code 一般以三种命令行方式提供源代码 格式如下 plain view plain copy hg clone https code google com p xxx git clone https code google
  • 短 URL 服务的设计与实现

    转载 https mp weixin qq com s DJM7KFFfgZ2AgfrrYHXSzQ 短url的好处有 短 短信和许多平台 微博 有字数限制 太长的链接加进去都没有办法写正文了 好看 比起一大堆不知所以的参数 短链接更加简洁
  • 基于多项贝叶斯的三分类的情感分析实现

    写在前面 本实验报告是一篇很水的水课的期末大作业 代码 数据集均为原创 意在用最少的代码和最简单的数据集完成老师留下的题目 仅供交流学习使用 禁止直接洗稿嗷 目录 写在前面 一 实验目的 二 实验手段和方法 三 实验内容 四 实验总结 一

随机推荐

  • 2023年最详细零基础Python爬虫教程,入门学习分三个阶段

    爬虫Python入门好学吗 学爬虫需要具备一定的基础 有编程基础学Python爬虫更容易学 但要多看多练 有自己的逻辑想法 用Python达到自己的学习目的才算有价值 如果是入门学习了解 开始学习不难 但深入学习有难度 特别大项目 大部分爬
  • 基于Matlab的门控循环单元GRU数据预测

    基于Matlab的门控循环单元GRU数据预测 随着人工智能技术的迅猛发展 数据预测成为重要的挑战之一 门控循环单元GRU是一种新兴的神经网络结构 其在处理序列数据方面具有优异的性能 本文将介绍如何使用Matlab实现门控循环单元GRU进行数
  • Office2016简体中文专业版32/64

    仅供参考 链接 https pan baidu com s 1QklpJzxzWDuFnsXX 6z9SA 提取码 4kd0
  • 黑盒测试与白盒测试的定义与区别

    白盒测试 是指实际运行被测程序 通过程序的源代码进行测试而不使用用户界面 这种类型的测试需要从代码句法发现内部代码在算法 溢出 路径和条件等方面的缺点或者错误 进而加以修正 黑盒测试 又称功能测试 数据驱动测试或基于规格说明的测试 是通过使
  • reactnative环境搭建-windows

    一 安装依赖 1 Node 以下为两种安装方式 1为基本安装 2为通过管理工具安装 1 按照教程步骤安装指定版本的node Node js 安装配置 注意 Node 的版本应大于等于 14 默认安装在C盘 如果自定义安装了其他盘需要配置环境
  • OpenCV入门【C++版】

    OpenCV基础入门 C 语言 Chapter1 读取图片 视频 摄像头 从文件读取图片 从文件读取视频 读摄像头 Chapter2 基础函数 Chapter3 调整和剪裁 Chapter4 绘制形状和文字 Chapter5 透视变换 Ch
  • Logback 自定义Appender发送预警

    1 自定义Appender 目的 接收日志消息 现将日志通过http接口发送到预警服务 package com test service appender import ch qos logback classic spi LoggingE
  • Unity -Input

    Unity Input详解 Unity中的InputManager输入控制器 Input属性方法详解 属性 方法 Unity中的InputManager输入控制器 Name 按键名 该键的名称 可以在脚本编程中直接引用他 比如 Input
  • 硬件基础之集成运放

    一 技术理论 1 集成电路 集成电路是采用专门的制造工艺 在半导体单晶硅上 把晶体管 场效应管 二极管 电阻和电容等元器件以及它们之间的连线所组成的电路制作在一起 使其具有特定功能的芯片 2 集成运放 集成运放 全称集成运算放大器 是具有超
  • 部署多台服务器,动态配置前端请求的ip地址

    需求 前后端分离的项目 需要部署多台服务器 但是不想频繁修改前端配置的ip地址 故需要需要动态配置 解决 发送请求时的url默认获取服务器的ip function getBaseUrl const url location href toS
  • 深入剖析Nginx日志:常用分析技巧汇总

    前言 本来只是想写一篇Nginx日志的常用统计分析命令填充一下线上文档 虽然有点用但是觉得光写命令 文档太水了 于是就顺便总结一下 在nginx或web服务中 需要有哪些进行分析的内容以及为什么有这些需求 ps 统计命令的原因 在于不是每个
  • 杨桃的Python进阶讲座18——数组array(八)如何从一维数组扩展为二维数组以及再次降为一维数组

    本人CSDN博客专栏 https blog csdn net yty 7 Github地址 https github com yot777 用reshape 函数将一维数组升维成二维数组 首先我们由一个列表转换为NpArray数组 gt g
  • git 提交代码时,提示输入用户名和密码,不知道用户名和密码是啥

    最近在跟小伙伴一起做小项目玩 之前clone代码时都是ssh 这次用的是https 提交代码遇到问题 在网上没有查到解决问题的办法 所以在这里记录以下这个问题的解决办法 后续有时间要 熟练掌握 git的使用方法 当小伙伴再遇到问题时 就可以
  • vue中如何引入jquery详解

    用vue cli脚手架工具构建项目成功后 当需要引入JQ 可用以下方法 1 首先在package json里的dependencies加入 jquery 3 2 1 2 在终端里输入npm install jquery save dev 当
  • unity 读取和写入Excel中文出现乱码解决方法

    在编辑器中读取和写入中文一切正常 发布出来只要是中文就会出现乱码 解决方法 将C Program Files Unity Editor Data Mono lib mono unity 目录下的I18N dll和I18N CJK dll复制
  • [转载]搜索引擎技术介绍

    转载声明 http backend blog 163 com blog static 202294126201252872124208 引言 早些时候分享过一份关于搜索引擎技术的PPT 这篇文章基本上是基于原来框架 在内容上做了一些改进和扩
  • 清华镜像pip安装命令

    在ubuntu系统下 pip3 install 安装包的名字 i https pypi tuna tsinghua edu cn simple 永久设置 pip install pip U pip config set global ind
  • 哈工大 csapp lab5

    实验报告 实 验 五 题 目 LinkLab 链接 专 业 计算机科学与技术 学 号 190110812 班 级 7 学 生 刘新晨 指 导 教 师 吴锐 实 验 地 点 G707 实 验 日 期 2021 5 16 计算机科学与技术学院
  • Linux 常用命令介绍

    文章目录 1 初级 1 pwd命令 2 cd命令 3 ls命令 实例练习 2 中级 1 Linux文件操作 1 创建文件 2 删除文件 2 Linux文件夹操作 1 创建文件夹 2 删除文件夹 3 Linux文件和文件夹拷贝 4 Linux
  • 使用 cloc 统计你的代码量

    转自 使用 cloc 统计你的代码量 今天发现一个特别好用的工具 cloc 可以用它统计代码的行数 它可以识别多种开发语言 并在计算的时候忽略掉注释和空行 我记得我上次申请软件著作权的时候 申请表格中要求提交代码量 当时为了计算行数 我写了