Zaćmienie liczy wiersze kodu


107

Wypróbowałem wtyczkę Metrics i chociaż jest fajna iw ogóle, nie jest tym, czego szuka mój szef. Liczy linię z tylko jedną }linią i nie chce, żeby liczyła się jako „to nie jest linia, to wybór stylu”. Muszę również wygenerować raport dotyczący podanych wskaźników. Czy są do tego dobre narzędzia?


1
Pytanie poboczne: czy należy to wykorzystać jako wskaźnik pokazujący, jak dobrze pracują twoi programiści? Jeśli tak, liczba znaków / znaków innych niż białe może być lepsza. Mimo to wydaje się, że jest to naprawdę arbitralna miara ... Jak stwierdził znajomy: „Ogólnie rzecz biorąc, więcej linii kodu do rozwiązania problemu nie jest lepsze (ani gorsze) niż mniej linii kodu do rozwiązania tego samego problemu”
Sancarn,

Odpowiedzi:


94

Zainstaluj wtyczkę Eclipse Metrics . Aby utworzyć raport w formacie HTML (z opcjonalnymi plikami XML i CSV) right-click a project -> Export -> Other -> Metrics.

Możesz dostosować wskaźniki wierszy kodu, ignorując puste wiersze i wiersze zawierające tylko komentarze lub wykluczając Javadoc, jeśli chcesz. Aby to zrobić, sprawdź kartę pod adresem Preferences -> Metrics -> LoC.

Otóż ​​to. Nie ma specjalnej opcji wykluczenia nawiasów klamrowych {}.

Wtyczka oferuje alternatywną metrykę do LoC o nazwie Liczba instrukcji . Oto, co autor ma na ten temat do powiedzenia:

Ta metryka reprezentuje liczbę instrukcji w metodzie. Uważam, że jest to bardziej niezawodna miara niż Lines of Code, ponieważ ta ostatnia jest delikatna w odniesieniu do różnych konwencji formatowania.

Edytować:

Po wyjaśnieniu pytania rozumiem, że potrzebujesz widoku pod kątem naruszeń wskaźników w czasie rzeczywistym, takich jak ostrzeżenia lub błędy kompilatora. Potrzebujesz także funkcji raportowania, aby tworzyć raporty dla swojego szefa. Wtyczka, którą opisałem powyżej, służy do raportowania, ponieważ musisz wyeksportować metryki, gdy chcesz je zobaczyć.


Dokładnie to, czego szukałem i fajna funkcja eksportu.
george_h,

1
Obecna wersja tej wtyczki (3.14.1) nie działa z Eclipse Luna (4.4). Zaskakujące jest, że starożytna wtyczka Metrics z Sourceforge nadal działa ...
ejain

Wiele osób zgłasza, że ​​to już nie działa, ale nikt nie zgłasza błędu na SourceForge ...
Thomas Weller

6
Tak. Nie widzę żadnych opcji pod right click a project -> Export, zainstalowałem wtyczkę bezpośrednio z eclipse marketplace - wersja jest - Eclipse Metrics 3.12.0, czy ktoś może mi pomóc. dzięki!
OverrockSTAR


263

Zawsze istnieje „brutalna siła”:

  1. Wyszukaj-> Plik

  2. Wpisz następujące polecenie w polu „Zawierający tekst” -> ^.*$. Następnie zaznacz pole wyboru „Wyrażenie regularne”

  3. Wpisz następujące polecenie w polu „Wzorce nazw plików” -> *.java

  4. Kliknij „Wyszukaj”

  5. Sprawdź liczbę dopasowań w zakładce „Szukaj”.


11
To zrobiło dokładnie to, czego szukałem. Nie wyklucza nawiasów ani niczego wymyślnego, ale daje odpowiedź, której szukałem, W zaćmieniu, BEZ wtyczek. Dzięki!
Łukasz

24
Możesz również użyć \n[\s]*i zignoruje również puste wiersze
Ascalonian

3
Bardzo fajne rozwiązanie bez konieczności używania kolejnej wtyczki! +1
Stephan,

2
Działa to z najnowszym (neonowym) zaćmieniem, ale wtyczka metryki nie działa
Anatoly Yakimchuk

2
Komentarze @omerio również muszą być wpisane i są niezbędną częścią każdego kodu źródłowego. Nie licząc tych spraw, że nie byliby ważni lub są po prostu ślepym tekstem - co jest poważnym błędem.
Axel Amthor,

23

W przypadku OSX lub * NIX użyj

Pobierz wszystkie aktualne linie kodu java z plików * .java

find . -name "*.java" -exec grep "[a-zA-Z0-9{}]" {} \; | wc -l

Pobierz wszystkie wiersze z plików * .java, w tym puste wiersze i komentarze

find . -name "*.java" -exec cat | wc -l

Uzyskaj informacje na plik, w ten sposób uzyskasz [ścieżkę do pliku + "," + liczbę wierszy]

find . -name "*.java" -exec wc -l {} \;

Uruchomienie pierwszego polecenia na OSX uzyskać: grep: nieprawidłowy zakres znaków 0
omerio

To zadziałało dla mnie znaleźć. -name "* .java" | kot xargs | grep '[alnum]' | wc -l
omerio

2
powinno byćfind . -name "*.java" | xargs cat | grep "[a-zA-Z0-9{}]" | wc -l
warrior107

8

Innym sposobem byłoby użycie innego narzędzia loc, na przykład LocMetrics .
Zawiera również wiele innych narzędzi lokalizacyjnych . Integracja z Eclipse nie zawsze istniałaby (tak jak w przypadku Metrics2 , którą można sprawdzić, ponieważ jest to nowsza wersja niż Metrics ), ale przynajmniej te narzędzia mogą rozumować w postaci linii logicznych (obliczanych przez sumowanie końcowe średniki i końcowe nawiasy klamrowe).
Możesz również sprawdzić, czy zaćmienie - metryki są bardziej dostosowane do Twoich oczekiwań.


7

Kolejnym narzędziem jest Google Analytix , które pozwoli Ci również uruchomić metryki, nawet jeśli nie możesz zbudować projektu w przypadku błędów


Chociaż strona mówi, że jest tylko dla starszych wersji zaćmienia, dla mnie działa dobrze na Lunie. Dzięki za to.
CamHart,

7

Jeden z możliwych sposobów liczenia wierszy kodu w Eclipse:

korzystając z menu Szukaj / Plik ..., wybierz zakładkę Wyszukiwanie pliku, określ \ n [\ s] * jako Zawierający tekst (nie będzie to liczyć pustych wierszy) i zaznacz Wyrażenie regularne.

Wskazówka dotycząca kapelusza: www.monblocnotes.com/node/2030


wow, to super geniusz. miło mieć to nie liczyć pustych wierszy, o ile nie
zapłacisz

1

Stworzyłem wtyczkę Eclipse, która może liczyć linie kodu źródłowego. Obsługuje Kotlin, Java, Java Script, JSP, XML, C / C ++, C # i wiele innych typów plików.

Proszę spojrzeć na to. Wszelkie uwagi będą mile widziane!

repozytorium git-hub jest tutaj


0

ProjectCodeMeter zlicza LLOC (logiczne linie kodu) dokładnie tak, jak opisałeś (tylko efektywne wiersze). integruje się z zaćmieniem jako zewnętrzne narzędzie do pomiaru kodu , ale nie jest w czasie rzeczywistym, generuje raport. w rzeczywistości zlicza wiele wskaźników kodu źródłowego, takich jak złożoność, zawiłość arytmetyczna, zakodowane ciągi znaków, stałe numeryczne .. nawet szacuje czas rozwoju w godzinach .


0

Do analizy statycznej użyłem i poleciłem SonarQube, który obsługuje prawie wszystkie metryki, których możesz potrzebować w szerokiej gamie języków i jest bezpłatny w wersji podstawowej (musisz zapłacić, aby przeanalizować rodzaje języków, kodować tylko z pistoletem przy głowie).

Musisz zainstalować go jako aplikację internetową, która przeprowadza analizę z repozytorium kodu źródłowego, ale ma również wtyczkę Eclipse .

To przesada, jeśli chcesz tylko jednorazowo wiedzieć, ile linii kodu zawiera Twój projekt. Jeśli chcesz śledzić wskaźniki w czasie, porównywać projekty, ostrzeżenia o pożarze, gdy próg zostanie przekroczony itp., To fantastyczne.

Ujawnienie: nie mam powiązań finansowych z SonarSource.


0

Pierwszą rzeczą do zrobienia jest określenie własnej definicji „linii kodu” (LOC). W obu twoich pytaniach

Traktuje linię zawierającą tylko jedną} jako linię i nie chce, aby liczyła się jako „to nie jest linia, to wybór stylu”

aw odpowiedziach np.

Możesz dostosować wskaźniki wierszy kodu, ignorując puste wiersze i wiersze zawierające tylko komentarze lub wykluczając Javadoc, jeśli chcesz

można powiedzieć, że ludzie mają różne opinie na temat tego, co stanowi wiersz kodu. W szczególności ludzie są często nieprecyzyjni co do tego, czy naprawdę chcą mieć liczbę wierszy kodu, czy liczbę instrukcji. Na przykład, jeśli masz następującą naprawdę długą linię wypełnioną wyciągami, co chcesz zgłosić, 1 LOC lub setki wyciągów?

{ a = 1; b = 2; if (a==c) b++; /* etc. for another 1000 characters */ }

A kiedy ktoś zapyta Cię, jak nazywasz LOC, upewnij się, że możesz odpowiedzieć, nawet jeśli jest to po prostu „moja definicja LOC to definicja Metrics2”. Ogólnie rzecz biorąc, dla najczęściej formatowanego kodu (w przeciwieństwie do mojego przykładu) popularne narzędzia podają liczby dość podobne, więc Metrics2, SonarQube itp. Powinny być w porządku, o ile używasz ich konsekwentnie. Innymi słowy, nie licz LOC jakiegoś kodu za pomocą jednego narzędzia i nie porównuj tej wartości z późniejszą wersją tego kodu, która została zmierzona za pomocą innego narzędzia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.