跳到内容

AlDanial/cloc公司

存储库文件导航

cloc公司

计算代码行数


cloc统计许多编程语言中源代码的空白行、注释行和物理行。

最新版本:v2.00(2024年2月17日)

DOI程序

cloc在被托管后于2015年9月搬到GitHubhttp://cloc.sourceforge.net/自2006年8月起。

步骤1:下载cloc(几种方法,见下文)或运行cloc码头工人形象。Windows可执行文件没有要求。cloc的源版本需要一个Perl解释器cloc的Docker版本需要安装Docker。

步骤2:打开终端(命令提示符(在Windows上)。

步骤3:调用cloc来统计源文件、目录、存档、,或git提交。根据是否使用开发源版本(氯仿),的源已发布版本(氯-2.00.pl)或Windows可执行文件(cloc-2.00.exe文件).

在本页上,氯仿是通用术语用于指代其中任何一种。

包括安全性有一个YouTube视频显示操作步骤。

文件

提示>cloc hello.c1个文本文件。1个唯一文件。0个文件被忽略。https://github.com/AlDanial/clocv 1.65 T=0.04秒(28.3个文件/秒,340.0行/秒)-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------丙10 7 5-------------------------------------------------------------------------------

目录

提示>cloc gcc-5.2.0/gcc/c16个文本文件。15个唯一文件。忽略了3个文件。https://github.com/AlDanial/clocv 1.65 T=0.23 s(57.1个文件/秒,188914.0行/秒)-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------丙10 4680 6621 30812C/C++标题3 99 286 496-------------------------------------------------------------------------------金额:13 4779 6907 31308-------------------------------------------------------------------------------

档案

我们将从GitHub中提取cloc的源zip文件,然后计算内容:

提示>wgethttps://github.com/AlDanial/cloc/archive/master.zip提示>cloc master.ziphttps://github.com/AlDanial/clocv 1.65 T=0.07秒(26.8个文件/秒,141370.3行/秒)-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------波尔2 725 1103 8713-------------------------------------------------------------------------------金额:2 725 1103 8713-------------------------------------------------------------------------------

使用特定提交的git存储库

此示例使用来自公共数据库,一个出色的Python调试器。

提示>git克隆https://github.com/inducer/pudb.git提示符>cd pudb提示>cloc 6be804e07a5db48个文本文件。41个唯一文件。8个文件被忽略。github.com/AlDanial/cloc v 1.99 T=0.04秒(1054.9个文件/秒,189646.8行/秒)-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------蟒蛇28 1519 728 4659重组文本6 102 20 203亚马尔2 9 2 75伯恩壳牌3 6 0 17文本1 0 0 11制作1 4 6 10-------------------------------------------------------------------------------金额:41 1640 756 4975-------------------------------------------------------------------------------

特定目录的每个子目录

假设您有一个目录,其中包含三个不同的git-managed项目,项目0、项目1和项目2。你可以使用shell的循环能够计算每个中的代码。此示例使用bash(向下滚动查看cmd.exe示例):

提示>输入d./*/;do(cd“$d”&&echo“$d“&&cloc--vcs-git);完成./项目0/7个文本文件。7个独特的文件。1个文件被忽略。github.com/AlDanial/cloc v 1.71 T=0.02秒(390.2个文件/秒,25687.6行/秒)-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------丁4 61 32 251降价1 9 0 38生成1 0 0 4-------------------------------------------------------------------------------金额:6 70 32 293-------------------------------------------------------------------------------./项目1/7个文本文件。7个独特的文件。0个文件被忽略。github.com/AlDanial/cloc v 1.71 T=0.02秒(293.0个文件/秒,52107.1行/秒)-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------去7 165 282 798-------------------------------------------------------------------------------金额:7 165 282 798-------------------------------------------------------------------------------./项目2/49个文本文件。47个独特的文件。13个文件被忽略。github.com/AlDanial/cloc v 1.71 T=0.10秒(399.5个文件/秒,70409.4行/秒)-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------蟒蛇33 1226 1026 3017川4 327 337 888降价1 11 0 28亚马尔1 0 2 12-------------------------------------------------------------------------------金额:39 1564 1365 3945-------------------------------------------------------------------------------

特定目录的每个子目录(Windows/cmd.exe)

对于(.\*)中的/D%I,请执行cd%I&&cloc--vcs git&&cd。。

cloc统计源的空白行、注释行和物理行中的代码许多编程语言。给定的两个版本cloc是一个代码库,可以计算空白、注释和源代码中的差异线。它完全用Perl编写,在Perl v5.6及更高版本的标准发行版(一些外部代码模块是嵌入其中氯仿)也是如此非常便携。众所周知,cloc可以在多种风格的Linux、FreeBSD、,NetBSD、OpenBSD、macOS、AIX、HP-UX、Solaris、IRIX、z/OS和Windows。(要在Windows上运行cloc的Perl源版本,需要ActiveState Perl5.6.1或较高的,草莓Perl,Linux的Windows子系统,Cygwin公司,MobaXTerm公司使用Perl插件安装,mingw环境和终端,如Windows Git.或者可以使用cloc的Windows二进制文件用生成PAR::封隔器在既没有Perl也没有Cygwin的Windows计算机上运行。)

除了计算单个文本文件、目录中的代码外,和git存储库,cloc还可以计算存档文件中的代码,例如作为.tar文件(包括压缩版本),.zip文件,Python.whl型,Jupyter笔记本.ipynb文件,源RPM.转/分.src文件(需要rpm2cpio接口),和Debian.deb文件(需要dpkg-deb).

cloc包含David Wheeler的代码SLOC计数,Damian Conway和Abigail的Perl模块Regexp::通用,Sean M.Burke的Perl模块Win32::Autoglob,和Tye McQueen的Perl模块算法::Diff.语言量表系数来源于Mayes Consulting,LLC网站http://softwareestimator.com/IndustryData2.htm.

新版本每六个月发布一次。

通过docker运行

装卸工运行--rm-v$PWD(美元):/tmp阿尔巴尼亚语/cloc

通过git-bash上的docker运行

装卸工运行--rm-v"/$(压水-水)":/tmp阿尔巴尼亚语/cloc

通过包管理器安装

根据您的操作系统,这些安装方法之一可能为您工作(除了Windows的最后两个条目外,所有条目都需要Perl解释器):

npm安装-g cloc#https://www.npmjs.com/package/clocsudo apt安装cloc#Debian,Ubuntusudo yum-install cloc#红帽,Fedorasudo-dnf install cloc#Fedora 22或更高版本sudo pacman-S cloc#架构sudo emerge-av dev-util/cloc#Gentoohttps://packages.gentoo.org/packages/dev-util/clocsudo apk add cloc#Alpine Linuxdoas pkg_add cloc#OpenBSDsudo-pkg安装cloc#FreeBSDsudo端口安装cloc#macOS with MacPortsbrew使用Homebrew安装cloc#macOS翼安装AlDanial。Cloc#带winget的Windowschoco安装cloc#Windows with Chocolateyspop安装cloc#带scoop的Windows

注释:我不控制这些包裹。如果您在使用上述方法之一的cloc中遇到错误包,尝试使用从最新稳定版本中提取的cloc在GitHub上(链接如下),然后提交问题报告。

稳定释放

https://github.com/AlDanial/cloc/releases/latest

开发版本

https://github.com/AlDanial/cloc/raw/master/cloc

cloc根据GNU通用公共许可证,v 2,不包括以下部分是从其他来源复制的。代码从Regexp::Common、Win32::Autoglob和Algorithm::Diff复制Perl模块受艺术许可证.

cloc具有许多特性,使其易于使用、彻底、可扩展和可移植:

  1. 作为一个独立的文件存在,只需要很少的安装工作量——只需下载文件并运行即可。
  2. 可以从文件中读取语言注释定义,因此可以使用尚未存在的计算机语言。
  3. 允许按语言和项目将多次运行的结果汇总在一起。
  4. 可以以多种格式生成结果:纯文本、SQL、JSON、XML、YAML、逗号分隔值。
  5. 可以统计压缩档案中的代码(tar balls、Zip文件、Java.ear文件)。
  6. 有许多故障排除选项。
  7. 使用空格和其他异常字符处理文件和目录名。
  8. 在标准Perl发行版之外没有依赖项。
  9. 在Linux、FreeBSD、NetBSD、OpenBSD、macOS、AIX、HP-UX、Solaris、IRIX和z/OS系统上运行,这些系统具有Perl 5.6或更高版本。源版本在Windows上运行,带有ActiveState Perl、Strawberry Perl、Cygwin或MobaXTerm+Perl插件。或者,在Windows上可以运行没有依赖项的Windows二进制文件。

如果cloc不适合您的需要,请考虑其他免费计数器:

其他参考文献:

虽然cloc不需要Perl模块,但在标准分布,cloc确实依赖于几个外部模块。代码来自三个外部模块——Regexp::Common、Win32::Autoglob、,和Algorithm::Diff--嵌入在cloc中。第四个模块,摘要::MD5仅在可用时使用。如果cloc发现本地安装的Regexp::Common或Algorithm::Diff将使用这些安装。如果没有,cloc将安装Regexp::Common和/或Algorithm:对临时目录进行所需的差异在cloc运行开始时创建的,然后在运行完成。Regexp::Common v2.120和算法::Diff v1.1902嵌入到cloc源代码中(请参见子程序安装Regexp_Common()安装Algorithm_Diff()).Win32::Autoglob只需要三行代码,这些代码包括在内直接在cloc中。

此外,cloc将使用Digest::MD5验证如果本地安装了Digest::MD5,则输入文件大小相等。

并行处理选项,--过程=N个,是通过引入的cloc版本1.76,可以在多核机器上更快地运行。然而,要使用它,必须安装模块Parallel::ForkManager。此模块在Windows上不可靠,因此并行处理只能在类Unix操作系统上工作。

Windows二进制文件构建在同时具有Regexp::Common的计算机上和Digest::MD5安装在本地。

创建自己的可执行文件

创建的Windows可执行文件的最强大选项cloc将使用ActiveState的Perl开发工具包.它包括一个实用程序,perlapp公司,可以独立生成Perl源代码的Windows、Mac和Linux二进制文件。

perl2exe文件也会做到这一点。如果你有perl2exe,修改行84-87在cloc源代码中用于次要代码使cloc Windows可执行所必需的修改。

否则,要使用生成Windows可执行文件聚丙烯PAR::封隔器,首先安装基于Windows的Perl发行版(例如Strawberry Perl或ActivePerl)说明。接下来,打开命令提示符,也就是DOS窗口并安装PAR::封隔器模块。最后,调用新安装的聚丙烯使用cloc源代码创建.exe文件文件:

C: >cpan-i摘要::MD5C: >cpan-i Regexp::通用C: >cpan-i算法::DiffC: >cpan-i PAR::封隔器C: >cpan-i Win32::LongPathC: >pp-M Win32::LongPath-M编码::Unicode-M摘要::MD5-C-x-o cloc-2.00.exe cloc-2.00.pl

上述说明的一个变体是,如果您安装了便携式Strawberry Perl版本,您需要运行便携式shell.bat第一以正确设置您的环境。

“发布”部分中的Windows可执行文件,cloc-2.00.exe文件,是在64位Windows 10计算机上使用草莓Perl5.30.2和PAR::封隔器构建.exe文件.

Windows可执行文件运行安全吗?它有恶意软件吗?

理想情况下,没有人需要Windows可执行文件,因为在他们的机器上安装Perl解释器,可以运行cloc源文件。然而,在中央管理的企业Windows机器上这可能很难或不可能。

随cloc分发的Windows可执行文件如下所示尽最大努力消除病毒和恶意软件.exe文件.我们鼓励您针对可执行文件,并检查此类站点网址:https://www.virustotal.com/.最新版本的条目包括:

cloc-2.00.exe:https://www.virustotal.com/gui/file/7a234ef0cb495de1b5776acf88c5554e2bab1fb02725a5fb85756a6db3121c1f

cloc-1.98.exe:https://www.virustotal.com/gui/file/88615d193ec8c06f7ceec3cc1d661088af997798d87ddff331d9e9f9128a6782?nocache=1

cloc-1.96.1.exe:https://www.virustotal.com/gui/file/00b1c9dbbfb920dabd374418e1b86d2c24b8cd2b8705aeb956dee910d75d45?nocache=1

cloc-1.96.exe:https://www.virustotal.com/gui/file/54bf5f46fbaba7949c4eb2d4837b03c774c0ba587448a5bad9b8efc0222b1583?nocache=1

cloc-1.94.exe:https://www.virustotal.com/gui/file/b48a6002fb75fa66ec5d0c05a5c4d51f2ad22b5b025b7eb4e3945d18419c0952?nocache=1

cloc-1.92.exe:https://www.virustotal.com/gui/file/2668fcf8609c431e8934fe9e1866bc620c58d198c4eb262f1d3ef31ef4a690f7

cloc-1.90.exe:https://www.virustotal.com/gui/file/d655caae55486f9bac39f7e3c7b7553bcfcfe2b88914c79bfc328055f22b8a37/detection

cloc-1.88.exe文件:https://www.virustotal.com/gui/file/97d5d2631d1cccdbfd99667ab8a4cf5968816bbe52c0f9324e72e768857f642d/detection

cloc-1.86.exe:https://www.virustotal.com/gui/file/1b2e189df1834411b34534db446330d1c379b4bc008af3042ee9ade818c6a1c8/detection

cloc-1.84.exe:https://www.virustotal.com/gui/file/e73d490c1e4ae2f50ee174005614029b4fa2610dcb76988714839d7be68479af/detection

cloc-1.82.exe:https://www.virustotal.com/#/file/2e5fb443fdefd776d7b6b136a25e5ee2048991e735042897dbd0bf92efb16563/detection

cloc-1.80.exe:https://www.virustotal.com/#/file/9e547b01c946aa818ffad43b9ebaf05d3da08ed6ca876ef2b6847be3bf1cf8be/delection

cloc-1.78.exe:https://www.virustotal.com/#/file/256ade3df82fa92febf2553853ed1106d96c604794606e86efd00d55664dd44f/detection

cloc-1.76.exe:https://www.virustotal.com/#/url/c1b9b9fe909f91429f95d41e9a9928ab7c58b21351b3acd4249def2a61acd39d/detection

cloc-1.74_x86.exe:https://www.virustotal.com/#/file/b73dece71f6d3199d90d55db53a588e1393c8dbf84231a7e1be2ce3c5a0ec75b/detection

cloc 1.72 exe:https://www.virustotal.com/en/url/8fd2af5cd972f648d7a2d7917bc202492012484c3a6f0b48c8fd60a8d395c98c/analysis/

cloc 1.70 exe:https://www.virustotal.com/en/url/63edef209099a93aa0be1a220dc7c4c7ed045064d801e6d5daa84ee624fc0b4a/analysis网站/

cloc 1.68执行程序:https://www.virustotal.com/en/file/c484fc58615fc3b0d5569b9063ec1532980281c3155e4a19099b11ef1c24443b/analysis/

cloc 1.66 exe:https://www.virustotal.com/en/file/54d6662e59b04be793dd10fa5e5edf7747cf0c0cc32f71eb67a3cf8e7a171d81/analysis/1453601367/

为什么Windows可执行文件这么大?

使用创建的cloc 1.60及更早版本的Windows可执行文件如上所述,perl2exe的大小约为1.6MB,而创建的版本为1.62和1.54具有PAR::封隔器,为11 MB。版本1.66,使用更新版本的PAR::封隔器,约为5.5 MB。为什么PAR::封隔器,可执行文件比用perl2exe构建的要大得多?我的理论是perl2exe使用更智能的树修剪逻辑PAR::封隔器,但这纯粹是猜测。

cloc是一个接受文件、目录和/或将名称存档为输入。下面是对Perl v5.22.0源代码分发:

提示>cloc perl-5.22.0.tar.gz5605个文本文件。5386个唯一文件。2176个文件被忽略。https://github.com/AlDanial/clocv 1.65 T=25.49秒(134.7个文件/秒,51980.3行/秒)-----------------------------------------------------------------------------------语言文件空白注释代码-----------------------------------------------------------------------------------波尔2892 136396 184362 536445丙130 24676 33684 155648C/C++标题148 9766 16569 147858伯恩壳牌112 4044 6796 42668帕斯卡8 458 1603 8592XML 33 142 0 2410亚马尔49 20 15 2078C++10 313 277 2033电话制造4 426 488 1986序言12 438 2 1146JSON 14 1 0 1037标准yacc 1 85 76 998Windows消息文件1 102 11 489DOS批次14 92 41 389Windows资源文件3 10 0 85D 1 5 7 8日Lisp 2 0 3 4-----------------------------------------------------------------------------------金额:3434 176974 243934 903874-----------------------------------------------------------------------------------

要在Windows计算机上运行cloc,请打开命令(aka DOS)窗口并从那里的命令行调用cloc.exe。或者,尝试ClocViewer,它是cloc的GUI包装器,位于https://github.com/Roemer/ClocViewer网站.

另请参见https://github.com/jmensch1/codeflower网站对于cloc结果的图形呈现。

提示>cloc--帮助用法:cloc[选项]<文件/目录/git散列>|<集1><集2>|<报告文件>给定的文件(可能是压缩的tarball或zip文件等存档文件,或git提交哈希或分支名称)和/或递归地位于给定的目录。输入选项--extract-with=<cmd>仅当cloc无法使用时才需要此选项找出如何提取输入文件本身。使用<cmd>提取二进制存档文件(例如:.tar.gz、.zip、。Z) ●●●●。使用文字'>FILE<'作为实际文件的替补提取。例如,计算代码行数在输入文件中gcc-4.2.tar.gz perl-5.8.8.tar.gz文件关于Unix的使用--extract-with='gzip-dc>文件<|tar xf-'或者,如果您有GNU tar,--extract-with='tar zxf>FILE<'和在Windows上使用,例如:--extract-with=“\”c:\Program Files\WinZip\WinZip32.exe\“-e-o>FILE<”(如果安装了WinZip)。--list-file=<file>将文件和/或目录名列表来自<file>的进程,其中有一个文件/目录每行的名称。只计算精确匹配;相对路径名将从开始解析调用cloc的目录。设置<文件>to-从STDIN管道读取文件名。另请参阅--exclude-list-file。--diff-list-file=<file>获取要比较的文件名对<file>,其格式与--差异对齐。(使用该选项运行以请参阅示例。)位于的语言标识符忽略每行的末尾。这将启用--diff模式并绕过文件对对齐逻辑。--vcs=<vcs>调用对<vcs]的系统调用以获取文件。如果<VCS>为“git”,则将调用“git-ls-files”获取文件列表“git子模块状态”以获取子模块列表其内容将被忽略。另请参见--git它接受git提交哈希和分支名称。如果<VCS>是“svn”,那么将调用“svn list-R”。主要好处是cloc将跳过版本控制工具明确排除的文件有疑问的是,gitinore或svn:忽略属性。或者,<VCS>可以是任何系统命令生成文件列表的。注意:cloc必须位于可以读取的目录中<VCS>返回的文件。cloc将不从远程存储库下载文件。“svn list-R”可能指远程存储库获取文件名(因此可能需要远程存储库的身份验证),但文件本身必须是本地的。将<VCS>设置为“自动”可在“git”之间进行选择和“svn”(或两者都不)取决于是否存在目录下的.git或.svn子目录的其中调用cloc。--unicode检查二进制文件是否包含unicode展开的ASCII文本。这将导致性能明显下降。处理选项--autoconf计数.in文件(由GNU autoconf处理)公认的语言。另请参阅--no-autogen。--按文件报告遇到的每个源文件的结果。--by-file-by-lang报告遇到的每个源文件的结果除了用语言报道之外。--config<file>Read命令行从<file>切换而不是/home/al/.config/cloc/options.txt的默认位置。该文件应包含一个开关,以及参数(如果有),每行。空行和空行跳过以#开头的。上给出的选项命令行优先于读取的条目文件。--计数和差异<set1><set2>首先执行源文件的直接代码计数分别对<set1>和<set2>进行比较其中之一。输入可以是成对的文件、目录、,或档案。如果给出--out或--report-file,将创建三个输出文件,每个文件一个两个计数中的一个计数和一个计数的差异。另请参阅--差异,--差异对齐,--差异超时,--ignore-case,--ignore-whitespace。--diff计算代码和注释之间的差异<set1>和<set2>的源文件。输入可以是文件、目录、档案、,或git提交散列。使用--diff对齐生成一个列表,其中显示哪些文件对相比。比较git分支时,仅文件将比较在任一提交中更改的。另请参见--git、--count-and-diff、--diff-alignment、,--diff-list-file、--diff-timeout、--ignore-case、,--无知的白脸。--diff-timeout<N>忽略耗时超过<N>秒的文件进行处理。默认值为10秒。设置<N>0允许无限时间。(包含许多重复的行可能会导致Algorithm::Diff::sdiff()需要几个小时。)另请参阅--超时。--docstring-as-code-cloc将docstring视为注释,但这是由于docstrings表示常规,因此并不总是正确的字符串,当它们出现在赋值或作为函数参数。这个开关强制将文档字符串计算为代码。--follow-links[仅限Unix]遵循指向目录的符号链接(始终遵循指向文件的sym链接)。另请参阅--stat。--force-lang=<lang>[,<ext>]处理扩展名为<ext>的所有文件带有语言<lang>的计数器。对于例如,使用Fortran 90计数器(它要求文件以.f90结尾),而不是默认的Fortran 77计数器,使用--force-lang=“Fortran 90,f”如果省略<ext>,将计算每个文件使用<lang>计数器。此选项可以是多次指定(但仅每次指定<ext>时很有用)。另请参见--script-lang和--lang-no-ext。--force lang def=<file>从<file>加载语言处理过滤器,然后使用这些过滤器而不是内置的过滤器。注:映射到相同的语言文件扩展名(例如:MATLAB/Mathematica/Objective-C/MUMPS/Mercury;帕斯卡/菲律宾比索;Lisp/OpenCL;Lisp/Julia;Perl/Prolog)将被忽略,因为这些需要额外的非语言表达的处理定义文件。使用--read-lang-def定义不替换内置的新语言筛选器过滤器(另请参见--write-lang-def,--write-lang-def-incl-dup)。--git强制将输入解释为git目标(提交散列、分支名称等)如果这些不是首先标识为文件或目录名称。此选项覆盖--vcs=git逻辑如果给出;换句话说,--git得到了它的使用从git直接处理的文件列表哈希或分支名称,而不是来自“git ls-files”。此选项可以与一起使用--diff执行git之间的行计数差异提交,或在git提交和文件之间,目录或存档。使用-v/--verbose查看git系统命令cloc问题。--git-diff-rel与--git--diff相同,如果输入为--diff被视为git目标。只有以下文件比较两次提交中的更改。--git-diff-all git-diff策略#2:比较两次提交之间的存储库。--忽略空白比较文件时忽略水平空白带--diff。另请参阅--ignore-case。--忽略文件内容中大小写的更改;考虑大小写字母等价与--diff比较文件时。另请参阅--无知的白脸。--ignore-case-ext忽略文件扩展名的大小写。这将导致计算某些语言时出现问题(具体来说,.c和.c与c和C++;这个开关很重要。将C文件改为C文件*nix操作系统上的C++)。文件名在Windows上,不区分大小写总是正确的。--lang-no-ext=<lang>使用<lang>统计不带扩展名的文件计数器。此选项覆盖内部逻辑对于不带扩展名的文件(此类文件根据已知的脚本语言进行检查通过检查第一行中的!)。另请参见--强制lang,--script-lang。--max-file-size=<MB>跳过大于<MB>MB的文件遍历目录。默认情况下,<MB>=100。cloc的内存需求大约是20倍大于与一起运行的最大文件小于100 MB的计算机上的文件超过2 GB的内存将导致问题。注意:此检查不适用于文件作为命令行参数显式传递。--no-autogen[=list]忽略代码生成系统生成的文件例如GNU autoconf。查看这些文件的列表(然后退出),使用--no-autogen list运行另请参见--autoconf。--original-dir[仅在与--strip-comments]编写剥离的文件到与原始文件相同的目录中。--读取二进制文件除了处理文本文件外,还处理二进制文件。这通常是个坏主意,应该是尝试使用嵌入的文本文件二进制数据。--read-lang-def=<file>从<file>加载新的语言处理过滤器并将其与cloc已知的内容合并。如果<文件>定义了cloc已经知道的语言关于,cloc的定义将优先考虑。使用--force-lang-def超越cloc定义(另请参阅-write lang-def,--write-lang-def-incl-dup)。--script-lang=<lang>,<s>将调用<s>的所有文件处理为#!带有语言计数器的脚本语言<语言>。例如,以开头的文件#!/usr/local/bin/perl5.8.8将使用Perl计数器进行计数--script-lang=Perl,perl5.8.8语言名称不区分大小写,但脚本语言可执行文件的名称,<s>,必须有正确的案例。此选项可以是多次指定。另请参见——力拉,--语言-外部。--sdir=<dir>使用<dir>作为暂存目录,而不是让File::Temp选择位置。文件夹写入此位置的内容不会在删除运行结束(与File::Temp相同)。--skip-uniquety跳过文件唯一性检查。这将给以计数为代价的性能提升多次使用相同内容的文件(如果存在重复项)。--stat一些文件系统(AFS、CD-ROM、FAT、HPFS、SMB)没有匹配的目录“nlink”计数其子目录的数量。因此cloc可能会低估或完全跳过此类文件系统的内容。此开关强制文件::查找stat目录以获取正确计数。文件搜索速度将降低。另请参见——follow-links。--stdin-name=<file>提供用于确定语言的文件名用于标准输入。(使用-作为的输入名称通过STDIN接收源代码。)--strip-comments=<ext>对于处理的每个文件,写入当前目录具有空白的文件版本删除了和注释行(内嵌注释坚持)。每个剥离文件的名称是具有的原始文件名<附加了ext>。它被写入当前目录,除非--original-dir已打开。--strip str comments将嵌入字符串中的注释标记替换为“xx”。这试图绕过限制在Regexp::Common::Comment中的注释标记处嵌入字符串的内容被视为实际注释标记而不是字符串,通常会导致'复杂正则子表达式递归限制'警告和错误计数。有两个使用此开关的缺点:1/代码计数性能下降,2/代码生成--条带注释将包含不同的字符串在哪里可以找到嵌入的注释。--sum-reports输入参数以前是报告文件使用--report-file选项创建格式(例如,不是JSON、YAML、XML或SQL)。生成包含单个报告文件中的数据总和。--timeout<N>忽略耗时超过<N>秒的文件在语言的任何过滤阶段进行处理。默认的最大花费秒数filter stage是文件中的行数除以1000。将<N>设置为0允许无限时间。另请参阅--diff超时。--processes=NUM[仅在具有最新版本的系统上可用Parallel::ForkManager模块的。不是在Windows上可用。]设置最大数量cloc使用的核心。默认值为0禁用多处理。--unix覆盖操作系统自动检测逻辑并在UNIX模式下运行。另请参见--窗口,--show-os。--use-sloccount如果安装了sloccount,请使用其编译的可执行文件计数、javacount、pascalcount,php_count和xml_count,而不是cloc的计数器。SLOCCount的编译计数器为比cloc快得多,可能会计算项目时的性能改进使用大文件。然而,这些cloc-specific功能将不可用:--diff,--count-and-diff,--strip-comments,--unicode。--windows覆盖操作系统自动检测逻辑并在Microsoft Windows模式下运行。另请参见--unix,--show-os。过滤器选项--include-content=<regex>仅统计包含与给定正则表达式。--exclude-content=<regex>排除包含与给定文本匹配的文本的文件正则表达式。--exclude-dir=<D1>[,D2,]排除给定的逗号分隔的目录D1、D2、D3等。对于示例--exclude dir=.cache,测试将跳过具有/.cache的所有文件和子目录/或/test/作为其父目录。名为.bzr、.cvs、.hg、.git、.svn、,和.snapshot始终被排除在外。此选项仅适用于单个目录名称,因此不包括文件路径分隔符允许。使用--fullpath和--not-match-d=<regex>提供匹配多个子目录的正则表达式。--排除ext=<ext1>[,<ext2>[…]]不计算具有给定文件名的文件数扩展名。--exclude-lang=<L1>[,L2[…]]排除给定的逗号分隔语言L1、L2、L3等。--exclude-list-file=<file>忽略名称为出现在<文件>中<file>应该有一个文件每行的名称。只忽略精确匹配;相对路径名将从开始解析调用cloc的目录。另请参见--list-file。--fullpath修改--match-f、--not-match-f的行为,和--not-match-d以包含文件的路径在regex中,不仅仅是文件的basename。(这不会展开每个文件以包括其绝对路径,而是使用传入cloc的路径as。)注意:--match-d始终查看完整路径,因此不受--fullpath的影响。--include-ext=<ext1>[,ext2[…]]仅统计具有给定逗号的语言分开的文件扩展名。使用--show-ext to请参阅已识别的扩展。--include-lang=<L1>[,L2[…]]仅统计给定的逗号分隔语言L1、L2、L3等。使用--show lang查看公认语言列表。--match-d=<regex>仅统计与Perl匹配的目录中的文件正则表达式。例如--match-d=“/(src|include)/”仅统计包含以下内容的目录中的文件/src/或/include/。与--not-match-d不同,--match-f和--not-match-f,--match-d总是将完全限定的路径与正则表达式。--not-match-d=<regex>统计除目录中的文件以外的所有文件匹配Perl正则表达式。只有尾部比较目录名,例如,当在/usr/local/lib中计数,只有“lib”是与正则表达式相比。添加--比较父目录的完整路径正则表达式。正则表达式的开始或结束。--match-f=<regex>只计算基名称与Perl匹配的文件正则表达式。例如--match-f=“^[Ww]idget”仅统计以小部件或小部件开头的文件。添加--包含父目录的完整路径在regex中,而不仅仅是basename。--not-match-f=<regex>统计除基本名称以外的所有文件匹配Perl正则表达式。添加--要包含的完整路径regex中的父目录,而不仅仅是基本名称。--skip-archive=<regex>忽略以给定Perl规则结尾的文件表达式。例如,如果给定--skip-archive='(zip|tar(.(gz|Z|bz2|xz|7z))?)'代码将跳过以.zip结尾的文件,.tar、.tar.gz、.tar。Z、 .tar.bz2、.tar.xz和.焦油.7z。--跳过隐藏的胜利在Windows上,忽略隐藏的文件。弹出调试操作--categorized=<file>以字节、标识语言保存文件大小和分类文件的名称到<file>。--counted=<file>将已处理源文件的名称保存到<file>。--diff-alignment=<file>写入<file>文件和文件对列表显示添加、删除和/或在运行期间与--diff进行比较。此开关强制启用--diff模式。--explain=<lang>打印用于删除的注释的筛选器语言<lang>并退出。在某些情况下过滤器引用Perl子例程,而不是正则表达式。进一步解释可能需要源代码。--help打印此使用信息并退出。--found=<file>将找到的每个文件的名称保存到<file>。--忽略=<file>保存被忽略文件的名称及其原因被忽略为<file>。--打印筛选阶段打印处理后的源代码应用每个过滤器。--show-ext[=<ext>]打印所有已知(或仅给定)文件扩展名和退出。--show-lang[=<lang>]打印所有已知(或仅给定)语言和出口。--show-os打印操作系统模式的值然后退出。另请参见--unix,--windows。-v[=<n>]详细开关(可选数值)。-verbose[=<n>]-v的长形式。--version打印此程序的版本并退出。--write-lang-def=<file>写入语言处理过滤器然后退出。作为创建的第一步很有用自定义语言定义。注:语言映射到相同的文件扩展名将被排除。(另请参阅--force lang-def,--read lang-def)。--write-lang-def-incl-dup=<文件>与--write-lang-def相同,但包括重复的扩展名。这会产生一种有问题的语言定义文件,因为cloc将拒绝使用直到删除重复项。输出选项--3打印第三代语言输出。(此选项可能导致报告汇总失败如果使用此选项生成某些报告而其他产品则没有。)--以百分比X代替注释和空行计数,显示这些值是基于值的百分比X的分母:X=“c”->代码行数X=“cm”->代码行数+注释X=“cb”->代码行数+空格X=“cmb”->代码行数+注释+空格例如,如果使用方法“c”和代码评论行数是行数的两倍对于代码,注释列中的值将为200%。代码列仍为行计数。--csv将结果写为逗号分隔的值。--csv-delimiter=<C>使用字符<C>作为逗号的分隔符分隔文件,而不是,。此开关强制打开--csv。--file-encoding=<E>使用<E>编码而不是默认ASCII码(<E>=“UTF-7”)。示例:“UTF-16”,‘euc-kr’,‘iso-8859-16’。已知编码可以是用打印perl-MEncode-e'打印连接(“\n”,Encode->encodings(“:all”)),“\n”'--隐藏速率在输出标题。这使得输出具有确定性。--json将结果写成JavaScript对象符号(JSON)格式的输出。--md将结果写为Markdown格式的文本。--out=<file>同义词--report-file=<file>。--progress-rate=<n>在每个<n>文件已处理(默认<n>=100)。将<n>设置为0至抑制进度输出(重定向时有用输出到STDOUT)。--quiet取消显示除之外的所有信息消息最终报告。--report-file=<file>将结果写入<file>而不是STDOUT。--sql=<file>将结果写入sql create和insert语句可以由数据库程序读取,例如苏莱特。如果<file>为-,则输出发送到STDOUT。--sql-append将sql插入语句附加到指定的文件by--sql,不生成表创建声明。仅对--sql选项有效。--sql-project=<name>使用<name>作为当前运行。仅对--sql选项有效。--sql-style=<style>改用给定样式编写sql语句默认SQLite格式。样式包括“Oracle”和“Named_Columns”。--sum-one对于纯文本报告,显示sum:输出行即使只处理一个输入文件。--xml用xml编写结果。--xsl=<file>引用<file>作为xsl样式表XML输出。如果<file>为1(数字1),编写默认样式表cloc.xsl(或cloc-diff.xsl if-diff)。此开关强制启用--xml。--用yaml编写结果。

prompt>cloc—显示语言ABAP(ABAP)ActionScript(作为)Ada(Ada,adb,ads,pad)ADSO/IDSM(广告)阿格达(阿格达,拉格达)振幅(例如,道夫,启动)AnsProlog(lp)Ant(build.xml,buildxml)ANTLR语法(g,g4)Apex等级(cls)顶点触发器(触发器)APL(APL,apla,aplc,aplf,apli,apln,aplo,dyalog,dyapp,mipage)AppleScript(AppleScript)Arduino素描(ino,pde)方舟(ets)阿图罗(艺术)ASCIIIDOC(adoc,AsciiDoc)ASP(asa、ashx、ASP、axd)ASP。NET(asax、ascx、asmx、aspx、master、sitemap、webinfo)AspectJ(aj)组件(a51,asm,nasm,S,S)阿童木(Astro)渐近线(简单)自动热键(ahk,ahkl)awk(auk,awk,gawk,mawk,nawk)挡板(建造)BizTalk业务流程(odx)BizTalk管道(btp)刀片(刀片,刀片.php)Bourne Again Shell(巴什)伯恩壳牌(sh)BrightScript(brs)生成器(xml.builder)C(C、cats、ec、idc、pgc)C外壳(csh,tcsh)C#(cs)代码C#设计器(Designer.cs)C++(C、C++、C++m、cc、ccm、CPP、CPP、cppm、cxx、cxxm、h++、inl、ipp、ixx、pcc、tcc、tpp)C/C++标题(H,H,hh,hpp,hxx)开罗(开罗)蛋糕构建脚本(蛋糕)碳(碳)CCS(CCS)礼拜堂(chpl)圆形(Circom)清洁(dcl,icl)Clojure(引导、cl2、clj、cljs.hl、cljscm、cljx、hic、riemann.config)ClojureC(cljc)ClojureScript(cljs)CMake(CMake,CMake.in,CMakeLists.txt)COBOL(CBL、CBL、ccp、COB、COB、COBOL、cpy)CoCoA 5(c5,cocoa5,coco服务器,cpkg5)咖啡脚本(_咖啡,蛋糕,cjsx,咖啡,冰镇)冷聚变(cfm,cfml)ColdFusion CFScript(cfc)约束语法(cg3,rlx)Containerfile(集装箱文件)辅酶(v)晶体(cr)CSON(CSON)CSS(CSS)CSV(CSV)黄瓜(特色)CUDA(cu,cuh)Cython(像素、像素、像素)D(D)达夫尼(dfy)DAL(日)飞镖德尔福表格(dfm)DenizenScript(dsc)德鲁(Derw)小丑(小丑)饮食(dt)diff(diff,补丁)DITA(DITA)Dockerfile(Dockerfle,Dockerfile)DOORS扩展语言(dxl)DOS批处理(BAT、BAT、BTM、BTM、CMD、CMD)口水(drl)DTD(DTD)数据跟踪(d)ECPP(ECPP)EEx(EEx)EJS(电子病历)长生不老药(前,前)榆树嵌入式晶体(ecr)ERB(ERB,ERB)Erlang(app.src、emakefile、erl、hrl、rebar.config、rebar.config.lock、rebar.lock、xrl、yrl)预期(exp)F#(fsi,fs,fs)F#脚本(fsx)茴香(fnl)有限状态语言(fsl,jssm)鱼壳(鱼)扁平缓冲器(fbs)焦点(foxec)第四(4th,e4,f83,fb,Forth,fpm,fr,frt,ft,fth,rx,fs,f,for)Fortran 77(F,F77,F77,FOR,FTN,FTN,pfo,F,FOR)Fortran 90(F90,F90)Fortran 95(F95,F95)自由标记模板(ftl)福塔克语(fut)FXML(FXML)GDScript(gd)Gencat NLS(消息)格拉德(格拉德,ui)Gleam(闪光)GLSL(comp,fp,frag,frg,fsh,fshader,geo,geom,GLSL,glslv,gshader,tesc,tese,vert,vrx,vsh,vshader)去(去,去)戈多资源(tres)戈多场景(tscn)Godot着色器(gdshader)梯度(Gradle,Gradle.kts)格雷斯(gsp)GraphQL(gql、GraphQL、graphqls)Groovy(gant、Groovy、grt、gtpl、gvy、jenkinsfile)哈姆(哈姆,哈姆污损)把手(把手,hbs)海港(hb)兔子(ha)哈斯克尔(hs,hsc,lhs)哈克斯(hx,hxsl)HCL(HCL,游牧,tf,tfvars)HLSL(cg、cginc、fxh、HLSL、hlsli、着色器)空心C(HC)胡恩(Hoon)HTML(htm,HTML,HTML.hl,xht)HTML EEx(heex)IDL(dlm、IDL、pro)伊德里斯(idr)免疫球蛋白Pro(ipf)英巴(英巴)INI(buildower.spec、editorconfig、INI、lektorproject、prefs)InstallShield(ism)IPL(IPL)斋(斋)珍妮特(珍妮特)Java(Java)JavaScript(_js、bones、cjs、es6、jake、jakefile、js、jsb、jscad、jsfl、jsm、jss、mjs、njs、pac、sjs、ssjs、xsjs和xsjslib)JavaServer面(jsf)JCL(JCL)金贾模板(j2,金贾,金贾2)JSON(arcconfig、avsc、composer.lock、geojson、gltf、har、htmlhintrc、JSON、JSON-tmlanguage、jsonl、mcmeta、mcmod.info、tern-config、tern-project、tfstate、tfstate.backup、topojson,watchmanconfig、webapp、webmanifest、yyp)JSON5(JSON5)JSP(JSP、jspf)JSX(JSX)朱莉娅(jl)杜松子Jupyter笔记本(ipynb)克米特(ksc)光辉壳牌(ksh)科特林(kt,ktm,kts)kvlang(千伏)精益(hlean,精益)Lem(莱姆)LESS(减)法(l,lex)LFE(低频)链接器脚本(ld)液体(液体)Lisp(asd,el,Lisp,lsp,cl,jl)识字人Idris(lidr)LiveLink OScript(脚本)LLVM IR(ll)徽标(x,xm)Logtalk(lgt,Logtalk)Lua(Lua,nse,p8,pd_Lua,rbxs,wlua)m4(交流,m4)make(am、Gnumakefile、Gnumakefile、Makefile和mk)Mako(Mako,mao)降价(contents.lr、降价、md、mdown、mdwn、mdx、mkd、mkdn、mkdown、ronn、workbook)数学(cdf,ma,Mathematica,mt,nbp,wl,wlt,m)MATLAB(米)Maven(pom,pom.xml)介子(介子构建)金属(金属)模块3(i3,ig,m3,mg)莫约姆(Mojom)莫霍(莫霍,🔥)MSBuild脚本(btproj,csproj,MSBuild,vcproj,wdproj,wixproj)泵(mps,m)胡子(胡须)MXML(MXML)NAnt脚本(内部版本)NASTRAN DMAP(DMAP)内默尔(n)网络徽标(nlogo,nls)Nim(尼姆,尼姆.cfg,敏捷,尼姆罗德,尼姆)尼克斯(尼克斯)纽纽卡斯州(njk)目标C(m)目标C++(mm)OCaml(eliom,eliomi,ml,ml4,mli,mll,mly)奥丁(Odin)开放cl(cl)OpenSCAD(scad)Oracle表单(fmt)Oracle PL/SQL(bod、fnc、prc、spc、trg)Oracle报告(rex)P4(第4页)帕斯卡(dpr,lpr,p,pas,Pascal)帕斯卡/木偶(pp)Patran命令语言(pcl,ses)聚乙二醇(聚乙二醇)peg.js(pegjs)佩吉(peggy)Perl(ack、al、cpanfile、makefile.pl、Perl、ph、plh、plx、pm、psgi、rexfile、pl、p6)害虫PHP(aw、ctp、phakefile、PHP、php3、php4、php5、PHP_cs、PHP_cs.dist、phps、phpt、phtml)PHP/Pascal/Fortran(含)Pig拉丁语(Pig)损益(pl1)损益(单位:升,plm)PlantUML(iuml、PlantUML、pu、puml、wsd)采购订单文件(PO)小马(小马)PowerBuilder(pbt、sra、srf、srm、srs、sru、srw)PowerShell(ps1、psd1、psm1)棱镜模式(棱镜)ProGuard(专业)Prolog(P,Prolog,yap,pl,p6,pro)属性(Properties)协议缓冲区(原型)PRQL(PRQL)Pug(翡翠,Pug)PureScript(采购)Python(buck、build.bazel、gclient、gyp、gypi、lmi、py、py3、pyde、pyi、pyp、pyt、pyw、sconscript、sconstruct、snakefile、tac、workspace、wscript、wsgi、xpy)QML(qbs,QML)Qt(ui)Qt语言学家(ts)Qt项目(pro)R(expr-dist,R,R,rd,rprofile,rsx)支架(rkt、rktd、rktl、scrbl)拉库(下午6点,拉库,拉库莫)Raku/Prolog(第6页、第6页)RAML(冲压)快速脚本(pyj)剃刀(cshtml,Razor)理由ML(re,rei)ReScript(res,resi)reStructuredText(rest、rest.txt、rst、rst.txt)雷克斯(pprx,Rexx)环(rform、rh、Ring)人民币(Rmd)机器人框架(机器人)Ruby(评估、berksfile、brewfile、builder、builderfile、构建文件、capfile、dangerfile、交付文件、eye、fastfile、gemfile、gemfile.lock、gempec、god、guardfile、irbrc、jarfile,jbuilder,mavenfile、mspec、podfile,podspec、prirrc、puppetfile、rabl、rb、rbuild、rbw、rbx、ru、snapfile、thor、thorfile和vagrantfile、watchr)Ruby HTML(rhtml)锈蚀(rs,rs.in)盐堆(sls)SAS(SAS)萨斯(Sass)Scala(kojo、sbt、Scala)方案(sc、sch、scm、sld、sps、ss、sls)SCSS(监控系统)塞德语(sed)技能(il)技能++(ils)切片(冰)苗条(苗条)细长(Slint)小对话(st,cs)智能(Smarty,tpl)零食(规则,smk)Softbridge基本版(SBL,SBL)固体(sol)斯巴福(sp)规范e(e)SQL(cql、mysql、psql、SQL、SQL、tab、udf、viw)SQL数据(Data.SQL)SQL存储过程(spc.SQL、spoc.SQL、sproc.SQL和udf.SQL)松鼠(螺母)标准ML(fun、sig、sml)星雀(bazel,bzl)状态(ado,DO,DO,doh,ihlp,mata,matah,sthlp)触笔(触笔)糖SS(sss)斯韦尔特(斯韦尔特)SVG(SVG,SVG)斯威夫特(Swift)开关(i)表生成(td)Tcl/Tk(itk,Tcl,Tk)TEAL(青色)Teamcenter会议Teamcenter月TeX(辅助、bbx、bib、bst、cbx、dtx、ins、lbx、ltx、mkii、mkiv、mkvi、sty、TeX、cls)文本(Text,txt)节俭TITAN项目文件信息(tpd)钛合金样式表(tss)TLA+(TLA)TNSDL(cii,cin,in1,in2,in3,in4,inf,接口,rou,sdl,sdt,spd,ssc,sst)TOML(桶)tspeg(jspeg,tspeg)TTCN(TTCN、ttcn2、ttcn3、ttcnpp)小枝TypeScript(mts、tsx、ts)打字(典型)乌姆卡(um)整体预制件(垫子、预制件)瓦拉(瓦拉)Vala标题(vapi)应用程序的VB(VBA,VBA)Velocity模板语言(vm)Verilog-SystemVerilog(sv、svh、v)VHDL(VHD、VHD、VHDL、VHDL、vhf、vhi、vho、vhs、vht、vhw)vim脚本(vim)Visual Basic(BAS、BAS、ctl、dsr、frm、FRX、FRX、VBHTML、VBHTML、vbp、vbw、cls)Visual Basic。NET(VB、VB、vbproj)Visual Basic脚本(VBS、VBS)Visual Fox Pro(SCA、SCA)Visual Studio解决方案(sln)视觉力组件(组件)视觉力页面(第页)Vuejs组件(vue)维珀(vy)Web服务描述(wsdl)WebAssembly(瓦特,瓦特)WGSL(WGSL)Windows消息文件(mc)Windows模块定义(def)Windows资源文件(rc,rc2)WiX包括(wxi)WiX源(wxs)WiX字符串本地化(wxl)WXML(WXML)WXSS(WXSS)X++(xpo)XAML(XAML)xBase(prg、prw)xBase标头(ch)XHTML(XHTML)XMI(XMI,XMI)XML格式(adml、admx、ant、app.config、axml、builds、ccproj、ccxml、classpath、clixml、cproject、cscfg、csdef、csl、ct、depproj、ditamap、ditaval、dll.config、dotsettings、filters、fsproj、gmx、grxml、iml、ivy、jelly、jsproj、kml、launch、mdpolicy、mjml、natvis、ndproj、nproj、nuget.config,nuspec、odd、osm、packages.config、pkgproj、plist、proj、proj,project,props、ps1xml、psc1、pt、rdf、resx、rss、scxml、settings.styleecop、sfproj、shproj、srdf、情节提要、sttheme、submire-spipe、targets、tmcommand、tml、tmlanguage、tmpreferences、tmsnippet、tmtheme、urdf、ux、vcxproj、vsixmanifest、vssettings、vstemplate、vxml、web.config、web.debug.config和web.release.config,wsf、x3d、xacro、xif、xliff、XML、,xml、xml.dist、xproj、xspec、xul、zcml)XQuery(xq、xql、xqm、XQuery、xqy)XSD(XSD,XSD)XSLT(XSL、XSL、XSLT、XSLT)Xtend(扩展)yacc(y,yacc)YAML(clang-format,clang-timy,gemrc,glide.lock,mir,reek,rviz,superlime-syntax,syntax,YAML,YAML-tmlanguage,yml,yml.mysql)Z字形(Zig)zsh(zsh)

可以通过从使用--读取语言定义--力-长度-ef选项。

这些文件扩展名映射到多种语言:

  • 文件可以是Lisp或OpenCL
  • cls公司文件可以是Visual Basic、TeX或Apex类
  • 反恐精英文件可以是C#或Smalltalk
  • d日文件可以是D或dtrace
  • (f)文件可以是Fortran 77或Forth
  • fnc公司文件可以是Oracle PL或SQL
  • 对于文件可以是Fortran 77或Forth
  • 英尺文件可以是F#或Forth
  • 股份有限公司文件可以是PHP或Pascal
  • itk公司文件可以是Tcl或Tk
  • jl公司文件可以是Lisp或Julia
  • 点燃文件可以是PL或M
  • 文件可以是MATLAB、Mathematica、Objective-C、MUMPS或Mercury
  • 第6页文件可以是Perl或Prolog
  • pl公司文件可以是Perl或Prolog
  • 损益文件可以是Perl或Prolog
  • 聚丙烯文件可以是Pascal或Puppet
  • 赞成的意见文件可以是IDL、Qt Project、Prolog或ProGuard
  • ts秒文件可以是TypeScript或Qt Linguist
  • 用户界面文件可以是Qt或Glade
  • v(v)文件可以是Verilog系统Verilog或Coq

cloc有一些子程序,它们试图识别基于正确语言的这些特殊情况的文件内容。语言识别准确性是文件包含多少代码的函数。m个文件例如,只有一两行,很少有足够的信息正确区分MATLAB、Mercury、MUMPS或Objective-C。

很难使用具有文件扩展名冲突的语言进行自定义--读取语言定义--力-长度-ef因为他们没有机制确定具有通用扩展名的语言。在这种情况下,必须修改cloc源代码。

cloc的操作方法类似于SLOCCount的:首先,创建一个列表要考虑的文件数。接下来,尝试确定是否找到文件包含可识别的计算机语言源代码。最后,对于被标识为源文件的文件,调用特定于语言的例程以计算源代码行数。

更详细的描述:

  1. 如果输入文件是存档文件(例如.tar.gz或.zip文件),创建一个临时目录并使用系统调用适当的底层实用程序(tar、bzip2、unzip、,等),然后将此临时目录添加为输入之一。(此在Unix上工作比在Windows上更可靠。)

  2. 使用File::Find递归下降输入目录并使候选文件名列表。忽略二进制和零大小的文件。

  3. 确保候选人列表中的文件具有唯一的内容(首先通过比较文件大小,然后,对于大小相似的文件,将文件内容的MD5哈希与Digest::MD5进行比较)。对于每个一组相同的文件,根据确定删除除第一个副本以外的所有副本通过词法排序从集合中选择相同的文件。已删除的报告中不包含文件。--跳过-唯一性转换禁用唯一性测试并强制所有文件副本包含在报告中。)另请参见--忽略=切换查看哪个文件被忽略以及原因。

  4. 扫描候选文件列表以查找cloc的文件扩展名与编程语言关联(请参见--展示灯--显示-文本选项)。匹配的文件分类为包含源该语言的代码。打开每个没有扩展名的文件并读取其第一行,以查看它是否是Unix shell脚本(任何以#开头的内容!)。如果是shell脚本,则文件为按脚本语言分类(如果语言是识别)。如果文件没有可识别的扩展名或不是可识别的脚本语言,则忽略该文件。

  5. 候选列表中剩余的所有文件现在都应该是源文件用于已知的编程语言。对于每个文件:

    1. 将整个文件读入内存。
    2. 计算行数(=L起初的).
    3. 删除空白行,然后再次计数(=L非空白(_B)).
    4. 循环遍历为此语言定义的注释筛选器。(用于例如,C++有两个过滤器:(1)删除以开头的行可选空白,后跟//和(2)删除之间的文本/*和*/)将每个筛选器应用于代码以删除注释。计算剩余行数(=L代码).
    5. 保存此语言的计数:
      • 空行=L起初的-L(左)非空白(_B)
      • 注释行=L非空白(_B)-L(左)代码
      • 代码行=L代码

这些选项稍微修改了算法。这个--read-lang-def(读-长-参考)选项例如允许用户读取评论过滤器的定义,已知的文件扩展名和文件中已知的脚本语言。这个此选项的代码在步骤2和3之间进行处理。

你如何判断cloc是否正确识别了评论?一种方法说服自己cloc做的是正确的事情,那就是使用它--条带注释从文件中删除注释和空行的选项,然后将strippeddown文件与原始文件进行比较。

让我们用SQLite合并来尝试一下,这是一个包含所有构建SQLite库和头文件所需的代码:

提示>tar zxf sqlite-amalgamation-3.5.6.tar.gz提示>cd sqlite-3.5.6/prompt>cloc-strip-comments=nc sqlite.c1个文本文件。1个唯一文件。编写sqlite3.c.nc0个文件被忽略。http://cloc.sourceforge.netv 1.03 T=1.0秒(1.0个文件/秒,82895.0行/秒)-------------------------------------------------------------------------------语言文件空白注释代码标尺第三代等效-------------------------------------------------------------------------------丙15167 26827 50901 x 0.77=39193.77-------------------------------------------------------------------------------

给--strip注释的扩展参数是任意的;这里nc被用作“no comments”的缩写。

cloc从文件中删除了31000多行:

提示>wc-l sqlite3.c sqlite3.c.nc82895平方米3.c50901平方米3.c.nc总计133796提示>echo“82895-50901”|bc31994

现在,我们可以比较原始文件sqlite3.c和剥离的文件注释,sqlite3.c.nc,使用diff或vimdiff等工具查看cloc确实考虑了注释和空白行。这是一个严格的证明strippeddown文件包含与原始文件相同的C代码编译这些文件并比较结果对象文件的校验和。

首先,原始源文件:

提示>gcc-c sqlite3.c提示>md5sum-sqlite3.occe5f1a2ea27c7e44b2e1047e2588b49平方米3.o

接下来,没有注释的版本:

提示>mv sqlite3.c.nc sqlite3.c提示>gcc-c sqlite3.c提示>md5sum-sqlite3.occe5f1a2ea27c7e44b2e1047e2588b49平方米3.o

cloc删除了31000多行注释和空白,但没有以任何重要的方式修改源代码,因为生成的目标文件与原始文件匹配。

1.07版之前的cloc版本需要--使用=CMD提取告诉cloc如何操作的选项展开存档文件。从v1.07开始,这是提取已自动尝试。目前,自动提取方法有效对于以下文件类型,在Unix类型操作系统上运行得相当好:.塔尔.gz,.tar.bz2型,.tar.xz码,.tgz型,.zip文件,.ear(耳朵),.deb.如果安装了WinZip,其中一些扩展可以在Windows上运行在默认位置(C: \程序文件\WinZip\WinZip32.exe).此外,使用更新版本的WinZip[http://www.winzip.com/downcl.htm](命令线路附加)需要正确操作;在这种情况下,可以使用以下命令调用cloc有点像

--extract-with=“\”c:\Program Files\WinZip\wzunzip\“-e-o>FILE<”

裁判。http://sourceforge.net/projects/cloc/forums/forum/600963/topic/4021070?message=8938196

在自动提取失败的情况下,可以尝试--提取=CMD选项计算tar文件、Zip文件或具有提取工具的其他压缩档案。cloc接受用户提供的提取命令并扩展存档到临时目录(使用文件::Temp创建),统计临时目录中的代码行数,然后删除该目录。虽然在交易时不是特别有用使用单个压缩存档(毕竟,如果您要键入无论如何,extraction命令为什么不手动扩展归档?)此选项对于同时处理多个存档很方便。

例如,假设您在Unix机器上有以下源tarball

perl-5.8.5.tar.gz文件皮松-2.4.2.tar.gz

你想计算其中的所有代码。命令是

cloc--extract-with='gzip-dc>文件<|tar xf-'perl-5.8.5.tar.gz Python-2.4.2tar.gz

如果该Unix机器有GNU tar(可以在一步)命令可以缩短为

cloc—使用='tar zxf>文件提取<'perl-5.8.5.tar.gz Python-2.4.2.tar.gz

在安装了WinZip的Windows计算机上c: \程序文件\WinZip命令如下所示

cloc.exe--extract-with=“\”c:\Program Files\WinZip\WinZip32.exe\“-e-o>FILE<.”perl-5.8.5.tar.gz Python-2.4.2.tar.gz

Java语言.ear(耳朵)文件是包含其他Zip的Zip文件文件夹。cloc可以处理嵌套的压缩存档,而无需困难——前提是所有这些文件都被压缩并存档在同样的方式。计数a的示例Java语言.ear(耳朵)Unix和Windows中的文件:

Unix(Unix)>cloc--extract-with=“unzip-d.>文件<”Project.earDOS>cloc.exe--extract-with=“\”c:\Program Files\WinZip\WinZip32.exe\“-e-o>FILE<.”Project.ear

这个--差异开关允许测量文件、目录、,或存档。差异揭示的不仅仅是绝对代码两个文件版本的计数。例如,假设源文件有100行,它的开发人员提供了一个更新的版本102行。开发人员是否添加了两条注释行,或删除17个源行并添加14行源代码行和5行注释行,或者开发商彻底改写,丢弃所有100行原始行添加102行所有新源代码?diff选项说明了如何添加、删除、修改或保留了许多行源代码相同,以及添加、删除了多少行注释,修改或保持不变。

空白行中的差异处理得更加粗糙因为这些很早就被cloc剥离了。除非文件对相同,cloc只报告差异空白行的绝对计数。换句话说,一个如果第二个文件中的空格比第一个多,如果情况正好相反。“same”的条目将为非零只有当两个文件相同时。

除了文件对之外,还可以提供以下cloc对目录、成对的文件归档或文件归档和目录。cloc将尝试对齐目录或归档中的文件对并比较差异每对。例如,要查看通用条款4.4.0和4.5.0可以

cloc—差异gcc-4.4.0.tar.bz2 gcc-4.5.0.tar.b2

不过,要做好等待结果的准备;这个--差异选项的运行速度比绝对代码计数慢得多。

要查看cloc如何在两个存档之间对齐文件,请使用--差异对齐选项

cloc--diff对齐=align.txt gcc-4.4.0.tar.bz2 gcc-4.5.0.tar.b2

生成文件对齐.txt其中还显示了文件对作为添加和删除的文件。符号==!=在每个之前文件对指示文件是否相同(==)或者如果他们有不同的内容(!=).

下面的示例输出显示了Python 2.6.6和2.7之间的差异发布:

提示>cloc—diff Python-2.7.9.tgz Python-2.7.10.tar.xz4315个文本文件。4313个文本文件.s2173个文件被忽略。4个错误:差异错误,超过超时:/tmp/8ToGAnB9Y1/Python-2.7.9/Mac/Modules/qt/_Qtmodule.c差异错误,超过超时:/tmp/M6ldvsGaoq/Python-2.7.10/Mac/Modules/qt/_Qtmodule.c差异错误(引用注释?):/tmp/8ToGAnB9Y1/Python-2.7.9/Mac/Modules/qd/qdsupport.py差异错误(引用注释?):/tmp/M6ldvsGaoq/Python-2.7.10/Mac/Modules/qd/qdsupport.pyhttps://github.com/AlDanial/clocv 1.65 T=298.59秒(0.0个文件/秒,0.0行/秒)-----------------------------------------------------------------------------语言文件空白注释代码-----------------------------------------------------------------------------Visual Basic语言相同的2 0 1 12已修改0 0 0添加了0 0 0已删除0 0 0制作相同11 0 340 2952修改了1 0 0 1添加了0 0 0已删除0 0 0差异相同10 87 105已修改0 0 0添加了0 0 0已删除0 0 0CSS公司相同0 0 19 327修改了1 0 0 1添加了0 0 0已删除0 0 0目标C相同7 0 61 635已修改0 0 0已添加0 0 0已删除0 0 0NAnt脚本相同2 0 0 30已修改0 0 0添加了0 0 0已删除0 0 0XML格式相同3 0 2 72修改了1 0 0 1添加了0 0 0 1已删除0 1 0 0Windows资源文件相同3 0 56 206修改了1 0 0 1添加了0 0 0已删除0 0 0期望相同6 0 161 565已修改0 0 0已添加0 0 0已删除0 0 0HTML格式相同14 0 11 2344已修改0 0 0添加了0 0 0已删除0 0 0vim脚本相同10 7 106已修改0 0 0已添加0 0 0已删除0 0 0C类++相同2 0 18 128已修改0 0 0添加了0 0 0已删除0 0 0Windows模块定义相同7 0 187 2080修改2 0 0 0添加了0 0 0 1已删除0 1 0 2序言相同的1 0 0 24已修改0 0 0添加了0 0 0已删除0 0 0Java脚本相同3 0 49 229已修改0 0 0添加了0 0 0已删除0 0 0装配相同51 0 6794 12298已修改0 0 0添加了0 0 0已删除0 0 0Bourne Shell公司相同41 0 7698 45024修改了1 0 0 3添加了0 13 2 64已删除0 0 0DOS批处理相同29 0 107 494修改1 0 0 9添加了0 1 0 3已删除0 0 0MSBuild脚本相同77 0 3 38910已修改0 0 0添加了0 0 0已删除0 0 0蟒蛇同1947年0 109012 430335修改192 0 94 950添加2 323 283 2532删除2 55 58 6464米相同18 0 191 15352修改了1 0 0 2添加了1 31 0 205已删除0 0 0C类相同505 0 37439 347837修改45 0 13 218添加了0 90 33 795已删除0 9 2 148C/C++标题相同255 0 10361 66635修改5 0 5 7添加了0 1 3 300已删除0 0 0---------------------------------------------------------------------金额:相同2986 0 172604 966700修改251 0 112 1193添加3 459 321 3901删除2 66 60 796---------------------------------------------------------------------

发生了一对错误。第一对是由于计算文件差异时超时造成的Python-X/Mac/Modules/qt/_qt模块。c(c)在每个Python版本中。此文件有26000行C代码,需要超过10秒--区分的默认最大持续时间单个文件--在我的慢速计算机上。(注意:这是指与执行差异这个sdiff()Perl中的函数算法::Diff模块,不是命令行差异实用程序。)此错误可能是通过将时间提高到20秒来克服具有--差异超时20.

第二个错误问题更大。文件Python-X/Mac/Modules/qd/qdsupport.pyinclude Python docstring(三重引号对之间的文本)包含C注释。cloc将文档字符串视为注释并处理它们首先将它们转换为C注释,然后使用C注释删除正则表达式。然而,嵌套的C注释会产生错误的结果。

cloc可以将其语言注释定义写入文件或读取从文件中注释定义,覆盖内置定义。当您想使用cloc计算尚未包含的语言,用于更改文件扩展名的关联或修改现有语言的计数方式。

创建自定义语言定义文件的最简单方法是让cloc将其定义写入文件,然后修改该文件:

Unix(Unix)>cloc--write-lang-def=my_definitions.txt

创建文件我的定义.txt可以修改的然后用--read-lang-def(读-长-参考)--力-长度-ef选项。选项之间的区别是前者将给定文件中的语言定义与合并cloc具有优先权的cloc内部定义如果有重叠。这个--力-长度-ef选项,位于另一方面,完全替换了cloc的定义。此选项在阻止cloc计数方面有一个缺点扩展映射到多种语言的语言因为这些语言需要额外的逻辑,而这并不容易在定义文件中表示。

Unix(Unix)>cloc--read-lang-def=my_definitions.txtfile1 file2目录1。。。

每个语言条目有四个部分:

  • 从第1列开始的语言名称。
  • 一条或多条评论过滤器从第5列开始。
  • 从第5列开始的一个或多个文件扩展名。
  • 从第5列开始的第三代比例因子。必须提供此条目但它的价值并不重要除非你想把你的语言与假设相比较第三代编程语言。

过滤器定义了从源文件中删除注释文本的方法。例如,C++的条目如下所示

C类++过滤器调用_regexp_common C++过滤器remove_inline//*$延长线C扩展c++扩展cc扩展cpp扩展cxx扩展pcc第三代发电机刻度1.51线路终止\\$

C++有两个过滤器:首先,删除匹配的行Regexp::Common的C++注释正则表达式。使用remove_inline的第二个过滤器当前是未使用。其目的是通过这两种方式识别线条代码和注释,它可能在将来实现。

可能会出现对不同过滤器选项的更完整的讨论在未来的这里。cloc的输出--写语言定义选项应提供足够的示例激励个人修改或扩展cloc的语言定义。

如果您管理多个软件项目,您可能会感兴趣通过项目而不仅仅是语言来查看行数。假设您管理三个名为MariaDB、PostgreSQL和SQLite的软件项目。负责每个项目的团队在其源代码并为您提供输出。例如,MariaDB团队

cloc—输出mariadb-10.1.txt mariadb-server-10.1.zip

并向您提供文件mariadb-10.1.txt文件.你得到的三个文件的内容是

Unix(Unix)>猫mariadb-10.1.txthttps://github.com/AlDanial/clocv 1.65 T=45.36秒(110.5个文件/秒,66411.4行/秒)-----------------------------------------------------------------------------------语言文件空白注释代码-----------------------------------------------------------------------------------电话:+1613 225338 290077 983026C 853 62442 73017 715018号C/C++标题1327 48300 114577 209394伯恩壳牌256 10224 10810 61943波尔147 10342 8305 35562帕斯卡107 4907 5237 32541HTML 56 195 6 16489爪哇文字5 3309 3019 15540电话:40 30 1599 359 14215芝加哥190 1919 4097 12206XML 35 648 56 5210鲁比59 619 184 4998木偶10 0 1 3848制作134 724 360 3631SQL 23 306 377 3405Python蟒蛇34 371 122 2545Bourne Again壳牌27 299 380 1604Windows模块定义37 27 13 1211法律4 394 166 991亚科2 152 64 810DOS批次19 89 82 700序言1 9 40 448机器人框架1 0 0 441CSS 2 33 155 393号JSON 5 0 0 359数据跟踪9 59 179 306Windows资源文件10 61 89 250组件2 70 284 237WiX源1 18 10 155Visual Basic 6 0 0 88亚马尔2 4 4 65PHP 1 11 2 24技能1 8 15 16第2 0 0 16页Windows消息文件1 2 8 6差异1 1 4 4丁1 4 11 4-----------------------------------------------------------------------------------金额:5014 372484 512110 2127699-----------------------------------------------------------------------------------Unix(Unix)>猫sqlite-3081101.txthttps://github.com/AlDanial/clocv 1.65 T=1.22秒(3.3个文件/秒,143783.6行/秒)-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------川2 11059 53924 101454C/C++标题2 211 6630 1546-------------------------------------------------------------------------------金额:4 11270 60554 103000-------------------------------------------------------------------------------Unix(Unix)>猫postgresql-9.4.4.txthttps://github.com/AlDanial/clocv 1.65 T=22.46秒(172.0个文件/秒,96721.6行/秒)-----------------------------------------------------------------------------------语言文件空白注释代码-----------------------------------------------------------------------------------HTML 1254 3725 0 785991丙1139 139289 244045 736519C/C++标题667 12277 32488 57014SQL 410 13400 8745 51926数据库雅加达8 3163 2669 28491伯恩壳牌41 2647 2440 17170波尔81 1702 1308 9456法9 792 1631 4285制造205 1525 1554 4114m4 12 218 25 1642米Windows模块定义13 4 17 1152XSLT 5 76 55 294DOS批次7 29 30 92CSS 1 20 7 69组件3 17 38 69D 1 14 14 66日Windows资源文件3 4 0 62Lisp 1 1 1 16第1 1 7 15页蟒蛇1 5 0 13Bourne Again壳牌1 8 6 10Windows消息文件1 0 0 5-----------------------------------------------------------------------------------金额:3864 178917 295080 1698471-----------------------------------------------------------------------------------

虽然这三个文件很有趣,但您也希望看到所有项目的总和。这可以用cloc来完成--汇总_报告选项:

Unix(Unix)>cloc--sum-reports--out=数据库mariadb-10.1.txt sqlite-3081101.txt postgresql-9.4.4.txt编写了databases.lang写入databases.file

报表组合生成两个输出文件,一个用于求和程序设计语言(数据库.lang)一个按项目(数据库.file).它们的内容是

Unix(Unix)>cat数据库.langhttps://github.com/AlDanial/cloc1.65伏--------------------------------------------------------------------------------语言文件空白注释代码--------------------------------------------------------------------------------C 1994 212790 370986 1552991电话:+1613 225338 290077 983026HTML 1310 3920 6 802480C/C++标题1996 60788 153695 267954伯恩壳牌297 12871 13250 79113SQL 433 13706 9122 55331波尔228 12044 9613 45018帕斯卡107 4907 5237 32541雅加达10 3315 2733 29301电话:42 1817 384 15857爪哇文字5 3309 3019 15540芝加哥190 1919 4097 12206制造339 2249 1914 7745法13 1186 1797 5276XML 35 648 56 5210鲁比59 619 184 4998木偶10 0 1 3848Python巨蟒35 376 122 2558Windows模块定义50 31 30 2363Bourne Again壳牌28 307 386 1614DOS批次26 118 112 792简体中文3 53 162 462序言1 9 40 448机器人框架1 0 0 441JSON 5 0 0 359Windows资源文件13 65 89 312组件5 87 322 306数据跟踪9 59 179 306XSLT 5 76 55 294WiX源1 18 10 155Visual Basic 6 0 0 88D 2 18 25 70日亚马尔2 4 4 65第3 1 7 31页PHP 1 11 2 24技能1 8 15 16Lisp 1 1 1 16Windows消息文件2 2 8 11差异1 1 4 4--------------------------------------------------------------------------------金额:8882 562671 867744 3929170--------------------------------------------------------------------------------Unix(Unix)>cat数据库.file----------------------------------------------------------------------------------文件文件空白注释代码----------------------------------------------------------------------------------mariadb-10.1.txt 5014 372484 512110 2127699postgresql-9.4.4.txt 3864 178917 295080 1698471sqlite-3081101.txt 4 11270 60554 103000----------------------------------------------------------------------------------金额:8882 562671 867744 3929170----------------------------------------------------------------------------------

报告文件本身可以汇总在一起。假设你也能做到Perl和Python的开发,您希望跟踪这些行的计数与数据库项目分开。弗斯特分别为Perl和Python创建报告:

cloc—输出perl-5.22.0.txt perl-5.22.0.tar.gzcloc--out python-2.7.10.txt python-2.7.10.tar.xz

然后把这些加起来

Unix系统>cloc—sum-reports—out script_lang perl-5.22.0.txt python-2.7.10.txt文件编写了script_lang.lang编写了script_lang.fileUnix(Unix)>猫script_lang.langhttps://github.com/AlDanial/cloc1.65伏-------------------------------------------------------------------------------语言文件空白注释代码-------------------------------------------------------------------------------波尔2892 136396 184362 536445丙680 75566 71211 531203蟒蛇2141 89642 109524 434015C/C++标题408 16433 26938 214800伯恩壳牌154 11088 14496 87759MSBuild脚本77 0 3 38910m4 20 1604 191 15559组件51 3775 6794 12298帕斯卡8 458 1603 8592电话:16 897 828 4939XML 37 198 2 2484HTML 14 393 11 2344电话:+12 338 295 2161Windows模块定义9 171 187 2081亚马尔49 20 15 2078序言12 438 2 1146JSON 14 1 0 1037标准yacc 1 85 76 998DOS批次44 199 148 895目标-C 7 98 61 635预计6 104 161 565Windows消息文件1 102 11 489CSS 1 98 19 328Windows资源文件7 55 56 292爪哇文字3 31 49 229vim脚本1 36 7 106差异1 17 87 105NAnt脚本2 1 0 30印尼盾1 0 0 24Visual Basic 2 1 1 12D 1 5 7 8日Lisp 2 0 3 4-------------------------------------------------------------------------------金额:6674 338250 417148 1902571-------------------------------------------------------------------------------Unix(Unix)>cat脚本长度文件-------------------------------------------------------------------------------文件文件空白注释代码-------------------------------------------------------------------------------python-2.7.10.txt 3240 161276 173214 998697perl-5.22.0.txt 3434 176974 243934 903874-------------------------------------------------------------------------------金额:6674 338250 417148 1902571-------------------------------------------------------------------------------

最后,合并组合文件:

Unix(Unix)>cloc--sum reports--report_file=所有数据库.lang script_lang写下所有内容.lang写入everything.fileUnix(Unix)>猫的一切.langhttps://github.com/AlDanial/cloc1.65伏---------------------------------------------------------------------------------语言文件空白注释代码---------------------------------------------------------------------------------丙2674 288356 442197 2084194邮编:+1625 225676 290372 985187HTML 1324 4313 17 804824波尔3120 148440 193975 581463C/C++标题2404 77221 180633 482754Python公司2176 90018 109646 436573伯恩壳牌451 23959 27746 166872SQL 433 13706 9122 55331帕斯卡尔115 5365 6840 41133MSBuild脚本77 0 3 38910电话:62 3421 575 31416雅加达11 3400 2809 30299爪哇文字8 3340 3068 15769制造355 3146 2742 12684组件56 3862 7116 12604芝加哥190 1919 4097 12206XML 72 846 58 7694法13 1186 1797 5276鲁比59 619 184 4998Windows模块定义59 202 217 4444木偶10 0 1 3848亚马尔51 24 19 2143DOS批次70 317 260 1687Bourne Again壳牌28 307 386 1614序言13 447 42 1594JSON 19 1 0 1396标准CSS 4 151 181 790目标-C 7 98 61 635Windows资源文件20 120 145 604预计6 104 161 565Windows消息文件3 104 19 500机器人框架1 0 0 441数据跟踪9 59 179 306XSLT 5 76 55 294WiX源1 18 10 155差异2 18 91 109vim脚本1 36 7 106Visual Basic 8 1 1 100丁3 23 32 78第3 1 7 31页NAnt脚本2 1 0 30印尼盾1 0 0 24PHP 1 11 2 24Lisp 3 1 4 20技能1 8 15 16---------------------------------------------------------------------------------总数:15556 900921 1284892 5831741---------------------------------------------------------------------------------Unix(Unix)>cat everything.file文件-------------------------------------------------------------------------------文件文件空白注释代码-------------------------------------------------------------------------------数据库.lang 8882 562671 867744 3929170script_lang.lang 6674 338250 417148 1902571-------------------------------------------------------------------------------金额:15556 900921 1284892 5831741-------------------------------------------------------------------------------

一个限制--汇总报告其特点是单个计数必须以纯文本格式保存。计数另存为如果在求和中使用XML、JSON、YAML或SQL,则会产生错误。

Cloc可以以SQL表创建和插入的形式写入结果供使用的语句使用关系数据库程序,如SQLite、MySQL、,PostgreSQL、Oracle或Microsoft SQL。一旦代码计数信息进入数据库,可以以有趣的方式查询和显示信息。

从cloc SQL输出创建的数据库有两个表,元数据t吨:

元数据:

字段 类型
身份证件 整数主键
时间戳 文本
项目 文本
逝去的_秒 文本

t吨:

字段 类型
项目 文本
语言 文本
文件 文本
n空白 整数
n注释 整数
n代码 整数
n缩放 真实的
外键(id) 引用元数据(id)

这个元数据表包含有关cloc何时运行的信息已创建。运行时以两种方式存储:作为Unix epoch秒in身份证件并作为ISO 8601格式的文本字符串在当地时区(例如2024-03-01 14:19:41)英寸时间戳.这个--sql-append开关允许一个组合在单个数据库中多次运行;每次跑步都会增加一个行添加到元数据表中。代码计数信息位于表中t吨.这个身份证件键可以轻松将运行的代码计数与其元数据。

让我们重复一下Perl、Python、SQLite、MySQL和PostgreSQL tarballs显示在合并报表上面的示例,这次使用SQL输出选项和数据库数据库引擎。

这个--sql语言switch告诉cloc在表单中生成输出SQL表的创造插入命令。开关需要将这些SQL语句写入的文件名参数,或,如果参数为1(数字1),则将输出流传输到STDOUT。由于SQLite命令行程序,方形3,可以读取来自STDIN的命令,我们可以免除将SQL语句存储到文件和使用--sql 1语言将数据直接通过管道传输到SQLite可执行文件:

cloc--sql 1--sql-project mariadb-mariadb-server-10.1.zip | sqlite3代码.db

这个--sql项目mariadb部件是可选的;没有必要在仅使用一个代码库时指定项目名称。然而,因为我们将从其他四个tarball中添加代码计数,所以我们只如果我们提供一个每个运行的项目名称。

现在我们有了一个数据库,我们需要传入--sql-append切换以告知cloc不要清除此数据库,而是添加更多数据:

cloc--sql 1--sql-project postgresql--sql-append postgersql-9.4.4.tar.bz2 | sqlite3代码.dbcloc--sql 1--sql-project-sqlite--sql-append-sqlite-amalgamation-3081101.zip | sqlite3代码.dbcloc--sql 1--sql项目python--sql附加python-2.7.10.tar.xz | sqlite3代码.dbcloc--sql 1--sql-project perl--sql-append perl-5.22.0.tar.gz | sqlite3代码.db

现在有趣的事情开始了——我们有了一个数据库,代码.db,有很多五个项目的信息并可以查询所有有趣的事实。

在所有项目中,哪个文件最长?

prompt>sqlite3 code.db'从t中选择项目、文件、nBlank+nComment+nCode作为nL其中nL=(从t中选择max(nBlank+nComment+nCode))'sqlite|sqlite-amalgamation-3081101/sqlite3.c|161623

方形3的默认输出格式留下了一些不足之处。我们可以在程序的rc文件中添加一个选项,~/.sqliterc,显示列标题:

.header打开

人们可能还想包括

.mode列

在里面~/.sqliterc但当输出超过一行,因为第一行条目的宽度决定了最大值所有后续行的宽度。这通常会导致输出被截断,而不是完全是可取的。一个选项是编写自定义SQLite输出格式化程序,如sqlite_格式,包含在cloc中。

要使用它,只需传递方形3的STDOUT进入sqlite_格式通过管道:

prompt>sqlite3 code.db'从t中选择项目、文件、nBlank+nComment+nCode作为nL其中nL=(从t中选择max(nBlank+nComment+nCode))'|/sqlite_格式--从~/.sqliterc加载资源项目文件nL_______ _____________________________________ ______sqlite-sqlite-amalmation-3081101/sqlite3.c 161623

如果“项目文件”行没有出现,请添加.header打开给你~/.sqliterc如上所述的文件。

所有项目中最长的文件是什么?

prompt>sqlite3 code.db'从t中选择项目、文件、nBlank+nComment+nCode作为nL其中nL=(从t中选择max(nBlank+nComment+nCode))'| sqlite_formatter项目文件nL_______ _____________________________________ ______sqlite-sqlite-amalgamation-3081101/sqlite3.c 161623

每个项目中最长的文件是什么?

prompt>sqlite3 code.db'从t中选择项目、文件、最大值(nBlank+nComment+nCode)作为nL按nL的项目顺序分组;'|sqlite_格式项目文件nL__________ ________________________________________________________________ ______python python-2.7.10/Mac/Modules/qt/_Qtmodule.c 28091postgresql postgressql-9.4.4/src/interfaces/ecpg/preproc/predoc.c 54623mariadb服务器-10.1/storage/mroonga/vendor/gronga/lib/nfkc.c 80246perl perl-5.22.0/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm 100747sqlite-sqlite-amalgamation-3081101/sqlite3.c 161623

每个项目中哪些文件的代码行最多?

prompt>sqlite3 code.db'从t中选择项目,文件,max(nCode)作为nL按nL desc的项目订单分组;'|sqlite_格式项目文件nL__________ ________________________________________________________________ ______perl perl-5.22.0/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm 100735sqlite-sqlite-amalmation-3081101/sqlite3.c 97469mariadb服务器-10.1/storage/mroonga/vendor/gronga/lib/nfkc.c 80221postgresql postgressql-9.4.4/src/interfaces/ecpg/preproc/predoc.c 45297python python-2.7.10/Mac/Modules/qt/_Qtmodule.c 26705

哪些C源文件中超过300行的注释比率低于1%?

prompt>sqlite3 code.db'选择项目,文件,nCode,nComment,(100.0*nComment)/(nComment+nCode)作为t的注释比率其中language=“C”且nCode>300和comment_ratio<1按comment_ratio排序;'|sqlite_formatter(sqlite_formatter)项目文件nCode注释注释比率__________ _______________________________________________________________________________________________ _____ ________ __________________mariadb server-10.1/storage/mroonga/vendor/gronga/lib/nfkc.c 80221 14 0.0174487443135789python python-2.7.10/python/graminit.c 2175 1 0.0459558823529412postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_turkish.c 2095 1 0.0477099236641221postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_french.c 1211 1 0.0825082508250 8250825postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_french.c 1201 1 0.0831946755407654postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_hungarian.c 1182 1 0.084530853761623postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_hungarian.c 1178 1 0.0848176420695505mariadb服务器-10.1/strings/ctype-eucjpms.c 67466 60 0.0888546633889169postgresql postgresql-9.4.4/src/backend/bullows/libstemmer/stem_UTF_8_english.c 1072 1 0.0931966449207828postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_english.c 1064 1 0.0938967136150235postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_spanish.c 1053 1 0.094876660341556postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_spanish.c 1049 1 0.09523809523809952postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_italian.c 1031 1 0.0968992248062016postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_italian.c 1023 1 0.09765625postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_portuguese.c 981 1 0.10183299389002postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_portuguese.c 975 1 0.102459016393443postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_romanian.c 967 1 0.103305785123967postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_2_romanian.c 961 1 0.103950104mariadb服务器-10.1/strings/ctype-ujis.c 67177 79 0.117461639110265postgresql postgresql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_finish.c 720 1 0.13869625520111postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_porter.c 717 1 0.139275766016713postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_finish.c 714 1 0.13986013986014postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_porter.c 711 1 0.140449438202247postgresql postgresql-9.4.4/src/backend/snowball/libstemer/stem_KOI8_R_russian.c 660 1 0.151285930408472postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_russian.c 654 1 0.152671755725191python python-2.7.10/Mac/Modules/qt/_Qtmodule.c 26705 42 0.157026956294164python python-2.7.10/Mac/Modules/icn/_Icnmodule.c 1521 3 0.196850393700787mariadb服务器-10.1/strings/ctype-extra.c 8282 18 0.216867469879518postgresql postgressql-9.4.4/src/bin/psql/sql_help.c 3576 8 0.223214285714286mariadb服务器-10.1/strings/ctype-sjis.c 34006 86 0.252258594391646python python-2.7.10/python/python-ast.c 6554 17 0.258712524729874mariadb服务器-10.1/strings/ctype-cp932.c 34609 92 0.265122042592432perl-perl-5.22.0/keywords.c 2815 8 0.283386468296139python python-2.7.10/Mac/Modules/menu/Menumodule.c 3263 10 0.305530094714329postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_dutch.c 596 2 0.334448160535117postgresql postgresql-9.4.4/src/backend/bullow/libstemmer/stem_ISO_8859_1_dutch.c 586 2 0.340136054421769mariadb服务器-10.1/strings/ctype-gbk.c 10684 38 0.354411490393583python python-2.7.10/Mac/Modules/qd/_Qdmodule.c 6694 24 0.357249181303959python python-2.7.10/Mac/Modules/win/_Winmodule.c 3056 11 0.35865667753505postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_german.c 476 2 0.418410041841004postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_german.c 470 2 0.423728813559322mariadb服务器-10.1/strings/ctype-euc_kr.c 9956 44 0.44postgresql postgressql-9.4.4/src/backend/utils/fmgrtab.c 4815 23 0.475403059115337python python-2.7.10/Mac/Modules/ctl/_Ctlmodule.c 5442 28 0.511882998171846python python-2.7.10/Mac/Modules/ae/_AEmodule.c 1347 7 0.51698670605613python python-2.7.10/Mac/Modules/app/_Appmodule.c 1712 9 0.52295177222545mariadb服务器-10.1/strings/cytpe-gb2312.c 6377 35 0.54585152838428mariadb server-10.1/storage/tokudb/ft-index/third_party/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c 516 3 0.578034682080925python python-2.7.10/Mac/Modules/evt/_Evtmodule.c 504 3 0.591715976331361python python-2.7.10/Modules/expat/xmlrole.c 1256 8 0.632911392405063postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_UTF_8_danish.c 312 2 0.636942675159236postgresql postgressql-9.4.4/src/backend/snowball/libstemer/stem_ISO_8859_1_danish.c 310 2 0.6410256410256641python python-2.7.10/Mac/Modules/res/Resmodule.c 1621 12 0.734843845682792python python-2.7.10/Mac/Modules/drag/Dragmodule.c 1046 8 0.759013282732448python python-2.7.10/Mac/Modules/list/Listmodule.c 1021 8 0.777453838678329python python-2.7.10/Mac/Modules/te/TEmodule.c 1198 10 0.827814569536424python python-2.7.10/Mac/Modules/cg/_CGmodule.c 1190 10 0.83333333333python python-2.7.10/Modules/clmodule.c 2379 23 0.957535387177352python python-2.7.10/Mac/Modules/folder/_Foldermodule.c 306 3 0.970873786407767

哪十个最长的文件(基于代码行)根本没有注释?排除头文件、.html和YAML文件。

prompt>sqlite3 code.db'选择项目、文件、来自t的nCode其中nComment=0和语言不在(“C/C++标题”、“YAML”、“HTML”)中按nCode desc限制排序10;'|sqlite_格式项目文件nCode_______ ____________________________________________________________________ _____perl perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/ja.pl 1938年python python-2.7.10/PCbuild/pythoncore.vcproj 1889python python-2.7.10/PC/VS8.0/pythoncore.vcproj 1889mariadb服务器-10.1/mysql-test/extra/binlog_tests/mysqlbinlog_row_engine.inc 1862perl perl-5.22.0/cpan/Unicode-Collate/Colate/Locale/zh_strk.pl 1589perl perl-5.22.0/cpan/Unincode-Collate/Conte/Locate/zh_zhu.pl 1563mariadb服务器-10.1/storage/mroonga/vendor/gronga/configure.ac 1526perl perl-5.22.0/cpan/Unicode-Collate/Colate/Locale/zh_pin.pl 1505mariadb服务器-10.1/mysql-test/suite/funcs_1/storedproc/storedproc_02.inc 1465python python-2.7.10/PC/VS8.0/_bsddb.vcproj 1463

最流行的语言是什么(就行而言代码)在每个项目中?

prompt>sqlite3 code.db'从t中选择项目、语言、总和(nCode)作为SumCode按项目、语言分组按项目排序,SumCode desc;'|sqlite_格式项目语言SumCode__________ _________________________ _______马里亚德C++983026马里亚德布C 715018mariadb C/C++标题209394mariadb Bourne壳牌61943马里亚德布·佩尔35562马里亚德·帕斯卡32541mariadb HTML 16489mariadb爪哇文15540马里亚德m4 14215马里亚德布·梅克12206mariadb XML 5210玛丽亚德布·鲁比4998马里亚德木偶3848马里亚德制造3631mariadb SQL 3405mariadb Python玛丽亚德布Python2545mariadb Bourne Again壳牌1604mariadb Windows模块定义1211马里亚德布法991马里亚德布yacc 810mariadb DOS批处理700mariadb Prolog玛丽亚德布·普罗罗格448mariadb机器人框架441马里亚德CSS 393mariadb JSON 359马里亚德布数据竞赛306mariadb Windows资源文件250mariadb组件237mariadb WiX源155mariadb Visual Basic 88马里亚德YAML 65mariadb PHP 24mariadb技能16马里亚德赛德16mariadb Windows消息文件6马里亚德D 4马里亚德差异4perl-perl 536445型珍珠C 155648perl C/C++标题147858珀尔伯恩壳牌42668佩尔帕斯卡8592perl XML 2410珀尔YAML 2078perl C++20331986年perl制造perl序言1146perl JSON 1037perl-yacc 998型perl Windows消息文件489perl DOS批次389perl Windows资源文件85珍珠D 8perl Lisp 4postgresql HTML 785991后gresql C 736519postgresql C/C++头57014postgresql SQL 51926postgresql yacc 28491号postgresql Bourne Shell 17170postgresql Perl 9456postgresql lex邮政编码4285postgresql品牌4114邮政编码m4 1642postgresql Windows模块定义1152postgresql XSLT 294postgresql DOS批次92postgresql程序集69postgresql CSS 69postgresql数据库D 66postgresql Windows资源文件62postgresql Lisp 16postgresql sed 15postgresql Python 13postgresql Bourne Again外壳10postgresql Windows消息文件5蟒蛇蟒蛇434015蟒蛇C 375555python C/C++头66942python Bourne Shell公司45091python MSBuild脚本38910蟒蛇m4 15559python组件12298巨蟒制造2953python HTML 2344python Windows模块定义2081蟒蛇目标-C 635蟒蛇预期565python DOS批处理506python CSS 328python Javascript巨蟒脚本229python Windows资源文件207python C++128python vim脚本106python差异105python XML 74python NAnt脚本30python序言24python Visual Basic 12方晶石C 101454sqlite C/C++标题1546

Cloc的默认输出是一个包含五列的文本表:语言、文件计数、空白行数、注释数行数和代码行数。交换机--按文件,--3、和--按百分比生成其他信息,但有时甚至这些都不够。

这个--sql语言上一节中描述的选项提供了能够创建自定义输出。本节有两个示例演示如何创建自定义列。第一个示例包括一个额外的列,总计,这是空白行、注释行和代码行的总数。第二个显示如何在运行时包含语言名称具有--按文件.

示例1:添加“总计”列。

第一步是运行cloc并将输出保存到关系数据库,在此情况下为SQLite:

cloc--sql 1--sql-project x yaml-cpp-yaml-cbp-0.5.3.tar.gz | sqlite3 counts.db

(tar文件来自YAML-C公司++项目)。

其次,我们创建一个返回常规cloc输出的SQL查询加上一个额外的合计列,然后将SQL语句保存到一个文件,查询with_totals.sql:

--文件query_with_totals.sql选择语言,将(文件)计数为文件,总和(n空白)为空白,sum(注释)作为注释,sum(nCode)作为代码,sum(n空白)+sum(nComment)+summ(nCode)作为Total由t组按语言顺序按代码描述;

第三,我们使用计数.db数据库。我们将包括-收割台开关,以便SQLite打印列名:

>cat query_with_totals.sql | sqlite3-头计数.db语言|文件|空白|注释|代码|总计C++| 141 | 12786 | 17359 | 60378 | 90523C/C++标题|110|8566|17420|51502|77488Bourne Shell | 10 | 6351 | 6779 | 38264 | 51394m4 | 11 | 2037 | 260 | 17980 | 20277年Python | 30 | 1613 | 2486 | 4602 | 8701MSBuild脚本|11|0|0|1711|1711CMake|7|155|285|606|1046品牌|5|127|173|464|764降价|2|30|0|39|69

额外的列总计有,但格式没有吸引力。通过运行输出sqlite_格式产生所需结果:

>cat query_with_totals.sql | sqlite3-头计数.db | sqlite_formatter语言文件空白注释代码总计______________ _____ _____ _______ _____ _____电话:+141 12786 17359 60378 90523C/C++标题110 8566 17420 51502 77488伯恩壳牌10 6351 6779 38264 51394m4 11 2037 260 17980 20277Python 30 1613 2486 4602 8701MSBuild脚本11 0 0 1711 1711CMake 7 155 285 606 1046号制作5 127 173 464 764降价2 30 0 39 69

下一节,在其他脚本中包装cloc,显示了组合这些命令的一种方式到一个新的实用程序中。

示例2:使用运行时包含“Language”列--按文件.

输出来自--按文件省略每个文件的语言以保存屏幕不动产;大型项目的文件路径可能很长,包括额外的20个左右Language列中的字符可能过多。

例如,下面是使用相同的示例1中的代码库:

>cloc—旁路文件yaml-cpp-yaml-cpg-0.5.3.tar.gzgithub.com/AlDanial/cloc v 1.81 T=1.14秒(287.9个文件/秒,221854.9行/秒)--------------------------------------------------------------------------------------------------------------------------------------------文件空白注释代码--------------------------------------------------------------------------------------------------------------------------------------------yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/configure 2580 2264 13691yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/configure(测试/配置)2541 2235 13446yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest.h 1972 4681 13408yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/fused-src/gmock/gmock.h 1585 3397 9216yaml-cpp-yaml-cpp-0.5.3/test/integration/gen_emitter_test.cpp 999 0 8760yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/aclocal.m4 987 100 8712yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/m4/libtool.m4 760 65 7176yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/build-aux/ltmain.sh 959 1533 7169yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock-gtest-all.cc 1514 3539 6390yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest-all.cc 1312 2896 5384yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/test/gtest_unittest.cc 1226 1091 5098yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/include/gtest/internal/gtest-param-util-generated.h 349 235 4559

每个文件都没有语言标识有点令人失望,但是这可以通过自定义列解决方案解决。

第一步,创建一个数据库,与示例1中的数据库相匹配,因此我们将直接进入第二步,创建所需的SQL查询。我们将把这个存储在文件中按带有语言的文件.sql:

--文件按文件与语言.sql选择“文件”、“语言”、“n空白”作为空白,n注释为注释,n编码为代码按代码desc从t顺序开始;

传递此自定义SQL查询时,将显示所需的额外列通过我们的数据库:

>cat by_file_with_language.sql | sqlite3-头计数.db | sqlite_formatter文件语言空白注释代码__________________________________________________________________________________________________ ______________ _____ _______ _____yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/configure Bourne Shell 2580 2264 13691yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/configure伯恩Shell 2541 2235 13446yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest.h C/C++标题1972 4681 13408yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/fused-src/gmock/gmock.h C/C++标题1585 3397 9216yaml-cpp-cpp-0.5.3/test/integration/gen_emitter_test.cpp C++999 0 8760yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.70/acrocal.m4 m4 987 100 8712yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/m4/libtool.m4 m4 760 65 7176yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/build-aux/ltmain.sh伯恩壳牌959 1533 7169yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/fused-src/gmock-gtest-all.cc C++1514 3539 6390yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest-all.cc C++1312 2896 5384yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/test/gtest_unittest.cc C++1226 1091 5098yaml-cpp-yaml-cpd-0.5.3/test/gmock-1.7.0/gtest/include/gtest/internal/gtest-param-util-generated.h C/C++标题349 235 4559

*

通过包装,可以实现更复杂的代码计数解决方案脚本或程序中的cloc。来自的“合计行”列的示例1自定义列输出可以通过此shell脚本简化为单个命令(在Linux上):

#!/垃圾桶/桶##这些命令必须位于用户的$PATH中:#氯仿#方形3#sqlite_formatter(sqlite_formatter)#如果测试$#-eq 0;然后echo“用法:$0[cloc arguments]”echo“运行cloc以计算额外的代码行数”echo“总行的输出列(代码+注释+空白)。”出口DBFILE=`tempfile`cloc--sql 1--sql-project x$@|sqlite3${DBFILE}SQL=“选择语言,将(文件)计数为文件,总和(n空白)为空白,sum(nComment)作为注释,sum(nCode)作为代码,sum(n空白)+sum(nComment)+summ(nCode)作为Total由t组按语言顺序按代码描述;"echo${SQL}|sqlite3-头${DBFILE}|sqlite格式化程序rm${DBFILE}

将上面的行保存到总计列.sh和制作可执行文件(chmod+x total_columns.sh)会让我们这么做

./total_columns.sh yaml-cpp-haml-cpp-0.5.3.tar.gz

直接获取

语言文件空白注释代码总计______________ _____ _____ _______ _____ _____电话:+141 12786 17359 60378 90523C/C++标题110 8566 17420 51502 77488伯恩壳牌10 6351 6779 38264 51394m4 11 2037 260 17980 20277蟒蛇30 1613 2486 4602 8701MSBuild脚本11 0 0 1711 1711CMake 7 155 285 606 1046号制作5 127 173 464 764降价2 30 0 39 69

其他示例:

cloc的--吉特如果使用目录或具有UTF-8字符的文件名(例如,请参见第457期).解决方案,https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8-encoded-pathnames-in-the-console-window,应用此git配置命令:

git-config—全局core.quotepath关闭

您的控制台的字体需要能够显示Unicode字符。

默认情况下,1.50之前的cloc版本为所提供的输入计算粗略估计编写假设第三代计算机语言中的相同代码。要生成此输出,现在必须使用--3开关。

比例系数来源于2006年版的语言杠杆比率在梅斯咨询公司网站上列出,http://softwareestimator.com/IndustryData2.htm,使用此等式:

语言的cloc比例因子X=第三代默认杠杆比率/语言X杠杆比率

例如,DOS批处理的cloc第三代比例因子=80/128=0.625。

这种方法最大的缺陷是定义了杠杆比率用于源代码的逻辑行,而不是物理行(cloc计数)。cloc的“scale”和“3rd gen.equiv.”列中的值应为用一大粒盐带走。

如果您发现自己在使用相同的命令行开关调用cloc时,可以通过添加以下内容来保存一些输入切换到选项.txt运行时配置文件。cloc将在以下默认位置查找此文件:

#Linux、NetBSD、FreeBSD、macOS:/home/USERNAME/.config/cloc/options.txt#Windows(窗口)C: \用户\用户名\AppData\cloc\options.txt

将每个开关和参数(如果有)单独放在一行上。行前缀为#符号作为注释被忽略跳过空行。交换机上的前导连字符为可选。下面是一个示例文件:

#选项.txt--vcs数字电视v#详细级别1排除文本svg,html

通往选项.txt也可以指定文件使用--配置文件开关。

最后,如果cloc找到选项.txt同一个文件目录中的任何一个开关给定的文件列出的优先级),它将使用该配置文件从该位置:

  1. --列表文件
  2. --排除列表文件
  3. --read-lang-def(读-长-参考)
  4. --力-长度-ef
  5. --diff-list文件

使用运行--冗长的让cloc告诉你,如果任何,选项.txt它使用的文件。

cloc依赖Regexp::Common模块的正则表达式来删除源代码中的注释。如果注释格式不正确,例如/*开始注释标记出现在C程序中,但没有相应的*/标记,正则表达式引擎可以进入递归循环,最终触发警告复杂正则子表达式递归限制.

此警告最常见的原因是注释标记的存在在字符串文本中。虽然语言编译器和解释器很聪明足以认识到这一点"/*"(例如)是字符串而不是注释,cloc被愚弄了。文件路径globs,如JavaScript行中所示

var paths=globArray(“**/*.js”,{cwd:srcPath});

经常是罪魁祸首。

为了克服这个问题可以启用删除字符串中注释标记的算法使用--条带式注释开关。然而,这样做,有缺点:cloc将运行得更慢--条带注释将包含不再与输入源匹配的字符串。

识别源代码中的注释比人们想象的要复杂。许多语言都需要一个完整的解析器才能正确计数。cloc不尝试解析任何它旨在统计的语言,因此是一个不完善的工具。以下是已知问题:

  1. 包含源代码和注释的行被计为代码行。
  2. 字符串中的注释标记或此处的文档被视为实际的注释标记,而不是字符串文字。例如,下面几行C代码
    printf(“/*”);对于(i=0;i<100;i++){a+=i;}printf(“*/”);
    看起来像这样:
    打印f(“xxxxxxxxxxxxxx公司xxxxxxx公司xxxxxxx公司xxxxxxx“);
    哪里xxxxxxx公司表示cloc对已注释文本的视图。因此cloc将这五行计算为两行C代码和三行注释行(同时包含代码和注释的行被视为代码)。

    如果您怀疑您的代码有这样的字符串,请使用开关--条带式注释切换到删除嵌入注释标记。它的使用将使上面的五行显示为

    printf(“”);对于(i=0;i<100;i++){a+=i;}printf(“”);

    因此返回五行代码的计数。请参阅上一节关于使用的缺点--条带式注释.

  3. 无法识别嵌入式语言。例如,一个HTML文件包含JavaScript将完全作为HTML计算。
  4. Python文档字符串可以用于多种用途。他们可能会包含文档,注释掉代码块,或者它们可以是常规字符串(当它们出现在赋值的右侧或作为函数参数)。cloc无法通过上下文推断文档字符串的含义;默认情况下cloc将所有文档字符串视为注释。交换机--文档字符串作为代码将所有文档字符串视为代码。
  5. 使用读取的语言定义文件--read-lang-def(读-长-参考)--强制语言定义必须是纯ASCII文本文件。
  6. 例如,cloc处理编译器杂注#如果/#结尾,作为代码即使这些代码用于阻止编译源代码行;阻塞的行仍然会影响代码计数。
  7. 在Windows上,cloc将失败无法cd到。。。没有此类文件或位于/File/Find.pm的目录如果扫描的代码有文件路径长度超过255个字符。解决方法是运行cloc来自Windows Linux子系统(WSL)。
  8. cloc的注释匹配代码使用正则表达式无法使用正确解释嵌套注释相同的注释标记(例如/* /* */ */).
  9. 嵌入的XML注释CDATA(CDATA)块被计算为注释而不是代码。

如果cloc不能识别你感兴趣的语言,创建GitHub问题请求支持您的语言。包括以下信息:

  1. 与语言关联的文件扩展名。如果语言有不依赖文件扩展名,而是使用固定的文件名或使用`#!`样式程序调用,解释它们是什么。
  2. 如何定义注释的描述。
  3. 链接到示例代码。

如果你遇到cloc的问题,首先检查一下您使用的是该工具的最新版本:

cloc—版本

如果版本早于最新版本https://github.com/AlDanial/cloc/releases网站,下载看看它是否解决了您的问题。

如果最新版本出现问题,请提交上的新问题https://github.com/AlDanial/cloc/issues 只有如果你能为阅读发布报告以重现问题。这意味着提供

  1. 您正在运行的操作系统
  2. 带有所有选项的cloc命令
  3. 您正在计算的代码(公共git repo或zip文件的URL或tar文件等)
最后一项通常有问题。如果代码库为专有或相当于几十KB以上,您需要尝试重建类似的输入或演示现有公共代码库的问题。

无法复制的问题报告将被忽略最终关闭。

请使用以下bibtex条目在出版物中引用cloc:

@软件{adanial_cloc,作者={阿尔伯特·丹尼尔},标题={cloc:v1.92},月=12月,年份=2021,publisher={Zenodo},版本={v1.92},doi={10.5281/zenodo.5760077},url={https://doi.org/10.5281/zenodo.5760077}}

(如果出现以下情况,请更新版本号和相应年份条目已过期。)

沃尔夫拉姆·罗斯勒提供了测试套件中的大部分代码示例。这些例子来自他的Hello World系列.

Ismet Kursunoglu发现MUMPS计数器错误,并提供了访问带有大量MUMPS代码的计算机以测试cloc。

托德·哈金斯(Tod Huggins)为Visual Basic过滤器提供了有益的建议。

Anton Demichev在cloc v0.76中发现JSP计数器存在缺陷并为--xml格式选项。

Reuben Thomas指出,ISO C99允许//作为评论标记,为--3号--标准输入名称选项,计算m4语言,并建议了一些用户界面增强功能。

Michael Bello为--opt-match-f,--opt-not-match-f选项,--opt-match-d、和--选择不匹配-d选项。

马布布·侯赛因激发了--原始目录--跳过-唯一性选项,找到一个重复文件检测逻辑中的错误并改进了JSP过滤器。

Randy Sharo发现并修复了shell的未初始化变量错误只有一行的脚本。

Steven Baker发现并修复了YAML输出生成器的一个问题。

Greg Toth提供了代码来改进COBOL中的空行检测。

Joel Oliveira提供了代码--排除列表文件手柄目录名排除。

Blazej Kroll提供了生成XSLT文件的代码,cloc-diff.xsl,为生成XML输出时--差异选项。

Denis Silakov增强了生成cloc.xsl语言什么时候使用--按文件--by-file-by-lang选项,以及提供了一个使用的XSL文件--差异输出。

安迪(awalshe@sf.net)提供了修复几个错误的代码:的正确输出--计数以便只显示代码计数中使用的文件,并且结果以语言而不是文件名显示;允许--差异要求和的多次运行的输出与一起--汇总报告.

Jari Aalto创建了cloc.1荚维护cloc的Debian包。

米克尔·克里斯蒂安森(mikkels@gmail.com)提供的计数器定义用于Clojure和ClojureScript。

Vera Djuraskovic来自Webhostinggeeks.com网站提供了塞尔维亚-克罗地亚语翻译。

吉尔·阿霍夫特Ajoft软件提供了保加利亚语翻译。

这个知识团队如果斯洛伐克语翻译。

Erik Gooven Arellano Casillas为MXML计数器提供了更新识别ActionScript注释。

吉安卢卡·卡萨蒂创建了cloc CPAN包.

Ryan Lindeman实施了--按百分比功能。

Kent C.多兹,@肯特考德斯,创建并维护cloc的npm包。

维克多莉亚·帕纳克提供了乌克兰语翻译。

Natalie Harmann提供了白俄罗斯语翻译。

Nithyal公司医疗管理门户提供了泰米尔语翻译。

帕特里夏·莫托桑提供了罗马尼亚语翻译。

Gajk Melikyan提供了提供了亚美尼亚语翻译对于http://studybay.com.

匈牙利语翻译承蒙Zsolt Boros公司.

Sietse Snel公司实现了并行可用的处理能力--过程=N个开关。

cloc的开发部分由诺斯罗普·格鲁曼公司资助公司。

版权所有(c)2006-2018,阿尔·丹尼尔