类似于 cloc、sloccount 和 tokei 的工具。用于计算许多编程语言中的代码行、空白行、注释行和源代码的物理行。
目标是成为尽可能最快的代码计数器,但也执行像 sloccount 这样的 COCOMO 计算,估计类似于圈复杂度计算器的代码复杂度,并生成独特的代码行或 DRYness 指标。简而言之,一种工具可以统治一切。
而且它的名称很短,很容易输入scc
。
如果您不喜欢 sloc cloc 和代码,请随意使用名称Succinct Code Counter
。
根据麻省理工学院许可获得许可。
支持
安装
背景
沥青
用法
复杂性估计
独特代码行 (ULOC)
可可莫
输出格式
表现
发展
添加/修改语言
问题
徽章(测试版)
语言支持
在商业上使用scc
?如果您想要scc
的优先支持,您可以购买一年的 https://boyter.gumroad.com/l/kgenuv,这使您有权获得开发人员的优先直接电子邮件支持。
您可以使用标准 go 工具链安装scc
。
要安装 scc 的最新稳定版本:
go install github.com/boyter/scc/v3@latest
要安装开发版本:
go install github.com/boyter/scc/v3@master
请注意, scc
需要 go 版本 >= 1.22。
感谢 Ricardo,实现了快速安装。
$ sudo snap install scc
NB Snap 安装的应用程序无法在/home
https://askubuntu.com/questions/930437/permission-denied-error-when-running-apps-installed-as-snap-packages-ubuntu-17 之外运行,因此您可能会遇到问题如果您使用 snap 并尝试在该目录之外运行。
或者如果您安装了 Homebrew
$ brew install scc
在 macOS 上,您还可以通过 MacPorts 安装
$ sudo port install scc
或者如果您在 Windows 上使用 Scoop
$ scoop install scc
或者如果您在 Windows 上使用 Chocolatey
$ choco install scc
或者如果您在 Windows 上使用 WinGet
winget install --id benboyter.scc --source winget
在 FreeBSD 上,scc 作为软件包提供
$ pkg install scc
或者,如果您更喜欢从源代码构建,则可以使用 ports 树
$ cd /usr/ports/devel/scc && make install clean
转至要从中运行 scc 的目录。
运行以下命令以在当前工作目录上运行最新版本的 scc:
docker run --rm -it -v "$PWD:/pwd" ghcr.io/lhoupert/scc:master scc /pwd
适用于 i386 和 x86_64 计算机的 Windows、GNU/Linux 和 macOS 的二进制文件可从发行页面获取。
https://about.gitlab.com/blog/2023/02/15/code-counting-in-gitlab/
如果您想协助将scc
添加到 apt/chocolatey/etc 中...请提交 PR 或至少提出带有说明的问题。
阅读有关它如何与性能基准一起出现的所有内容,
https://boyter.org/posts/sloc-cloc-code/
https://boyter.org/posts/why-count-lines-of-code/
https://boyter.org/posts/sloc-cloc-code-revisited/
https://boyter.org/posts/sloc-cloc-code-performance/
https://boyter.org/posts/sloc-cloc-code-performance-update/
scc
的一些评论
https://nickmchardy.com/2018/10/counting-lines-of-code-in-koi-cms.html
https://www.feliciano.tech/blog/define-source-code-size-and-complexity-with-scc/
https://metaredux.com/posts/2019/12/13/counting-lines.html
在第一届 GopherCon AU 上发表的有关scc
的演讲(按 S 查看演讲者注释)
https://boyter.org/static/gophercon-syd-presentation/
https://www.youtube.com/watch?v=jd-sjoy3GZo
有关性能,请参阅性能部分
其他类似项目,
SLOCCount 原始 sloc 计数器
cloc,受到 SLOCCount 的启发;为了可移植性而用 Perl 实现
gocloc 受 tokei 启发的 Go 中的 sloc 计数器
loc rust 实现类似于 tokei 但通常更快
由 ESR 编写和维护的 loccount Go 实现
多语言 ATS sloc 计数器
tokei 快速、准确并用 Rust 编写
sloc CoffeeScript 代码计数器
stto 新的 Go 代码计数器,重点关注性能
关于其他代码计数项目 tokei、loc、polyglot 和 loccount 的有趣阅读
https://www.reddit.com/r/rust/comments/59bm3t/a_fast_cloc_replacement_in_rust/
https://www.reddit.com/r/rust/comments/82k9iy/loc_count_lines_of_code_quickly/
http://blog.vmchale.com/article/polyglot-comparisons
http://esr.ibiblio.org/?p=8270
进一步阅读有关处理文件对磁盘性能的影响
https://blog.burntsushi.net/ripgrep/
使用scc
处理来自 GitHub/Bitbucket/GitLab 的 40 TB 文件
https://boyter.org/posts/an-informal-survey-of-10-million-github-bitbucket-gitlab-projects/
为什么使用scc
?
它的速度非常快,并且 CPU 投入越多,速度就越快
准确的
在多个平台上运行良好,不会降低速度(Windows、Linux、macOS)
大语言支持
可以忽略重复文件
具有复杂性估计
你需要区分同一目录下的 Coq 和 Verilog 的区别
cloc yaml 输出支持,因此可能会减少某些用户的替代品
可以识别或忽略缩小的文件
能够识别很多#!文件高级!第115章
可以按行或字节忽略大文件
可以按文件、语言或项目计算 ULOC 或唯一代码行
支持多种集成输出格式:CSV、SQL、JSON、HTML 等
为什么不使用scc
?
由于某种原因你不喜欢 Go
它无法正确计算具有不同嵌套多行注释的 D 源 #27
scc
和其他现有工具之间存在一些重要差异。以下是一些需要您考虑的重要事项。
注释内的空行算作注释。虽然该行在技术上是空白的,但我们决定一旦出现在评论中,所有内容都应被视为评论,直到该评论结束。因此,以下内容,
/* blank lines follow */
会被算作 4 行评论。将 scc 的输出与大型存储库上的其他工具进行比较时,这一点很明显。
scc
能够正确计算逐字字符串。例如,在 C# 中,如下所示:
private const string BasePath = @"a:"; // The below is returned to the user as a version private const string Version = "1.0.0";
由于前缀@,此字符串通过忽略转义字符以尾部“结束,因此应计为 2 个代码行和 1 个注释。某些工具无法处理此问题,而是计数到“1.0.0”作为字符串,这可能会导致中间注释被计为代码而不是注释。
scc
还会告诉您它已处理的字节数(对于大多数输出格式),使您可以估计运行某些静态分析工具的成本。
scc
的命令行使用被设计得尽可能简单。完整的详细信息可以在scc --help
或scc -h
中找到。请注意,下面反映的是主版本的状态而不是版本,因为您的安装中可能缺少下面列出的功能。
Sloc, Cloc and Code. Count lines of code in a directory with complexity estimation. Version 3.5.0 (beta) Ben Boyter+ Contributors Usage: scc [flags] [files or directories] Flags: --avg-wage int average wage value used for basic COCOMO calculation (default 56286) --binary disable binary file detection --by-file display output for every file -m, --character calculate max and mean characters per line --ci enable CI output settings where stdout is ASCII --cocomo-project-type string change COCOMO model type [organic, semi-detached, embedded, "custom,1,1,1,1"] (default "organic") --count-as string count extension as language [e.g. jsp:htm,chead:"C Header" maps extension jsp to html and chead to C Header] --count-ignore set to allow .gitignore and .ignore files to be counted --currency-symbol string set currency symbol (default "$") --debug enable debug output --directory-walker-job-workers int controls the maximum number of workers which will walk the directory tree (default 8) -a, --dryness calculate the DRYness of the project (implies --uloc) --eaf float the effort adjustment factor derived from the cost drivers (1.0 if rated nominal) (default 1) --exclude-dir strings directories to exclude (default [.git,.hg,.svn]) -x, --exclude-ext strings ignore file extensions (overrides include-ext) [comma separated list: e.g. go,java,js] -n, --exclude-file strings ignore files with matching names (default [package-lock.json,Cargo.lock,yarn.lock,pubspec.lock,Podfile.lock,pnpm-lock.yaml]) --file-gc-count int number of files to parse before turning the GC on (default 10000) --file-list-queue-size int the size of the queue of files found and ready to be read into memory (default 8) --file-process-job-workers int number of goroutine workers that process files collecting stats (default 8) --file-summary-job-queue-size int the size of the queue used to hold processed file statistics before formatting (default 8) -f, --format string set output format [tabular, wide, json, json2, csv, csv-stream, cloc-yaml, html, html-table, sql, sql-insert, openmetrics] (default "tabular") --format-multi string have multiple format output overriding --format [e.g. tabular:stdout,csv:file.csv,json:file.json] --gen identify generated files --generated-markers strings string markers in head of generated files (default [do not edit, ]) -h, --help help for scc -i, --include-ext strings limit to file extensions [comma separated list: e.g. go,java,js] --include-symlinks if set will count symlink files -l, --languages print supported languages and extensions --large-byte-count int number of bytes a file can contain before being removed from output (default 1000000) --large-line-count int number of lines a file can contain before being removed from output (default 40000) --min identify minified files -z, --min-gen identify minified or generated files --min-gen-line-length int number of bytes per average line for file to be considered minified or generated (default 255) --no-cocomo remove COCOMO calculation output -c, --no-complexity skip calculation of code complexity -d, --no-duplicates remove duplicate files from stats and output --no-gen ignore generated files in output (implies --gen) --no-gitignore disables .gitignore file logic --no-gitmodule disables .gitmodules file logic --no-hborder remove horizontal borders between sections --no-ignore disables .ignore file logic --no-large ignore files over certain byte and line size set by large-line-count and large-byte-count --no-min ignore minified files in output (implies --min) --no-min-gen ignore minified or generated files in output (implies --min-gen) --no-scc-ignore disables .sccignore file logic --no-size remove size calculation output -M, --not-match stringArray ignore files and directories matching regular expression -o, --output string output filename (default stdout) --overhead float set the overhead multiplier for corporate overhead (facilities, equipment, accounting, etc.) (default 2.4) -p, --percent include percentage values in output --remap-all string inspect every file and remap by checking for a string and remapping the language [e.g. "-*- C++ -*-":"C Header"] --remap-unknown string inspect files of unknown type and remap by checking for a string and remapping the language [e.g. "-*- C++ -*-":"C Header"] --size-unit string set size unit [si, binary, mixed, xkcd-kb, xkcd-kelly, xkcd-imaginary, xkcd-intel, xkcd-drive, xkcd-bakers] (default "si") --sloccount-format print a more SLOCCount like COCOMO calculation -s, --sort string column to sort by [files, name, lines, blanks, code, comments, complexity] (default "files") --sql-project string use supplied name as the project identifier for the current run. Only valid with the --format sql or sql-insert option -t, --trace enable trace output (not recommended when processing multiple files) -u, --uloc calculate the number of unique lines of code (ULOC) for the project -v, --verbose verbose output --version version for scc -w, --wide wider output with additional statistics (implies --complexity)
Redis 项目的输出应如下所示
$ scc redis ─────────────────────────────────────────────────────────────────────────────── Language Files Lines Blanks Comments Code Complexity ─────────────────────────────────────────────────────────────────────────────── C 296 180267 20367 31679 128221 32548 C Header 215 32362 3624 6968 21770 1636 TCL 143 28959 3130 1784 24045 2340 Shell 44 1658 222 326 1110 187 Autoconf 22 10871 1038 1326 8507 953 Lua 20 525 68 70 387 65 Markdown 16 2595 683 0 1912 0 Makefile 11 1363 262 125 976 59 Ruby 10 795 78 78 639 116 gitignore 10 162 16 0 146 0 YAML 6 711 46 8 657 0 HTML 5 9658 2928 12 6718 0 C++ 4 286 48 14 224 31 License 4 100 20 0 80 0 Plain Text 3 185 26 0 159 0 CMake 2 214 43 3 168 4 CSS 2 107 16 0 91 0 Python 2 219 12 6 201 34 Systemd 2 80 6 0 74 0 BASH 1 118 14 5 99 31 Batch 1 28 2 0 26 3 C++ Header 1 9 1 3 5 0 Extensible Styleshe… 1 10 0 0 10 0 Smarty Template 1 44 1 0 43 5 m4 1 562 116 53 393 0 ─────────────────────────────────────────────────────────────────────────────── Total 823 271888 32767 42460 196661 38012 ─────────────────────────────────────────────────────────────────────────────── Estimated Cost to Develop (organic) $6,918,301 Estimated Schedule Effort (organic) 28.682292 months Estimated People Required (organic) 21.428982 ─────────────────────────────────────────────────────────────────────────────── Processed 9425137 bytes, 9.425 megabytes (SI) ───────────────────────────────────────────────────────────────────────────────
请注意,您不必指定要运行的目录。运行scc
将假定您要针对当前目录运行。
您还可以针对多个文件或目录scc directory1 directory2 file1 file2
运行,并将结果汇总在输出中。
由于scc
写入标准输出,因此有很多方法可以轻松共享结果。例如,使用 netcat 和众多 Pastebin 之一给出一个公共 URL:
$ scc | nc paste.c-net.org 9999 https://paste.c-net.org/Example
scc
主要支持它扫描的目录内的 .ignore 文件。这类似于 ripgrep、ag 和 tokei 的工作方式。 .ignore 文件与具有相同语法的 .gitignore 文件 100% 相同,因此scc
将忽略其中列出的文件和目录。您可以添加 .ignore 文件来忽略文件中检查的供应商依赖项等内容。这个想法是允许您将文件或文件夹添加到 git 并在计数中忽略。
如果您希望scc
在 ripgrep、ag、tokei 和其他支持它们的情况下忽略某些内容,它还支持自己的忽略文件.sccignore
。
在 Intel Nemu Hypervisor 内部使用,跟踪修订版本之间的代码更改 https://github.com/intel/nemu/blob/topic/virt-x86/tools/cloc-change.sh#L9 似乎也在 http://github.com/intel/nemu/blob/topic/virt-x86/tools/cloc-change.sh#L9 内部使用:/ /codescoop.com/ https://pinpoint.com/ https://github.com/chaoss/grimoirelab-graal
它还用于对 https://searchcode.com/ 中的代码进行计数并猜测语言类型,这使其成为世界上运行最频繁的代码计数器之一。
您还可以将 scc 连接到 gitlab 管道 https://gitlab.com/guided-explorations/ci-cd-plugin-extensions/ci-cd-plugin-extension-scc
CodeQL #317 和 Scaleway 也使用 https://twitter.com/Scaleway/status/1488087029476995074?s=20&t=N2-z6O-ISDdDzULg4o4uVQ
https://docs.linuxfoundation.org/lfx/insights/v3-beta-version-current/getting-started/landing-page/cocomo-cost-estimation-simplified
https://openems.io/
scc
使用一个小型状态机来确定代码到达换行符n
时所处的状态。因此它知道并能够计算
单行评论
多行评论
弦乐
多线串
空行
因此,它能够准确地确定注释是在字符串中还是实际上是注释。
它还尝试计算代码的复杂性。这是通过检查代码中的分支操作来完成的。例如,以下每个for if switch while else || && != ==
如果在 Java 中遇到,则会将该文件的复杂性增加 1。
让我们花一点时间讨论复杂性估计本身。
复杂性估计实际上只是一个只能与同一语言的文件进行比较的数字。它不应该被用来直接比较语言而不加权它们。原因是它是通过在代码中查找分支和循环语句并增加该文件的计数器来计算的。
由于某些语言没有循环,而是使用递归,因此它们的复杂性较低。这是否意味着它们不那么复杂?可能不会,但该工具无法看到这一点,因为它不会构建代码的 AST,因为它只扫描代码。
一般来说,复杂性有助于估计用相同语言编写的项目之间的情况,或者用于查找项目中最复杂的文件scc --by-file -s complexity
,当您估计某件事有多难时,这可能很有用维护,或者寻找那些可能应该重构的文件时。
至于它是如何运作的。
这是我自己的定义,但试图成为圈复杂度的近似值 https://en.wikipedia.org/wiki/Cyclomatic_complexity 尽管仅在文件级别完成。
它是近似值的原因是,从 CPU 的角度来看,它几乎是免费计算的(因为计数时查找成本较低),而真正的圈复杂度计数则需要解析代码。尽管它无法识别递归方法,但它在实践中给出了合理的猜测。我们的目标从来都不是让它变得精确。
简而言之,当 scc 正在查看它识别为代码的内容时,如果它注意到通常是分支条件,它将增加一个计数器。
它查找的条件被编译到代码中,您可以通过查看存储库内的 JSON 来了解它们。请参阅 https://github.com/boyter/scc/blob/master/languages.json#L3869 以获取 Java 文件的示例。
每个匹配条件都会发生增量并产生您看到的数字。
ULOC 代表“唯一代码行”,代表跨语言、文件和项目本身的唯一代码行。这个想法取自 https://cmcenroe.me/2018/12/14/uloc.html,其中使用标准 Unix 工具sort -u *.h *.c | wc -l
进行计算。 sort -u *.h *.c | wc -l
。该指标可帮助估计项目内的复杂性。引用来源
在我看来,这个产生的数字应该可以更好地估计项目的复杂性。与 SLOC 相比,不仅空白行被折扣,而且右括号行和其他重复代码(例如公共包含)也被折扣。另一方面,ULOC 对注释进行计数,这些注释需要与它们周围的代码一样多的维护,同时避免使用每个文件中出现的许可证标头来夸大结果。
您可以通过向scc
提供-u
或--uloc
参数来获取 ULOC。
它有一个相应的指标DRYness %
,即 ULOC 与 CLOC 的百分比或DRYness = ULOC / SLOC
。数字越高,项目就越 DRY(不要重复)。一般来说,这里的值越高越好,因为它表明重复的代码较少。 DRYness 指标取自 minimax 的评论 https://lobste.rs/s/has9r7/uloc_unique_lines_code
要获取 DRYness 指标,您可以使用scc
的-a
或--dryness
参数,这将隐式设置--uloc
。
请注意,计算 ULOC 指标时会产生性能损失,这会使运行时间加倍。
针对 C 代码运行 uloc 和 DRYness 计算,redis 的克隆会产生如下输出。
$ scc -a -i c redis ─────────────────────────────────────────────────────────────────────────────── Language Files Lines Blanks Comments Code Complexity ─────────────────────────────────────────────────────────────────────────────── C 419 241293 27309 41292 172692 40849 (ULOC) 133535 ─────────────────────────────────────────────────────────────────────────────── Total 419 241293 27309 41292 172692 40849 ─────────────────────────────────────────────────────────────────────────────── Unique Lines of Code (ULOC) 133535 DRYness % 0.55 ─────────────────────────────────────────────────────────────────────────────── Estimated Cost to Develop (organic) $6,035,748 Estimated Schedule Effort (organic) 27.23 months Estimated People Required (organic) 19.69 ─────────────────────────────────────────────────────────────────────────────── Processed 8407821 bytes, 8.408 megabytes (SI) ───────────────────────────────────────────────────────────────────────────────
有关 ULOC 计算的更多信息,请访问 https://boyter.org/posts/sloc-cloc-code-new-metic-uloc/
可以根据需要配置在任何命令行运行底部显示的 COCOMO 统计信息。
Estimated Cost to Develop (organic) $664,081 Estimated Schedule Effort (organic) 11.772217 months Estimated People Required (organic) 5.011633
要更改 COCOMO 参数,您可以使用默认的 COCOMO 模型之一。
scc --cocomo-project-type organic scc --cocomo-project-type semi-detached scc --cocomo-project-type embedded
如果您熟悉 COCOMO,您也可以提供自己的参数,如下所示,
scc --cocomo-project-type "custom,1,1,1,1"
有关如何选择模型及其使用的参数的详细信息,请参阅下文。
有机的——如果所需的团队规模足够小,问题得到很好的理解并且在过去已经得到解决,并且团队成员对该问题有名义上的经验,则可以说软件项目是有机类型的。
scc --cocomo-project-type "organic,2.4,1.05,2.5,0.38"
半独立式——如果一个软件项目的重要特征(例如团队规模、经验、各种编程环境的知识)介于有机项目和嵌入式项目之间,则该软件项目被称为半独立式项目。与有机项目相比,半独立式项目相对不太熟悉且难以开发,需要更多的经验、更好的指导和创造力。例如:编译器或不同的嵌入式系统可以被认为是半独立类型。
scc --cocomo-project-type "semi-detached,3.0,1.12,2.5,0.35"
嵌入式——需要最高水平的复杂性、创造力和经验要求的软件项目就属于这一类。与其他两种模型相比,此类软件需要更大的团队规模,并且开发人员需要具有足够的经验和创造力来开发此类复杂的模型。
scc --cocomo-project-type "embedded,3.6,1.20,2.5,0.32"
您可以让scc
从输出中排除大文件。
执行此操作的选项是--no-large
,默认情况下将排除超过 1,000,000 字节或 40,000 行的文件。
您可以使用--large-byte-count
或--large-line-count
控制任一值的大小。
例如,要排除超过 1,000 行和 50kb 的文件,您可以使用以下命令,
scc --no-large --large-byte-count 50000 --large-line-count 1000
您可以让scc
识别并选择性地删除识别为正在缩小或从输出生成的文件。
您可以通过启用-z
标志来实现此目的,例如scc -z
该标志会将平均行字节大小 >= 255(默认情况下)的任何文件识别为正在缩小。
缩小的文件在输出中看起来像这样。
$ scc --no-cocomo -z ./examples/minified/jquery-3.1.1.min.js ─────────────────────────────────────────────────────────────────────────────── Language Files Lines Blanks Comments Code Complexity ─────────────────────────────────────────────────────────────────────────────── JavaScript (min) 1 4 0 1 3 17 ─────────────────────────────────────────────────────────────────────────────── Total 1 4 0 1 3 17 ─────────────────────────────────────────────────────────────────────────────── Processed 86709 bytes, 0.087 megabytes (SI) ───────────────────────────────────────────────────────────────────────────────
缩小的文件在语言名称后面用文本(min)
表示。
生成的文件在语言名称后面用文本(gen)
表示。
您可以使用--min-gen-line-length
控制平均行字节大小,例如scc -z --min-gen-line-length 1
。请注意,您需要-z
因为修改此值并不意味着缩小检测。
您可以使用标志--no-min-gen
完全从计数中排除缩小的文件。与缩小检查匹配的文件将从输出中排除。
有些文件可能没有扩展名。将检查它们是否是 #!文件。如果是,则语言将被重新映射为正确的语言。否则,将不会处理。
但是,您可能会遇到这样的情况:您想要根据其中的字符串重新映射此类文件。为此,您可以使用--remap-unknown
scc --remap-unknown "-*- C++ -*-":"C Header"
上面的代码将检查任何没有扩展名的文件,查找字符串-*- C++ -*-
,如果找到,则重新映射要使用 C 标头规则进行计数的文件。如果需要,您可以有多个重新映射规则,
scc --remap-unknown "-*- C++ -*-":"C Header","other":"Java"
还有--remap-all
参数将重新映射所有文件。
请注意,在所有情况下,如果重映射规则不适用普通 #!规则将适用。
默认情况下scc
将输出到控制台。但是,如果需要,您可以生成其他格式的输出。
不同的选项包括tabular, wide, json, csv, csv-stream, cloc-yaml, html, html-table, sql, sql-insert, openmetrics
。
请注意,您可以使用-o, --output
选项将scc
输出写入磁盘。这允许您指定一个文件来写入输出。例如scc -f html -o output.html
将对当前目录运行scc
,并将结果以 html 形式输出到文件output.html
。
如果您想使用--format-multi
选项,您还可以写入多个输出文件,或将多种类型写入标准输出。当您在 CI/CD 系统中工作时,这非常有用,您希望 HTML 报告作为工件,同时还在标准输出中显示计数。
scc --format-multi "tabular:stdout,html:output.html,csv:output.csv"
上面的代码将针对当前目录运行,将默认输出输出到标准输出,并以适当的格式写入output.html和output.csv。
这是运行 scc 时的默认输出格式。
Wide 会产生一些附加信息,即复杂性/线路度量。当尝试根据复杂性估计来识别项目中最复杂的文件时,这非常有用。
JSON 生成 JSON 输出。主要是为了让scc
能够输入到其他程序中而设计的。
请注意,此格式将为您提供scc
读取的每个文件的字节大小,使您能够详细了解已处理的字节数。
CSV 作为一个选项非常适合导入到电子表格中进行分析。
请注意,此格式将为您提供scc
读取的每个文件的字节大小,使您能够详细了解已处理的字节数。另请注意,CSV 尊重--by-file
,因此默认情况下会返回摘要。
csv-stream 是一个对于处理可能会遇到内存问题的非常大的存储库很有用的选项。它的输出格式与 CSV 100% 相同。
请注意,您不应将其与format-multi
选项一起使用,因为它始终会打印到标准输出,并且由于它的工作方式会抵消它通常获得的内存节省。该选项提供的节省。请注意,此选项不应用任何排序。
使用其 yaml 输出选项来替代 cloc。这通常用于传递到其他构建系统,并且可以在需要时帮助替换 cloc。
$ scc -f cloc-yml processor # https://github.com/boyter/scc/ header: url: https://github.com/boyter/scc/ version: 2.11.0 elapsed_seconds: 0.008 n_files: 21 n_lines: 6562 files_per_second: 2625 lines_per_second: 820250 Go: name: Go code: 5186 comment: 273 blank: 1103 nFiles: 21 SUM: code: 5186 comment: 273 blank: 1103 nFiles: 21 $ cloc --yaml processor 21 text files. 21 unique files. 0 files ignored. --- # http://cloc.sourceforge.net header : cloc_url : http://cloc.sourceforge.net cloc_version : 1.60 elapsed_seconds : 0.196972846984863 n_files : 21 n_lines : 6562 files_per_second : 106.613679608407 lines_per_second : 33314.2364566841 Go: nFiles: 21 blank: 1137 comment: 606 code: 4819 SUM: blank: 1137 code: 4819 comment: 606 nFiles: 21
HTML 输出选项使用一个表格生成一个最小的 html 报告,该表格可以是独立的html
,也可以只是一个可以注入到您自己的 HTML 页面中的表格html-table
。两者之间的唯一区别是html
选项包括具有最小样式的 html head 和 body 标记。
该标记旨在允许应用您自己的自定义样式。您可以在此处查看示例报告。
请注意,HTML 选项遵循命令行选项,因此您可以使用scc --by-file -f html
生成包含每个文件的报告,而不仅仅是摘要。
请注意,此格式如果具有--by-file
选项,将为您提供scc
读取的每个文件的字节大小,从而使您能够详细了解已处理的字节数。
SQL 输出格式“大部分”与 cloc 的 SQL 输出格式兼容 https://github.com/AlDanial/cloc#sql-
虽然 cloc 文档上的所有查询都应按预期工作,但您将无法将scc
和cloc
的输出附加到同一数据库中。这是因为表格式与考虑 scc(包括复杂性计数和字节)略有不同。
sql
和sql-insert
之间的区别在于sql
将包含表创建,而后者只有插入命令。
用法与任何其他scc
命令 100% 相同,但 sql 输出将始终包含每个文件的详细信息。您可以使用 SQL 自己计算总计,但是 COCOMO 计算将根据