Як дізнатися, скільки рядків коду існує в проекті Xcode?


149

Чи є спосіб визначити, скільки рядків коду містить проект Xcode? Я обіцяю не використовувати таку інформацію для управлінських вимірювань або співпраці співробітників. ;)


Якщо ви хочете рядки, то можете скористатися цією відповіддю: stackoverflow.com/questions/5901758/… Але вона включає пробіли
GeneCode

Відповіді:


126

Перевірте CLOC .

cloc рахує порожні рядки, рядки коментарів та фізичні рядки вихідного коду багатьма мовами програмування.

( Спадкові версії архівуються на SourceForge .)


11
CLOC доступний через Homebrew. Простота використання в командному рядку була освіжаючою.
avelis

1
Я люблю каламбур в назві там - так, ви можете сказати, наскільки продуктивними ви були, перевіривши свій CLOC.
бобобобо

Використовуйте вище посилання для завантаження './cloc-1.56.pl' perm-версії інструменту Cloc. Переконайтеся, що увімкнено дозвіл на виконання файлу cloc-1.56.pl за допомогою команди 'chmod u + x cloc-1.56.pl'. Якщо ваш вихідний код знаходиться в каталозі 'project_code', вам просто потрібно виконати наступну команду.
JZ.

233

Я бачу, як це плаває навколо, і я сам це використовую

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

2
Для обробки підкаталів з пробілами у назвах вам потрібно: знайти. "(" -name " .m" -or -name " .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
Matt__C

2
Ця публікація в блозі може допомогти: allara.blogspot.co.uk/2010/12/…
Ерік Бротто

12
Відповіді ми публікуємо на ТАК, а не на посилання на записи в блогах, які дають майже таку ж відповідь.
Джошуа Ноцзі

6
виявляється, що в тестах .m та .mm відсутнє * (відредаговано: здається, ТАК не рендерує ті, що не мають попереднього косого кута). "(" -name "* .m" -or -name "* .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
blanman

2
Примітка для користувачів Swift - замініть або додайте інше 'або' з розширенням файлу .swift
Байрон Коетзе

79

Я використовував CLOC, як згадувалося,Nathan Kinsinger і він досить простий у використанні. Це сценарій PERL, який ви можете додавати та запускати зі свого каталогу проекту.

PERL вже є частиною Mac OS, і ви можете викликати сценарій таким чином, щоб дізнатися кількість написаних вами рядків:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

Це приклад результату, який я отримав з такої команди:

   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
Приємно! Мені це подобається краще, ніж моя власна відповідь. :-)
Джошуа Ноцці

1
Можливо, потрібно спочатку завантажити сценарій. Потім перейдіть до каталогу, де знаходиться цей скрипт, і запустіть цю команду з будь-яким ім'ям файлу, який ви завантажили.
prolfe

Має бути Cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAre, а не як вище, якщо ви встановлюєте perl з нуля, переконайтесь, що ви введете поточну версію perl (моя була 5.30.1, так що в основному Cloc perl-5.30.1.pl ./)
Голан Шай

1
І останнє, що мені довелося запустити проміжок Moo відповідно до помилки, яка з’явилася при його запуску вперше, тому оформити замовлення і для цього
Golan Shay

50

Відкрийте Terminal.app, увійдіть у кореневий каталог вашого проекту та виконайте цю команду:

Тільки для Swift:

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

Тільки для Obj-C:

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

Для Obj-C + Swift:

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

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

Швидкі поради щодо терміналу:
ls: вміст каталогу каталогу
cd: зміна каталогу
Натисніть на вкладку для автозаповнення. Не
забудьте поставити "\" зворотну косу риску перед пробілами.
Я пропоную відпустити одну папку вниз від основного проекту, щоб ви позбулися від кількості кодів у рамках


44

У терміналі перейдіть до каталогу проекту та запустіть:

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

Якщо вам потрібні лише певні типи файлів, спробуйте щось подібне

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

Приємно, але включає коментарі та порожні рядки, і тому це не зовсім те, що просили. Захід LOC повинен бути настільки незалежним від стилю форматування коду, наскільки це можливо, і, таким чином, кількість порожніх рядків або коментарів між логічними частинами файлу не повинна зараховуватися до суми.
bassim

34

Перевірте статистику Xcode, вона робить саме те, що ви хочете. Він також надає інші цікаві статистичні дані, тому варто побігати для розваги час від часу.

Зауважте, що він не загляне всередину реальних папок, хоча буде виглядати групами. Швидше за все, ви не використовуєте справжні папки, тому це буде чудово. Якщо ви використовуєте папки, то вам просто потрібно зробити підрахунок у кожній папці і скласти їх разом.

Примітка: станом на червень 2012 року, здається, це не працює належним чином з останніми версіями Xcode.


Лише голова для тих, хто змішує Objective-C і C / C ++: не враховує файли * .c або * .cpp.
Еміль Корм'є

3
Зауважте, що Xcode Statisician наразі не займається підкаталогами у вашому проекті.
Matt__C

@Matt__C Aye, звідси "Зверніть увагу, що він не загляне всередину реальних папок". Трохи більш ручна робота, на жаль (і рекурсивний пошук папок легко кодувати), але це працездатно.
Меттью Фредерік

1
Здається, він взагалі не працює з проектами X-Code 4.2 щодо Lion (принаймні, він не давав статистики для мого проекту)
BadPirate

Ах, кумедний, зараз він може застаріти.
Меттью Фредерік

31
  1. відкритий термінал
  2. перейдіть до свого проекту
  3. виконати наступну команду всередині вашого проекту:

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

    Або:

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

(* Виключаючи кількість файлів струків із загальної кількості)


16

Якщо ви переходите до каталогу свого проекту в терміналі і вводите:

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

Це дасть вам розбивку на проект, а також загальний рядок для кожного файлу та проекту в цілому.


Для швидкого просто видалили все і додали .swiftfind . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne

@WCByrne Альтернативно, ми можемо просто додати .swift до початкової команди
RileyE

Справді. Оскільки більшість бібліотек і запозичений код все ще знаходяться в .h & .m, це допомогло зрівняти кількість до того, що я написав.
WCByrne

1
Абсолютно. У кожного своє рішення. А якщо у них є власний префікс (наприклад: "RE"), вони могли б навіть зробитиfind . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
RileyE

9

Версія Nozzi для мене не працює, але ця:

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

1
короткий і стислий - але він рахує рядки також у файлах без вихідного коду. Тож насправді тут важлива фільтрація розширень імен файлів. ОП хотіла порахувати "рядки вихідного коду". не будь-які рядки тексту.
Motti Shneor

7

Швидкий і простий спосіб:

Використовуйте пошук по регулярному вираженню (Find Navigator, виберіть Find> Regular Expression).

. \ n

Працює зручно з областями пошуку Xcode, і ви можете легко налаштувати його під будь-який тип рядка, який ви хочете порахувати;).


Тепер це приємно! не найшвидший, але не залишаючи середовище розробників. Мені це подобається. Можливо, кращий регулярний вираз дозволяє уникнути підрахунку ліній пробілу та подібних речей.
Motti Shneor

Не ускладнювати. Мені це подобається.
devios1

6

Ви можете встановити SLOCCount через MacPorts. Або, більш грубо, ви можете використовувати wc -l.


CLOC базується на SCLOCount, тому я гадаю, що це все-таки кращий підхід до використання CLOC
tiguero

4
"Загальна кошторисна вартість на розробку = 1 934 715 доларів". Це зробив мій день!
Валерій Ван

4

Я не знайомий з кодом xcode, але якщо все, що вам потрібно, це підрахувати кількість рядків з усіх цих конкретних файлів у дереві каталогів, ви можете скористатися такою командою:

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

Після відповіді Джошуа Ноцці у GNU знайти регулярний вираз для таких файлів буде таким:

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

або навіть

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

це використовує регулярний вираз , щоб відповідати всім файлам , що закінчується в будь-якому .m, .mm, .cppабо .swift. Додаткову інформацію про ці вирази ви можете побачити в розділі Як використовувати регулярний вираз у пошуку файлів .

Якщо ви працюєте з Mac OS find , тоді вам потрібен дещо інший підхід, як пояснив Motti Shneor у коментарях:

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

Обидва нададуть вихід у формі:

234 ./file1
456 ./file2
690 total

Таким чином, ви можете або тримати його таким чином, або просто "трубу" tail -1(тобто find ... | tail -1), щоб ви отримали останній рядок загальним.


.. добре --- знахідка -regex »* \ і так далі не працює для мене на MacOS - це стверджує нелегальний варіант --r якого роду знахідкою ви використовуєте?
Моті Шнеор

@MottiShneor Ви, мабуть, хочете перевірити це питання, де вони говорять про \|інших та інших в MacOS. --regexдійсний як у знаходженні GNU (той, який я використовую), так і в MacOS.
fedorqui 'ТАК перестаньте шкодити'

ну --- ні. Я дізнався, що в MacOS ви повинні знайти -E для розширених регулярних виразів. Скопіюйте запропоновану вище команду на будь-яку OS-X, яку ви можете отримати, і переконайтеся самі. людина знайде на MacOS-X каже вам, що ви повинні -E для цього.
Motti Shneor

Нарешті, ви також повинні вказати шлях, де шукати на OSX. тому варіант, який працює, виглядає приблизно так: знайти -E. -regex ". * \. ([hmc] | mm | cp + | swift | pch) $" -exec wc -l {} +
Motti Shneor

Дякуємо @MottiShneor за надання підходу в MacOS. Я оновив відповідь на це.
fedorqui 'ТАК перестаньте шкодити'

2

Вибачте за повторення. Це найпростіший спосіб IMHO:

  1. У термінальному типі

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

Це скопіює всі файли з папки проекту в newFolder.

  1. Завантажте статистику Xcode і використовуйте їїnewFolder введіть тут опис зображення

Цей інструмент не знаходить усього, він більше схожий на те, що він насправді виглядає лише в поточній папці (навіть не в папках)
Даніель

Я писав, що перший крок - скопіювати всі файли з папки проекту в одну папку.
Нік Ков

Це випадковий відкритий код "XcodeStatistican"? Я змусив би його працювати над будь-якою структурою проекту за найкоротший час ... Ітератори каталогів та файлів не так важко зробити. Також - завантаження звідси - не підписується ідентифікованим розробником - тому може бути зловмисне програмне забезпечення: /
Motti Shneor

1

line-counterє хорошою альтернативою. Він легший за CLOC і набагато потужніший і простіший у використанні, ніж інші команди.

Швидкий огляд

Ось як ви отримуєте інструмент

$ pip install line-counter

Використовуйте lineкоманду, щоб отримати кількість файлів та кількість рядків у поточному каталозі (рекурсивно)

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

Якщо ви хочете більше деталей, просто використовуйте 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

І найкращою частиною цього інструменту є те, що ви можете додати .gitignore як файл налаштування до нього. Ви можете налаштувати правила для вибору або ігнорування файлів, які слід рахувати, як і те, що ви робите в '.gitignore'. Так, цей інструмент щойно придуманий, щоб зрозуміти, скільки рядків у мене простіше.

Більш детальний опис та використання тут: https://github.com/MorganZhang100/line-counter

Я автор цього простого інструменту. Сподіваюся, це може комусь допомогти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.