Bagaimana mengetahui berapa banyak baris kode yang ada dalam proyek Xcode?

149

Apakah ada cara untuk menentukan berapa banyak baris kode yang berisi proyek Xcode? Saya berjanji untuk tidak menggunakan informasi tersebut untuk pengukuran manajerial atau tujuan pembandingan karyawan. ;)

Dave
sumber
Jika Anda ingin baris, maka Anda dapat menggunakan jawaban ini: stackoverflow.com/questions/5901758/... Tapi itu termasuk spasi
GeneCode

Jawaban:

126

Lihat CLOC .

cloc menghitung baris kosong, baris komentar, dan garis fisik kode sumber dalam banyak bahasa pemrograman.

( Legacy build diarsipkan di SourceForge .)

Nathan Kinsinger
sumber
11
CLOC tersedia melalui Homebrew. Kemudahan penggunaan di baris perintah menyegarkan.
avelis
1
Saya suka permainan kata dalam nama di sana - ya Anda bisa tahu seberapa produktif Anda dengan memeriksa CLOC Anda.
bobobobo
Gunakan tautan di atas untuk mengunduh versi perm 'alat cloc' ./cloc-1.56.pl '. Pastikan Anda mengaktifkan izin eksekusi pada file cloc-1.56.pl menggunakan perintah 'chmod u + x cloc-1.56.pl'. Jika kode sumber Anda terletak di direktori 'project_code' Anda hanya perlu menjalankan perintah berikut.
JZ.
233

Saya melihat ini melayang dan menggunakannya sendiri:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -print0 | xargs -0 wc -l
Joshua Nozzi
sumber
2
Untuk menangani subdir dengan spasi dalam nama yang Anda butuhkan: temukan. "(" -name " .m" -or -name " .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
Matt__C
2
Posting blog ini dapat membantu: allara.blogspot.co.uk/2010/12/...
Eric Brotto
12
Kami memposting jawaban pada SO, bukan tautan ke entri blog yang menyediakan banyak jawaban yang sama.
Joshua Nozzi
6
tampaknya tes .m dan .mm tidak ada * (diedit: tampaknya SO tidak merendernya tanpa garis miring sebelumnya) Hal di atas tidak berfungsi untuk saya hingga saya menambahkannya seperti itu: temukan. "(" -name "* .m" -or -name "* .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
bladnman
2
Catatan untuk pengguna Swift - ganti atau tambahkan yang lain 'atau' dengan ekstensi file .swift
Byron Coetsee
79

Saya telah menggunakan CLOC seperti yang disebutkan olehNathan Kinsinger dan cukup mudah digunakan. Ini adalah skrip PERL yang dapat Anda tambahkan dan jalankan dari direktori proyek Anda.

PERL sudah menjadi bagian dari Mac OS dan Anda dapat menjalankan skrip dengan cara ini untuk mengetahui jumlah baris yang telah Anda tulis:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

Ini adalah contoh dari output yang saya dapatkan dari perintah tersebut:

   176 text files.
   176 unique files.                                          
     4 files ignored.

http://cloc.sourceforge.net v 1.56  T=2.0 s (86.0 files/s, 10838.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Objective C                     80           3848           1876          11844
C/C++ Header                    92            980           1716           1412
-------------------------------------------------------------------------------
SUM:                           172           4828           3592          13256
-------------------------------------------------------------------------------
tiguero
sumber
4
Bagus! Saya suka ini lebih baik daripada jawaban saya sendiri. :-)
Joshua Nozzi
1
Anda mungkin perlu mengunduh skrip terlebih dahulu. Kemudian navigasikan ke direktori tempat skrip itu berada dan jalankan perintah itu dengan nama file apa pun yang Anda unduh.
prolfe
Seharusnya cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAnda dan tidak seperti di atas, jika Anda menginstal perl dari awal pastikan Anda memasukkan versi perl saat ini (milik saya adalah 5.30.1 jadi pada dasarnya cloc perl-5.30.1.pl ./)
Golan Shay
1
Satu hal lagi, saya harus menjalankan span Moo sesuai kesalahan yang muncul saat menjalankannya untuk yang pertama kali jadi checkout juga untuk yang itu
Golan Shay
50

Buka Terminal.app, masuk ke direktori root proyek Anda, dan jalankan perintah ini:

Hanya untuk Swift:

find . \( -iname \*.swift \) -exec wc -l '{}' \+

Hanya untuk Obj-C:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h \) -exec wc -l '{}' \+

Untuk Obj-C + Swift:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h -o -iname \*.swift \) -exec wc -l '{}' \+

Untuk Obj-C + Swift + C + C ++:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.c -o -iname \*.cc -o -iname \*.h -o -iname \*.hh -o -iname \*.hpp -o -iname \*.cpp -o -iname \*.swift \) -exec wc -l '{}' \+

Kiat cepat terminal:
ls: daftar isi direktori
cd: ubah direktori
Tekan tab untuk pelengkapan otomatis
Ingatlah untuk meletakkan backslash "\" sebelum spasi,
saya sarankan untuk turun satu folder dari proyek utama sehingga Anda menyingkirkan jumlah kode dari kerangka kerja

Esqarrouth
sumber
44

Di terminal, ubah ke direktori proyek dan jalankan:

find . -type f -print0 | xargs -0 cat | wc -l

Jika Anda hanya menginginkan jenis file tertentu, coba sesuatu seperti

find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l
Andrew McGregor
sumber
Bagus, tetapi termasuk komentar dan baris kosong dan dengan demikian tidak persis apa yang diminta. Ukuran LOC harus independen dari gaya pemformatan kode dan dengan demikian sekelompok baris kosong atau komentar antara bagian logis dalam file tidak boleh diperhitungkan jumlahnya.
bassim
34

Lihat Xcode Statistician, ia melakukan apa yang Anda inginkan. Ini juga menyediakan statistik menarik lainnya sehingga layak dijalankan untuk bersenang-senang sekarang dan nanti.

Perhatikan bahwa itu tidak akan melihat ke dalam folder nyata, meskipun akan terlihat dalam grup. Kemungkinan Anda tidak menggunakan folder nyata sehingga akan bekerja dengan baik. Jika Anda menggunakan folder maka Anda hanya perlu melakukan penghitungan di setiap folder dan menambahkannya bersama-sama.

Catatan: Pada Juni 2012, tampaknya ini tidak berfungsi dengan baik dengan versi terbaru Xcode.

Matthew Frederick
sumber
Hanya kepala bagi mereka yang mencampur Objective-C dan C / C ++: Tidak menghitung file * .c atau * .cpp.
Emile Cormier
3
Perhatikan bahwa Xcode Statisician tidak berurusan dengan subdir di proyek Anda saat ini.
Matt__C
@ Mat__C Aye, maka "Perhatikan bahwa itu tidak akan melihat ke dalam folder nyata". Cukup banyak pekerjaan manual, sayangnya (dan pencarian folder rekursif mudah dikodekan), tetapi ini bisa diterapkan.
Matthew Frederick
1
Tampaknya itu tidak berfungsi sama sekali dengan proyek X-Code 4.2 di Lion (setidaknya itu tidak memberikan statistik untuk proyek saya)
BadPirate
Ah, payah, mungkin sudah ketinggalan zaman sekarang.
Matius Frederick
31
  1. terminal terbuka
  2. arahkan ke proyek Anda
  3. jalankan perintah berikut di dalam proyek Anda:

    find . -path ./Pods -prune -o -name "*.swift" -print0 ! -name "/Pods" | xargs -0 wc -l

    Atau:

    find . -path ./Pods -prune -o -name "*[hm]" -print0 ! -name "/Pods" | xargs -0 wc -l

(* Tidak termasuk file pod dihitung dari jumlah total)

Shan Shafiq
sumber
16

Jika Anda pergi ke direktori proyek Anda di terminal dan masukkan:

find . "(" -name "*.h" -or -name "*.m" -or -name "*.mm" -or -name "*.hpp" -or -name "*.cpp"  -or  -name "*.c" -or -name "*.cc" -or -name "*.swift" ")" -print0 | xargs -0 wc -l

Itu akan memberi Anda rincian proyek, serta total baris untuk setiap file dan proyek secara keseluruhan.

RileyE
sumber
Untuk swift baru saja menghapus semuanya dan menambahkan .swiftfind . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne
@WCByrne Atau, kita bisa menambahkan .swift ke perintah asli
RileyE
Memang. Karena sebagian besar perpustakaan dan kode pinjaman masih dalam format .h & .m, hal ini membantu memangkas hitungan menjadi seperti yang saya tulis.
WCByrne
1
Benar. Setiap orang punya solusi sendiri. Dan jika mereka memiliki awalan sendiri (mis: "RE"), mereka bahkan bisa melakukannyafind . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
RileyE
9

Versi Nozzi tidak bekerja untuk saya, tetapi yang ini:

find . -type f -print0 | xargs -0 cat | wc -l
Pascalius
sumber
1
singkat dan ringkas - tetapi juga menghitung baris pada file kode non-sumber. Jadi sebenarnya filter-ekstensi nama file sangat penting di sini. OP ingin menghitung "baris kode sumber". tidak ada baris teks.
Motti Shneor
7

Cara cepat & mudah:

Gunakan pencarian regex (Temukan Navigator, pilih Temukan> Ekspresi Reguler).

. \ n

Bekerja dengan nyaman dengan cakupan pencarian Xcode dan Anda dapat dengan mudah menyesuaikannya dengan jenis garis apa pun yang ingin Anda hitung;)

Patrick Pijnappel
sumber
Nah, itu bagus! bukan yang tercepat, tetapi tanpa meninggalkan lingkungan dev. Saya suka itu. Mungkin ekspresi reguler yang lebih baik dapat menghindari penghitungan garis ruang putih dan hal-hal seperti itu.
Motti Shneor
Tetap sederhana. Saya suka itu.
devios1
6

Anda dapat menginstal SLOCCount melalui MacPorts. Atau, lebih kasarnya, Anda bisa menggunakan wc -l.

anthony
sumber
CLOC didasarkan pada SCLOCount jadi saya kira ini masih merupakan pendekatan yang lebih baik untuk menggunakan CLOC
tiguero
4
"Total Perkiraan Biaya untuk Berkembang = $ 1.934.715". Ini membuat hariku!
Valeriy Van
4

Saya tidak terbiasa dengan xcode, tetapi jika semua yang Anda butuhkan adalah untuk menghitung jumlah baris dari semua file tertentu dalam pohon direktori, Anda dapat menggunakan perintah berikut:

find .... match of all those files ... -exec wc -l {} +

Mengikuti jawaban Joshua Nozzi , di GNU temukan ekspresi reguler untuk file-file tersebut adalah:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -exec wc -l {} +

atau bahkan

find -regex ".*\.\(m\|mm\|cpp\|swift\)$" -exec wc -l {} +

ini menggunakan ekspresi reguler untuk mencocokkan semua file berekstensi baik .m, .mm, .cppatau .swift. Anda dapat melihat informasi lebih lanjut tentang ekspresi itu di Cara menggunakan regex dalam pencarian file .

Jika Anda bekerja dengan Mac OS find , maka Anda memerlukan pendekatan yang sedikit berbeda, seperti yang dijelaskan oleh Motti Shneor dalam komentar:

find -E . -regex ".*\.([hmc]|mm|cp+|swift|pch)$" -exec wc -l {} +

Keduanya akan memberikan output berupa:

234 ./file1
456 ./file2
690 total

Jadi Anda bisa tetap seperti ini atau hanya pipa ke tail -1(yaitu, find ... | tail -1) sehingga Anda hanya mendapatkan baris terakhir menjadi total.

fedorqui 'SO berhenti merugikan'
sumber
baik --- find -regex ". * \. dll tidak berfungsi untuk saya di MacOS - ia mengklaim opsi ilegal --r jenis penemuan apa yang Anda gunakan?
Motti Shneor
@MottiShneor Anda mungkin ingin memeriksa pertanyaan ini di mana mereka berbicara tentang \|dan yang lainnya di MacOS. --regexvalid di kedua GNU find (yang saya gunakan) dan MacOS.
fedorqui 'SO berhenti merugikan'
baik --- tidak. Saya menemukan di MacOS Anda harus menemukan -E untuk ekspresi reguler yang diperluas. Salin perintah yang disarankan di atas ke OS-X apa pun yang bisa Anda dapatkan, dan lihat sendiri. man find di MacOS-X memberi tahu Anda bahwa Anda harus -E untuk itu.
Motti Shneor
Terakhir, Anda juga harus memberikan jalur tempat mencari di OSX. jadi variasi yang berfungsi, terlihat seperti ini: find -E. -regex ". * *. ([hmc] | mm | cp + | swift | pch) $" -exec wc -l {} +
Motti Shneor
@MottiShneor terima kasih telah menyediakan pendekatan di MacOS. Saya telah memperbarui jawabannya dengan itu.
fedorqui 'SO stop harming'
2

Maaf sudah mengulangi. Itulah cara termudah IMHO:

  1. Dalam tipe terminal

find /users/<#username#>/documents/folderWithProject/ -type f -exec cp {} /users/<#username#>/documents/folderWithProject/newFolder/ \;

Ini akan menyalin semua file dari folder proyek ke newFolder.

  1. Unduh Xcode Statistician dan gunakan dengannewFolder masukkan deskripsi gambar di sini
Nik Kov
sumber
Alat ini tidak menemukan semuanya, sepertinya itu hanya terlihat di folder saat ini (bahkan bukan subfolder)
Daniel
Saya menulis bahwa langkah pertama adalah menyalin semua file dari folder proyek ke satu folder.
Nik Kov
Apakah itu open source "XcodeStatistican"? Saya akan membuatnya bekerja pada struktur proyek apa pun dalam waktu singkat ... Direktori dan File iterator tidak terlalu sulit untuk dilakukan. Juga - unduhan dari sini - tidak ditandatangani oleh pengembang yang diidentifikasi - jadi bisa jadi malware: /
Motti Shneor
1

line-counteradalah alternatif yang bagus. Ini lebih ringan dari CLOC dan jauh lebih kuat dan lebih mudah digunakan daripada perintah lain.

Gambaran singkat

Inilah cara Anda mendapatkan alat

$ pip install line-counter

Gunakan lineperintah untuk mendapatkan jumlah file dan jumlah baris di bawah direktori saat ini (secara rekursif)

$ line
Search in /Users/Morgan/Documents/Example/
file count: 4
line count: 839

Jika Anda ingin lebih detail, gunakan saja line -d.

$ line -d
Search in /Users/Morgan/Documents/Example/
Dir A/file C.c                                             72
Dir A/file D.py                                           268
file A.py                                                 467
file B.c                                                   32
file count: 4
line count: 839

Dan bagian terbaik dari alat ini adalah, Anda dapat menambahkan .gitignore seperti mengonfigurasi file. Anda dapat mengatur aturan untuk memilih atau mengabaikan jenis file yang akan dihitung seperti apa yang Anda lakukan di '.gitignore'. Ya, alat ini baru saja diciptakan untuk mengetahui berapa banyak garis yang saya miliki dengan lebih mudah.

Deskripsi dan penggunaan lebih lanjut ada di sini: https://github.com/MorganZhang100/line-counter

Saya penulis alat sederhana ini. Semoga bisa membantu seseorang.

Morgan Zhang
sumber