कैसे पता करें कि Xcode प्रोजेक्ट में कोड की कितनी लाइनें हैं?


149

क्या यह निर्धारित करने का एक तरीका है कि कोड की एक Xcode परियोजना में कितनी लाइनें हैं? मैं प्रबंधकीय माप या कर्मचारी बेंचमार्किंग उद्देश्यों के लिए ऐसी जानकारी का उपयोग नहीं करने का वादा करता हूं। ;)


यदि आप लाइनें चाहते हैं, तो आप इस उत्तर का उपयोग कर सकते हैं: stackoverflow.com/questions/5901758/… लेकिन इसमें रिक्त स्थान शामिल हैं
GeneCode

जवाबों:


126

की जाँच करें Cloc

क्लोक कई प्रोग्रामिंग भाषाओं में रिक्त लाइनों, टिप्पणी लाइनों और स्रोत कोड की भौतिक रेखाओं को गिनता है।

( लिगेसी बिल्ड सोर्सफोर्ग पर संग्रहीत हैं ।)


11
CLOC Homebrew के माध्यम से उपलब्ध है। कमांड लाइन में उपयोग की आसानी ताज़ा थी।
ऐवेलिस

1
मुझे वहां के नाम से वाक्य बहुत पसंद है - हाँ आप बता सकते हैं कि आप अपने CLOC की जाँच करके कितने उत्पादक हैं।
बोबोबो

'./Cloc-1.56.pl' क्लॉक टूल के परमिट संस्करण को डाउनलोड करने के लिए उपरोक्त लिंक का उपयोग करें। सुनिश्चित करें कि आप 'chmod u + x cloc-1.56.pl' कमांड का उपयोग करके 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
हम SO पर उत्तर पोस्ट करते हैं, न कि ब्लॉग प्रविष्टियों के लिंक जो बहुत समान उत्तर प्रदान करते हैं।
जोशुआ नोज़ी

6
यह प्रतीत होता है .m और .mm परीक्षण एक याद कर रहे हैं * (संपादित: लगता है कि SO पूर्ववर्ती स्लैश के बिना उन का प्रतिपादन नहीं कर रहा है) उपरोक्त मेरे लिए तब तक काम नहीं कर रहा था जब तक कि मैंने उन्हें इस तरह से नहीं जोड़ा: खोजें। "(" -name "* .m" -or -name "* .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
bladnman

2
स्विफ्ट उपयोगकर्ताओं के लिए नोट - फ़ाइल एक्सटेंशन के साथ एक और 'या' को बदलें या जोड़ें।
बायरन

79

मैं उपयोग कर रहा है Cloc रूप से उल्लेख किया हैNathan Kinsinger और यह काफी आसान उपयोग करने के लिए है। यह एक पेरेल स्क्रिप्ट है जिसे आप अपने प्रोजेक्ट डायरेक्टरी से जोड़ और चला सकते हैं।

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
आपको पहले स्क्रिप्ट डाउनलोड करने की आवश्यकता हो सकती है। फिर उस डायरेक्टरी में नेविगेट करें जहां वह स्क्रिप्ट है और जो भी फ़ाइल नाम आपने डाउनलोड किया है, उस कमांड को चलाएं।
pro

क्लोक perl-1.56.pl होना चाहिए ।/YourDirectoryWhereYourSourcesAre और ऊपर नहीं, यदि आप खरोंच से पर्ल स्थापित करते हैं, तो सुनिश्चित करें कि आप वर्तमान पर्ल संस्करण में प्रवेश करते हैं (मेरा 5.30.1 था इसलिए मूल रूप से क्लर्ल perl-5.30.1.pl/)
गोलन शाय

1
एक आखिरी बात, मुझे गलती के अनुसार एमओयू स्पैन चलाना था जो पहली बार चलने पर दिखाई दिया था इसलिए उस एक के लिए भी चेकआउट किया गया था
गोलन शाय

50

Terminal.app खोलें, अपनी परियोजना की मूल निर्देशिका में जाएं, और इस कमांड को चलाएं:

केवल स्विफ्ट के लिए:

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

केवल ओब्ज-सी के लिए:

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

ओब्ज-सी + स्विफ्ट के लिए:

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

ओब्ज-सी + स्विफ्ट + सी + सी ++ के लिए:

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 माप संभव के रूप में कोड स्वरूपण शैली से स्वतंत्र होना चाहिए और इस तरह एक फ़ाइल में तार्किक भागों के बीच रिक्त लाइनों या टिप्पणियों का एक गुच्छा योग की ओर नहीं गिनना चाहिए।
बासिम

34

Xcode स्टेटिस्टिशियन की जाँच करें, यह वही करता है जो आप चाहते हैं। यह अन्य दिलचस्प आंकड़े भी प्रदान करता है इसलिए अभी और फिर मौज-मस्ती के लायक है।

ध्यान दें कि यह वास्तविक फ़ोल्डरों के अंदर नहीं दिखेगा, हालांकि यह समूहों में दिखेगा। ऑड्स आप वास्तविक फ़ोल्डर का उपयोग नहीं कर रहे हैं तो यह बहुत अच्छा काम करेगा। यदि आप फ़ोल्डर्स का उपयोग कर रहे हैं तो आपको बस प्रत्येक फ़ोल्डर में गिनती करनी होगी और उन्हें एक साथ जोड़ना होगा।

नोट: जून, 2012 तक, ऐसा लगता है कि यह Xcode के नवीनतम संस्करणों के साथ ठीक से काम नहीं करता है।


ऑब्जेक्टिव- C और C / C ++ को मिक्स करने वालों के लिए सिर्फ एक हेड: यह * .c या * .cpp फाइलों की गिनती नहीं करता है।
एमिल कॉर्मियर

3
ध्यान दें कि Xcode स्टेटिसियन इस बिंदु पर आपके प्रोजेक्ट में उपविभागों के साथ व्यवहार नहीं करता है।
मैट__सी

@Matt__C Aye, इसलिए "ध्यान दें कि यह वास्तविक फ़ोल्डरों के अंदर नहीं दिखेगा"। थोड़ा और अधिक मैनुअल काम, दुर्भाग्य से (और पुनरावर्ती फ़ोल्डर खोज कोड के लिए आसान है), लेकिन यह व्यावहारिक है।
मैथ्यू फ्रेडरिक

1
लगता है यह शेर पर एक्स-कोड 4.2 परियोजनाओं के साथ बिल्कुल भी काम नहीं करता है (कम से कम यह मेरी परियोजना के लिए कोई आँकड़े नहीं दिया)
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

@ वैकल्पिक रूप से, हम सिर्फ मूल कमांड में .swift जोड़ सकते हैं
रिले

वास्तव में। चूँकि अधिकांश पुस्तकालय और उधार कोड अभी भी .h & में हैं। इसने गिनती को नीचे ट्रिम करने में मदद की जो मैंने लिखा था।
WCByrne

1
पूर्ण रूप से। सभी का अपना समाधान है। और अगर उनका अपना उपसर्ग है (जैसे: "आरई"), तो वे भी कर सकते हैंfind . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
रिले

9

नोज़ी का संस्करण मेरे लिए काम नहीं करता है, लेकिन यह एक:

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

1
संक्षिप्त और संक्षिप्त - लेकिन यह गैर-स्रोत-कोड फ़ाइलों पर भी लाइनें गिनाता है। तो वास्तव में फ़ाइलनाम-विस्तार फ़िल्टरिंग यहाँ महत्वपूर्ण है। ओपी "सोर्स कोड लाइन्स" को गिनना चाहता था। कोई पाठ पंक्तियाँ नहीं।
मोटी श्नोर

7

एक त्वरित और आसान तरीका:

एक रेगेक्स खोज का उपयोग करें (नेविगेटर ढूंढें, खोजें> नियमित अभिव्यक्ति चुनें)।

। \ N

Xcode खोज स्कोप के साथ आसानी से काम करता है और आप इसे आसानी से जिस भी प्रकार की पंक्ति में गिनना चाहते हैं, उसे अनुकूलित कर सकते हैं;)।


अब यह एक अच्छा है! सबसे तेज नहीं, लेकिन देव वातावरण को छोड़े बिना। मुझें यह पसंद है। संभवतः एक बेहतर नियमित अभिव्यक्ति श्वेत-अंतरिक्ष लाइनों और उस तरह की चीजों को गिनने से बच सकती है।
मोटी श्नोर

इसे सरल रखें। मुझें यह पसंद है।
devios1

6

आप MacPorts के माध्यम से SLOCCount स्थापित कर सकते हैं । या, अधिक गंभीर रूप से, आप wc -l का उपयोग कर सकते हैं।


CLOC SCLOCount पर आधारित है इसलिए मुझे लगता है कि अभी भी CLOC का उपयोग करने के लिए यह एक बेहतर तरीका है
tiguero

4
"कुल अनुमानित लागत = $ 1,934,715 विकसित करने के लिए"। इससे आज मेरा काम बन गया!
वलेरी वान

4

मैं xcode से परिचित नहीं हूं, लेकिन अगर आपको ज़रूरत है तो एक निर्देशिका ट्री के भीतर उन सभी विशिष्ट फ़ाइलों से लाइनों की संख्या की गणना करने के लिए, आप निम्न कमांड का उपयोग कर सकते हैं:

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

बाद यहोशू Nozzi का जवाब , में जीएनयू लगता है इस तरह की फ़ाइलों की तरह होगा के लिए रेगुलर एक्सप्रेशन:

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। आप फ़ाइल खोजने में regex का उपयोग करने के उन तरीकों के बारे में अधिक जानकारी देख सकते हैं ।

यदि आप मैक ओएस के साथ काम कर रहे हैं , तो आपको थोड़े अलग दृष्टिकोण की आवश्यकता है, जैसा कि टिप्पणियों में मोति श्नोर द्वारा समझाया गया है :

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

दोनों के रूप में एक आउटपुट प्रदान करेगा:

234 ./file1
456 ./file2
690 total

तो आप या तो इसे ऐसे ही रख सकते हैं या सिर्फ tail -1(यानी find ... | tail -1) को पाइप कर सकते हैं , ताकि आपको बस आखिरी लाइन कुल मिल जाए।


अच्छी तरह से --- the -regex "। * \ आदि। मेरे लिए macOS पर काम नहीं करता है - यह एक अवैध विकल्प का दावा करता है - और आप किस तरह का उपयोग कर रहे हैं?
Motti Shneor

@MottiShneor शायद आप इस सवाल की जाँच करना चाहते हैं कि वे \|MacOS में और दूसरों के बारे में कहाँ बात करते हैं । --regexदोनों GNU खोजने (एक मैं उपयोग) और MacOS में मान्य है।
फेडोरक्वी 'एसओ ने

नहीं। मुझे पता चला है कि MacOS में आपको विस्तारित नियमित अभिव्यक्तियों के लिए -E ढूंढना होगा। जो भी OS-X आपको मिल सकता है, उसके ऊपर दिए गए सुझाए गए आदेश को कॉपी करें और अपने लिए देखें। आदमी मैकओएस-एक्स पर आपको बताता है कि आपको उसके लिए -ई चाहिए।
मोटी श्नोर

अंत में, आपको ओएसएक्स पर खोज करने के लिए एक रास्ता भी प्रदान करना होगा। इसलिए जो विविधता काम करती है, वह इस तरह दिखती है: खोज -E। -regex "। * \ _। ([hmc] | mm | cp + | स्विफ्ट | pch) $" -exec wc -l {} +
Motti Shneor

@MottiShneor MacOS में दृष्टिकोण प्रदान करने के लिए धन्यवाद। मैंने उसी के साथ उत्तर को अपडेट किया है।
फेडोरक्वी 'एसओ ने'

2

दोहराने के लिए क्षमा करें। यह सबसे आसान तरीका है IMHO:

  1. टर्मिनल प्रकार में

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

यह प्रोजेक्ट फ़ोल्डर से सभी फ़ाइलों को कॉपी करेगा newFolder

  1. Xcode सांख्यिकीविद् डाउनलोड करें और इसके साथ उपयोग करेंnewFolder यहाँ छवि विवरण दर्ज करें

इस उपकरण को सब कुछ नहीं मिलता है, यह अधिक लगता है जैसे यह वास्तव में केवल वर्तमान फ़ोल्डर में दिखता है (सबफ़ोल्डर्स भी नहीं)
डैनियल

मैंने लिखा कि पहला कदम प्रोजेक्ट फ़ोल्डर से सभी फ़ाइलों को एक फ़ोल्डर में कॉपी करना है।
निक कोव

क्या वह "XcodeStatistican" किसी भी संयोग से खुला स्रोत है? मैं इसे किसी भी समय में किसी भी परियोजना संरचना पर काम करूँगा ... निर्देशिका और फ़ाइल पुनरावृत्तियों ऐसा करने के लिए कठिन नहीं हैं। इसके अलावा - यहां से डाउनलोड - एक पहचान किए गए डेवलपर द्वारा हस्ताक्षरित नहीं है - इसलिए मैलवेयर हो सकता है: /
मोटी श्नोर

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

और इस टूल का सबसे अच्छा हिस्सा यह है कि आप इसे कॉन्फ़िगर फ़ाइल जैसी .ignignore को जोड़ सकते हैं। आप किस तरह की फाइलों को चुनने या अनदेखा करने के लिए नियमों को सेट कर सकते हैं जैसे कि आप '.gitignore' में करते हैं। हां, इस उपकरण का आविष्कार केवल यह जानने के लिए किया जाता है कि मेरे पास कितनी लाइनें हैं।

अधिक विवरण और उपयोग यहां है: https://github.com/MorganZhang100/line-counter

मैं इस सरल उपकरण का लेखक हूं। आशा है कि यह किसी की मदद कर सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.