類似 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 計算將根據