Bir Xcode projesinde kaç satır kod olduğunu nasıl öğrenebilirim?


153

Bir Xcode projesinin kaç satır kod içerdiğini belirlemenin bir yolu var mı? Bu tür bilgileri yönetimsel ölçüm veya çalışanların karşılaştırması amacıyla kullanmayacağıma söz veriyorum. ;)


Satır istiyorsanız, bu cevabı kullanabilirsiniz: stackoverflow.com/questions/5901758/… Ama boşluklar içerir
GeneCode

Yanıtlar:


128

Check Cloc .

cloc, birçok programlama dilinde boş satırları, yorum satırlarını ve kaynak kodun fiziksel satırlarını sayar.

( Eski yapılar SourceForge'da arşivlenir .)


12
CLOC, Homebrew aracılığıyla edinilebilir. Komut satırındaki kullanım kolaylığı canlandırıcıydı.
avelis

1
Oradaki isimdeki kelime oyununu seviyorum - evet CLOC'nize bakarak ne kadar üretken olduğunuzu anlayabilirsiniz.
bobobobo

Cloc aracının './cloc-1.56.pl' perm sürümünü indirmek için yukarıdaki bağlantıyı kullanın. Cloc-1.56.pl dosyasında 'chmod u + x cloc-1.56.pl' komutunu kullanarak yürütme iznini etkinleştirdiğinizden emin olun. Kaynak kodunuz 'proje kodu' dizininde bulunuyorsa, aşağıdaki komutu çalıştırmanız yeterlidir.
JZ.

235

Bunun etrafta dolaştığını görüyorum ve kendim kullanıyorum:

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

2
İhtiyacınız olan adlarda boşluk bulunan alt dizinleri işlemek için: bul. "(" -name " .m" -veya -isim ".mm" -veya -ad "* .cpp" ")" -print0 | xargs -0 wc -l
Matt__C

2
Bu blog yayını yardımcı olabilir: allara.blogspot.co.uk/2010/12/...
Eric Brotto

13
Yanıtları SO'da yayınlıyoruz, hemen hemen aynı yanıtı veren blog girişlerine bağlantılar değil.
Joshua Nozzi

6
Görünüşe göre .m ve .mm testlerinde bir * eksik (düzenlenmiş: SO, önceki bölü çizgisi olmayanları oluşturmuyor gibi görünüyor) Yukarıdakiler, onları şu şekilde ekleyene kadar benim için çalışmıyordu: bul. "(" -name "* .m" -veya -ad "* .mm" -veya -ad "* .cpp" ")" -print0 | xargs -0 wc -l
bladnman

2
Swift kullanıcıları için not - .swift dosya uzantısıyla başka bir 'veya' ekleyin veya ekleyin
Byron Coetsee

80

Ben de belirtildiği gibi CLOC kullanıyorum ve kullanımı oldukça kolay. Proje dizininizden ekleyebileceğiniz ve çalıştırabileceğiniz bir PERL betiğidir.Nathan Kinsinger

PERL zaten Mac OS'nin bir parçasıdır ve yazdığınız satır sayınızı bulmak için betiği şu şekilde çalıştırabilirsiniz:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

Bu, böyle bir komuttan aldığım çıktıya bir örnek:

   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
-------------------------------------------------------------------------------

4
Güzel! Bunu kendi cevabımdan daha çok seviyorum. :-)
Joshua Nozzi

1
Önce komut dosyasını indirmeniz gerekebilir. Ardından o komut dosyasının olduğu dizine gidin ve indirdiğiniz dosya adıyla bu komutu çalıştırın.
prolfe

Cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAre olmalı ve yukarıdaki gibi değil, perl'yi sıfırdan kurarsanız mevcut perl sürümünü girdiğinizden emin olun (benimki 5.30.1 idi, yani temelde cloc perl-5.30.1.pl ./)
Golan Shay

1
Son bir şey, ilk kez çalıştırırken ortaya çıkan hataya göre Moo'yu çalıştırmak zorunda kaldım, bu yüzden bunu da kontrol edin
Golan Shay

52

Terminal.app'i açın, projenizin kök dizinine gidin ve şu komutu çalıştırın:

Yalnızca Swift için:

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

Yalnızca Obj-C için:

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

Obj-C + Swift için:

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

Obj-C + Swift + C + C ++ için:

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 '{}' \+

Terminal hızlı ipuçları:
ls: dizin içeriklerini listeleyin
cd: dizini değiştirin
Otomatik tamamlama
için sekmeye basın Boşlukların önüne "\" ters eğik çizgi koymayı unutmayın
Ana projeden bir klasör aşağı gitmenizi öneririm, böylece çerçevelerden kod sayımından kurtulursunuz


44

Terminalde proje dizinine geçin ve şunu çalıştırın:

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

Yalnızca belirli dosya türlerini istiyorsanız, aşağıdaki gibi bir şey deneyin:

find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l

Güzel, ancak yorumlar ve boş satırlar içeriyor ve bu nedenle tam olarak istenen şey değil. Bir LOC ölçüsü, kod biçimlendirme stilinden olabildiğince bağımsız olmalıdır ve bu nedenle, bir dosyadaki mantıksal bölümler arasındaki bir sürü boş satır veya yorum, toplama dahil edilmemelidir.
bassim

34

Xcode Statistician'a bakın, tam olarak istediğinizi yapar. Ayrıca başka ilginç istatistikler de sağlar, bu nedenle ara sıra eğlenmek için denemeye değer.

Gruplar halinde görünecek olsa da gerçek klasörlerin içine bakmayacağını unutmayın. Muhtemelen gerçek klasörler kullanmıyorsunuz, bu yüzden harika çalışıyor. Klasör kullanıyorsanız, her klasör için sayımı yapmanız ve bunları birbirine eklemeniz yeterlidir.

Not: Haziran 2012 itibarıyla, bu Xcode'un en son sürümleriyle düzgün çalışmıyor gibi görünüyor.


Objective-C ve C / C ++ 'ı karıştıranlar için bir uyarı: * .c veya * .cpp dosyalarını saymaz.
Emile Cormier

3
Xcode Statisician'ın bu noktada projenizdeki alt dizinlerle ilgilenmediğini unutmayın.
Matt__C

@Matt__C Evet, bu nedenle "Gerçek klasörlerin içine bakmayacağına dikkat edin". Maalesef biraz daha fazla manuel çalışma (ve yinelemeli klasör aramanın kodlanması kolaydır), ancak uygulanabilir.
Matthew Frederick

1
Lion üzerindeki X-Code 4.2 projeleriyle hiç çalışmıyor gibi görünüyor (en azından projem için herhangi bir istatistik vermedi)
BadPirate

Ah, serseri, artık modası geçmiş olabilir.
Matthew Frederick

32
  1. açık terminal
  2. projenize gidin
  3. projenizde aşağıdaki komutu çalıştırın:

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

    Veya:

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

(* Toplam sayıdan pod dosyalarının sayımı hariç)


16

Terminalde projenizin dizinine gidip şunu girin:

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

Bu size bir proje dökümünün yanı sıra her dosya ve bir bütün olarak proje için satır toplamını verecektir.


Hızlı bir şekilde her şeyi kaldırıp find . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
.swift'i

@WCByrne Alternatif olarak, orijinal komuta .swift ekleyebiliriz
RileyE

Aslında. Kütüphanelerin ve ödünç alınan kodların çoğu hala .h & .m biçiminde olduğundan, geri sayımın tam da yazdıklarıma indirgenmesine yardımcı oldu.
WCByrne

1
Kesinlikle. Herkesin kendi çözümü vardır. Ve eğer kendi ön find . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
ekleri

9

Nozzi'nin versiyonu benim için çalışmıyor, ama bu:

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

2
kısa ve öz - ancak kaynak kodu olmayan dosyalarda da satırları sayar. Yani aslında dosya adı uzantısı filtreleme burada çok önemlidir. OP, "kaynak kodu satırlarını" saymak istedi. herhangi bir metin satırı değil.
Motti Shneor

7

Hızlı ve kolay bir yol:

Bir normal ifade araması kullanın (Gezgin Bul, Bul> Normal İfade'yi seçin).

. \ n

Xcode arama kapsamlarıyla rahatlıkla çalışır ve saymak istediğiniz her tür satıra göre kolayca özelleştirebilirsiniz;).


Şimdi bu güzel! en hızlı değil, geliştirici ortamından ayrılmadan. Bunu sevdim. Muhtemelen daha iyi bir düzenli ifade, beyaz boşluk satırlarını ve buna benzer şeyleri saymaktan kaçınabilir.
Motti Shneor

Basit tutun. Bunu sevdim.
devios1

6

SLOCCount'u MacPorts üzerinden kurabilirsiniz . Ya da daha kabaca, wc -l kullanabilirsiniz.


CLOC, SCLOCount'a dayalıdır, bu yüzden CLOC'yi kullanmak için hala daha iyi bir yaklaşım olduğunu tahmin ediyorum
tiguero

4
"Toplam Tahmini Geliştirme Maliyeti = 1.934.715 $". Bu günümü yaptı!
Valeriy Van

4

Xcode ile aşina değilim, ancak ihtiyacınız olan tek şey bir dizin ağacındaki tüm bu belirli dosyalardan satır sayısını saymaksa, aşağıdaki komutu kullanabilirsiniz:

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

Joshua Nozzi'nin cevabını takiben , GNU'da bu tür dosyalar için normal ifadenin şöyle olacağını bulun :

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

ya da

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

Bu ikisinden biri ile biten tüm dosyaları maç için normal bir ifade kullanır .m, .mm, .cppveya .swift. Bu ifadeler hakkında daha fazla bilgiyi Dosya bulmada normal ifadeyi kullanma bölümünde bulabilirsiniz .

Mac OS find ile çalışıyorsanız, Motti Shneor tarafından yorumlarda açıklandığı gibi biraz farklı bir yaklaşıma ihtiyacınız vardır :

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

Her ikisi de şu şekilde bir çıktı sağlayacaktır:

234 ./file1
456 ./file2
690 total

Yani, ya bu şekilde tutabilir ya da sadece boru hattını tail -1(yani find ... | tail -1) tutabilirsiniz , böylece sadece son satırın toplam olduğunu elde edersiniz.


iyi --- bul -regex ". * \. vb MacOS'ta benim için çalışmıyor - yasadışı bir seçenek olduğunu iddia ediyor --r ne tür bir bul kullanıyorsunuz?
Motti Shneor,

@MottiShneor muhtemelen bu soruyu ve MacOS'taki \|diğerleri hakkında konuştukları yere bakmak istersiniz . --regexhem GNU find (kullandığım) hem de MacOS'ta geçerlidir.
fedorqui

iyi --- hayır. MacOS'ta genişletilmiş düzenli ifadeler için -E bulmanız gerektiğini öğrendim. Yukarıdaki önerilen komutu, alabileceğiniz OS-X'in üzerine kopyalayın ve kendiniz görün. MacOS-X'te man find size bunun için -E yapmanız gerektiğini söyler.
Motti Shneor

Son olarak, OSX'te arama yapacağınız yeri de sağlamalısınız. bu yüzden işe yarayan varyasyon şuna benzer: find -E. -regex ". * \. ([hmc] | mm | cp + | swift | pch) $" -exec wc -l {} +
Motti Shneor

@MottiShneor, MacOS'ta bu yaklaşımı sağladığınız için teşekkürler. Cevabı bununla güncelledim.
fedorqui 'SO zarar vermeyi bırak'

2

Tekrarladığım için özür dilerim. IMHO'nun en kolay yolu budur:

  1. Terminal tipinde

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

Bu, tüm dosyaları proje klasöründen konumuna kopyalayacaktır newFolder.

  1. Xcode Statistician'ı indirin ve birlikte kullanınnewFolder görüntü açıklamasını buraya girin

Bu araç her şeyi bulamıyor, daha çok aslında yalnızca geçerli klasöre bakıyor gibi görünüyor (alt klasörlerde bile)
Daniel

İlk adımın tüm dosyaları proje klasöründen bir klasöre kopyalamak olduğunu yazdım.
Nik Kov

Bu "XcodeStatistican" açık kaynak kodlu mu? Herhangi bir proje yapısında anında çalışmasını sağlardım ... Dizin ve Dosya yineleyicileri yapmak o kadar da zor değil. Ayrıca - buradan indirme - tanımlanmış bir geliştirici tarafından imzalanmamış - kötü amaçlı yazılım da olabilir: /
Motti Shneor

1

line-counteriyi bir alternatiftir. CLOC'den daha hafiftir ve diğer komutlardan çok daha güçlü ve kullanımı daha kolaydır.

Hızlı bir genel bakış

Aracı bu şekilde elde edersiniz

$ pip install line-counter

lineMevcut dizin altındaki dosya sayısını ve satır sayısını elde etmek için komutu kullanın (özyinelemeli olarak)

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

Daha fazla ayrıntı istiyorsanız, sadece kullanın 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

Ve bu aracın en iyi yanı, .gitignore'u yapılandırma dosyasını ona ekleyebilmenizdir. '.Gitignore'da yaptığınız gibi, ne tür dosyaların sayılacağını seçmek veya yok saymak için kurallar oluşturabilirsiniz. Evet, bu araç sadece daha kolay kaç satırım olduğunu bilmek için icat edildi.

Daha fazla açıklama ve kullanım burada: https://github.com/MorganZhang100/line-counter

Bu basit aracın yazarıyım. Umarım birine yardımcı olabilir.


1

Aşağıdaki gibi Mac'te CLOC kitaplığını uygulama adımları:

  1. Açık terminal

  2. Homebrew'i aşağıdaki komutu kullanarak kurun ,

    ruby -e "$ (curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install )"

    Terminalde çift tırnak dahil olmak üzere bu komutu kopyalayıp yapıştırın

    Sistem şifresini girin ve enter'a tıklayın.

  3. Terminal ekranını aşağıdaki gibi göreceksiniz, Homebrew Kurulumu

  4. Sistem olacaktır pop-up lütfen, bu kadar çok izinleri tüm izinleri izin

  5. Her şey yolunda giderse, aşağıdaki gibi terminal ekranını göreceksiniz, Homebrew kurulumu başarılı

  6. Kullanarak proje klasörüne yönlendirin cd drag & drop project folder path to terminal

  7. Şimdi CLOC'yi kurma zamanı aşağıdaki komutu kullanarak

    cloc. --exclude-dir = Bölmeler dosyalarını hariç tutmak için kullanılan bölmeler

    cloc. pod dosyaları dahil

  8. Her şey yolunda giderse, aşağıdaki gibi kod satırlarının sayısını gösterecektir.CLOC Sonucu

    Umarım birine yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.