使用 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 统计你的代码量 的相关文章

  • VS Code保存后自动格式化Vue代码---Vetur

    在VS Code里面编辑Vue代码 xff0c 通常我们会安装插件Vetur xff0c 本次介绍的格式化代码也依赖于Vetur插件 具体见一下步骤 注 xff1a VS Code版本为1 74 3 1 安装插件Vetur 2 配置自动格式
  • Visual Studio Code无法监视此大工作空间中的文件更改的解决办法

    Visual Studio Code无法监视此大工作空间中的文件更改 xff08 错误ENOSPC xff09 当您看到此通知时 xff0c 表明VS Code文件监视程序用尽了句柄 xff0c 因为工作空间很大并且包含许多文件 在调整平台
  • Window下LaTex+VS Code的配置

    目录 前言 一 软件下载二 软件安装1 TexLive安装2 VS Code及插件安装 三 配置 VS Code四 简单测试一下五 进阶操作及可能遇到的问题1 前向搜索和反向搜索2 编译带参考文献的 tex文件 前言 考虑本文受众有新手小白
  • VS Code C++ 代码格式化方法(clang-format)

    前提条件 安装扩展C C 43 43 xff0c 扩展程序将自动安装clang format clang format默认安装路径为c Users wqr57 vscode extensions ms vscode cpptools 0 1
  • Attitude Control (Copter Code Overview)

    Attitude Control Copter Code Overview Between AC3 1 5 and AC 3 2 the attitude control logic was restructured as part of
  • VS code的git设置

    先建立一个空文件夹 在git窗口先点 初始化仓库 xff0c 再点侧边栏右上角的 更多 xff0c 选 远程 下的 添加远程存储仓库 输入远程仓库地址 xff0c 再输入仓库名称 打开 源代码管理存储库 视图 xff0c 点上面的git分支
  • VS Code Remote SSH远程连接异常:Resolver error: Error: Running the contributed command

    VS Code Remote SSH远程连接异常 问题描述原因分析解决方案扩展Remote SSH首次连接插件做了什么Remote SSH对于远程Linux的要求 问题描述 通过VS Code插件Remote SSH连接一台新主机时 xff
  • 【VS Code】"The 'clang-format' command is not available. Please check your clang-format."报错

    文章目录 34 The 39 clang format 39 command is not available 34 报错说明一 安装插件 clang format 二 解决方案三 参考链接 34 The clang format comm
  • Visual Studio Code (vscode) 配置 C / C++ 环境

    Visual Studio Code vscode 配置 C C 43 43 环境 步平凡 博客园 在电脑安装软件管控严格的情况下 xff0c 想装VS装不了 xff0c 就装轻量版的VSCode了 以上写得很好 xff0c 照做即可 本人
  • VS Code创建、调试ROS项目

    前言 xff1a 在vs code下配置ROS项目开发的环境 包括catkin创建编译工作空间 xff0c 创建ROS项目 xff0c 调试ROS节点 一 创建工作空间 首先创建一个cMake工作空间 xff0c 用到了catkin mak
  • 802.11标准deauth报文的reason code中文版

    代码 原因 0 保留 1非特定原因 2以前的身份验证不再有效 3由于发送STA离开 xff08 或已经离开 xff09 ibs或ESS而被取消身份验证 4由于不活动而解除关联 5已解除关联 xff0c 因为AP无法处理所有当前关联的STA
  • visual studio code中模拟浏览器端向服务端发起请求

    一 需要使用的插件 二 使用方式 1 创建 http文件 2 在所创建的 http文件中输入如下内容 相关具体的使用方式可参见 xff1a https marketplace visualstudio com items itemName
  • VS Code中C/C++ 无法跳转到定义的解决办法

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

    06 5 Code 推力 force 推力的应用旋翼的气动阻力空气阻力矩滚转力矩电机的转速 推力 force span class token comment force 61 电机的转速 xff5c 电机的转速 xff5c xff08 带
  • 【VSCode】Visual Studio Code软件使用入门

    说明 这是一篇VS Code IDE软件使用入门文章 xff0c 工欲善其事 xff0c 必先利其器 xff0c 在使用新IDE之前 xff0c 不妨先对其进行一个全面了解 如果你做WPF等桌面端开发 xff0c 目前VSCode还没有好用
  • 使用VS CODE+PlantUML高效画图

    使用VS CODE 43 PlantUML高效画图 自从发现了plantuml写脚本画图的方式之后 xff0c 爱上了画图 环境 xff1a MAC 前言 本文多数内容引用自官网文档和其他人的教程 xff0c 并非本人原创 xff0c 也谈
  • pytorch网络m参数量、flops计算方法

    1 from thop import profile x torch randn 1 3 256 256 flops params profile self modelG inputs x print flops is 2fM flops
  • papers with code介绍(人工智能方向研究生的必备网站)

    paperswithcode介绍 人工智能方向的必备网站 本文将从两个部分介绍 一 正文 二 导航 A browse State of the Art B Datasets C Method D More 网站首页 一 正文 2 最上面是四
  • Java字节流与字符流的区别

    字节流与和字符流的使用非常相似 两者除了操作代码上的不同之外 是否还有其他的不同呢 实际上字节流在操作时本身不会用到缓冲区 内存 是文件本身直接操作的 而字符流在操作时使用了缓冲区 通过缓冲区再操作文件 如图12 6所示 下面以两个写文件的
  • 【C++】在线IDE

    1 洛谷在线IDE https www luogu com cn ide 2 菜鸟工具 https c runoob com compile 12 3 Cloud Studio https cloudstudio net

随机推荐

  • 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 可以用它统计代码的行数 它可以识别多种开发语言 并在计算的时候忽略掉注释和空行 我记得我上次申请软件著作权的时候 申请表格中要求提交代码量 当时为了计算行数 我写了