使用 cloc 統計你的代碼量

轉自:使用 cloc 統計你的代碼量

 

今天發現一個特別好用的工具 cloc,可以用它統計代碼的行數。它可以識別多種開發語言,並在計算的時候忽略掉註釋和空行。

我記得我上次申請軟件著作權的時候,申請表格中要求提交代碼量,當時爲了計算行數,我寫了類似於 find xxx -prune xxx | xargs grep -vE xxx | wc -l 的超長命令。

每年寫年終總結統計工作量的時候,我也常常會用到類似的命令。

所以我今天突然發現這個工具的時候,還是很驚喜的。

在 macOS 上,可以通過 brew install cloc 來安裝它,它支持包括 Windows 在內的多個系統。

npm install -g cloc                    # https://www.npmjs.com/package/cloc
sudo apt-get install cloc              # Debian, Ubuntu
sudo yum install cloc                  # Red Hat, Fedora
sudo dnf install cloc                  # Fedora 22 or later
sudo pacman -S cloc                    # Arch
sudo pkg install cloc                  # FreeBSD
sudo port install cloc                 # Mac OS X with MacPorts
brew install cloc                      # Mac OS X with Homebrew
choco install cloc                     # Windows with Chocolatey

它有諸多優點:

  1. 下載安裝方便。
  2. 能識別多種語言。
  3. 允許通過項目或語言等多種方式來輸出統計結果。
  4. 多種輸出格式,包括純文本、SQL、JSON、XML、YAML 等。
  5. 能直接從壓縮包裏統計代碼。
  6. 多種排錯選項。
  7. 識別含有非常用字符和空格的文件、目錄名。
  8. 沒有外部依賴。
  9. 可在多種系統上運行。

由於它出色的靈活性,可以和多種工具結合使用。

比如寫一個 cloc-git 的腳本,用來統計 git 遠程項目的代碼量。

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

運行結果如下:

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


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

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

cloc 也支持使用 --diff 選項對兩個版本的代碼量進行比較。

但是在我嘗試 cloc 使用 --diff 選項比較文件並輸出結果的時候, 我發現了一個問題,cloc 輸出的 yaml 或 json 文件內容是不正確的。如下所示:

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

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

這是 diff 輸出的 yaml 文件。注意 same 下面的 key 並不是根據開發語言區分的二級 Hash,而是所有結果都使用了同樣的 key 名放在了一起。這樣如果有其他工具讀取輸出文件,勢必會導致前面同名 key 的值被後面的值覆蓋。造成解析後會丟失絕大部分的報告內容。

這個問題我已經在項目提交了Issue,作者說過幾天就將修復這個問題。

最後統計了一下我最近在做的項目。

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

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

最多的 YAML 代碼是從業務庫導出的基線數據。由於這是個基於 echarts 的業務數據可視化的項目,前端代碼佔的比重稍大了一點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章