Como descobrir quantas linhas de código existem em um projeto Xcode?

149

Existe uma maneira de determinar quantas linhas de código um projeto Xcode contém? Prometo não usar essas informações para medição gerencial ou para fins de benchmarking de funcionários. ;)

Dave
fonte
Se você quiser linhas, poderá usar esta resposta: stackoverflow.com/questions/5901758/… Mas inclui espaços
GeneCode

Respostas:

126

Confira o CLOC .

O cloc conta linhas em branco, linhas de comentários e linhas físicas do código fonte em muitas linguagens de programação.

( Compilações herdadas são arquivadas no SourceForge .)

Nathan Kinsinger
fonte
11
O CLOC está disponível via Homebrew. A facilidade de uso na linha de comando foi refrescante.
avelis
1
Eu amo o trocadilho no nome - sim, você pode dizer o quão produtivo tem sido, verificando seu CLOC.
bobobobo
Use o link acima para baixar './cloc-1.56.pl' versão perm da ferramenta cloc. Certifique-se de ativar a permissão de execução no arquivo cloc-1.56.pl usando o comando 'chmod u + x cloc-1.56.pl'. Se o seu código-fonte estiver localizado no diretório 'project_code', basta executar o seguinte comando.
JZ.
233

Eu vejo isso flutuando e uso sozinho:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -print0 | xargs -0 wc -l
Joshua Nozzi
fonte
2
Para lidar com subdiretórios com espaços nos nomes que você precisa: encontre. "(" -name " .m" - ou - name ".mm" - ou - name "* .cpp" ")" -print0 | xargs -0 wc -l
Matt__C
2
Esta publicação no blog pode ajudar: allara.blogspot.co.uk/2010/12/…
Eric Brotto
12
Nós publicamos respostas no SO, não links para entradas de blog que fornecem praticamente a mesma resposta.
21139 Joshua Nozzi
6
parece que os testes .m e .mm estão faltando um * (editado: parece que o SO não está processando aqueles sem uma barra anterior). O item acima não estava funcionando para mim até que eu os adicionasse: "(" -name "* .m" -ou -name "* .mm" -ou -name "* .cpp" ")" -print0 | xargs -0 wc -l
bladnman
2
Nota para utilizadores de Swift - substituir ou adicionar outro 'ou' com o .swift extensão de arquivo
Byron Coetsee
79

Eu tenho usado o CLOC como mencionado porNathan Kinsinger e é bastante fácil de usar. É um script PERL que você pode adicionar e executar no diretório do projeto.

O PERL já faz parte do Mac OS e você pode chamar o script dessa maneira para descobrir o número de linhas que você escreveu:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

Este é um exemplo de saída que obtive desse 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
-------------------------------------------------------------------------------
tiguero
fonte
4
Agradável! Eu gosto disso melhor do que minha própria resposta. :-)
Joshua Nozzi
1
Pode ser necessário fazer o download do script primeiro. Em seguida, navegue até o diretório em que esse script está e execute esse comando com qualquer nome de arquivo que você baixou.
Prolfe 27/03
Deve ser cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAre e não como acima, se você instalar o perl do zero, certifique-se de inserir a versão atual do perl (a minha era 5.30.1, então basicamente cloc perl-5.30.1.pl ./)
Golan Shay
1
Uma última coisa, eu tive que executar o Span Moo de acordo com o erro que apareceu ao executá-lo pela primeira vez, então faça o checkout para esse também
Golan Shay
50

Abra o Terminal.app, vá para o diretório raiz do seu projeto e execute este comando:

Apenas para Swift:

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

Apenas para Obj-C:

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

Para Obj-C + Swift:

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

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

Dicas rápidas sobre o terminal:
ls: listar o conteúdo do diretório
cd: change directory
Pressione a tecla Tab para completar automaticamente
Lembre-se de colocar a barra invertida "\" antes dos espaços
. Sugiro que desative uma pasta do projeto principal para se livrar da contagem de códigos das estruturas

Esqarrouth
fonte
44

No terminal, mude para o diretório do projeto e execute:

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

Se você deseja apenas determinados tipos de arquivo, tente algo como

find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l
Andrew McGregor
fonte
Bom, mas inclui comentários e linhas em branco e, portanto, não é exatamente o que foi solicitado. Uma medida LOC deve ser o mais independente possível do estilo de formatação de código e, portanto, um monte de linhas em branco ou comentários entre partes lógicas em um arquivo não devem contar para a soma.
Bassim
34

Confira o Estatístico do Xcode, ele faz exatamente o que você deseja. Ele também fornece outras estatísticas interessantes, portanto vale a pena correr de vez em quando.

Observe que ele não procurará dentro de pastas reais, embora em grupos. É provável que você não esteja usando pastas reais, por isso funcionará muito bem. Se você estiver usando pastas, basta fazer a contagem em cada pasta e adicioná-las.

Nota: Em junho de 2012, parece que isso não funciona corretamente com as versões mais recentes do Xcode.

Matthew Frederick
fonte
Apenas um alerta para aqueles que misturam Objective-C e C / C ++: ele não conta arquivos * .c ou * .cpp.
Emile Cormier
3
Observe que o Xcode Statisician não lida com subdiretórios no seu projeto neste momento.
Matt__C
@Matt__C Sim, daí "Observe que ele não procurará dentro de pastas reais". Trabalho um pouco mais manual, infelizmente (e a pesquisa recursiva de pastas é fácil de codificar), mas é viável.
Matthew Frederick
1
Parece que ele não funciona em todos com X-Code 4.2 projetos em Lion (pelo menos não deu quaisquer estatísticas para o meu projeto)
BadPirate
Ah, que chatice, pode estar desatualizado agora.
Matthew Frederick
31
  1. terminal aberto
  2. navegue para o seu projeto
  3. execute o seguinte comando dentro do seu projeto:

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

    Ou:

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

(* Excluindo a contagem de arquivos de pod da contagem total)

Shan Shafiq
fonte
16

Se você for para o diretório do seu projeto no terminal e digite:

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

Isso fornecerá uma análise detalhada do projeto, bem como o total de linhas para cada arquivo e o projeto como um todo.

RileyE
fonte
Para rápida acabou de remover tudo e acrescentou .swiftfind . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne
@WCByrne Alternativamente, podemos adicionar .swift ao comando originais
RileyE
De fato. Como a maioria das bibliotecas e códigos emprestados ainda estão em .h e .m, isso ajudou a diminuir a contagem do que eu havia escrito.
precisa saber é o seguinte
1
Absolutamente. Todo mundo tem sua própria solução. E se eles tiverem seu próprio prefixo (por exemplo: "RE"), eles podem até terfind . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
RileyE 22/01/15
9

A versão de Nozzi não funciona para mim, mas esta:

find . -type f -print0 | xargs -0 cat | wc -l
Pascalius
fonte
1
curto e conciso - mas conta também com linhas em arquivos que não são de código-fonte. Na verdade, a filtragem de extensão de nome de arquivo é crucial aqui. O OP queria contar "linhas de código fonte". não há linhas de texto.
Motti Shneor
7

Uma maneira rápida e fácil:

Use uma pesquisa regex (Find Navigator, escolha Find> Expressão regular).

. \ n

Funciona de maneira conveniente com os escopos de pesquisa do Xcode e você pode personalizá-lo facilmente para qualquer tipo de linha que queira contar;).

Patrick Pijnappel
fonte
Agora isso é legal! não é o mais rápido, mas sem sair do ambiente de desenvolvimento. Eu gosto disso. Provavelmente, uma expressão regular melhor pode evitar a contagem de linhas de espaço em branco e coisas assim.
Motti Shneor
Mantenha simples. Eu gosto disso.
devios1 19/03
6

Você pode instalar o SLOCCount através do MacPorts. Ou, mais grosseiramente, você pode usar wc -l.

Anthony
fonte
CLOC é baseado em SCLOCount então eu acho que ainda é uma melhor abordagem para uso CLOC
tiguero
4
"Custo total estimado para desenvolver = US $ 1.934.715". Isto fez o meu dia!
Valeriy Van
4

Não estou familiarizado com o xcode, mas se tudo o que você precisa é contar o número de linhas de todos esses arquivos específicos em uma árvore de diretórios, você pode usar o seguinte comando:

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

Seguindo a resposta de Joshua Nozzi , no GNU, encontre a expressão regular para esses arquivos:

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

ou mesmo

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

este usa uma expressão regular para coincidir com todos os arquivos que terminam em ambos .m, .mm, .cppou .swift. Você pode ver mais informações sobre essas expressões em Como usar regex na localização de arquivos .

Se você estiver trabalhando com a localização do Mac OS , precisará de uma abordagem um pouco diferente, conforme explicado por Motti Shneor nos comentários:

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

Ambos fornecerão uma saída no formato de:

234 ./file1
456 ./file2
690 total

Portanto, você pode mantê-lo assim ou apenas canalizar tail -1(ou seja find ... | tail -1) para que você obtenha a última linha como sendo o total.

fedorqui 'Então pare de prejudicar'
fonte
.. bem --- a descoberta -regex" * \ etc não funciona para mim no MacOS - afirma uma opção ilegal --r que tipo de descoberta você está usando?
Motti Shneor
@MottiShneor, você provavelmente deseja verificar esta questão em que eles falam \|e outros no MacOS. --regexé válido no GNU find (o que eu uso) e no MacOS.
fedorqui 'SO stop prejudicar'
bem não. Descobri no MacOS que você deve encontrar -E para expressões regulares estendidas. Copie o comando sugerido acima para o OS-X que puder obter e veja por si mesmo. O que encontrar no MacOS-X diz que você deve -E para isso.
Motti Shneor
Por fim, você também deve fornecer um caminho para pesquisar no OSX. então a variação que funciona, fica assim: encontre -E. -regex ". * \. ([hmc] | mm | cp + | swift | pch) $" -exec wc -l {} +
Motti Shneor
@MottiShneor, obrigado por fornecer a abordagem no MacOS. Eu atualizei a resposta com isso.
fedorqui 'Então, pare de prejudicar'
2

Desculpe por repetir. Essa é a maneira mais fácil IMHO:

  1. No tipo de terminal

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

Isso copiará todos os arquivos da pasta do projeto para newFolder.

  1. Baixe o Xcode Statistician e use-o comnewFolder insira a descrição da imagem aqui
Nik Kov
fonte
Essa ferramenta não encontra tudo, parece mais com a aparência da pasta atual (nem mesmo com as subpastas) #
417 Daniel Daniel
Eu escrevi que o primeiro passo é copiar todos os arquivos da pasta do projeto para uma pasta.
Nik Kov
Esse código aberto é "XcodeStatistican" por acaso? Eu faria isso funcionar em qualquer estrutura de projeto em pouco tempo ... Os iteradores de diretório e arquivo não são tão difíceis de fazer. Além disso - o download a partir daqui - não é assinado por um desenvolvedor identificado - o mesmo pode ser malware: /
Motti Shneor
1

line-counteré uma boa alternativa É mais leve que o CLOC e muito mais poderoso e fácil de usar do que outros comandos.

Uma rápida visão geral

É assim que você obtém a ferramenta

$ pip install line-counter

Use o linecomando para obter a contagem de arquivos e a linha no diretório atual (recursivamente)

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

Se você quiser mais detalhes, basta usar 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 a melhor parte dessa ferramenta é que você pode adicionar .gitignore como o arquivo de configuração. Você pode configurar regras para selecionar ou ignorar que tipo de arquivos contar, exatamente como o que você faz em '.gitignore'. Sim, essa ferramenta foi inventada para facilitar o conhecimento de quantas linhas eu tenho.

Mais descrição e uso estão aqui: https://github.com/MorganZhang100/line-counter

Eu sou o autor desta ferramenta simples. Espero que possa ajudar alguém.

Morgan Zhang
fonte