golongfuncs ist ein Instrument zur Suche nach "langen" Funktionen nach verschiedenen Maßnahmen (und Kombinationen von Maßnahmen).
Dieses Tool kann Ihnen helfen, Fragenzeile zu beantworten:
Mit anderen Worten, es hilft Ihnen dabei, lange und komplexe Funktionen von denen zu filtern, die nur lange dauern.
go install github.com/tkrajina/golongfuncs/...
Dieses Tool kann die folgenden Funktionen "Länge" und "Komplexität" berechnen:
lines : Anzahl der Zeilen ohne leere Zeilen, Zeilen -End -Blöcke (nur } ) und Kommentare .total_lines : Anzahl der Zeilen einschließlich leerer Zeilen und Kommentare ,len : Anzahl der Zeichen in der Funktion (ohne Kommentare und leere Zeilen).total_len : Anzahl der Zeichen in der Funktion (mit Kommentaren und leeren Zeilen).comments : Anzahl der Kommentare. Multiline -Kommentare werden einmal gezählt,comment_lines : Anzahl der Kommentare,complexity : Zyklomatische Komplexität (aus Gocyclo),max_nesting : Max verschachtelte Blöcketiefe (Hinweis, Strukturinitialisierungen werden nicht gezählt),total_nesting : Total Nisting (mit anderen Worten, wenn der Code ordnungsgemäß formatiert ist - wird jede Registerkarte "Eindringliche Registerkarte" einmal gezählt)in_params : Die Anzahl der Funktion Eingabeparameterout_params : Die Anzahl der Funktionen für Funktionsausgänge Parametervariables : Die Anzahl der Variablen im Bereich der Funktion (ohne Funktionsargumente und Funktionsempfänger)assignments : Die Anzahl der Zuordnungen in der Funktion (einschließlich variabler Deklarationen := , = , += , -= ...)control : Die Anzahl der Kontrollflussanweisungen ( if , else , switch , case , default , select und defer )todos : Die Nummer "Todo" -Tags in Kommentaren (einschließlich Funktionsbehörde und die Empfehlung vor der Funktion). Tags sind HACK , TODO , NOTE , FIXME , ASAP , ISSUE , BUG und WTF .Zusätzlich zu diesen können Sie Maßnahmen kombinieren. Zum Beispiel:
complexity/lines : Berechnet die durchschnittliche Komplexität pro Codezeile.total_nesting/total_lines : Berechnet durchschnittliche Verschachtelung (Einklebung) pro Zeile.comment_lines/total_lines : Berechnet Funktionen von Funktionen pro Zeile.Berechnung eines dieser Maßnahmen für Ihren Golang -Code:
$ golongfuncs +variable
$ golongfuncs +total_nesting
$ golongfuncs +lines
$ golongfuncs +lines,complexity
$ golongfuncs +lines,complexity,complexity/lines
Das Aufrufen von nur golongfuncs (ohne Argumente) ist ein Alias für golongfuncs +lines .
$ golongfuncs [flags] +[types] [paths...]
Finden Sie die längsten Funktionen:
$ golongfuncs <go_file>
$ golongfuncs <directory>
$ golongfuncs <directory>/...
Wenn der Pfad nicht angegeben ist, geht Golongfuncs davon aus, dass dies ist ./...
Zeigen Sie mehrere Maßnahmen:
$ golongfuncs +lines
$ golongfuncs +lines,in_params
$ golongfuncs +lines,in_params,complexity/lines
$ golongfuncs +lines +in_params +complexity/lines
Wenn mehrere Maßnahmen angegeben werden, werden die Ergebnisse nach der ersten Spalte sortiert (in diesen lines ):
Standardmäßig zeigt das Ergebnis nur die Top 20 Ergebnisse. Ändern Sie das mit -top :
$ golongfuncs -top 50
Standardmäßig werden Funktionen kürzer als 10 Zeilen ignoriert. Sie können das mit -min-lines <n> ändern.
Die 100 komplexesten Funktionen:
$ golongfuncs -top 100 +complexity ./...
Die komplexesten Funktionen länger als 50 Zeilen:
$ golongfuncs -min-lines 50 +complexity ./...
Finden Sie lange Funktionen, aber berechnen Sie auch ihre Komplexität, die durchschnittliche Komplexität und ihre Durchschnittsnistung:
$ golongfuncs +lines,complexity,complexity/lines,total_nesting/total_lines .
ExampleVeryLongfunction golongfuncs/runner_test.go:118:1 lines=305.0 complexity=1.0 complexity/lines=0.1 total_nesting/total_lines=1.0
ExampleVeryComplexFunction golongfuncs/runner_test.go:10:1 lines=69.0 complexity=44.0 complexity/lines=0.6 total_nesting/total_lines=6.7
printStats main.go:54:1 lines=21.0 complexity=9.0 complexity/lines=0.4 total_nesting/total_lines=2.5
main main.go:12:1 lines=19.0 complexity=3.0 complexity/lines=0.2 total_nesting/total_lines=1.0
TestLines golongfuncs/runner_test.go:476:1 lines=15.0 complexity=2.0 complexity/lines=0.1 total_nesting/total_lines=0.9
NewVisitor golongfuncs/runner.go:94:1 lines=15.0 complexity=3.0 complexity/lines=0.2 total_nesting/total_lines=1.0
Get golongfuncs/models.go:34:1 lines=15.0 complexity=7.0 complexity/lines=0.5 total_nesting/total_lines=1.7
TestNesting golongfuncs/runner_test.go:438:1 lines=15.0 complexity=2.0 complexity/lines=0.1 total_nesting/total_lines=0.9
Sie können sehen, dass ExampleVeryLongfunction lang ist (305 Linien), aber die durchschnittliche Komplexität ist niedrig (0,1) und eine Durchschnittsnistung 1,0. AVG Nisting 1.0 bedeutet, dass diese Funktion keine verschachtelten Blöcke enthält. Wenn die halbe Zeilen in einem verschachtelten Block (zum Beispiel ein großes if <expr> { ...code... } Code -Block) der Code) wäre die Durchführung 1,5.
Die ExampleVeryComplexFunction ist kürzer (69 Zeilen), aber mit einer durchschnittlichen Komplexität (pro Codezeile) von 0,6 und durchschnittlich 6,7, und das ist wahrscheinlich ein guter Hinweis darauf, dass die Funktion neu aufgestellt werden muss.
Finden Sie Funktionen, die länger als 5 Zeilen mit einem AVG -Verschachtel (pro Codezeile) größer als 5 sind, und geben Sie die Anzahl der Zeilen und Zeilen der Gesamtzeile ein: Zählung:
$ golongfuncs +total_nesting/total_lines,total_lines,lines -threshold 5 .
ExampleVeryComplexFunction golongfuncs/runner_test.go:10:1 total_nesting/total_lines=6.7 total_lines=108.0 lines=69.0
Finden Sie Funktionen mit der längsten durchschnittlichen Linienlänge:
$ golongfuncs +len/lines ./...
$ golongfuncs +total_len/total_lines ./...
Tests und -include-tests Dateien werden -include-vendor .
Beliebige Dateien/Verzeichnisse können mit -ignore "<regexp>" ignoriert werden. Wenn Sie beispielsweise Golang -Dateien ignorieren möchten, _generated.go : -ignore "^.*_generated.go$" enthalten möchten.
Funktionen können mit -ignore-func "regexp" ignoriert werden.
Dieses Tool ist unter der Apache -Lizenz, Version 2.0, lizenziert