Làm thế nào để tìm ra có bao nhiêu dòng mã trong một dự án Xcode?


149

Có cách nào để xác định dự án Xcode chứa bao nhiêu dòng mã không? Tôi hứa sẽ không sử dụng thông tin đó cho mục đích đo lường quản lý hoặc điểm chuẩn của nhân viên. ;)


Nếu bạn muốn các dòng, thì bạn có thể sử dụng câu trả lời này: stackoverflow.com/questions/5901758/NH Nhưng nó bao gồm các khoảng trắng
GeneCode

Câu trả lời:


126

Kiểm tra CLOC .

cloc đếm các dòng trống, dòng nhận xét và dòng vật lý của mã nguồn trong nhiều ngôn ngữ lập trình.

(Bản dựng kế thừa được lưu trữ trên SourceForge .)


11
CLOC có sẵn thông qua Homebrew. Sự dễ dàng sử dụng trong dòng lệnh đã được làm mới.
avelis

1
Tôi thích cách chơi chữ trong tên đó - vâng, bạn có thể biết bạn đã làm việc hiệu quả như thế nào bằng cách kiểm tra CLOC của bạn.
bobobobo

Sử dụng liên kết ở trên để tải xuống phiên bản perm './cloc-1.56.pl' của công cụ cloc. Đảm bảo rằng bạn bật quyền thực thi trên tệp cloc-1.56.pl bằng lệnh 'chmod u + x cloc-1.56.pl'. Nếu mã nguồn của bạn nằm trong thư mục 'project_code' Bạn chỉ cần chạy lệnh sau.
JZ.

233

Tôi thấy điều này trôi nổi xung quanh và sử dụng nó cho mình:

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

2
Để xử lý các thư mục con có khoảng trắng trong tên bạn cần: find. "(" -name " .m" -or -name " .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
Matt__C

2
Bài đăng trên blog này có thể giúp: allara.blogspot.co.uk/2010/12/ Kẻ
Eric Brotto

12
Chúng tôi đăng câu trả lời trên SO, không liên kết đến các mục blog cung cấp nhiều câu trả lời giống nhau.
Joshua Nozzi

6
có vẻ như các bài kiểm tra .m và .mm bị thiếu * (đã chỉnh sửa: có vẻ như SO không hiển thị những bài kiểm tra mà không có dấu gạch chéo trước) Phần trên không hoạt động với tôi cho đến khi tôi thêm chúng như sau: find. "(" -name "* .m" -or -name "* .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
bladnman

2
Lưu ý cho người dùng Swift - thay thế hoặc thêm một 'hoặc' bằng phần mở rộng tệp .swift
Byron Coetsee

79

Tôi đã sử dụng CLOC như đã đề cậpNathan Kinsinger và nó khá dễ sử dụng. Đó là một kịch bản PERL mà bạn có thể thêm và chạy từ thư mục dự án của bạn.

PERL đã là một phần của Mac OS và bạn có thể gọi tập lệnh theo cách này để tìm ra số dòng bạn đã viết:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

Đây là một ví dụ về đầu ra tôi nhận được từ lệnh đó:

   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
Đẹp! Tôi thích điều này hơn câu trả lời của riêng tôi. :-)
Joshua Nozzi

1
Bạn có thể cần phải tải tập lệnh trước. Sau đó điều hướng đến thư mục chứa tập lệnh đó và chạy lệnh đó với bất kỳ tên tệp nào bạn đã tải xuống.
prolfe

Nên cloc perl-1.56.pl ./YourDirectoryWhereYourSourceAre và không như trên, nếu bạn cài đặt perl từ đầu, hãy đảm bảo bạn nhập phiên bản perl hiện tại (của tôi là 5.30.1 vì vậy về cơ bản cloc perl-5.30.1.pl ./)
Golan Shay

1
Một điều cuối cùng, tôi đã phải chạy span Moo theo lỗi xuất hiện khi chạy nó lần đầu tiên, vì vậy hãy kiểm tra cái đó nữa
Golan Shay

50

Mở Terminal.app, vào thư mục gốc của dự án và chạy lệnh này:

Chỉ dành cho Swift:

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

Chỉ dành cho Obj-C:

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

Đối với Obj-C + Swift:

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

Đối với 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 '{}' \+

Mẹo nhanh về thiết bị đầu cuối:
ls: liệt kê nội dung thư mục
cd: thay đổi thư mục
Nhấn tab để tự động hoàn thành
Hãy nhớ đặt dấu gạch chéo ngược "\" trước khoảng trắng
Tôi đề nghị chuyển xuống một thư mục từ dự án chính để bạn thoát khỏi số đếm mã từ các khung công tác


44

Trong terminal, thay đổi vào thư mục dự án và chạy:

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

Nếu bạn chỉ muốn một số loại tệp nhất định, hãy thử một cái gì đó như

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

Đẹp, nhưng bao gồm các bình luận và các dòng trống và do đó không chính xác những gì được yêu cầu. Một thước đo LỘC phải độc lập với kiểu định dạng mã càng tốt và do đó, một loạt các dòng hoặc nhận xét trống giữa các phần logic trong một tệp không nên được tính vào tổng.
bassim

34

Kiểm tra Xcode Statistician, nó thực hiện chính xác những gì bạn muốn. Nó cũng cung cấp các số liệu thống kê thú vị khác vì vậy rất đáng để chạy cho vui bây giờ và sau đó.

Lưu ý rằng nó sẽ không nhìn vào bên trong các thư mục thực, mặc dù nó sẽ nhìn theo nhóm. Điều lạ là bạn không sử dụng các thư mục thực nên nó sẽ hoạt động rất tốt. Nếu bạn đang sử dụng các thư mục thì bạn chỉ cần đếm số trong mỗi thư mục và cộng chúng lại với nhau.

Lưu ý: Kể từ tháng 6 năm 2012, có vẻ như điều này không hoạt động đúng với các phiên bản Xcode mới nhất.


Chỉ cần đề phòng cho những người trộn lẫn Objective-C và C / C ++: Nó không tính các tệp * .c hoặc * .cpp.
Cormier Emile

3
Lưu ý rằng Xcode Statisician không xử lý các thư mục con trong dự án của bạn tại thời điểm này.
Matt__C

@Matt__C Aye, do đó "Lưu ý rằng nó sẽ không nhìn vào bên trong các thư mục thực". Khá nhiều công việc thủ công hơn một chút, thật không may (và tìm kiếm thư mục đệ quy rất dễ mã hóa), nhưng nó hoàn toàn khả thi.
Matthew Frederick

1
Có vẻ như nó hoàn toàn không hoạt động với các dự án X-Code 4.2 trên Lion (ít nhất là nó không đưa ra bất kỳ số liệu thống kê nào cho dự án của tôi)
BadPirate

Ah, bummer, nó có thể đã lỗi thời bây giờ.
Matthew Frederick

31
  1. mở thiết bị đầu cuối
  2. điều hướng đến dự án của bạn
  3. thực hiện lệnh sau trong dự án của bạn:

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

    Hoặc là:

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

(* Không bao gồm các tệp pod được tính từ tổng số)


16

Nếu bạn đi đến thư mục dự án của bạn trong thiết bị đầu cuối và nhập:

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

Điều đó sẽ cung cấp cho bạn một phân tích dự án, cũng như tổng số dòng cho mỗi tệp và toàn bộ dự án.


Đối với swift chỉ cần xóa mọi thứ và thêm .swiftfind . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne

@WCByrne Ngoài ra, chúng tôi chỉ có thể thêm .swift vào lệnh ban đầu
RileyE

Thật. Vì hầu hết các thư viện và mã mượn vẫn còn trong .h & .m, nó đã giúp cắt giảm số đếm xuống chỉ bằng những gì tôi đã viết.
WCByrne

1
Chắc chắn rồi. Mọi người đều có giải pháp riêng. Và nếu họ có tiền tố riêng (ví dụ: "RE"), họ thậm chí có thể làmfind . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
RileyE

9

Phiên bản của Nozzi không phù hợp với tôi, nhưng phiên bản này:

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

1
ngắn gọn và súc tích - nhưng nó cũng tính các dòng trên các tệp không phải mã nguồn. Vì vậy, thực sự lọc tên tệp mở rộng là rất quan trọng ở đây. OP muốn đếm "dòng mã nguồn". không phải bất kỳ dòng văn bản.
Motti Shneor

7

Một cách nhanh chóng và dễ dàng:

Sử dụng tìm kiếm regex (Tìm điều hướng, chọn Tìm> Biểu thức chính quy).

. \ n

Hoạt động thuận tiện với phạm vi tìm kiếm Xcode và bạn có thể dễ dàng tùy chỉnh nó theo bất kỳ loại dòng nào bạn muốn đếm;).


Bây giờ đó là một trong những tốt đẹp! không phải là nhanh nhất, nhưng không rời khỏi môi trường dev. Tôi thích nó. Có lẽ một biểu thức chính quy tốt hơn có thể tránh đếm các dòng trắng và những thứ tương tự.
Motti Shneor

Giữ cho nó đơn giản. Tôi thích nó.
devios1

6

Bạn có thể cài đặt SLOCCount thông qua MacPorts. Hoặc, thô bạo hơn, bạn có thể sử dụng wc -l.


CLOC dựa trên SCLOCount vì vậy tôi đoán rằng đây vẫn là một cách tiếp cận tốt hơn để sử dụng
CLOC

4
"Tổng chi phí ước tính để phát triển = $ 1,934,715". Điều này làm cho ngày của tôi!
Valeriy Van

4

Tôi không quen với xcode, nhưng nếu tất cả những gì bạn cần là đếm số dòng từ tất cả các tệp cụ thể trong cây thư mục, bạn có thể sử dụng lệnh sau:

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

Theo câu trả lời của Joshua Nozzi , trong GNU, tìm biểu thức chính quy cho các tệp như vậy sẽ như sau:

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

hoặc thậm chí

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

này sử dụng một biểu thức chính quy để phù hợp với tất cả các file có đuôi hoặc .m, .mm, .cpphoặc .swift. Bạn có thể xem thêm thông tin về các biểu thức đó trong Cách sử dụng regex trong tệp tìm .

Nếu bạn đang làm việc với Mac OS find , thì bạn cần một cách tiếp cận hơi khác, như được giải thích bởi Motti Shneor trong các bình luận:

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

Cả hai sẽ cung cấp một đầu ra ở dạng:

234 ./file1
456 ./file2
690 total

Vì vậy, bạn có thể giữ nó như thế này hoặc chỉ đường ống đến tail -1(nghĩa là find ... | tail -1) để bạn chỉ cần lấy dòng cuối cùng là tổng số.


tốt --- the find -regex ". * \ .vv không hoạt động với tôi trên MacOS - nó yêu cầu một tùy chọn bất hợp pháp
Motti Shneor

@MottiShneor có lẽ bạn muốn kiểm tra câu hỏi này nơi họ nói về \|và những người khác trong MacOS. --regexlà hợp lệ trong cả GNU find (cái tôi sử dụng) và MacOS.
fedorqui 'SO ngừng gây hại'

Ồ không. Tôi phát hiện ra trong MacOS bạn phải tìm -E cho các biểu thức chính quy mở rộng. Đừng sao chép lệnh được đề xuất ở trên vào bất cứ thứ gì OS-X bạn có thể nhận và tự mình xem. tìm thấy trên MacOS-X cho bạn biết bạn phải -E cho điều đó.
Motti Shneor

Cuối cùng, bạn cũng phải cung cấp một đường dẫn để tìm kiếm trên OSX. Vì vậy, biến thể không hoạt động, trông như thế này: find -E. -regex ". * \. ([hmc] | mm | cp + | swift | pch) $" -exec wc -l {} +
Motti Shneor

@MottiShneor cảm ơn vì đã cung cấp cách tiếp cận trong MacOS. Tôi đã cập nhật câu trả lời với điều đó.
fedorqui 'SO ngừng làm hại'

2

Xin lỗi vì đã lặp lại. Đó là cách dễ nhất IMHO:

  1. Trong loại thiết bị đầu cuối

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

Điều này sẽ sao chép tất cả các tập tin từ thư mục dự án vào newFolder.

  1. Tải xuống Xcode Statistician và sử dụng nó vớinewFolder nhập mô tả hình ảnh ở đây

Công cụ này không tìm thấy mọi thứ, có vẻ như nó thực sự chỉ trông trong thư mục hiện tại (thậm chí không phải là thư mục con)
Daniel

Tôi đã viết rằng bước đầu tiên là sao chép tất cả các tệp từ thư mục dự án sang một thư mục.
Nik Kov

Đó có phải là nguồn mở "XcodeStatistican" không? Tôi sẽ làm cho nó hoạt động trên bất kỳ cấu trúc dự án nào trong thời gian ngắn ... Các trình lặp thư mục và tệp không khó thực hiện. Ngoài ra - tải xuống từ đây - không được ký bởi nhà phát triển được xác định - vì vậy có thể là phần mềm độc hại: /
Motti Shneor

1

line-counterlà một thay thế tốt. Nó nhẹ hơn CLOC và mạnh hơn và dễ sử dụng hơn các lệnh khác.

Tổng quan nhanh

Đây là cách bạn có được công cụ

$ pip install line-counter

Sử dụng linelệnh để lấy số tập tin và số dòng trong thư mục hiện tại (đệ quy)

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

Nếu bạn muốn biết thêm chi tiết, chỉ cần sử dụng 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

Và phần tốt nhất của công cụ này là, bạn có thể thêm .gitignore như cấu hình tệp vào nó. Bạn có thể thiết lập quy tắc để chọn hoặc bỏ qua loại tệp nào sẽ được tính giống như những gì bạn làm trong '.gitignore'. Vâng, công cụ này chỉ được phát minh để giúp tôi biết có bao nhiêu dòng dễ dàng hơn.

Mô tả và cách sử dụng khác có tại đây: https://github.com/MorganZhang100/line-count

Tôi là tác giả của công cụ đơn giản này. Hy vọng nó có thể giúp ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.