Hitung Baris Kode
cloc menghitung baris kosong, baris komentar, dan baris fisik kode sumber dalam banyak bahasa pemrograman.
Rilis terbaru: v2.02 (2 Agustus 2024)
cloc dipindahkan ke GitHub pada bulan September 2015 setelah dihosting di http://cloc.sourceforge.net/ sejak Agustus 2006.
Langkah 1: Unduh cloc (beberapa metode, lihat di bawah) atau jalankan image buruh pelabuhan cloc. Eksekusi Windows tidak memiliki persyaratan. Versi sumber cloc memerlukan juru bahasa Perl, dan versi Docker dari cloc memerlukan instalasi Docker.
Langkah 2: Buka terminal ( cmd.exe
di Windows).
Langkah 3: Panggil cloc untuk menghitung file sumber, direktori, arsip, atau git commit Anda. Nama yang dapat dieksekusi berbeda-beda bergantung pada apakah Anda menggunakan versi sumber pengembangan ( cloc
), sumber untuk versi rilis ( cloc-2.02.pl
) atau versi Windows yang dapat dieksekusi ( cloc-2.02.exe
).
Di halaman ini, cloc
adalah istilah umum yang digunakan untuk merujuk pada semua ini.
Sertakan Keamanan memiliki video YouTube yang menunjukkan langkah-langkah tindakan.
sebuah file
prompt> jam halo.c 1 file teks. 1 file unik. 0 file diabaikan. https://github.com/AlDanial/cloc v 1,65 T=0,04 dtk (28,3 file/dtk, 340,0 baris/dtk) --------------------------------------------------- ----------------------------- File bahasa kode komentar kosong --------------------------------------------------- ----------------------------- C 1 0 7 5 --------------------------------------------------- -----------------------------
sebuah direktori
prompt> jam gcc-5.2.0/gcc/c 16 file teks. 15 file unik. 3 file diabaikan. https://github.com/AlDanial/cloc v 1,65 T=0,23 dtk (57,1 file/dtk, 188914,0 baris/dtk) --------------------------------------------------- ----------------------------- File bahasa kode komentar kosong --------------------------------------------------- ----------------------------- C 10 4680 6621 30812 C/C++ Tajuk 3 99 286 496 --------------------------------------------------- ----------------------------- JUMLAH: 13 4779 6907 31308 --------------------------------------------------- -----------------------------
sebuah arsip
Kami akan menarik file zip sumber cloc dari GitHub, lalu menghitung isinya:
cepat> wget https://github.com/AlDanial/cloc/archive/master.zip cepat> jam master.zip https://github.com/AlDanial/cloc v 1,65 T=0,07 dtk (26,8 file/dtk, 141370,3 baris/dtk) --------------------------------------------------- ----------------------------- File bahasa kode komentar kosong --------------------------------------------------- ----------------------------- Perl 2 725 1103 8713 --------------------------------------------------- ----------------------------- JUMLAH: 2 725 1103 8713 --------------------------------------------------- -----------------------------
repositori git, menggunakan komit tertentu
Contoh ini menggunakan kode dari PuDB, debugger Python yang fantastis.
cepat> git clone https://github.com/inducer/pudb.git cepat> cd pudb cepat> jam 6be804e07a5db 48 file teks. 41 file unik. 8 file diabaikan. github.com/AlDanial/cloc v 1,99 T=0,04 dtk (1054,9 file/dtk, 189646,8 baris/dtk) --------------------------------------------------- ----------------------------- File bahasa kode komentar kosong --------------------------------------------------- ----------------------------- Piton 28 1519 728 4659 Teks Terstruktur ulang 6 102 20 203 YAML 2 9 2 75 Bourne Shell 3 6 0 17 Teks 1 0 0 11 jadikan 1 4 6 10 --------------------------------------------------- ----------------------------- JUMLAH: 41 1640 756 4975 --------------------------------------------------- -----------------------------
setiap subdirektori dari direktori tertentu
Katakanlah Anda memiliki direktori dengan tiga proyek berbeda yang dikelola git, Project0, Project1, dan Project2. Anda dapat menggunakan kemampuan perulangan shell Anda untuk menghitung kode di masing-masingnya. Contoh ini menggunakan bash (gulir ke bawah untuk melihat contoh cmd.exe):
prompt> untuk d di ./*/ ; lakukan (cd "$d" && echo "$d" && cloc --vcs git); Selesai ./Proyek0/ 7 file teks. 7 file unik. 1 file diabaikan. github.com/AlDanial/cloc v 1,71 T=0,02 dtk (390,2 file/dtk, 25687,6 baris/dtk) --------------------------------------------------- ----------------------------- File bahasa kode komentar kosong --------------------------------------------------- ----------------------------- H 4 61 32 251 Penurunan harga 1 9 0 38 jadikan 1 0 0 4 --------------------------------------------------- ----------------------------- JUMLAH: 6 70 32 293 --------------------------------------------------- ----------------------------- ./Proyek1/ 7 file teks. 7 file unik. 0 file diabaikan. github.com/AlDanial/cloc v 1,71 T=0,02 dtk (293,0 file/dtk, 52107,1 baris/dtk) --------------------------------------------------- ----------------------------- File bahasa kode komentar kosong --------------------------------------------------- ----------------------------- Pergi 7 165 282 798 --------------------------------------------------- ----------------------------- JUMLAH: 7 165 282 798 --------------------------------------------------- ----------------------------- ./Proyek2/ 49 file teks. 47 file unik. 13 file diabaikan. github.com/AlDanial/cloc v 1,71 T=0,10 dtk (399,5 file/dtk, 70409,4 baris/dtk) --------------------------------------------------- ----------------------------- File bahasa kode komentar kosong --------------------------------------------------- ----------------------------- Piton 33 1226 1026 3017 Bab 4 327 337 888 Penurunan harga 1 11 0 28 YAML 1 0 2 12 --------------------------------------------------- ----------------------------- JUMLAH: 39 1564 1365 3945 --------------------------------------------------- -----------------------------
setiap subdirektori dari direktori tertentu (Windows/cmd.exe)
untuk /D %I di (.*) lakukan cd %I && cloc --vcs git && cd ..
cloc menghitung baris kosong, baris komentar, dan baris fisik kode sumber dalam banyak bahasa pemrograman. Dengan adanya dua versi basis kode, cloc dapat menghitung perbedaan pada baris kosong, komentar, dan sumber. Itu seluruhnya ditulis dalam Perl tanpa ketergantungan di luar distribusi standar Perl v5.6 dan lebih tinggi (kode dari beberapa modul eksternal tertanam dalam cloc) sehingga cukup portabel. cloc diketahui berjalan di banyak varian Linux, FreeBSD, NetBSD, OpenBSD, macOS, AIX, HP-UX, Solaris, IRIX, z/OS, dan Windows. (Untuk menjalankan versi sumber Perl dari cloc di Windows, seseorang memerlukan ActiveState Perl 5.6.1 atau lebih tinggi, Strawberry Perl, Subsistem Windows untuk Linux, Cygwin, MobaXTerm dengan plug-in Perl terinstal, atau lingkungan dan terminal mingw seperti yang disediakan oleh Git untuk Windows. Alternatifnya, seseorang dapat menggunakan biner Windows dari cloc yang dihasilkan dengan PAR::Packer untuk dijalankan pada komputer Windows yang tidak memiliki Perl atau Cygwin.)
Selain menghitung kode dalam file teks individual, direktori, dan repositori git, cloc juga dapat menghitung kode dalam file arsip seperti .tar
(termasuk versi terkompresi), .zip
, Python wheel .whl
, Jupyter notebook .ipynb
, source RPMs .rpm
atau .src
(memerlukan rpm2cpio
), dan file .deb
Debian (memerlukan dpkg-deb
).
cloc berisi kode dari SLOCCount David Wheeler, Damian Conway dan modul Perl Abigail Regexp::Common, modul Perl Sean M. Burke Win32::Autoglob, dan modul Perl Tye McQueen Algorithm::Diff. Faktor skala bahasa diperoleh dari situs web Mayes Consulting, LLC http://softwareestimator.com/IndustryData2.htm.
Rilisan baru secara nominal muncul setiap enam bulan.
docker run --rm -v $PWD :/tmp aldanial/cloc
docker run --rm -v " / $( pwd -W ) " :/tmp aldanial/cloc
Tergantung sistem operasi Anda, salah satu metode instalasi berikut mungkin cocok untuk Anda (semua kecuali dua entri terakhir untuk Windows memerlukan juru bahasa Perl):
npm install -g cloc # https://www.npmjs.com/package/cloc
sudo apt 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 emerge -av dev-util/cloc # Gentoo https://packages.gentoo.org/packages/dev-util/cloc
sudo apk add cloc # Alpine Linux
doas pkg_add cloc # OpenBSD
sudo pkg install cloc # FreeBSD
sudo port install cloc # macOS with MacPorts
brew install cloc # macOS with Homebrew
winget install AlDanial.Cloc # Windows with winget
choco install cloc # Windows with Chocolatey
scoop install cloc # Windows with Scoop
Catatan : Saya tidak mengontrol paket-paket ini. Jika Anda menemukan bug di cloc menggunakan salah satu paket di atas, coba dengan cloc ditarik dari rilis stabil terbaru di sini di GitHub (tautan berikut di bawah) sebelum mengirimkan laporan masalah.
https://github.com/AlDanial/cloc/releases/latest
https://github.com/AlDanial/cloc/raw/master/cloc
cloc dilisensikan di bawah GNU General Public License, v 2, tidak termasuk bagian yang disalin dari sumber lain. Kode yang disalin dari modul Regexp::Common, Win32::Autoglob, dan Algorithm::Diff Perl tunduk pada Lisensi Artistik.
cloc memiliki banyak fitur yang membuatnya mudah digunakan, menyeluruh, dapat diperluas, dan portabel:
Jika cloc tidak sesuai dengan kebutuhan Anda, berikut adalah counter lain yang tersedia secara gratis untuk dipertimbangkan:
Referensi lain:
Meskipun cloc tidak memerlukan modul Perl di luar yang ditemukan dalam distribusi standar, cloc bergantung pada beberapa modul eksternal. Kode dari tiga modul eksternal ini--Regexp::Common, Win32::Autoglob, dan Algorithm::Diff--tertanam di dalam cloc. Modul keempat, Digest::MD5, hanya digunakan jika tersedia. Jika cloc menemukan Regexp::Common atau Algorithm::Diff diinstal secara lokal, ia akan menggunakan instalasi tersebut. Jika tidak, cloc akan menginstal bagian Regexp::Common dan/atau Algorithm:Diff yang diperlukan ke direktori sementara yang dibuat pada awal proses cloc kemudian dihapus ketika proses selesai. Kode yang diperlukan dari Regexp::Common v2.120 dan Algorithm::Diff v1.1902 tertanam dalam kode sumber cloc (lihat subrutin Install_Regexp_Common()
dan Install_Algorithm_Diff()
). Hanya tiga baris yang diperlukan dari Win32::Autoglob dan ini disertakan langsung di cloc.
Selain itu, cloc akan menggunakan Digest::MD5 untuk memvalidasi keunikan di antara file input berukuran sama jika Digest::MD5 diinstal secara lokal.
Opsi pemrosesan paralel, --processes= N , diperkenalkan dengan cloc versi 1.76 untuk memungkinkan proses yang lebih cepat pada mesin multi-core. Namun, untuk menggunakannya, seseorang harus menginstal modul Parallel::ForkManager. Modul ini tidak berfungsi dengan baik pada Windows sehingga pemrosesan paralel hanya akan berfungsi pada sistem operasi mirip Unix.
Biner Windows dibangun di komputer yang memiliki Regexp::Common dan Digest::MD5 diinstal secara lokal.
Opsi paling kuat untuk membuat cloc yang dapat dieksekusi di Windows adalah dengan menggunakan Perl Development Kit dari ActiveState. Ini mencakup utilitas, perlapp
, yang dapat membangun binari kode sumber Perl Windows, Mac, dan Linux yang berdiri sendiri.
perl2exe juga akan melakukan triknya. Jika Anda memiliki perl2exe
, ubah baris 84-87 dalam kode sumber cloc untuk modifikasi kode kecil yang diperlukan agar cloc Windows dapat dieksekusi.
Jika tidak, untuk membuat Windows yang dapat dieksekusi dengan pp
dari PAR::Packer
, pertama-tama instal distribusi Perl berbasis Windows (misalnya Strawberry Perl atau ActivePerl) dengan mengikuti instruksinya. Selanjutnya, buka command prompt alias jendela DOS dan instal modul PAR::Packer. Terakhir, jalankan perintah pp
yang baru diinstal dengan kode sumber cloc untuk membuat file .exe
:
C:> cpan -i Intisari::MD5 C:> cpan -i Regexp::Umum C:> cpan -i Algoritma::Diff C:> cpan -i PAR::Pembungkus C:> cpan -i Win32::Jalur Panjang C:> pp -M Win32::LongPath -M Encode::Unicode -M Digest::MD5 -c -x -o cloc-2.02.exe cloc-2.02.pl
Variasi dari petunjuk di atas adalah jika Anda menginstal Strawberry Perl versi portabel, Anda harus menjalankan portableshell.bat
terlebih dahulu untuk mengatur lingkungan Anda dengan benar.
Windows yang dapat dieksekusi di bagian Rilis, cloc-2.02.exe , dibuat pada komputer Windows 10 64 bit menggunakan Strawberry Perl 5.30.2 dan PAR::Packer untuk membuat .exe
.
Idealnya, tidak seorang pun memerlukan Windows yang dapat dieksekusi karena mereka memiliki penerjemah Perl yang diinstal pada mesin mereka dan dapat menjalankan file sumber cloc. Namun, pada mesin Windows perusahaan yang dikelola secara terpusat, hal ini mungkin sulit atau tidak mungkin dilakukan.
Eksekusi Windows yang didistribusikan dengan cloc disediakan sebagai upaya terbaik dari .exe
bebas virus dan malware. Anda dianjurkan untuk menjalankan pemindai virus Anda sendiri terhadap file yang dapat dieksekusi dan juga memeriksa situs seperti https://www.virustotal.com/ . Entri untuk versi terbaru adalah:
cloc-2.02-winget.exe: (termasuk PR 850 untuk memungkinkan dijalankan dari symlink di Windows) https://www.virustotal.com/gui/file/be033061e091fea48a5bc9e8964cee0416ddd5b34bd5226a1c9aa4b30bdba66a?nocache=1
cloc-2.02.exe: https://www.virustotal.com/gui/file/369ed76125f7399cd582d169adf39a2e08ae5066031fea0cc8b2836ea50e7ce2?nocache=1
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/00b1c9dbbfb920dabd374418e1b86d2c24b8cd2b8705aeb956dee910d0d75d45?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/97d5d2631d1cccdbfd99267ab8a4cf5968816bbe52c0f9324e72e768857f642d/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/detection
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
jam 1.72 exe: https://www.virustotal.com/en/url/8fd2af5cd972f648d7a2d7917bc202492012484c3a6f0b48c8fd60a8d395c98c/analisis/
jam 1.70 exe: https://www.virustotal.com/en/url/63edef209099a93aa0be1a220dc7c4c7ed045064d801e6d5daa84ee624fc0b4a/analisis/
jam 1.68 exe: https://www.virustotal.com/en/file/c484fc58615fc3b0d5569b9063ec1532980281c3155e4a19099b11ef1c24443b/analisis/
jam 1.66 exe: https://www.virustotal.com/en/file/54d6662e59b04be793dd10fa5e5edf7747cf0c0cc32f71eb67a3cf8e7a171d81/analisis/1453601367/
Eksekusi Windows dari cloc versi 1.60 dan sebelumnya, dibuat dengan perl2exe seperti disebutkan di atas, berukuran sekitar 1,6 MB, sedangkan versi 1.62 dan 1.54, dibuat dengan PAR::Packer
, berukuran 11 MB. Versi 1.66, dibuat dengan versi PAR::Packer
yang lebih baru, berukuran sekitar 5,5 MB. Mengapa PAR::Packer
, executable jauh lebih besar daripada yang dibuat dengan perl2exe? Teori saya adalah perl2exe menggunakan logika pemangkasan pohon yang lebih cerdas daripada PAR::Packer
, tapi itu murni spekulasi.
cloc adalah program baris perintah yang mengambil nama file, direktori, dan/atau arsip sebagai input. Berikut ini contoh menjalankan cloc terhadap distribusi sumber Perl v5.22.0:
cepat> jam perl-5.22.0.tar.gz 5605 file teks. 5386 file unik. 2176 file diabaikan. https://github.com/AlDanial/cloc v 1,65 T=25,49 dtk (134,7 file/dtk, 51980,3 baris/dtk) --------------------------------------------------- --------------------------------- File bahasa kode komentar kosong --------------------------------------------------- --------------------------------- Perl 2892 136396 184362 536445 C 130 24676 33684 155648 C/C++ Tajuk 148 9766 16569 147858 Bourne Shell 112 4044 6796 42668 Pascal 8 458 1603 8592 XML 33 142 0 2410 YAML 49 20 15 2078 C++ 10 313 277 2033 jadikan 4 426 488 1986 Prolog 12 438 2 1146 JSON 14 1 0 1037 yacc 1 85 76 998 File Pesan Windows 1 102 11 489 DOS Angkatan 14 92 41 389 File Sumber Daya Windows 3 10 0 85 H 1 5 7 8 Cacat 2 0 3 4 --------------------------------------------------- --------------------------------- JUMLAH: 3434 176974 243934 903874 --------------------------------------------------- ---------------------------------
Untuk menjalankan cloc di komputer Windows, buka jendela perintah (alias DOS) dan aktifkan cloc.exe dari baris perintah di sana. Atau, coba ClocViewer, pembungkus GUI di sekitar cloc yang ditemukan di https://github.com/Roemer/ClocViewer.
Lihat juga https://github.com/jmensch1/codeflower untuk rendering grafis hasil cloc.
cepat> jam --membantu Penggunaan: cloc [pilihan]| | Hitung, atau hitung perbedaan, baris fisik kode sumber di file tertentu (mungkin arsip seperti tarball terkompresi atau file zip, atau git commit hash atau nama cabang) dan/atau secara rekursif di bawah direktori yang diberikan. Opsi Masukan --extract-with= Opsi ini hanya diperlukan jika cloc tidak dapat untuk mengetahui cara mengekstrak isinya file input dengan sendirinya. Gunakan untuk mengekstrak file arsip biner (misalnya: .tar.gz, .zip, .Z). Gunakan '>FILE<' literal sebagai pengganti file sebenarnya diekstraksi. Misalnya untuk menghitung baris kode dalam file masukan gcc-4.2.tar.gz perl-5.8.8.tar.gz pada penggunaan Unix --ekstrak-dengan='gzip -dc >FILE< | tar xf-' atau, jika Anda memiliki tar GNU, --ekstrak-dengan='tar zxf >FILE<' dan pada penggunaan Windows, misalnya: --extract-with=""c:Program FilesWinZipWinZip32.exe" -e -o >FILE< ." (jika WinZip diinstal di sana). --list-file= Ambil daftar nama file dan/atau direktori proses dari , yang memiliki satu file/direktori nama per baris. Hanya kecocokan persis yang dihitung; nama jalur relatif akan diselesaikan mulai dari direktori tempat cloc dipanggil. Setel ke - untuk membaca nama file dari pipa STDIN. Lihat juga --exclude-list-file. --diff-list-file= Ambil pasangan nama file yang akan dibedah , yang formatnya cocok dengan outputnya --penyelarasan-diff. (Jalankan dengan opsi itu untuk lihat contoh.) Pengidentifikasi bahasa di akhir setiap baris diabaikan. Ini mengaktifkan --diff mode dan melewati logika penyelarasan pasangan file. --vcs= Panggil panggilan sistem ke untuk mendapatkan daftar file untuk dikerjakan. Jika adalah 'git', maka akan panggil 'git ls-files' untuk mendapatkan daftar file dan 'git submodule status' untuk mendapatkan daftar submodul yang isinya akan diabaikan. Lihat juga --git yang menerima hash git commit dan nama cabang. Jika adalah 'svn' maka akan memanggil 'svn list -R'. Manfaat utamanya adalah jam akan dilewati file secara eksplisit dikecualikan oleh alat pembuatan versi yang dimaksud, yaitu yang ada di .gitignore atau yang memiliki svn: abaikan properti. Atau dapat berupa perintah sistem apa pun yang menghasilkan daftar file. Catatan: cloc harus berada di direktori yang dapat dibaca file yang dikembalikan oleh . jam akan tidak mengunduh file dari repositori jarak jauh. 'svn list -R' mungkin merujuk ke repositori jarak jauh untuk mendapatkan nama file (dan karena itu mungkin memerlukan otentikasi ke repositori jarak jauh), tapi file-file itu sendiri harus lokal. Menyetel ke 'otomatis' memilih antara 'git' dan 'svn' (atau tidak keduanya) bergantung pada keberadaannya dari subdirektori .git atau .svn di bawah direktori di mana jam dipanggil. --unicode Periksa file biner untuk melihat apakah berisi Unicode teks ASCII yang diperluas. Hal ini menyebabkan kinerja menjadi turun secara nyata. Opsi Pemrosesan --autoconf Hitung file .in (seperti yang diproses oleh GNU autoconf) dari bahasa yang dikenali. Lihat juga --tanpa autogen. --by-file Laporkan hasil untuk setiap file sumber yang ditemukan. --by-file-by-lang Laporkan hasil untuk setiap file sumber yang ditemukan selain melaporkan berdasarkan bahasa. --config Baca saklar baris perintah dari alih-alih lokasi default /home/al/.config/cloc/options.txt. File tersebut harus berisi satu saklar, bersama dengan argumen (jika ada), per baris. Garis dan garis kosong dimulai dengan '#' dilewati. Pilihan diberikan pada baris perintah mengambil prioritas daripada entri yang dibaca file tersebut. --hitung-dan-perbedaan Pertama-tama lakukan penghitungan kode langsung dari file sumber dari dan secara terpisah, lalu lakukan diff dari ini. Input dapat berupa pasangan file, direktori, atau arsip. Jika --out atau --report-file diberikan, tiga file keluaran akan dibuat, satu untuk masing-masing dari dua hitungan dan satu untuk perbedaan. Lihat juga --diff, --diff-penyelarasan, --diff-batas waktu, --abaikan-huruf besar, --abaikan-spasi putih. --diff Hitung perbedaan kode dan komentar antar file sumber dari dan . Masukannya dapat berupa campuran file, direktori, arsip, atau git melakukan hash. Gunakan --diff-alignment untuk menghasilkan daftar yang menunjukkan file mana yang berpasangan di mana dibandingkan. Saat membandingkan cabang git, hanya file yang telah berubah di salah satu komit dibandingkan. Lihat juga --git, --count-and-diff, --diff-alignment, --diff-daftar-file, --diff-timeout, --ignore-case, --abaikan-spasi putih. --diff-timeout Abaikan file yang memerlukan waktu lebih dari detik untuk memproses. Standarnya adalah 10 detik. Pengaturan hingga 0 memungkinkan waktu tidak terbatas. (File besar dengan banyak file baris yang berulang dapat menyebabkan Algorithm::Diff::sdiff() memakan waktu berjam-jam.) Lihat juga --timeout. --docstring-as-code cloc menganggap docstrings sebagai komentar, tapi ini memang benar tidak selalu benar karena dokumen mewakili reguler string ketika muncul di sisi kanan an penugasan atau sebagai argumen fungsi. saklar ini memaksa docstrings dihitung sebagai kode. --follow-links [khusus Unix] Ikuti tautan simbolis ke direktori (tautan sim ke file selalu diikuti). Lihat juga --stat. --force-lang= [, ] Memproses semua file yang memiliki ekstensi dengan penghitung untuk bahasa . Untuk misalnya, untuk menghitung semua file .f dengan Penghitung Fortran 90 (yang mengharapkan file untuk diakhiri dengan .f90) bukan Fortran 77 default penghitung, gunakan --force-lang="Fortran 90,f" Jika dihilangkan, setiap file akan dihitung dengan penghitung . Opsi ini bisa jadi ditentukan beberapa kali (tapi itu hanya berguna ketika diberikan setiap kali). Lihat juga --script-lang, --lang-no-ext. --force-lang-def= Muat filter pemrosesan bahasa dari , lalu gunakan filter ini alih-alih filter bawaan filter. Catatan: bahasa yang dipetakan sama ekstensi file (misalnya: MATLAB/Mathematica/Objective-C/MUMPS/Merkurius; Pascal/PHP; Cadel/OpenCL; Cadel/Julia; Perl/Prolog) akan diabaikan karena memerlukan tambahan pemrosesan yang tidak diungkapkan dalam bahasa file definisi. Gunakan --read-lang-def untuk mendefinisikan filter bahasa baru tanpa mengganti filter bawaan filter (lihat juga --write-lang-def, --tulis-lang-def-incl-dup). --git Memaksa input untuk ditafsirkan sebagai target git (komit hash, nama cabang, dan lain-lain) jika ini tidak pertama kali diidentifikasi sebagai file atau direktori nama. Opsi ini mengesampingkan logika --vcs=git jika ini diberikan; dengan kata lain, --git mengerti daftar file untuk dikerjakan langsung dari git menggunakan nama hash atau cabang, bukan dari 'git ls-file'. Opsi ini dapat digunakan dengan --diff untuk melakukan perbedaan jumlah baris antara git komit, atau antara git komit dan file, direktori, atau arsip. Gunakan -v/--verbose untuk melihatnya sistem git memerintahkan masalah jam. --git-diff-rel Sama seperti --git --diff, atau hanya --diff jika inputnya dikenali sebagai target git. Hanya file yang telah berubah di salah satu komit dibandingkan. --git-diff-all Strategi Git diff #2: bandingkan semua file di repositori antara dua komit. --ignore-whitespace Abaikan spasi horizontal saat membandingkan file dengan --diff. Lihat juga --abaikan-kasus. --ignore-case Abaikan perubahan case dalam konten file; pertimbangkan persamaan huruf besar dan kecil saat membandingkan file dengan --diff. Lihat juga --abaikan-spasi putih. --ignore-case-ext Abaikan kasus ekstensi nama file. Ini akan menyebabkan masalah dalam menghitung beberapa bahasa (khususnya, .c dan .C dikaitkan dengan C dan C++; saklar ini akan menghitung file .C sebagai C daripada C++ pada sistem operasi *nix). Nama berkas ketidakpekaan huruf besar-kecil selalu berlaku di Windows. --lang-no-ext= Menghitung file tanpa ekstensi menggunakan menangkal. Opsi ini mengesampingkan logika internal untuk file tanpa ekstensi (di mana file tersebut diperiksa terhadap bahasa skrip yang dikenal dengan memeriksa baris pertama untuk #!). Lihat juga --force-lang, --script-lang. --max-file-size= Lewati file yang lebih besar dari megabyte bila melintasi direktori. Secara default, =100. kebutuhan memori cloc kira-kira dua puluh kali lipat lebih besar dari file terbesar sehingga berjalan dengan file yang lebih besar dari 100 MB di komputer dengan ukuran lebih kecil memori lebih dari 2 GB akan menimbulkan masalah. Catatan: pemeriksaan ini tidak berlaku untuk file secara eksplisit diteruskan sebagai argumen baris perintah. --no-autogen[=list] Abaikan file yang dihasilkan oleh sistem produksi kode seperti konferensi otomatis GNU. Untuk melihat daftar file-file ini (lalu keluar), jalankan dengan --no-autogen list Lihat juga --autoconf. --original-dir [Hanya efektif jika dikombinasikan dengan --strip-comments] Tulis file yang telah dilucuti ke direktori yang sama dengan file aslinya. --read-binary-files Memproses file biner selain file teks. Ini biasanya merupakan ide yang buruk dan memang seharusnya demikian dicoba dengan file teks yang telah tertanam data biner. --read-lang-def= Muat filter pemrosesan bahasa baru dari dan menggabungkannya dengan yang sudah diketahui jamnya. Jika mendefinisikan bahasa yang sudah diketahui jam tentang, definisi cloc akan diutamakan. Gunakan --force-lang-def untuk mengganti jam definisi (lihat juga --write-lang-def, --tulis-lang-def-incl-dup). --script-lang= , Memproses semua file yang memanggilsebagai #! bahasa skrip dengan penghitung bahasa. Misalnya file yang diawali dengan #!/usr/local/bin/perl5.8.8 akan dihitung dengan penghitung Perl dengan menggunakan --script-lang=Perl,perl5.8.8 Nama bahasa tidak peka huruf besar-kecil tetapi nama bahasa skrip yang dapat dieksekusi, , harus memiliki kasus yang tepat. Opsi ini bisa jadi ditentukan beberapa kali. Lihat juga --force-lang, --lang-tidak-ext. --sdir=Gunakan sebagai direktori awal membiarkan File::Temp memilih lokasi. File ditulis ke lokasi ini tidak dihapus di akhir proses (seperti halnya dengan File::Temp). --skip-uniqueness Lewati pemeriksaan keunikan file. Ini akan memberi peningkatan kinerja dengan mengorbankan penghitungan file dengan konten yang identik beberapa kali (jika duplikat tersebut ada). --stat Beberapa sistem file (AFS, CD-ROM, FAT, HPFS, SMB) tidak memiliki jumlah direktori 'nlink' yang cocok jumlah subdirektorinya. Akibatnya jam mungkin kurang dihitung atau dilewati sama sekali isi sistem file tersebut. Peralihan ini memaksa File::Temukan direktori stat untuk mendapatkan hitungan yang benar. Kecepatan pencarian file akan menurun. Lihat juga --ikuti-tautan. --stdin-name= Berikan nama file yang akan digunakan untuk menentukan bahasa untuk masukan standar. (Gunakan - sebagai nama masukan untuk menerima kode sumber melalui STDIN.) --strip-comments= Untuk setiap file yang diproses, tulis ke file saat ini direktori versi file yang kosong dan baris komentar dihapus (komentar sebaris bertahan). Nama setiap file yang dilucuti adalah nama file asli dengan . ditambahkan ke dalamnya. Itu ditulis ke direktori saat ini kecuali --dir asli aktif. --strip-str-comments Ganti penanda komentar yang tertanam dalam string dengan 'xx'. Ini mencoba untuk mengatasi keterbatasan di Regexp::Common::Comment di mana penanda komentar tertanam dalam string dipandang sebagai komentar sebenarnya penanda dan bukan string, sering kali menghasilkan a 'Batas rekursi subekspresi reguler yang kompleks' peringatan dan penghitungan yang salah. Ada dua kerugian menggunakan saklar ini: 1/jumlah kode kinerja turun, dan 2/kode dihasilkan dengan --strip-comments akan berisi string yang berbeda di mana pun komentar yang disematkan ditemukan. --sum-reports Argumen masukan adalah file laporan sebelumnya dibuat dengan opsi --report-file secara sederhana format (mis. bukan JSON, YAML, XML, atau SQL). Membuat kumpulan hasil kumulatif yang berisi jumlah data dari file laporan individual. --timeout Abaikan file yang memakan waktu lebih dari detik untuk memproses pada salah satu tahapan filter bahasa. Jumlah detik maksimum default yang dihabiskan pada a tahap filter adalah jumlah baris dalam file dibagi seribu. Menyetel ke 0 memungkinkan waktu yang tidak terbatas. Lihat juga --diff-timeout. --processes=NUM [Hanya tersedia pada sistem dengan versi terbaru dari modul Paralel::ForkManager. Bukan tersedia di Windows.] Mengatur jumlah maksimum inti yang digunakan jam. Nilai defaultnya adalah 0 menonaktifkan multiprosesor. --unix Ganti deteksi otomatis sistem operasi logika dan dijalankan dalam mode UNIX. Lihat juga --jendela, --tampilkan-os. --use-sloccount Jika SLOCCount diinstal, gunakan kompilasinya executable c_count, java_count, pascal_count, php_count, dan xml_count bukannya jam penghitung. Penghitung yang dikompilasi SLOCCount adalah jauh lebih cepat daripada jam dan mungkin memberi peningkatan kinerja saat menghitung proyek dengan file besar. Namun, jam ini spesifik fitur tidak akan tersedia: --diff, --hitung-dan-perbedaan, --strip-komentar, --unicode. --windows Mengganti deteksi otomatis sistem operasi logika dan dijalankan dalam mode Microsoft Windows. Lihat juga --unix, --show-os. Opsi Penyaring --include-content= Hanya menghitung file yang berisi teks yang cocok dengan diberikan ekspresi reguler. --exclude-content= Kecualikan file yang berisi teks yang cocok dengan yang diberikan ekspresi reguler. --exclude-dir= [,D2,] Kecualikan direktori yang dipisahkan koma D1, D2, D3, dan lain-lain, agar tidak dipindai. Untuk contoh --exclude-dir=.cache,tes akan dilewati semua file dan subdirektori yang memiliki /.cache/ atau /test/ sebagai direktori induknya. Direktori bernama .bzr, .cvs, .hg, .git, .svn, dan .snapshot selalu dikecualikan. Opsi ini hanya berfungsi dengan direktori individual nama jadi termasuk pemisah jalur file tidak diizinkan. Gunakan --fullpath dan --not-match-d= untuk menyediakan regex yang cocok dengan beberapa subdirektori. --exclude-ext= [, [...]] Jangan hitung file yang memiliki nama file tertentu ekstensi. --exclude-lang= [,L2[...]] Kecualikan bahasa yang dipisahkan koma L1, L2, L3, dan sebagainya, tidak dihitung. --exclude-list-file= Abaikan file dan/atau direktori yang namanya muncul di . harus memiliki satu file nama per baris. Hanya pencocokan persis yang diabaikan; nama jalur relatif akan diselesaikan mulai dari direktori tempat cloc dipanggil. Lihat juga --daftar-file. --fullpath Memodifikasi perilaku --match-f, --not-match-f, dan --not-match-d untuk menyertakan jalur file di regex, bukan hanya nama dasar file. (Ini tidak memperluas setiap file untuk menyertakannya jalur absolut, malah menggunakan sebanyak itu jalur seperti yang diteruskan ke jam.) Catatan: --match-d selalu terlihat penuh jalur dan karena itu tidak terpengaruh oleh --fullpath. --termasuk-ext= [,ext2[...]] Hitung hanya bahasa yang diberi koma ekstensi file terpisah. Gunakan --show-ext untuk lihat ekstensi yang dikenali. --include-lang= [,L2[...]] Hitung hanya bahasa yang dipisahkan koma L1, L2, L3, dan sebagainya. Gunakan --show-lang untuk melihat daftar bahasa yang diakui. --match-d= Hanya menghitung file di direktori yang cocok dengan Perl ekspresi reguler. Misalnya --match-d='/(src|termasuk)/' hanya menghitung file dalam direktori yang berisi /src/ atau /include/. Berbeda dengan --not-match-d, --match-f, dan --not-match-f, --match-d selalu membandingkan jalur yang sepenuhnya memenuhi syarat dengan ekspresi reguler. --not-match-d= Hitung semua file kecuali yang ada di direktori cocok dengan regex Perl. Hanya yang tertinggal nama direktori dibandingkan, misalnya kapan menghitung di/usr/local/lib, hanya 'lib' yang ada dibandingkan dengan ekspresi reguler. Tambahkan --fullpath untuk membandingkan direktori induk ekspresi reguler. Jangan sertakan pemisah jalur file di awal atau akhir regex. --match-f= Hanya menghitung file yang nama dasarnya cocok dengan Perl ekspresi reguler. Misalnya --match-f='^[Ww]idget' hanya menghitung file yang dimulai dengan Widget atau widget. Tambahkan --fullpath untuk memasukkan direktori induk di regex, bukan hanya nama dasar. --not-match-f= Hitung semua file kecuali yang memiliki nama dasar cocok dengan regex Perl. Tambahkan --fullpath untuk disertakan direktori induk di regex, bukan adil nama dasarnya. --skip-archive= Abaikan file yang diakhiri dengan Perl reguler yang diberikan ekspresi. Misalnya jika diberikan --skip-archive='(zip|tar(.(gz|Z|bz2|xz|7z))?)' kode akan melewatkan file yang diakhiri dengan .zip, .tar, .tar.gz, .tar.Z, .tar.bz2, .tar.xz, dan .tar.7z. --skip-win-hidden Di Windows, abaikan file tersembunyi. Opsi Debug --Categorized = Simpan ukuran file dalam byte, bahasa yang diidentifikasi dan nama -nama file yang dikategorikan ke . --counted = Simpan nama file sumber yang diproses ke . --Diff-Alignment = TULIS KE Daftar file dan pasangan file menunjukkan file mana yang ditambahkan, dihapus, dan/atau Dibandingkan selama lari dengan -diff. Sakelar ini memaksa mode -diff aktif. --Explain = Cetak filter yang digunakan untuk menghapus komentar untuk Bahasa dan keluar. Dalam beberapa kasus filter mengacu pada subrutin Perl daripada Ekspresi reguler. Pemeriksaan terhadap Kode sumber mungkin diperlukan untuk penjelasan lebih lanjut. --HaP cetak informasi penggunaan ini dan keluar. --found = Simpan nama dari setiap file yang ditemukan di . --ignored = Simpan nama file yang diabaikan dan alasan mereka diabaikan ke . --Print-filter-tahap mencetak kode sumber yang diproses sebelum dan sesudah Setiap filter diterapkan. --show-ext [= ] cetak informasi tentang semua yang diketahui (atau hanya diberikan) File ekstensi dan keluar. --show-lang [= ] mencetak informasi tentang semua yang diketahui (atau hanya diberikan) bahasa dan keluar. --show-os cetak nilai mode sistem operasi dan keluar. Lihat juga --Unix, --Windows. -v [= ] sakelar verbose (nilai numerik opsional). -Verbose [= ] bentuk panjang -v. --Version Cetak versi program dan keluar ini. --write-lang-def = Menulis ke Filter pemrosesan bahasa lalu keluar. Berguna sebagai langkah pertama untuk membuat Definisi Bahasa Kustom. Catatan: Bahasa yang Peta ke ekstensi file yang sama akan dikecualikan. (Lihat juga--force-lang-def, --tread-lang-def). --write-lang-cl-incl-dup = Sama seperti --write-lang-def, tetapi termasuk digandakan ekstensi. Ini menghasilkan bahasa yang bermasalah file definisi karena cloc akan menolak untuk menggunakan sampai duplikat dihapus. Opsi Output --3 Cetak output bahasa generasi ketiga. (Opsi ini dapat menyebabkan penjumlahan laporan gagal Jika beberapa laporan diproduksi dengan opsi ini sementara yang lain diproduksi tanpa itu.) -BY-PERCENT X Alih-alih komentar dan jumlah garis kosong, tunjukkan Nilai -nilai ini sebagai persentase berdasarkan nilai dari X dalam penyebut: X = 'c' -> # baris kode X = 'cm' -> # baris kode + komentar X = 'cb' -> # baris kode + kosong X = 'cmb' -> # baris kode + komentar + kosong Misalnya, jika menggunakan metode 'C' dan kode Anda memiliki komentar dua kali lebih banyak dari baris kode, nilai di kolom komentar akan menjadi 200%. Kolom kode tetap menjadi hitungan baris. -CSV Menulis hasilnya sebagai nilai yang dipisahkan koma. -CSV-Delimiter = Gunakan karakter sebagai pembatas untuk koma file terpisah bukannya ,. Sakelar ini memaksa -CSV akan aktif. --File-ensoding = Tulis file output menggunakan encoding bukannya ASCII default ( = 'UTF-7'). Contoh: 'UTF-16', 'EUC-kr', 'ISO-8859-16'. Pengkodean yang dikenal bisa dicetak dengan Perl -Mencode -e 'print join (" n", encode-> encodings (": all")), " n"' --hide-rate tidak menunjukkan tingkat pemrosesan baris dan file di header output. Ini membuat output deterministik. --json Tulis hasilnya sebagai notasi objek JavaScript (JSON) output yang diformat. --MD Menulis hasilnya sebagai teks yang diformat penurunan harga. --out = Sinonim untuk --Port-file = . --Progress-rate = Tampilkan Pembaruan Kemajuan Setelah Setiap File diproses (default = 100). Atur ke 0 ke menekan output kemajuan (berguna saat mengarahkan ulang output ke stdout). --quiet menekan semua pesan informasi kecuali Laporan Akhir. --Report-File = Tulis hasilnya ke alih-alih stdout. --sql = Tulis hasil sebagai SQL Buat dan masukkan pernyataan yang dapat dibaca oleh program basis data seperti Sqlite. Jika adalah -, output dikirim ke stdout. -SQL-APPPEND Tambahkan pernyataan SQL Insert ke file yang ditentukan dengan --sql dan jangan menghasilkan pembuatan tabel pernyataan. Hanya berlaku dengan opsi -SQL. --sql-project = Gunakan sebagai pengidentifikasi proyek untuk lari saat ini. Hanya berlaku dengan opsi -SQL. --sql-style = Tulis pernyataan SQL dalam gaya yang diberikan sebagai gantinya dari format SQLite default. Gaya termasuk 'Oracle' dan 'Named_Columns'. --sum-one untuk laporan teks biasa, tunjukkan jumlah: garis output bahkan jika hanya satu file input yang diproses. --xml Tulis hasilnya di XML. --XSL = REFERENSI Sebagai XSL Stylesheet di dalam output XML. Jika adalah 1 (numerik), menulis stylesheet default, cloc.xsl (atau cloc-diff.xsl jika--diff juga diberikan). Sakelar ini memaksa --xml aktif. -YAML Tulis hasilnya di YAML.
prompt> cloc-show-lang ABAP (ABAP) ActionScript (as) ADA (ADA, ADB, ADS, PAD) ADSO/IDSM (ADSO) AGDA (AGDA, LAGDA) Cukup (cukup, dofile, startup) Ansprolog (LP) Semut (build.xml, build.xml) Tata Bahasa Antlr (G, G4) Kelas Apex (CLS) Pemicu puncak (pemicu) Apl (apl, apl, aplc, aplf, apli, apln, aplo, dyalog, dyapp, mipage) AppleScript (AppleScript) Arduino Sketch (INO) Arkts (ETS) Arturo (Seni) Asciidoc (ADOC, ASCIIDOC) ASP (ASA, Ashx, ASP, AXD) Asp.net (ASAX, ASCX, ASMX, ASPX, MASTER, SITEMAP, WEBINFO) Aspekj (AJ) Perakitan (A51, ASM, NASM, S, S) Astro (Astro) Asimptote (ASY) Autohotkey (ahk, ahkl) AWK (AUK, AWK, GAWK, MAWK, NAWK) Bazel (Build) BizTalk Orchestration (ODX) Biztalk Pipeline (BTP) Blade (blade, blade.php) Bourne Again Shell (Bash) Bourne Shell (SH) BrightScript (BRS) pembangun (xml.builder) C (C, Kucing, EC, IDC, PGC) C shell (csh, tcsh) C# (CS) C# Designer (Designer.cs) C ++ (C, C ++, C ++ M, CC, CCM, CPP, CPP, CPPM, CXX, CXXM, H ++, INL, IPP, IXX, PCC, TCC, TPP) C/C ++ header (H, H, HH, HPP, HXX) Kairo (Kairo) Skrip build kue (kue) Karbon (karbon) CCS (CCS) Kapel (CHPL) Circom (Circom) Bersihkan (DCL, ICL) Clojure (Boot, 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, Cocoa5Server, CPKG5) CoffeeScript (_coffee, CakeFile, CJSX, Coffee, Iced) ColdFusion (CFM, CFML) ColdFusion CFScript (CFC) Batasan Tata Bahasa (CG3, RLX) ContainerFile (ContainerFile) CoQ (V) Crystal (CR) CSON (CSON) CSS (CSS) CSV (CSV) Mentimun (fitur) Cuda (Cu, CUH) Cython (PXD, PXI, PYX) D (D) Dafny (DFY) Dal (DA) Dart (DART) Formulir Delphi (DFM) Denizenscript (DSC) Derw (derw) dhall (dhall) Diet (DT) Diff (Diff, Patch) Dita (Dita) DockerFile (DockerFile, DockerFile) Doors Extension Language (DXL) Batch DOS (kelelawar, kelelawar, btm, btm, cmd, cmd) Air liur (DRL) DTD (DTD) dtrace (D) ECPP (ECPP) Eex (EEX) EJS (EJS) Elixir (ex, exs) Elm (Elm) Tertanam Kristal (ECR) Erb (Erb, ERB) Erlang (app.src, emakefile, erl, hrl, rebar.config, rebar.config.lock, rebar.lock, xrl, yrl) Harapkan (exp) F# (FSI, FS, FS) F# Script (FSX) Adas (FNL) Bahasa negara yang terbatas (FSL, JSSM) Cangkang ikan (ikan) Flatbuffer (FBS) Fokus (FOCEXEC) Forth (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) Template Freemarker (FTL) Futhark (fut) FXML (FXML) GDScript (GD) Gencat NLS (MSG) Glade (Glade, UI) Kilau (sinar) Glimmer Javascript (GJS) Glimmer TypeScript (GTS) GLSL (comp, fp, frag, frg, fsh, fshader, geo, geom, glsl, glslv, gshader, tesc, tese, vert, vrx, vsh, vshader) Pergi (pergi, ʕ◔ϖ◔ʔ) Sumber Daya Godot (Tres) Adegan Godot (TSCN) Godot Shaders (Gdshader) Gradle (Gradle, Gradle.kts) Cawan (GSP) GraphQL (GQL, GraphQL, GraphQLs) Groovy (Gant, Groovy, GRT, GTPL, GVY, Jenkinsfile) Haml (Haml, Haml.Deface) Setang (setang, HBS) Harbour (HB) Kelinci (ha) Haskell (HS, HSC, LHS) Haxe (hx, hxsl) HCl (HCl, Nomad, TF, TFVARS) HLSL (CG, CGINC, FXH, HLSL, HLSLI, Shader) Holyc (HC) Hoon (Hoon) Html (htm, html, html.hl, xht) HTML EEX (HEEX) IDL (DLM, IDL, Pro) IDRIS (IDR) Igor Pro (IPF) IMBA (IMBA) INI (Buildozer.spec, EditorConfig, INI, LektorProject, Prefs) InstallShield (ISM) IPL (IPL) Jai (jai) Janet (Janet) Java (Java) Javascript (_js, tulang, CJS, ES6, Jake, Jakefile, JS, JSB, JSCAD, JSFL, JSM, JSS, MJS, NJS, PAC, SJS, SSJS, XSJS, XSJSLIB) Javaserver Face (JSF) JCL (JCL) Template Jinja (J2, Jinja, Jinja2) JSON (Arcconfig, AVSC, Composer.Lock, Geojson, Gltf, Har, Htmlhintrc, JSON, JSON-TMLanguage, JSONL, McMeta, McMod.Info, Tern-Config, Tern-Project, Tfstate, TfState.Backup, Tuln-Config, Tern-Project, TfState, TfState.Backup, Toponfig Webapp, WebManifest, YYP) JSON5 (JSON5) JSP (JSP, JSPF) JSX (JSX) Julia (JL) Juniper Junos (Junos) Jupyter Notebook (IPYNB) Kermit (KSC) Korn Shell (KSH) Kotlin (KT, KTM, KTS) Kvlang (KV) Lean (Hlean, Lean) Lem (Lem) Kurang (lebih sedikit) Lex (L, Lex) LFE (LFE) Linker Script (LD) cairan (cairan) Lisp (ASD, EL, LISP, LSP, CL, JL) Literate Idris (LIDR) Livelink Oscript (Oscript) LLVM IR (LL) Logos (x, xm) LogTalk (LGT, LogTalk) Lua (Lua, NSE, P8, PD_LUA, RBXS, WLUA) LUAU (LUAU) M4 (AC, M4) Make (Am, Gnumakefile, Gnumakefile, Makefile, Makefile, MK) Mako (Mako, Mao) Markdown (Contents.lr, Markdown, MD, MDown, MDWN, MDX, MKD, MKDN, MKDOWN, RONN, Buku Kerja) Mathematica (CDF, MA, Mathematica, MT, NBP, WL, WLT, M) Matlab (M) Maven (pom, pom.xml) Meson (meson.build) Logam (logam) Modelica (MO) MODULA3 (I3, IG, M3, MG) Mojo (mojo ,?) Mojom (Mojom) MSBUILD SCRIPT (BTPROJ, CSPROJ, MSBUILD, VCPROJ, WDPROJ, WIXPROJ) Gondok (anggota parlemen, m) Kumis (kumis) MXML (MXML) Nant Script (Build) Nastran DMAP (DMAP) Nemerle (n) Netlogo (NLOGO, NLS) Nikel (NCL) NIM (NIM, NIM.CFG, NIMBLE, NIMROD, NIMS) Nix (nix) Nunjucks (NJK) Objective-C (M) Objective-C ++ (mm) Ocaml (Eliom, Eliomi, Ml, Ml4, Mli, Mll, Mly) Odin (Odin) OpenCl (CL) OpenScad (SCAD) Oracle Forms (FMT) Oracle PL/SQL (BOD, FNC, PRC, SPC, TRG) Laporan Oracle (Rex) P4 (P4) Pascal (DPR, LPR, PAS, Pascal) Pascal/Pawn (P) Pascal/Puppet (PP) Bahasa Komando Patran (PCL, SES) Pawn (Pawn, PWN) Pasak (PEG) Peg.js (PEGJS) Peggy (Peggy) Perl (ACK, AL, CPANFILE, MAKEFILE.PL, PERL, PH, PLH, PLX, PM, PSGI, Rexfile, PL, P6) Hama (hama) PHP (AW, CTP, Phakefile, PHP, PHP3, PHP4, PHP5, PHP_CS, PHP_CS.DIST, PHP, PHPT, PHTML) PHP/Pascal/Fortran/Pawn (Inc) Babi Latin (babi) PL/I (PL1) PL/M (Lit, PLM) Plantuml (IUML, Plantuml, PU, PUML, WSD) File PO (PO) Kuda poni (kuda poni) PowerBuilder (PBT, SRA, SRF, SRM, SRS, SRU, SRW) PowerShell (PS1, PSD1, PSM1) Skema Prisma (Prisma) Pemrosesan (PDE) Proguard (Pro) Prolog (P, Prolog, Yap, PL, P6, Pro) Properti (properti) Buffer Protokol (Proto) PRQL (PRQL) Pug (Jade, Pug) PureScript (purs) 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 linguist (ts) Proyek QT (Pro) R (Expr-Dist, R, R, RD, RProfile, RSX) Racket (RKT, RKTD, RKTL, SCRBL) Raku (PM6, Raku, Rakumod) Raku/Prolog (P6, P6) RAML (RAML) Rapydscript (PYJ) Pisau cukur (cshtml, pisau cukur) ReasonMl (RE, REI) Reskrip (res, resi) RestructuredText (REST, REST.TXT, RST, RST.TXT) Rexx (pprx, rexx) Cincin (rform, rh, ring) RMD (RMD) Robotframework (robot) Ruby (appraisals, berksfile, brewfile, builder, buildfile, capfile, dangerfile, deliverfile, eye, fastfile, gemfile, gemfile.lock, gemspec, god, guardfile, irbrc, jarfile, jbuilder, mavenfile, mspec, podfile, podspec, pryrc, PuppetFile, Rabl, Rake, RB, RBuild, RBW, RBX, RU, Snapfile, Thor, Thorfile, Vagrantfile, Watchr) Ruby html (rhtml) Rust (RS, Rs.in) Saltstack (SLS) SAS (SAS) Sass (sass) Scala (Kojo, SBT, Scala) Skema (SC, SCH, SCM, SLD, SPS, SS, SLS) SCSS (SCSS) sed (sed) Keterampilan (IL) Skill ++ (ILS) Iris (es) Slim (Slim) Slint (Slint) Smalltalk (ST, CS) Smarty (Smarty, TPL) Snakemake (Aturan, SMK) Softbridge Basic (SBL, SBL) Soliditas (sol) Sparforte (SP) Specman E (E) Sql (cql, mysql, psql, sql, sql, tab, udf, viw) Data SQL (data.sql) Prosedur tersimpan SQL (SPC.SQL, SPOC.SQL, sproc.sql, udf.sql) Tupai (kacang) ML Standar (Fun, Sig, SML) Starlark (Bazel, BZL) Stata (ado, do, do, doh, ihlp, mata, matah, sthlp) Stylus (styl) Sugarss (SSS) Svelte (Svelte) SVG (SVG, SVG) Swift (Swift) Swig (I) TableGen (TD) TCL/TK (ITK, TCL, TK) Teal (Teal) TeamCenter bertemu (bertemu) TeamCenter MTH (MTH) Templ (Templ) Tex (Aux, BBX, Bib, BST, CBX, DTX, INS, LBX, LTX, MKII, MKIV, MKVI, Sty, Tex, CLS) Teks (teks, txt) Hemat (penghematan) Informasi File Proyek Titan (TPD) Lembar Gaya Titanium (TSS) TLA+ (TLA) TNSDL (CII, CIN, IN1, IN2, IN3, IN4, INF, Antarmuka, Rou, SDL, SDT, SPD, SSC, SST) Toml (Toml) TSPEG (JSPEG, TSPEG) Ttcn (ttcn, ttcn2, ttcn3, ttcnpp) Ranting (ranting) Naskah (mts, tsx, ts) Typst (typ) Umka (um) Unity-Prefab (Mat, Prefab) Vala (Vala) Vala Header (VAPI) VB untuk aplikasi (VBA, VBA) Bahasa Template Velocity (VM) Verilog-Systemverilog (SV, SVH, V) VHDL (VHD, VHD, VHDL, VHDL, VHF, VHI, VHO, VHS, VHT, VHW) VIM Script (vim) Visual Basic (BAS, BAS, CTL, DSR, FRM, FRX, FRX, VBHTML, VBHTML, VBP, VBW, CLS) Visual Basic .NET (VB, VB, VBProj) Visual Basic Script (VBS, VBS) Visual Fox Pro (SCA, SCA) Solusi Visual Studio (SLN) Komponen Visualforce (komponen) Halaman Visualforce (halaman) Komponen Vuejs (Vue) Vyper (VY) Deskripsi Layanan Web (WSDL) WebAssembly (WAST, WAT) WGSL (WGSL) File Pesan Windows (MC) Definisi Modul Windows (DEF) File Sumber Daya Windows (RC, RC2) Wix termasuk (wxi) WIX Source (WXS) Wix String Localization (WXL) WXML (WXML) WXSS (WXSS) X ++ (xpo) Xaml (xaml) xbase (prg, prw) Xbase Header (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, Package.config, PKGPROJ, Proj, Proj, Projo ps1xml, psc1, pt, rdf, resx, rss, scxml, settings.stylecop, sfproj, shproj, srdf, storyboard, sttheme, sublime-snippet, 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, xlf, xliff, xml, xml, xml.dist, xlf, xliff, xml, xml, xml.dist, xibis XUL, ZCML) Xquery (xq, xql, xqm, xquery, xqy) XSD (XSD, XSD) Xslt (xsl, xsl, xslt, xslt) Xtend (xtend) YACC (Y, YACC) YAML (klang-format, clang-ridy, gemrc, glide.lock, mir, baca, rviz, sublime-syntax, sintaks, yaml, yaml-tmlanguage, yml, yml.mysql) Yang (Yang) Zig (zig) zsh (zsh)
Daftar di atas dapat disesuaikan dengan membaca definisi bahasa dari file dengan opsi --read-lang-def
atau --force-lang-def
.
Ekstensi file ini memetakan ke berbagai bahasa:
cl
bisa lisp atau openclcls
bisa visual basic, kelas Tex atau apexcs
bisa C# atau SmallTalkd
bisa d atau dtracef
bisa menjadi fortran 77 atau ke depanfnc
bisa berupa Oracle PL atau SQLfor
file bisa menjadi fortran 77 atau ke depanfs
bisa berupa f# atau sebagainyainc
bisa php atau pascalitk
bisa TCL atau TKjl
bisa jadi lisp atau julialit
bisa pl atau mm
bisa jadi matlab, mathematica, objektif-c, gondok atau merkurip6
bisa menjadi Perl atau Prologpl
bisa berupa perl atau prologPL
bisa berupa perl atau prologpp
bisa berupa Pascal atau Puppetpro
bisa IDL, QT Project, Prolog atau Proguardts
bisa berupa naskah atau ahli bahasa QTui
bisa qt atau gladev
bisa berupa verilog-sistemverilog atau coqCLOC memiliki subrutin yang berupaya mengidentifikasi bahasa yang benar berdasarkan konten file untuk kasus -kasus khusus ini. Akurasi identifikasi bahasa adalah fungsi dari seberapa banyak kode yang berisi file; File .m hanya dengan satu atau dua baris misalnya, jarang memiliki informasi yang cukup untuk membedakan dengan benar antara MATLAB, merkuri, gondok, atau objektif-C.
Bahasa dengan tabrakan ekstensi file sulit untuk disesuaikan dengan --read-lang-def
atau --force-lang-def
karena mereka tidak memiliki mekanisme untuk mengidentifikasi bahasa dengan ekstensi umum. Dalam situasi ini seseorang harus memodifikasi kode sumber CLOC.
Metode operasi Cloc menyerupai Sloccount's: First, buat daftar file yang perlu dipertimbangkan. Selanjutnya, cobalah untuk menentukan apakah file yang ditemukan berisi kode sumber bahasa komputer yang dikenali. Akhirnya, untuk file yang diidentifikasi sebagai file sumber, panggil rutinitas khusus bahasa untuk menghitung jumlah baris sumber.
Deskripsi yang lebih rinci:
Jika file input adalah arsip (seperti file .tar.gz atau .zip), buat direktori sementara dan perluas arsip di sana menggunakan panggilan sistem ke utilitas dasar yang sesuai (tar, bzip2, unzip, dll) kemudian tambahkan Direktori sementara ini sebagai salah satu input. (Ini bekerja lebih andal di UNIX daripada di Windows.)
Gunakan File :: Temukan untuk secara rekursif menuruni direktori input dan buat daftar nama file kandidat. Abaikan file biner dan nol ukuran.
Pastikan file dalam daftar kandidat memiliki konten unik (pertama dengan membandingkan ukuran file, kemudian, untuk file berukuran sama, bandingkan hash MD5 dari konten file dengan Digest :: MD5). Untuk setiap set file identik, hapus semua kecuali salinan pertama, sebagaimana ditentukan oleh jenis leksikal, file identik dari set. File yang dihapus tidak termasuk dalam laporan. (Sakelar --skip-uniqueness
menonaktifkan tes keunikan dan memaksa semua salinan file yang akan dimasukkan dalam laporan.) Lihat juga- --ignored=
sakelar untuk melihat file mana yang diabaikan dan mengapa.
Pindai daftar file kandidat untuk ekstensi file yang diasosiasikan dengan CLOC dengan bahasa pemrograman (lihat opsi --show-lang
dan --show-ext
). File yang cocok diklasifikasikan sebagai kode sumber untuk bahasa itu. Setiap file tanpa ekstensi dibuka dan baris pertama dibaca untuk melihat apakah itu adalah skrip shell UNIX (apa pun yang dimulai dengan #!). Jika itu adalah skrip shell, file diklasifikasikan oleh bahasa skrip (jika bahasa diakui). Jika file tidak memiliki ekstensi yang dikenali atau bukan bahasa skrip yang diakui, file diabaikan.
Semua file yang tersisa dalam daftar kandidat sekarang harus menjadi file sumber untuk bahasa pemrograman yang diketahui. Untuk masing -masing file ini:
Opsi sedikit memodifikasi algoritma. Opsi --read-lang-def
misalnya memungkinkan pengguna membaca definisi filter komentar, ekstensi file yang diketahui, dan bahasa skrip yang diketahui dari file. Kode untuk opsi ini diproses antara langkah 2 dan 3.
Bagaimana Anda bisa mengetahui apakah CLOC mengidentifikasi komentar dengan benar? Salah satu cara untuk meyakinkan diri sendiri CLOC adalah melakukan hal yang benar adalah dengan menggunakan opsi --strip-comments
untuk menghapus komentar dan garis kosong dari file, kemudian bandingkan file yang dilucuti dengan yang asli.
Mari kita coba ini dengan amalgamasi SQLite, file C yang berisi semua kode yang diperlukan untuk membangun perpustakaan SQLite bersama dengan file header:
prompt> tar zxf sqlite-amalgamation-3.5.6.tar.gz prompt> cd sqlite-3.5.6/ prompt> cloc--strip-comments = nc sqlite.c 1 file teks. 1 file unik. Menulis sqlite3.c.nc 0 file diabaikan. http://cloc.sourceForge.net v 1.03 t = 1.0 s (1.0 file/s, 82895.0 baris/s) --------------------------------------------------- ----------------------------- File Bahasa Blank COMMENT SCALE Kode Gen ke -3. equiv --------------------------------------------------- ----------------------------- C 1 5167 26827 50901 x 0,77 = 39193.77 --------------------------------------------------- -----------------------------
Argumen ekstensi yang diberikan pada-comments-comment adalah sewenang-wenang; Di sini NC digunakan sebagai singkatan untuk "tidak ada komentar".
CLOC menghapus lebih dari 31.000 baris dari file:
prompt> wc -l sqlite3.c sqlite3.c.nc 82895 sqlite3.c 50901 sqlite3.c.nc Total 133796 prompt> echo "82895 - 50901" | SM 31994
Kami sekarang dapat membandingkan file asli, sqlite3.c dan satu yang dilucuti komentar, sqlite3.c.nc dengan alat -alat seperti diff atau vimdiff dan lihat apa yang sebenarnya dipertimbangkan oleh CLOC komentar dan baris kosong. Bukti ketat bahwa file stripped-down berisi kode C yang sama dengan yang asli adalah untuk mengkompilasi file-file ini dan membandingkan checksum dari file objek yang dihasilkan.
Pertama, file sumber asli:
prompt> gcc -c sqlite3.c prompt> md5sum sqlite3.o CCE5F1A2EA27C7E44B2E1047E2588B49 SQLITE3.O
Selanjutnya, versi tanpa komentar:
prompt> mv sqlite3.c.nc sqlite3.c prompt> gcc -c sqlite3.c prompt> md5sum sqlite3.o CCE5F1A2EA27C7E44B2E1047E2588B49 SQLITE3.O
CLOC menghapus lebih dari 31.000 baris komentar dan kosong tetapi tidak memodifikasi kode sumber dengan cara yang signifikan karena file objek yang dihasilkan cocok dengan aslinya.
Versi CLOC sebelum v1.07 membutuhkan --extract-with=CMD
untuk memberi tahu CLOC cara memperluas file arsip. Dimulai dengan v1.07 ini adalah ekstraksi dicoba secara otomatis. Saat ini metode ekstraksi otomatis bekerja dengan cukup baik pada OS tipe UNIX untuk jenis file berikut: .tar.gz
, .tar.bz2
, .tar.xz
, .tgz
, .zip
, .ear
, .deb
. Beberapa ekstensi ini berfungsi di Windows jika seseorang telah menginstal Winzip di lokasi default ( C:Program FilesWinZipWinZip32.exe
). Selain itu, dengan versi Winzip yang lebih baru, [http://www.winzip.com/downcl.htm media(command Line Add-on) diperlukan untuk operasi yang benar; Dalam hal ini orang akan memohon cloc dengan sesuatu seperti
--Extract -with = "" C: Program Files winzip wzunzip "-e -o> file <."
Ref. http://sourceforge.net/projects/cloc/forums/forum/600963/topic/4021070?message=8938196
Dalam situasi di mana ekstraksi otomatis gagal, seseorang dapat mencoba --extract-with=CMD
untuk menghitung baris kode dalam file tar, file zip, atau arsip terkompresi lainnya yang memiliki alat ekstraksi. CLOC mengambil perintah ekstraksi yang disediakan pengguna dan memperluas arsip ke direktori sementara (dibuat dengan file :: temp), menghitung baris kode di direktori sementara, kemudian menghapus direktori itu. Meskipun tidak terlalu membantu ketika berhadapan dengan arsip terkompresi tunggal (setelah semua, jika Anda akan mengetik perintah ekstraksi mengapa tidak hanya memperluas arsip secara manual?) Opsi ini berguna untuk bekerja dengan beberapa arsip sekaligus.
Misalnya, katakanlah Anda memiliki tarball sumber berikut pada mesin UNIX
perl-5.8.5.tar.gz
Python-2.4.2.tar.gz
dan Anda ingin menghitung semua kode di dalamnya. Perintahnya akan
cloc --extract -with = 'gzip -dc> file <| TAR XF-'Perl-5.8.5.tar.gz Python-2.4.2.tar.gz
Jika mesin unix itu memiliki tar GNU (yang dapat melepaskan dan mengekstrak dalam satu langkah) perintah dapat disingkat menjadi
cloc --Extract-with = 'Tar ZXF> File <' Perl-5.8.5.tar.gz Python-2.4.2.tar.gz
Di komputer Windows dengan WinZip diinstal di c:Program FilesWinZip
Perintah akan terlihat seperti
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
File Java .ear
adalah file zip yang berisi file zip tambahan. CLOC dapat menangani arsip terkompresi bersarang tanpa kesulitan-memberikan semua file tersebut dikompresi dan diarsipkan dengan cara yang sama. Contoh menghitung file Java .ear
di UNIX dan Windows:
Unix> cloc --extract -with = "unzip -d.> File <" Project.ear Dos> cloc.exe --Extract -with = "" C: Program Files winzip winzip32.exe "-e -o> file <." Project.ear
Sakelar --diff
memungkinkan seseorang untuk mengukur perubahan relatif dalam kode sumber dan komentar antara dua versi file, direktori, atau arsip. Perbedaan mengungkapkan lebih dari jumlah kode absolut dari dua versi file. Misalnya, katakanlah file sumber memiliki 100 baris dan pengembangnya memberikan versi yang lebih baru dengan 102 baris. Apakah pengembang menambahkan dua baris komentar, atau menghapus tujuh belas baris sumber dan menambahkan empat belas baris sumber dan lima baris komentar, atau apakah pengembang melakukan penulisan ulang lengkap, membuang semua 100 baris asli dan menambahkan 102 baris dari semua sumber baru? Opsi diff memberi tahu berapa banyak baris sumber yang ditambahkan, dihapus, dimodifikasi atau tetap sama, dan berapa banyak baris komentar yang ditambahkan, dihapus, dimodifikasi atau tetap sama.
Perbedaan garis kosong ditangani jauh lebih kasar karena ini dilucuti oleh CLOC sejak awal. Kecuali pasangan file identik, CLOC hanya akan melaporkan perbedaan dalam jumlah absolut dari garis kosong. Dengan kata lain, orang dapat berharap hanya melihat entri untuk 'ditambahkan' jika file kedua memiliki lebih banyak kosong daripada yang pertama, dan 'dihapus' jika situasinya terbalik. Entri untuk 'yang sama' hanya akan menjadi nol ketika kedua file itu identik.
Selain pasangan file, seseorang dapat memberikan pasangan direktori CLOC, atau pasangan arsip file, atau arsip file dan direktori. CLOC akan mencoba menyelaraskan pasangan file di dalam direktori atau arsip dan membandingkan perbedaan untuk setiap pasangan. Misalnya, untuk melihat apa yang berubah antara GCC 4.4.0 dan 4.5.0 yang bisa dilakukan orang
cloc-diff gcc -4.4.0.tar.bz2 gcc -4.5.0.tar.bz2
Bersiaplah untuk menunggu beberapa saat untuk hasilnya; Opsi --diff
berjalan jauh lebih lambat daripada jumlah kode absolut.
Untuk melihat bagaimana CLOC menyelaraskan file antara dua arsip, gunakan opsi --diff-alignment
cloc--diff-alignment = align.txt gcc -4.4.0.tar.bz2 gcc -4.5.0.tar.bz2
Untuk menghasilkan file align.txt
yang menunjukkan pasangan file serta file yang ditambahkan dan dihapus. Simbol ==
dan !=
Sebelum setiap pasangan file menunjukkan apakah file identik ( ==
) atau jika mereka memiliki konten yang berbeda ( !=
).
Berikut output sampel yang menunjukkan perbedaan antara rilis Python 2.6.6 dan 2.7:
prompt> cloc-diff Python-2.7.9.tgz python-2.7.10.tar.xz 4315 file teks. 4313 file teks 2173 file diabaikan. 4 Kesalahan: Kesalahan diff, melebihi batas waktu: /tmp/8toganb9y1/python-2.7.9/mac/modules/qt/_qtmodule.c Kesalahan diff, melebihi batas waktu: /tmp/m6ldvsgaoq/python-2.7.10/mac/modules/qt/_qtmodule.c Kesalahan Diff (komentar yang dikutip?): /Tmp/8toganb9y1/python-2.7.9/mac/modules/qd/qdsupport.py Kesalahan Diff (komentar yang dikutip?): /Tmp/m6ldvsgaoq/python-2.7.10/mac/modules/qd/qdsupport.py https://github.com/aldanial/cloc v 1.65 t = 298.59 s (0,0 file/s, 0,0 baris/s) --------------------------------------------------- --------------------------- File Bahasa Kode Komentar Kosong --------------------------------------------------- --------------------------- Dasar Visual Sama 2 0 1 12 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 membuat Sama 11 0 340 2952 dimodifikasi 1 0 0 1 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 berbeda Sama 1 0 87 105 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 CSS Sama 0 0 19 327 dimodifikasi 1 0 0 1 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 Objektif-C Sama 7 0 61 635 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 Nant Script Sama 2 0 0 30 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 XML Sama 3 0 2 72 dimodifikasi 1 0 0 1 Ditambahkan 0 0 0 1 dihapus 0 1 0 0 File Sumber Daya Windows Sama 3 0 56 206 dimodifikasi 1 0 0 1 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 Mengharapkan Sama 6 0 161 565 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 HTML Sama 14 0 11 2344 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 skrip vim Sama 1 0 7 106 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 C++ Sama 2 0 18 128 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 Definisi Modul Windows Sama 7 0 187 2080 dimodifikasi 2 0 0 0 Ditambahkan 0 0 0 1 dihapus 0 1 0 2 Prolog Sama 1 0 0 24 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 skrip java Sama 3 0 49 229 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 Perakitan Sama 51 0 6794 12298 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 Bourne Shell Sama 41 0 7698 45024 dimodifikasi 1 0 0 3 Ditambahkan 0 13 2 64 dihapus 0 0 0 0 Batch dos Sama 29 0 107 494 dimodifikasi 1 0 0 9 Ditambahkan 0 1 0 3 dihapus 0 0 0 0 Skrip msBuild Sama 77 0 3 38910 dimodifikasi 0 0 0 0 Ditambahkan 0 0 0 0 dihapus 0 0 0 0 ular piton Sama 1947 0 109012 430335 dimodifikasi 192 0 94 950 Ditambahkan 2 323 283 2532 dilepas 2 55 58 646 m4 Sama 18 0 191 15352 dimodifikasi 1 0 0 2 Ditambahkan 1 31 0 205 dihapus 0 0 0 0 C Sama 505 0 37439 347837 dimodifikasi 45 0 13 218 Ditambahkan 0 90 33 795 dihapus 0 9 2 148 Header C/C ++ Sama 255 0 10361 66635 dimodifikasi 5 0 5 7 Ditambahkan 0 1 3 300 dihapus 0 0 0 0 --------------------------------------------------- ------------------- JUMLAH: SAMA 2986 0 172604 966700 dimodifikasi 251 0 112 1193 Ditambahkan 3 459 321 3901 dilepas 2 66 60 796 --------------------------------------------------- -------------------
Sepasang kesalahan terjadi. Pasangan pertama disebabkan oleh waktu keluar ketika komputasi diffs dari file Python-X/Mac/Modules/qt/_Qtmodule.c
di setiap versi python. File ini memiliki> 26.000 baris kode C dan membutuhkan lebih dari 10 detik-durasi maksimum default untuk membedakan satu file-pada komputer lambat saya. (Catatan: Ini mengacu pada melakukan perbedaan dengan fungsi sdiff()
dalam Algorithm::Diff
, bukan utilitas diff
baris perintah.) Kesalahan ini dapat diatasi dengan menaikkan waktu untuk, katakanlah, 20 detik dengan --diff-timeout 20
.
Kesalahan kedua lebih bermasalah. File Python-X/Mac/Modules/qd/qdsupport.py
termasuk python docString (teks antara pasangan kutipan triple) yang berisi komentar C. CLOC memperlakukan Docstrings sebagai komentar dan menanganinya dengan terlebih dahulu mengubahnya menjadi komentar C, kemudian menggunakan komentar C menghapus ekspresi reguler. Namun, komentar C bersarang menghasilkan hasil yang salah.
CLOC dapat menulis definisi komentar bahasanya ke file atau dapat membaca definisi komentar dari file, mengesahkan definisi bawaan. Ini bisa berguna ketika Anda ingin menggunakan CLOC untuk menghitung garis bahasa yang belum termasuk, untuk mengubah asosiasi ekstensi file ke bahasa, atau untuk memodifikasi cara bahasa yang ada dihitung.
Cara termudah untuk membuat file definisi bahasa khusus adalah dengan membuat CLOC menulis definisi ke file, kemudian memodifikasi file itu:
Unix> cloc --write-lang--def = my_definitions.txt
Membuat file my_definitions.txt
yang dapat dimodifikasi kemudian dibaca kembali dengan opsi --read-lang-def
atau --force-lang-def
. Perbedaan antara opsi adalah sebelumnya definisi bahasa gabungan dari file yang diberikan dengan definisi internal CLOC dengan CLOC diutamakan jika ada tumpang tindih. Opsi --force-lang-def
, di sisi lain, menggantikan definisi CLOC sepenuhnya. Opsi ini memiliki kelemahan dalam mencegah CLOC dari menghitung bahasa yang ekstensinya memetakan ke berbagai bahasa karena bahasa -bahasa ini memerlukan logika tambahan yang tidak mudah diungkapkan dalam file definisi.
Unix> cloc --read-lang--def = my_definitions.txt file1 file2 dir1 ...
Setiap entri bahasa memiliki empat bagian:
Filter mendefinisikan metode untuk menghapus teks komentar dari file sumber. Misalnya entri untuk C ++ terlihat seperti ini
C++ filter call_regexp_common c ++ filter lepas_inline //.*$ ekstensi c Ekstensi C ++ Ekstensi CC Ekstensi CPP Ekstensi CXX Ekstensi PCC 3RD_GEN_SCALE 1.51 end_of_line_continuation \ $
C ++ memiliki dua filter: Pertama, hapus jalur pencocokan regexp :: C ++ COMMON COMMON REGEX. Filter kedua menggunakan RAIPE_INLINE saat ini tidak digunakan. Niatnya adalah untuk mengidentifikasi baris dengan kode dan komentar dan dapat diimplementasikan di masa depan.
Diskusi yang lebih lengkap tentang opsi filter yang berbeda dapat muncul di sini di masa depan. Output opsi --write-lang-def
harus memberikan contoh yang cukup untuk individu yang termotivasi untuk memodifikasi atau memperluas definisi bahasa CLOC.
Jika Anda mengelola beberapa proyek perangkat lunak, Anda mungkin tertarik untuk melihat jumlah garis berdasarkan proyek, bukan hanya berdasarkan bahasa. Katakanlah Anda mengelola tiga proyek perangkat lunak yang disebut MariaDB, PostgreSQL, dan SQLite. Tim yang bertanggung jawab untuk masing -masing proyek ini menjalankan CLOC pada kode sumber mereka dan memberi Anda output. Misalnya, tim Mariadb melakukannya
cloc--out mariadb-10.1.txt mariadb-server-10.1.zip
dan memberi Anda file mariadb-10.1.txt
. The contents of the three files you get are
Unix> cat mariadb-10.1.txt https://github.com/AlDanial/cloc v 1.65 T=45.36 s (110.5 files/s, 66411.4 lines/s) --------------------------------------------------- --------------------------------- Language files blank comment code --------------------------------------------------- --------------------------------- C++ 1613 225338 290077 983026 C 853 62442 73017 715018 C/C++ Header 1327 48300 114577 209394 Bourne Shell 256 10224 10810 61943 Perl 147 10342 8305 35562 Pascal 107 4907 5237 32541 HTML 56 195 6 16489 Javascript 5 3309 3019 15540 m4 30 1599 359 14215 CMake 190 1919 4097 12206 XML 35 648 56 5210 Ruby 59 619 184 4998 Puppet 10 0 1 3848 make 134 724 360 3631 SQL 23 306 377 3405 Python 34 371 122 2545 Bourne Again Shell 27 299 380 1604 Windows Module Definition 37 27 13 1211 lex 4 394 166 991 yacc 2 152 64 810 DOS Batch 19 89 82 700 Prolog 1 9 40 448 RobotFramework 1 0 0 441 CSS 2 33 155 393 JSON 5 0 0 359 dtrace 9 59 179 306 Windows Resource File 10 61 89 250 Assembly 2 70 284 237 WiX source 1 18 10 155 Visual Basic 6 0 0 88 YAML 2 4 4 65 PHP 1 11 2 24 SKILL 1 8 15 16 sed 2 0 0 16 Windows Message File 1 2 8 6 diff 1 1 4 4 D 1 4 11 4 --------------------------------------------------- --------------------------------- SUM: 5014 372484 512110 2127699 --------------------------------------------------- --------------------------------- Unix> cat sqlite-3081101.txt https://github.com/AlDanial/cloc v 1.65 T=1.22 s (3.3 files/s, 143783.6 lines/s) --------------------------------------------------- ----------------------------- Language files blank comment code --------------------------------------------------- ----------------------------- C 2 11059 53924 101454 C/C++ Header 2 211 6630 1546 --------------------------------------------------- ----------------------------- SUM: 4 11270 60554 103000 --------------------------------------------------- ----------------------------- Unix> cat postgresql-9.4.4.txt https://github.com/AlDanial/cloc v 1.65 T=22.46 s (172.0 files/s, 96721.6 lines/s) --------------------------------------------------- --------------------------------- Language files blank comment code --------------------------------------------------- --------------------------------- HTML 1254 3725 0 785991 C 1139 139289 244045 736519 C/C++ Header 667 12277 32488 57014 SQL 410 13400 8745 51926 yacc 8 3163 2669 28491 Bourne Shell 41 2647 2440 17170 Perl 81 1702 1308 9456 lex 9 792 1631 4285 make 205 1525 1554 4114 m4 12 218 25 1642 Windows Module Definition 13 4 17 1152 XSLT 5 76 55 294 DOS Batch 7 29 30 92 CSS 1 20 7 69 Assembly 3 17 38 69 D 1 14 14 66 Windows Resource File 3 4 0 62 Lisp 1 1 1 16 sed 1 1 7 15 Python 1 5 0 13 Bourne Again Shell 1 8 6 10 Windows Message File 1 0 0 5 --------------------------------------------------- --------------------------------- SUM: 3864 178917 295080 1698471 --------------------------------------------------- ---------------------------------
While these three files are interesting, you also want to see the combined counts from all projects. That can be done with cloc's --sum_reports
option:
Unix> cloc --sum-reports --out=databases mariadb-10.1.txt sqlite-3081101.txt postgresql-9.4.4.txt Wrote databases.lang Wrote databases.file
The report combination produces two output files, one for sums by programming language ( databases.lang
) and one by project ( databases.file
). Their contents are
Unix> cat databases.lang https://github.com/AlDanial/cloc v 1.65 --------------------------------------------------- ------------------------------ Language files blank comment code --------------------------------------------------- ------------------------------ C 1994 212790 370986 1552991 C++ 1613 225338 290077 983026 HTML 1310 3920 6 802480 C/C++ Header 1996 60788 153695 267954 Bourne Shell 297 12871 13250 79113 SQL 433 13706 9122 55331 Perl 228 12044 9613 45018 Pascal 107 4907 5237 32541 yacc 10 3315 2733 29301 m4 42 1817 384 15857 Javascript 5 3309 3019 15540 CMake 190 1919 4097 12206 make 339 2249 1914 7745 lex 13 1186 1797 5276 XML 35 648 56 5210 Ruby 59 619 184 4998 Puppet 10 0 1 3848 Python 35 376 122 2558 Windows Module Definition 50 31 30 2363 Bourne Again Shell 28 307 386 1614 DOS Batch 26 118 112 792 CSS 3 53 162 462 Prolog 1 9 40 448 RobotFramework 1 0 0 441 JSON 5 0 0 359 Windows Resource File 13 65 89 312 Assembly 5 87 322 306 dtrace 9 59 179 306 XSLT 5 76 55 294 WiX source 1 18 10 155 Visual Basic 6 0 0 88 D 2 18 25 70 YAML 2 4 4 65 sed 3 1 7 31 PHP 1 11 2 24 SKILL 1 8 15 16 Lisp 1 1 1 16 Windows Message File 2 2 8 11 diff 1 1 4 4 --------------------------------------------------- ------------------------------ SUM: 8882 562671 867744 3929170 --------------------------------------------------- ------------------------------ Unix> cat databases.file --------------------------------------------------- -------------------------------- File files blank comment code --------------------------------------------------- -------------------------------- mariadb-10.1.txt 5014 372484 512110 2127699 postgresql-9.4.4.txt 3864 178917 295080 1698471 sqlite-3081101.txt 4 11270 60554 103000 --------------------------------------------------- -------------------------------- SUM: 8882 562671 867744 3929170 --------------------------------------------------- --------------------------------
Report files themselves can be summed together. Say you also manage development of Perl and Python and you want to keep track of those line counts separately from your database projects. First create reports for Perl and Python separately:
cloc --out perl-5.22.0.txt perl-5.22.0.tar.gz cloc --out python-2.7.10.txt Python-2.7.10.tar.xz
then sum these together with
Unix> cloc --sum-reports --out script_lang perl-5.22.0.txt python-2.7.10.txt Wrote script_lang.lang Wrote script_lang.file Unix> cat script_lang.lang https://github.com/AlDanial/cloc v 1.65 --------------------------------------------------- ----------------------------- Language files blank comment code --------------------------------------------------- ----------------------------- Perl 2892 136396 184362 536445 C 680 75566 71211 531203 Python 2141 89642 109524 434015 C/C++ Header 408 16433 26938 214800 Bourne Shell 154 11088 14496 87759 MSBuild script 77 0 3 38910 m4 20 1604 191 15559 Assembly 51 3775 6794 12298 Pascal 8 458 1603 8592 make 16 897 828 4939 XML 37 198 2 2484 HTML 14 393 11 2344 C++ 12 338 295 2161 Windows Module Definition 9 171 187 2081 YAML 49 20 15 2078 Prolog 12 438 2 1146 JSON 14 1 0 1037 yacc 1 85 76 998 DOS Batch 44 199 148 895 Objective-C 7 98 61 635 Expect 6 104 161 565 Windows Message File 1 102 11 489 CSS 1 98 19 328 Windows Resource File 7 55 56 292 Javascript 3 31 49 229 vim script 1 36 7 106 diff 1 17 87 105 NAnt script 2 1 0 30 IDL 1 0 0 24 Visual Basic 2 1 1 12 D 1 5 7 8 Lisp 2 0 3 4 --------------------------------------------------- ----------------------------- SUM: 6674 338250 417148 1902571 --------------------------------------------------- ----------------------------- Unix> cat script_lang.file --------------------------------------------------- ----------------------------- File files blank comment code --------------------------------------------------- ----------------------------- python-2.7.10.txt 3240 161276 173214 998697 perl-5.22.0.txt 3434 176974 243934 903874 --------------------------------------------------- ----------------------------- SUM: 6674 338250 417148 1902571 --------------------------------------------------- -----------------------------
Finally, combine the combination files:
Unix> cloc --sum-reports --report_file=everything databases.lang script_lang.lang Wrote everything.lang Wrote everything.file Unix> cat everything.lang https://github.com/AlDanial/cloc v 1.65 --------------------------------------------------- ------------------------------- Language files blank comment code --------------------------------------------------- ------------------------------- C 2674 288356 442197 2084194 C++ 1625 225676 290372 985187 HTML 1324 4313 17 804824 Perl 3120 148440 193975 581463 C/C++ Header 2404 77221 180633 482754 Python 2176 90018 109646 436573 Bourne Shell 451 23959 27746 166872 SQL 433 13706 9122 55331 Pascal 115 5365 6840 41133 MSBuild script 77 0 3 38910 m4 62 3421 575 31416 yacc 11 3400 2809 30299 Javascript 8 3340 3068 15769 make 355 3146 2742 12684 Assembly 56 3862 7116 12604 CMake 190 1919 4097 12206 XML 72 846 58 7694 lex 13 1186 1797 5276 Ruby 59 619 184 4998 Windows Module Definition 59 202 217 4444 Puppet 10 0 1 3848 YAML 51 24 19 2143 DOS Batch 70 317 260 1687 Bourne Again Shell 28 307 386 1614 Prolog 13 447 42 1594 JSON 19 1 0 1396 CSS 4 151 181 790 Objective-C 7 98 61 635 Windows Resource File 20 120 145 604 Expect 6 104 161 565 Windows Message File 3 104 19 500 RobotFramework 1 0 0 441 dtrace 9 59 179 306 XSLT 5 76 55 294 WiX source 1 18 10 155 diff 2 18 91 109 vim script 1 36 7 106 Visual Basic 8 1 1 100 D 3 23 32 78 sed 3 1 7 31 NAnt script 2 1 0 30 IDL 1 0 0 24 PHP 1 11 2 24 Lisp 3 1 4 20 SKILL 1 8 15 16 --------------------------------------------------- ------------------------------- SUM: 15556 900921 1284892 5831741 --------------------------------------------------- ------------------------------- Unix> cat everything.file --------------------------------------------------- ----------------------------- File files blank comment code --------------------------------------------------- ----------------------------- databases.lang 8882 562671 867744 3929170 script_lang.lang 6674 338250 417148 1902571 --------------------------------------------------- ----------------------------- SUM: 15556 900921 1284892 5831741 --------------------------------------------------- -----------------------------
One limitation of the --sum-reports
feature is that the individual counts must be saved in the plain text format. Counts saved as XML, JSON, YAML, or SQL will produce errors if used in a summation.
Cloc can write results in the form of SQL table create and insert statements for use with relational database programs such as SQLite, MySQL, PostgreSQL, Oracle, or Microsoft SQL. Once the code count information is in a database, the information can be interrogated and displayed in interesting ways.
A database created from cloc SQL output has two tables, metadata and t :
Table metadata :
Bidang | Jenis |
---|---|
pengenal | integer primary key |
stempel waktu | teks |
proyek | teks |
elapsed_s | teks |
Table t :
Bidang | Jenis |
---|---|
proyek | teks |
bahasa | teks |
mengajukan | teks |
nBlank | bilangan bulat |
nComment | bilangan bulat |
nCode | bilangan bulat |
nScaled | nyata |
foreign key (id) | references metadata (id) |
The metadata table contains information about when the cloc run was made. Run time is stored two ways: as Unix epoch seconds in id
and as an ISO 8601 formatted text string in the local time zone (for example 2024-03-01 14:19:41
) in timestamp
. The --sql-append
switch allows one to combine many runs in a single database; each run adds a row to the metadata table. The code count information resides in table t . The id
key makes it easy to associate a run's code count with its metadata.
Let's repeat the code count examples of Perl, Python, SQLite, MySQL and PostgreSQL tarballs shown in the Combine Reports example above, this time using the SQL output options and the SQLite database engine.
The --sql
switch tells cloc to generate output in the form of SQL table create
and insert
commands. The switch takes an argument of a file name to write these SQL statements into, or, if the argument is 1 (numeric one), streams output to STDOUT. Since the SQLite command line program, sqlite3
, can read commands from STDIN, we can dispense with storing SQL statements to a file and use --sql 1
to pipe data directly into the SQLite executable:
cloc --sql 1 --sql-project mariadb mariadb-server-10.1.zip | sqlite3 code.db
The --sql-project mariadb
part is optional; there's no need to specify a project name when working with just one code base. However, since we'll be adding code counts from four other tarballs, we'll only be able to identify data by input source if we supply a project name for each run.
Now that we have a database we will need to pass in the --sql-append
switch to tell cloc not to wipe out this database but instead add more data:
cloc --sql 1 --sql-project postgresql --sql-append postgresql-9.4.4.tar.bz2 | sqlite3 code.db cloc --sql 1 --sql-project sqlite --sql-append sqlite-amalgamation-3081101.zip | sqlite3 code.db cloc --sql 1 --sql-project python --sql-append Python-2.7.10.tar.xz | sqlite3 code.db cloc --sql 1 --sql-project perl --sql-append perl-5.22.0.tar.gz | sqlite3 code.db
Now the fun begins--we have a database, code.db
, with lots of information about the five projects and can query it for all manner of interesting facts.
Which is the longest file over all projects?
prompt> sqlite3 code.db 'select project,file,nBlank+nComment+nCode as nL from t where nL = (select max(nBlank+nComment+nCode) from t)' sqlite|sqlite-amalgamation-3081101/sqlite3.c|161623
sqlite3
's default output format leaves a bit to be desired. We can add an option to the program's rc file, ~/.sqliterc
, to show column headers:
.header on
One might be tempted to also include
.mode column
in ~/.sqliterc
but this causes problems when the output has more than one row since the widths of entries in the first row govern the maximum width for all subsequent rows. Often this leads to truncated output--not at all desirable. One option is to write a custom SQLite output formatter such as sqlite_formatter
, included with cloc.
To use it, simply pass sqlite3
's STDOUT into sqlite_formatter
via a pipe:
prompt> sqlite3 code.db 'select project,file,nBlank+nComment+nCode as nL from t where nL = (select max(nBlank+nComment+nCode) from t)' | ./sqlite_formatter -- Loading resources from ~/.sqliterc Project File nL _______ _____________________________________ ______ sqlite sqlite-amalgamation-3081101/sqlite3.c 161623
If the "Project File" line doesn't appear, add .header on
to your ~/.sqliterc
file as explained above.
What is the longest file over all projects?
prompt> sqlite3 code.db 'select project,file,nBlank+nComment+nCode as nL from t where nL = (select max(nBlank+nComment+nCode) from t)' | sqlite_formatter Project File nL _______ _____________________________________ ______ sqlite sqlite-amalgamation-3081101/sqlite3.c 161623
What is the longest file in each project?
prompt> sqlite3 code.db 'select project,file,max(nBlank+nComment+nCode) as nL from t group by project order by nL;' | sqlite_formatter Project File nL __________ ________________________________________________________________ ______ python Python-2.7.10/Mac/Modules/qt/_Qtmodule.c 28091 postgresql postgresql-9.4.4/src/interfaces/ecpg/preproc/preproc.c 54623 mariadb server-10.1/storage/mroonga/vendor/groonga/lib/nfkc.c 80246 perl perl-5.22.0/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm 100747 sqlite sqlite-amalgamation-3081101/sqlite3.c 161623
Which files in each project have the most code lines?
prompt> sqlite3 code.db 'select project,file,max(nCode) as nL from t group by project order by nL desc;' | sqlite_formatter Project File nL __________ ________________________________________________________________ ______ perl perl-5.22.0/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm 100735 sqlite sqlite-amalgamation-3081101/sqlite3.c 97469 mariadb server-10.1/storage/mroonga/vendor/groonga/lib/nfkc.c 80221 postgresql postgresql-9.4.4/src/interfaces/ecpg/preproc/preproc.c 45297 python Python-2.7.10/Mac/Modules/qt/_Qtmodule.c 26705
Which C source files with more than 300 lines have a comment ratio below 1%?
prompt> sqlite3 code.db 'select project, file, nCode, nComment, (100.0*nComment)/(nComment+nCode) as comment_ratio from t where language="C" and nCode > 300 and comment_ratio < 1 order by comment_ratio;' | sqlite_formatter Project File nCode nComment comment_ratio __________ _______________________________________________________________________________________________ _____ ________ __________________ mariadb server-10.1/storage/mroonga/vendor/groonga/lib/nfkc.c 80221 14 0.0174487443135789 python Python-2.7.10/Python/graminit.c 2175 1 0.0459558823529412 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_turkish.c 2095 1 0.0477099236641221 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_french.c 1211 1 0.0825082508250825 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_french.c 1201 1 0.0831946755407654 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_hungarian.c 1182 1 0.084530853761623 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_hungarian.c 1178 1 0.0848176420695505 mariadb server-10.1/strings/ctype-eucjpms.c 67466 60 0.0888546633889169 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_english.c 1072 1 0.0931966449207828 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_english.c 1064 1 0.0938967136150235 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_spanish.c 1053 1 0.094876660341556 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_spanish.c 1049 1 0.0952380952380952 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_italian.c 1031 1 0.0968992248062016 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_italian.c 1023 1 0.09765625 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_portuguese.c 981 1 0.10183299389002 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_portuguese.c 975 1 0.102459016393443 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_romanian.c 967 1 0.103305785123967 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_2_romanian.c 961 1 0.103950103950104 mariadb server-10.1/strings/ctype-ujis.c 67177 79 0.117461639110265 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_finnish.c 720 1 0.13869625520111 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_porter.c 717 1 0.139275766016713 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_finnish.c 714 1 0.13986013986014 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_porter.c 711 1 0.140449438202247 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_KOI8_R_russian.c 660 1 0.151285930408472 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_russian.c 654 1 0.152671755725191 python Python-2.7.10/Mac/Modules/qt/_Qtmodule.c 26705 42 0.157026956294164 python Python-2.7.10/Mac/Modules/icn/_Icnmodule.c 1521 3 0.196850393700787 mariadb server-10.1/strings/ctype-extra.c 8282 18 0.216867469879518 postgresql postgresql-9.4.4/src/bin/psql/sql_help.c 3576 8 0.223214285714286 mariadb server-10.1/strings/ctype-sjis.c 34006 86 0.252258594391646 python Python-2.7.10/Python/Python-ast.c 6554 17 0.258712524729874 mariadb server-10.1/strings/ctype-cp932.c 34609 92 0.265122042592432 perl perl-5.22.0/keywords.c 2815 8 0.283386468296139 python Python-2.7.10/Mac/Modules/menu/_Menumodule.c 3263 10 0.305530094714329 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_dutch.c 596 2 0.334448160535117 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_dutch.c 586 2 0.340136054421769 mariadb server-10.1/strings/ctype-gbk.c 10684 38 0.354411490393583 python Python-2.7.10/Mac/Modules/qd/_Qdmodule.c 6694 24 0.357249181303959 python Python-2.7.10/Mac/Modules/win/_Winmodule.c 3056 11 0.358656667753505 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_german.c 476 2 0.418410041841004 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_german.c 470 2 0.423728813559322 mariadb server-10.1/strings/ctype-euc_kr.c 9956 44 0.44 postgresql postgresql-9.4.4/src/backend/utils/fmgrtab.c 4815 23 0.475403059115337 python Python-2.7.10/Mac/Modules/ctl/_Ctlmodule.c 5442 28 0.511882998171846 python Python-2.7.10/Mac/Modules/ae/_AEmodule.c 1347 7 0.51698670605613 python Python-2.7.10/Mac/Modules/app/_Appmodule.c 1712 9 0.52295177222545 mariadb server-10.1/strings/ctype-gb2312.c 6377 35 0.54585152838428 mariadb server-10.1/storage/tokudb/ft-index/third_party/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c 516 3 0.578034682080925 python Python-2.7.10/Mac/Modules/evt/_Evtmodule.c 504 3 0.591715976331361 python Python-2.7.10/Modules/expat/xmlrole.c 1256 8 0.632911392405063 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_danish.c 312 2 0.636942675159236 postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_danish.c 310 2 0.641025641025641 python Python-2.7.10/Mac/Modules/res/_Resmodule.c 1621 12 0.734843845682792 python Python-2.7.10/Mac/Modules/drag/_Dragmodule.c 1046 8 0.759013282732448 python Python-2.7.10/Mac/Modules/list/_Listmodule.c 1021 8 0.777453838678329 python Python-2.7.10/Mac/Modules/te/_TEmodule.c 1198 10 0.827814569536424 python Python-2.7.10/Mac/Modules/cg/_CGmodule.c 1190 10 0.833333333333333 python Python-2.7.10/Modules/clmodule.c 2379 23 0.957535387177352 python Python-2.7.10/Mac/Modules/folder/_Foldermodule.c 306 3 0.970873786407767
What are the ten longest files (based on code lines) that have no comments at all? Exclude header, .html, and YAML files.
prompt> sqlite3 code.db 'select project, file, nCode from t where nComment = 0 and language not in ("C/C++ Header", "YAML", "HTML") order by nCode desc limit 10;' | sqlite_formatter Project File nCode _______ ____________________________________________________________________ _____ perl perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/ja.pl 1938 python Python-2.7.10/PCbuild/pythoncore.vcproj 1889 python Python-2.7.10/PC/VS8.0/pythoncore.vcproj 1889 mariadb server-10.1/mysql-test/extra/binlog_tests/mysqlbinlog_row_engine.inc 1862 perl perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/zh_strk.pl 1589 perl perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl 1563 mariadb server-10.1/storage/mroonga/vendor/groonga/configure.ac 1526 perl perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/zh_pin.pl 1505 mariadb server-10.1/mysql-test/suite/funcs_1/storedproc/storedproc_02.inc 1465 python Python-2.7.10/PC/VS8.0/_bsddb.vcproj 1463
What are the most popular languages (in terms of lines of code) in each project?
prompt> sqlite3 code.db 'select project, language, sum(nCode) as SumCode from t group by project,language order by project,SumCode desc;' | sqlite_formatter Project Language SumCode __________ _________________________ _______ mariadb C++ 983026 mariadb C 715018 mariadb C/C++ Header 209394 mariadb Bourne Shell 61943 mariadb Perl 35562 mariadb Pascal 32541 mariadb HTML 16489 mariadb Javascript 15540 mariadb m4 14215 mariadb CMake 12206 mariadb XML 5210 mariadb Ruby 4998 mariadb Puppet 3848 mariadb make 3631 mariadb SQL 3405 mariadb Python 2545 mariadb Bourne Again Shell 1604 mariadb Windows Module Definition 1211 mariadb lex 991 mariadb yacc 810 mariadb DOS Batch 700 mariadb Prolog 448 mariadb RobotFramework 441 mariadb CSS 393 mariadb JSON 359 mariadb dtrace 306 mariadb Windows Resource File 250 mariadb Assembly 237 mariadb WiX source 155 mariadb Visual Basic 88 mariadb YAML 65 mariadb PHP 24 mariadb SKILL 16 mariadb sed 16 mariadb Windows Message File 6 mariadb D 4 mariadb diff 4 perl Perl 536445 perl C 155648 perl C/C++ Header 147858 perl Bourne Shell 42668 perl Pascal 8592 perl XML 2410 perl YAML 2078 perl C++ 2033 perl make 1986 perl Prolog 1146 perl JSON 1037 perl yacc 998 perl Windows Message File 489 perl DOS Batch 389 perl Windows Resource File 85 perl D 8 perl Lisp 4 postgresql HTML 785991 postgresql C 736519 postgresql C/C++ Header 57014 postgresql SQL 51926 postgresql yacc 28491 postgresql Bourne Shell 17170 postgresql Perl 9456 postgresql lex 4285 postgresql make 4114 postgresql m4 1642 postgresql Windows Module Definition 1152 postgresql XSLT 294 postgresql DOS Batch 92 postgresql Assembly 69 postgresql CSS 69 postgresql D 66 postgresql Windows Resource File 62 postgresql Lisp 16 postgresql sed 15 postgresql Python 13 postgresql Bourne Again Shell 10 postgresql Windows Message File 5 python Python 434015 python C 375555 python C/C++ Header 66942 python Bourne Shell 45091 python MSBuild script 38910 python m4 15559 python Assembly 12298 python make 2953 python HTML 2344 python Windows Module Definition 2081 python Objective-C 635 python Expect 565 python DOS Batch 506 python CSS 328 python Javascript 229 python Windows Resource File 207 python C++ 128 python vim script 106 python diff 105 python XML 74 python NAnt script 30 python Prolog 24 python Visual Basic 12 sqlite C 101454 sqlite C/C++ Header 1546
Cloc's default output is a text table with five columns: language, file count, number of blank lines, number of comment lines and number of code lines. The switches --by-file
, --3
, and --by-percent
generate additional information but sometimes even those are insufficient.
The --sql
option described in the previous section offers the ability to create custom output. This section has a pair of examples that show how to create custom columns. The first example includes an extra column, Total , which is the sum of the numbers of blank, comment, and code lines. The second shows how to include the language name when running with --by-file
.
Example 1: Add a "Totals" column.
The first step is to run cloc and save the output to a relational database, SQLite in this case:
cloc --sql 1 --sql-project x yaml-cpp-yaml-cpp-0.5.3.tar.gz | sqlite3 counts.db
(the tar file comes from the YAML-C++ project).
Second, we craft an SQL query that returns the regular cloc output plus an extra column for totals, then save the SQL statement to a file, query_with_totals.sql
:
-- file query_with_totals.sql select Language, count(File) as files , sum(nBlank) as blank , sum(nComment) as comment , sum(nCode) as code , sum(nBlank)+sum(nComment)+sum(nCode) as Total from t group by Language order by code desc;
Third, we run this query through SQLite using the counts.db
database. We'll include the -header
switch so that SQLite prints the column names:
> cat query_with_totals.sql | sqlite3 -header counts.db Language|files|blank|comment|code|Total C++|141|12786|17359|60378|90523 C/C++ Header|110|8566|17420|51502|77488 Bourne Shell|10|6351|6779|38264|51394 m4|11|2037|260|17980|20277 Python|30|1613|2486|4602|8701 MSBuild script|11|0|0|1711|1711 CMake|7|155|285|606|1046 make|5|127|173|464|764 Markdown|2|30|0|39|69
The extra column for Total is there but the format is unappealing. Running the output through sqlite_formatter
yields the desired result:
> cat query_with_totals.sql | sqlite3 -header counts.db | sqlite_formatter Language files blank comment code Total ______________ _____ _____ _______ _____ _____ C++ 141 12786 17359 60378 90523 C/C++ Header 110 8566 17420 51502 77488 Bourne Shell 10 6351 6779 38264 51394 m4 11 2037 260 17980 20277 Python 30 1613 2486 4602 8701 MSBuild script 11 0 0 1711 1711 CMake 7 155 285 606 1046 make 5 127 173 464 764 Markdown 2 30 0 39 69
The next section, Wrapping cloc in other scripts, shows one way these commands can be combined into a new utility program.
Example 2: Include a column for "Language" when running with --by-file
.
Output from --by-file
omits each file's language to save screen real estate; file paths for large projects can be long and including an extra 20 or so characters for a Language column can be excessive.
As an example, here are the first few lines of output using the same code base as in Example 1:
> cloc --by-file yaml-cpp-yaml-cpp-0.5.3.tar.gz github.com/AlDanial/cloc v 1.81 T=1.14 s (287.9 files/s, 221854.9 lines/s) --------------------------------------------------- --------------------------------------------------- ---------------------------------------- File blank comment code --------------------------------------------------- --------------------------------------------------- ---------------------------------------- yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/configure 2580 2264 13691 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/configure 2541 2235 13446 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest.h 1972 4681 13408 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock/gmock.h 1585 3397 9216 yaml-cpp-yaml-cpp-0.5.3/test/integration/gen_emitter_test.cpp 999 0 8760 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/aclocal.m4 987 100 8712 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/m4/libtool.m4 760 65 7176 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/build-aux/ltmain.sh 959 1533 7169 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock-gtest-all.cc 1514 3539 6390 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest-all.cc 1312 2896 5384 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/test/gtest_unittest.cc 1226 1091 5098 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/include/gtest/internal/gtest-param-util-generated.h 349 235 4559
The absence of language identification for each file is a bit disappointing, but this can be remedied with a custom column solution.
The first step, creating a database, matches that from Example 1 so we'll go straight to the second step of creating the desired SQL query. We'll store this one in the file by_file_with_language.sql
:
-- file by_file_with_language.sql select File, Language, nBlank as blank , nComment as comment, nCode as code from t order by code desc;
Our desired extra column appears when we pass this custom SQL query through our database:
> cat by_file_with_language.sql | sqlite3 -header counts.db | sqlite_formatter File Language blank comment code __________________________________________________________________________________________________ ______________ _____ _______ _____ yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/configure Bourne Shell 2580 2264 13691 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/configure Bourne Shell 2541 2235 13446 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest.h C/C++ Header 1972 4681 13408 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock/gmock.h C/C++ Header 1585 3397 9216 yaml-cpp-yaml-cpp-0.5.3/test/integration/gen_emitter_test.cpp C++ 999 0 8760 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/aclocal.m4 m4 987 100 8712 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/m4/libtool.m4 m4 760 65 7176 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/build-aux/ltmain.sh Bourne Shell 959 1533 7169 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock-gtest-all.cc C++ 1514 3539 6390 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest-all.cc C++ 1312 2896 5384 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/test/gtest_unittest.cc C++ 1226 1091 5098 yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/include/gtest/internal/gtest-param-util-generated.h C/C++ Header 349 235 4559
*
More complex code counting solutions are possible by wrapping cloc in scripts or programs. The "total lines" column from example 1 of Custom Column Output could be simplified to a single command with this shell script (on Linux):
#!/bin/sh # # These commands must be in the user's $PATH: # cloc # sqlite3 # sqlite_formatter # if test $# -eq 0 ; Kemudian echo "Usage: $0 [cloc arguments]" echo " Run cloc to count lines of code with an additional" echo " output column for total lines (code+comment+blank)." KELUAR fi DBFILE=`tempfile` cloc --sql 1 --sql-project x $@ | sqlite3 ${DBFILE} SQL="select Language, count(File) as files , sum(nBlank) as blank , sum(nComment) as comment , sum(nCode) as code , sum(nBlank)+sum(nComment)+sum(nCode) as Total from t group by Language order by code desc; " echo ${SQL} | sqlite3 -header ${DBFILE} | sqlite_formatter rm ${DBFILE}
Saving the lines above to total_columns.sh
and making it executable ( chmod +x total_columns.sh
) would let us do
./total_columns.sh yaml-cpp-yaml-cpp-0.5.3.tar.gz
to directly get
Language files blank comment code Total ______________ _____ _____ _______ _____ _____ C++ 141 12786 17359 60378 90523 C/C++ Header 110 8566 17420 51502 77488 Bourne Shell 10 6351 6779 38264 51394 m4 11 2037 260 17980 20277 Python 30 1613 2486 4602 8701 MSBuild script 11 0 0 1711 1711 CMake 7 155 285 606 1046 make 5 127 173 464 764 Markdown 2 30 0 39 69
Other examples:
cloc's --git
option may fail if you work with directory or file names with UTF-8 characters (for example, see issue 457). The solution, https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8-encoded-pathnames-in-the-console-window, is to apply this git configuration command :
git config --global core.quotepath off
Your console's font will need to be capable of displaying Unicode characters.
cloc versions before 1.50 by default computed, for the provided inputs, a rough estimate of how many lines of code would be needed to write the same code in a hypothetical third-generation computer language. To produce this output one must now use the --3
switch.
Scale factors were derived from the 2006 version of language gearing ratios listed at Mayes Consulting web site, http://softwareestimator.com/IndustryData2.htm, using this equation:
cloc scale factor for language X = 3rd generation default gearing ratio / language X gearing ratio
For example, cloc 3rd generation scale factor for DOS Batch = 80 / 128 = 0.625.
The biggest flaw with this approach is that gearing ratios are defined for logical lines of source code not physical lines (which cloc counts). The values in cloc's 'scale' and '3rd gen. equiv.' columns should be taken with a large grain of salt.
If you find yourself using the same command line switches every time you invoke cloc, you can save some typing by adding those switches to the options.txt
runtime configuration file. cloc will look for this file in the following default locations:
# Linux, NetBSD, FreeBSD, macOS: /home/USERNAME/.config/cloc/options.txt # Windows C:UsersUSERNAMEAppDataRoamingcloc
If you run cloc with --help
, cloc will tell you where it expects to find this config file file. The information appears by the explanation of the --config
switch after the text the default location of
. On Unix-like operating systems, this can be simplified to
> cloc --help | grep "default location" the default location of /home/al/.config/cloc/options.txt.
and in a Windows cmd
terminal with
> cloc --help | findstr default | findstr location the default location of C:UsersalAppDataRoamingcloc
Place each switch and arguments, if any, on a line by itself. Lines prefixed with #
symbol are ignored as comments and blank lines are skipped. Leading hyphens on the switches are optional. Here's a sample file:
# options.txt --vcs git v # verbose level 1 exclude-ext svg,html
The path to the options.txt
file can also be specified with the --config FILE
switch.
Finally, if cloc finds an options.txt
file in the same directory as files given by any of these switches (in the listed priority), it will use that configuration file from that location:
--list-file
--exclude-list-file
--read-lang-def
--force-lang-def
--diff-list-file
Run with --verbose
to have cloc tell you which, if any, options.txt
file it uses.
Ozren Dabić created a Java programmatic interface to cloc. It is available at https://github.com/seart-group/jcloc
cloc relies on the Regexp::Common module's regular expressions to remove comments from source code. If comments are malformed, for example the /*
start comment marker appears in a C program without a corresponding */
marker, the regular expression engine could enter a recursive loop, eventually triggering the warning Complex regular subexpression recursion limit
.
The most common cause for this warning is the existence of comment markers in string literals. While language compilers and interpreters are smart enough to recognize that "/*"
(for example) is a string and not a comment, cloc is fooled. File path globs, as in this line of JavaScript
var paths = globArray("**/*.js", {cwd: srcPath});
are frequent culprits.
In an attempt to overcome this problem, a different algorithm which removes comment markers in strings can be enabled with the --strip-str-comments
switch. Doing so, however, has drawbacks: cloc will run more slowly and the output of --strip-comments
will contain strings that no longer match the input source.
Identifying comments within source code is trickier than one might expect. Many languages would need a complete parser to be counted correctly. cloc does not attempt to parse any of the languages it aims to count and therefore is an imperfect tool. The following are known problems:
printf(" /* "); for (i = 0; i < 100; i++) { a += i; } printf(" */ ");look to cloc like this:
printf(" xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx ");where xxxxxxx represents cloc's view of commented text. Therefore cloc counts the five lines as two lines of C code and three lines of comments (lines with both code and comment are counted as code).
If you suspect your code has such strings, use the switch --strip-str-comments
to switch to the algorithm which removes embedded comment markers. Its use will render the five lines above as
printf(" "); for (i = 0; i < 100; i++) { a += i; } printf(" ");
and therefore return a count of five lines of code. See the previous section on drawbacks to using --strip-str-comments
.
If cloc does not recognize a language you are interested in counting, create a GitHub issue requesting support for your language. Include this information:
If you encounter a problem with cloc, first check to see if you're running with the latest version of the tool:
cloc --version
If the version is older than the most recent release at https://github.com/AlDanial/cloc/releases, download the latest version and see if it solves your problem.
If the problem happens with the latest release, submit a new issue at https://github.com/AlDanial/cloc/issues only if you can supply enough information for anyone reading the issue report to reproduce the problem. That means providing
Problem reports that cannot be reproduced will be ignored and eventually closed.
Please use the following bibtex entry to cite cloc in a publication:
@software{adanial_cloc, author = {Albert Danial}, title = {cloc: v1.92}, month = dec, year = 2021, publisher = {Zenodo}, version = {v1.92}, doi = {10.5281/zenodo.5760077}, url = {https://doi.org/10.5281/zenodo.5760077} }
(Update the version number and corresponding year if this entry is outdated.)
Wolfram Rösler provided most of the code examples in the test suite. These examples come from his Hello World collection.
Ismet Kursunoglu found errors with the MUMPS counter and provided access to a computer with a large body of MUMPS code to test cloc.
Tod Huggins gave helpful suggestions for the Visual Basic filters.
Anton Demichev found a flaw with the JSP counter in cloc v0.76 and wrote the XML output generator for the --xml
option.
Reuben Thomas pointed out that ISO C99 allows //
as a comment marker, provided code for the --no3
and --stdin-name
options, counting the m4 language, and suggested several user-interface enhancements.
Michael Bello provided code for the --opt-match-f
, --opt-not-match-f
, --opt-match-d
, and --opt-not-match-d
options.
Mahboob Hussain inspired the --original-dir
and --skip-uniqueness
options, found a bug in the duplicate file detection logic and improved the JSP filter.
Randy Sharo found and fixed an uninitialized variable bug for shell scripts having only one line.
Steven Baker found and fixed a problem with the YAML output generator.
Greg Toth provided code to improve blank line detection in COBOL.
Joel Oliveira provided code to let --exclude-list-file
handle directory name exclusion.
Blazej Kroll provided code to produce an XSLT file, cloc-diff.xsl
, when producing XML output for the --diff
option.
Denis Silakov enhanced the code which generates cloc.xsl
when using --by-file
and --by-file-by-lang
options, and provided an XSL file that works with --diff
output.
Andy ([email protected]) provided code to fix several bugs: correct output of --counted
so that only files that are used in the code count appear and that results are shown by language rather than file name; allow --diff
output from multiple runs to be summed together with --sum-reports
.
Jari Aalto created the initial version of cloc.1.pod
and maintains the Debian package for cloc.
Mikkel Christiansen ([email protected]) provided counter definitions for Clojure and ClojureScript.
Vera Djuraskovic from Webhostinggeeks.com provided the Serbo-Croatian translation.
Gill Ajoft of Ajoft Software provided the Bulgarian translation.
The Knowledge Team provided the Slovakian translation.
Erik Gooven Arellano Casillas provided an update to the MXML counter to recognize ActionScript comments.
Gianluca Casati created the cloc CPAN package.
Ryan Lindeman implemented the --by-percent
feature.
Kent C. Dodds, @kentcdodds, created and maintains the npm package of cloc.
Viktoria Parnak provided the Ukrainian translation.
Natalie Harmann provided the Belarussian translation.
Nithyal at Healthcare Administration Portal provided the Tamil translation.
Patricia Motosan provided the Romanian translation.
Gajk Melikyan provided the provided the Armenian translation for http://studybay.com.
Hungarian translation courtesy of Zsolt Boros.
Sietse Snel implemented the parallel processing capability available with the --processes= N switch.
The development of cloc was partially funded by the Northrop Grumman Corporation.
Copyright (c) 2006-2024, Al Danial