Come scoprire quante righe di codice ci sono in un progetto Xcode?


149

C'è un modo per determinare quante righe di codice contiene un progetto Xcode? Prometto di non utilizzare tali informazioni a fini di misurazione manageriale o benchmarking dei dipendenti. ;)


Se vuoi linee, puoi usare questa risposta: stackoverflow.com/questions/5901758/… Ma include spazi
GeneCode

Risposte:


126

Dai un'occhiata a CLOC .

cloc conta le righe vuote, le righe di commento e le righe fisiche del codice sorgente in molti linguaggi di programmazione.

(Le build legacy sono archiviate su SourceForge .)


11
CLOC è disponibile tramite Homebrew. La facilità d'uso nella riga di comando era rinfrescante.
avelis,

1
Adoro il gioco di parole nel nome lì - sì, puoi dire quanto sei stato produttivo controllando il tuo CLOC.
Bobobobo,

Usa il link sopra per scaricare './cloc-1.56.pl' versione perm dello strumento cloc. Assicurati di abilitare il permesso di esecuzione sul file cloc-1.56.pl usando il comando 'chmod u + x cloc-1.56.pl'. Se il tuo codice sorgente si trova nella directory 'project_code' Devi solo eseguire il seguente comando.
JZ.

233

Vedo questo fluttuare in giro e lo uso da solo:

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

2
Per gestire i sottodirectory con spazi nei nomi necessari: trova. "(" -name " .m" -o -name " .mm" -o -name "* .cpp" ")" -print0 | xargs -0 wc -l
Matt__C

2
Questo post sul blog può essere d'aiuto: allara.blogspot.co.uk/2010/12/…
Eric Brotto

12
Pubblichiamo risposte su SO, non collegamenti a post di blog che forniscono più o meno la stessa risposta.
Joshua Nozzi,

6
sembra che ai test .m e .mm manchi un * (modificato: sembra che SO non stia eseguendo il rendering di quelli senza una barra precedente) Quanto sopra non funzionava per me fino a quando non li ho aggiunti come tali: find. "(" -name "* .m" -or -name "* .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
bladnman,

2
Nota per gli utenti Swift: sostituisci o aggiungi un altro 'o' con l'estensione di file .swift
Byron Coetsee,

79

Ho usato CLOC come menzionato daNathan Kinsinger ed è abbastanza facile da usare. È uno script PERL che è possibile aggiungere ed eseguire dalla directory del progetto.

PERL fa già parte di Mac OS e puoi invocare lo script in questo modo per scoprire il tuo numero di righe che hai scritto:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

Questo è un esempio di output ottenuto da tale comando:

   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
Bello! Mi piace di più della mia risposta. :-)
Joshua Nozzi il

1
Potrebbe essere necessario scaricare prima lo script. Quindi vai alla directory in cui si trova quello script ed esegui quel comando con qualsiasi nome di file scaricato.
prolfe

Dovrebbe essere cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAre e non come sopra, se installi perl da zero assicurati di inserire l'attuale versione perl (la mia era 5.30.1 quindi sostanzialmente cloc perl-5.30.1.pl ./)
Golan Shay,

1
Un'ultima cosa, ho dovuto eseguire Moo per errore che è apparso quando è stato eseguito per la prima volta, quindi fai il checkout anche per quello
Golan Shay,

50

Apri Terminal.app, vai nella directory principale del tuo progetto ed esegui questo comando:

Solo per Swift:

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

Solo per Obj-C:

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

Per Obj-C + Swift:

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

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

Suggerimenti rapidi per il terminale:
ls: elenca il contenuto della directory
cd: cambia directory
Premi la scheda per completare automaticamente
Ricorda di mettere la barra rovesciata "\" prima degli spazi
Suggerisco di andare giù di una cartella dal progetto principale in modo da eliminare il conteggio del codice dai framework


44

Nel terminale, passare alla directory del progetto ed eseguire:

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

Se vuoi solo determinati tipi di file, prova qualcosa del genere

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

Bello, ma include commenti e righe vuote e quindi non è esattamente quello che è stato richiesto. Una misura LOC dovrebbe essere il più indipendente possibile dallo stile di formattazione del codice e quindi un gruppo di righe vuote o commenti tra parti logiche in un file non dovrebbe essere conteggiato nella somma.
bassim,

34

Dai un'occhiata a Xcode Statistician, fa esattamente quello che vuoi. Fornisce anche altre statistiche interessanti, quindi vale la pena correre per divertimento di tanto in tanto.

Nota che non apparirà all'interno di cartelle reali, anche se apparirà in gruppi. Probabilmente non stai usando cartelle reali, quindi funzionerà alla grande. Se stai usando le cartelle, devi solo fare il conteggio in ciascuna cartella e sommarle.

Nota: a partire da giugno 2012, sembra che questo non funzioni correttamente con le ultime versioni di Xcode.


Solo un avvertimento per coloro che mescolano Objective-C e C / C ++: non conta i file * .c o * .cpp.
Emile Cormier,

3
Nota che Xcode Statisician non ha a che fare con i sottodir del progetto a questo punto.
Matt__C

@Matt__C Sì, quindi "Nota che non guarderà all'interno delle cartelle reali". Un po 'più di lavoro manuale, sfortunatamente (e la ricerca di cartelle ricorsive è facile da codificare), ma è praticabile.
Matthew Frederick,

1
Sembra che non funzioni affatto con i progetti X-Code 4.2 su Lion (almeno non ha fornito alcuna statistica per il mio progetto)
BadPirate

Ah, peccato, ora potrebbe essere obsoleto.
Matthew Frederick,

31
  1. terminale aperto
  2. vai al tuo progetto
  3. eseguire il comando seguente all'interno del progetto:

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

    O:

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

(* Escludendo il conteggio dei file pod dal conteggio totale)


16

Se vai alla directory del tuo progetto nel terminale e inserisci:

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

Ciò fornirà una suddivisione del progetto, nonché il totale della linea per ciascun file e il progetto nel suo insieme.


Per swift ho appena rimosso tutto e aggiunto .swiftfind . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne il

@WCByrne In alternativa, possiamo semplicemente aggiungere .swift al comando originale
RileyE

Infatti. Dal momento che la maggior parte delle biblioteche e il codice preso in prestito sono ancora in.
WCByrne,

1
Assolutamente. Ognuno ha la propria soluzione. E se hanno il loro prefisso (ad esempio: "RE"), potrebbero anche farlofind . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
RileyE

9

La versione di Nozzi non funziona per me, ma questa:

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

1
breve e conciso, ma conta le righe anche su file non di codice sorgente. Quindi in realtà il filtro per l'estensione del nome è cruciale qui. L'OP voleva contare le "righe del codice sorgente". nessuna riga di testo.
Motti Shneor,

7

Un modo semplice e veloce:

Usa una ricerca regex (Trova Navigator, scegli Trova> Espressione regolare).

. \ N

Funziona comodamente con gli ambiti di ricerca Xcode e puoi personalizzarlo facilmente su qualsiasi tipo di linea che desideri contare;).


Ora è bello! non il più veloce, ma senza uscire dall'ambiente di sviluppo. Mi piace. Probabilmente una migliore espressione regolare può evitare di contare le righe dello spazio bianco e cose del genere.
Motti Shneor,

Mantienilo semplice. Mi piace.
devios1

6

Puoi installare SLOCCount tramite MacPorts . O, più rozzamente, puoi usare wc -l.


CLOC è basato su SCLOCount, quindi immagino che sia ancora un approccio migliore per usare CLOC
tiguero

4
"Costo stimato totale da sviluppare = $ 1.934.715". Mi ha cambiato la giornata in positivo!
Valeriy Van,

4

Non ho familiarità con xcode, ma se tutto ciò che serve è contare il numero di righe da tutti quei file specifici all'interno di un albero di directory, è possibile utilizzare il seguente comando:

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

Seguendo la risposta di Joshua Nozzi , in GNU trovare l'espressione regolare per tali file sarebbe come:

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

o anche

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

questo utilizza un'espressione regolare per abbinare tutti i file che terminano in due .m, .mm, .cppo .swift. Puoi vedere maggiori informazioni su quelle espressioni in Come usare regex nella ricerca di file .

Se stai lavorando con Mac OS find , allora hai bisogno di un approccio leggermente diverso, come spiegato da Motti Shneor nei commenti:

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

Entrambi forniranno un output sotto forma di:

234 ./file1
456 ./file2
690 total

Quindi puoi mantenerlo in questo modo o semplicemente reindirizzare tail -1(cioè find ... | tail -1) in modo che l'ultima riga sia il totale.


bene --- il find -regex ". * \. etc non funziona per me su MacOS - afferma un'opzione illegale --r che tipo di ricerca stai usando?
Motti Shneor

@MottiShneor probabilmente vorrai controllare questa domanda in cui parlano \|e altri in MacOS. --regexè valido sia in GNU find (quello che uso) sia in MacOS.
fedorqui "SO smettere di danneggiare"

Beh no. Ho scoperto in MacOS che devi trovare -E per espressioni regolari estese. Copia il comando suggerito sopra su qualunque OS-X puoi ottenere e vedi di persona. man find su MacOS-X ti dice che devi -E per quello.
Motti Shneor,

Infine, devi anche fornire un percorso dove cercare su OSX. quindi la variazione che funziona sembra così: trova -E. -regex ". * \. ([hmc] | mm | cp + | swift | pch) $" -exec wc -l {} +
Motti Shneor

@MottiShneor grazie per aver fornito l'approccio in MacOS. Ho aggiornato la risposta con quello.
fedorqui 'SO smettere di danneggiare'

2

Scusa per la ripetizione. Questo è il modo più semplice IMHO:

  1. Nel tipo di terminale

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

Questo copierà tutti i file dalla cartella del progetto a newFolder.

  1. Scarica Xcode Statistician e usalo connewFolder inserisci qui la descrizione dell'immagine

Questo strumento non trova tutto, sembra più come se fosse effettivamente solo nella cartella corrente (nemmeno nelle sottocartelle)
Daniel

Ho scritto che il primo passo è copiare tutti i file dalla cartella del progetto in una cartella.
Nik Kov,

È "XcodeStatistican" open source per caso? Lo farei funzionare su qualsiasi struttura di progetto in pochissimo tempo ... Gli iteratori di directory e file non sono così difficili da fare. Inoltre - il download da qui - non è firmato da uno sviluppatore identificato - quindi potrebbe essere un malware: /
Motti Shneor

1

line-counterè una buona alternativa. È più leggero di CLOC e molto più potente e più facile da usare rispetto ad altri comandi.

Una rapida panoramica

Ecco come si ottiene lo strumento

$ pip install line-counter

Utilizzare il linecomando per ottenere il conteggio dei file e il conteggio delle righe nella directory corrente (ricorsivamente)

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

Se vuoi maggiori dettagli, basta usare 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

E la parte migliore di questo strumento è, è possibile aggiungere .gitignore come configurare il file ad esso. È possibile impostare regole per selezionare o ignorare quale tipo di file contare esattamente come quello che si fa in '.gitignore'. Sì, questo strumento è stato appena inventato per sapere quante linee ho più facile.

Ulteriori descrizioni e utilizzo sono disponibili qui: https://github.com/MorganZhang100/line-counter

Sono l'autore di questo semplice strumento. Spero che possa aiutare qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.