จะทราบได้อย่างไรว่ามีโค้ดกี่บรรทัดในโปรเจ็กต์ Xcode?


149

มีวิธีในการกำหนดจำนวนบรรทัดของโค้ดในโปรเจ็กต์ Xcode หรือไม่? ฉันสัญญาว่าจะไม่ใช้ข้อมูลดังกล่าวเพื่อการวัดผลการบริหารจัดการหรือเพื่อการเปรียบเทียบของพนักงาน ;)


หากคุณต้องการเส้นคุณสามารถใช้คำตอบนี้: stackoverflow.com/questions/5901758/แต่มันมีช่องว่าง
GeneCode

คำตอบ:


126

ตรวจสอบcloc

cloc นับบรรทัดว่าง, บรรทัดความคิดเห็นและบรรทัดทางกายภาพของซอร์สโค้ดในภาษาการเขียนโปรแกรมจำนวนมาก

(การสร้างมรดกถูกเก็บถาวรบน SourceForge )


11
CLOC ให้บริการผ่าน Homebrew ความสะดวกในการใช้งานในบรรทัดคำสั่งกำลังรีเฟรช
avelis

1
ฉันรักปุนในชื่อที่นั่นใช่คุณสามารถบอกได้ว่าคุณทำงานได้ดีเพียงใดโดยดูจาก CLOC ของคุณ
bobobobo

ใช้ลิงก์ด้านบนเพื่อดาวน์โหลด './cloc-1.56.pl' เครื่องมือดัดรุ่น 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/…
Eric Brotto

12
เราโพสต์คำตอบใน SO ไม่ใช่ลิงก์ไปยังรายการบล็อกที่ให้คำตอบเดียวกันมาก
Joshua Nozzi

6
ดูเหมือนว่าการทดสอบ. m และ. mm หายไป * (แก้ไข: ดูเหมือนว่า SO จะไม่แสดงผลเหล่านั้นโดยไม่ต้องใช้เครื่องหมายทับก่อนหน้า) ข้างต้นไม่ได้ทำงานสำหรับฉันจนกว่าฉันจะเพิ่มพวกเขาเป็นดังนี้: find "(" -name "* .m" -or -name "* .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
bladnman

2
หมายเหตุสำหรับผู้ใช้ Swift - แทนที่หรือเพิ่มอีก 'หรือ' ด้วยนามสกุลไฟล์. swift
Byron Coetsee

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
ดี! ฉันชอบสิ่งนี้ดีกว่าคำตอบของฉันเอง :-)
Joshua Nozzi

1
คุณอาจต้องดาวน์โหลดสคริปต์ก่อน จากนั้นนำทางไปยังไดเรกทอรีที่สคริปต์นั้นอยู่และเรียกใช้คำสั่งนั้นด้วยชื่อไฟล์ที่คุณดาวน์โหลด
prolfe

ควรเป็น cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAre และไม่เหมือนข้างต้นหากคุณติดตั้ง Perl จากศูนย์ตรวจสอบให้แน่ใจว่าคุณป้อนเวอร์ชัน perl ปัจจุบัน (ของฉันคือ 5.30.1 ดังนั้นโดยทั่วไป cloc perl-5.30.1.pl ./)
Golan Shay

1
สิ่งสุดท้ายที่ฉันต้องเรียกใช้ช่วงหมู่ตามข้อผิดพลาดที่ปรากฏขึ้นเมื่อใช้งานเป็นครั้งแรกดังนั้นเช็คเอาต์สำหรับสิ่งนั้นเช่นกัน
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 Statisticsian มันทำสิ่งที่คุณต้องการอย่างแน่นอน นอกจากนี้ยังมีสถิติที่น่าสนใจอื่น ๆ ดังนั้นจึงคุ้มค่าที่จะเรียกใช้เพื่อความสนุกในตอนนี้

โปรดทราบว่าจะไม่ดูภายในโฟลเดอร์จริงแม้ว่าจะดูเป็นกลุ่ม โอกาสที่คุณไม่ได้ใช้โฟลเดอร์จริงดังนั้นมันจะทำงานได้ดี หากคุณใช้โฟลเดอร์คุณก็ต้องนับในแต่ละโฟลเดอร์และรวมเข้าด้วยกัน

หมายเหตุ:ณ เดือนมิถุนายน 2555 ดูเหมือนว่าสิ่งนี้จะทำงานไม่ถูกต้องกับ Xcode เวอร์ชันล่าสุด


เพียงหัวขึ้นสำหรับผู้ที่ผสม Objective-C และ C / C ++: มันจะไม่นับไฟล์ * .c หรือ * .cpp
Emile Cormier

3
โปรดทราบว่า Xcode Statisician ไม่ได้จัดการกับส่วนย่อยในโครงการของคุณ ณ จุดนี้
Matt__C

@Matt__C Aye ดังนั้น "โปรดทราบว่าจะไม่ดูในโฟลเดอร์จริง" ค่อนข้างทำงานด้วยตนเองเล็กน้อยน่าเสียดาย (และการค้นหาโฟลเดอร์แบบเรียกซ้ำนั้นง่ายต่อการเขียนโค้ด) แต่สามารถใช้งานได้
แมทธิวเฟรเดอริ

1
ดูเหมือนว่ามันจะไม่ทำงานเลยกับโครงการ X-Code 4.2 ใน Lion (อย่างน้อยมันก็ไม่ได้ให้สถิติใด ๆ สำหรับโครงการของฉัน)
BadPirate

อา bummer มันอาจจะล้าสมัยในขณะนี้
Matthew Frederick

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

หากคุณไปที่ไดเรกทอรีโครงการของคุณใน terminal และป้อน:

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

ที่จะให้รายละเอียดโครงการรวมถึงผลรวมบรรทัดสำหรับแต่ละไฟล์และโครงการโดยรวม


สำหรับ swift เพิ่งลบทุกอย่างและเพิ่ม. 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
สั้นและกระชับ - แต่มันนับจำนวนบรรทัดในไฟล์ที่ไม่ใช่ซอร์สโค้ดด้วย ดังนั้นจริงๆแล้วการกรองส่วนขยายชื่อไฟล์จึงเป็นสิ่งสำคัญที่นี่ OP ต้องการนับ "บรรทัดซอร์สโค้ด" ไม่บรรทัดข้อความใด ๆ
Motti Shneor

7

วิธีที่ง่ายและรวดเร็ว:

ใช้การค้นหา regex (ค้นหา Navigator เลือกค้นหา> นิพจน์ปกติ)

. \ n

ทำงานร่วมกับขอบเขตการค้นหา Xcode ได้อย่างสะดวกและคุณสามารถปรับแต่งได้ตามประเภทของบรรทัดที่คุณต้องการนับ;)


ตอนนี้เป็นสิ่งที่ดี! ไม่ใช่เร็วที่สุด แต่ไม่ต้องออกจากสภาพแวดล้อม dev ฉันชอบมัน. การแสดงออกปกติที่ดีกว่าอาจหลีกเลี่ยงการนับเส้นพื้นที่สีขาวและสิ่งต่าง ๆ เช่นนั้น
Motti Shneor

ง่าย ๆ เข้าไว้. ฉันชอบมัน.
devios1

6

คุณสามารถติดตั้งSLOCCountผ่าน MacPorts หรือยิ่งหยาบคุณสามารถใช้ wc -l


CLOC ขึ้นอยู่กับ SCLOCount ดังนั้นฉันเดาว่ามันยังคงเป็นวิธีที่ดีกว่าในการใช้ CLOC
tiguero

4
"ค่าใช้จ่ายโดยประมาณทั้งหมดในการพัฒนา = $ 1,934,715" นี่ทำให้วันของฉัน!
Valeriy Van

4

ฉันไม่คุ้นเคยกับ xcode แต่ถ้าทั้งหมดที่คุณต้องการคือการนับจำนวนบรรทัดจากไฟล์เฉพาะเหล่านั้นทั้งหมดภายในแผนผังไดเรกทอรีคุณอาจใช้คำสั่งต่อไปนี้:

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

ทำตามคำตอบของ Joshua Nozziใน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คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับนิพจน์ผู้ที่อยู่ในวิธีการใช้ regex ในแฟ้มค้นหา

หากคุณกำลังทำงานกับ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 - มันอ้างว่าเป็นตัวเลือกที่ผิดกฎหมาย
Motti Shneor

@MottiShneor คุณอาจต้องการตรวจสอบคำถามนี้ที่พวกเขาพูดถึง\|และคนอื่น ๆ ใน MacOS --regexใช้ได้ทั้งใน GNU find (อันที่ฉันใช้) และ MacOS
fedorqui 'ดังนั้นหยุดทำอันตราย'

ดี --- ไม่ ฉันพบใน MacOS คุณต้องค้นหา -E สำหรับนิพจน์ทั่วไปที่ขยายเพิ่ม คัดลอกคำสั่งที่แนะนำด้านบนไปยัง OS-X ที่คุณสามารถหาได้และดูด้วยตัวคุณเอง man find บน MacOS-X บอกคุณว่าคุณต้อง -E
Motti Shneor

ในที่สุดคุณจะต้องระบุเส้นทางที่จะค้นหาบน OSX ดังนั้นรูปแบบที่ใช้งานได้จะมีลักษณะดังนี้: find -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 Statisticsianและใช้กับnewFolder ป้อนคำอธิบายรูปภาพที่นี่

เครื่องมือนี้ไม่พบทุกสิ่งมันดูเหมือนจริง ๆ แล้วมันจะดูเฉพาะในโฟลเดอร์ปัจจุบัน (ไม่ใช่โฟลเดอร์ย่อย)
Daniel

ฉันเขียนว่าขั้นตอนแรกคือการคัดลอกไฟล์ทั้งหมดจากโฟลเดอร์โครงการไปยังโฟลเดอร์เดียว
Nik Kov

นั่นคือ "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

ฉันเป็นผู้เขียนเครื่องมือง่ายๆนี้ หวังว่ามันจะช่วยใครซักคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.