GO111MODULE=on go get mvdan.cc/gogrep
Suchen Sie mithilfe von Syntaxbäumen nach Go-Code.
gogrep -x 'if $x != nil { return $x, $*_ }'
Beachten Sie, dass dieses Projekt nicht mehr weiterentwickelt wird . Weitere Einzelheiten finden Sie unter Nr. 64.
usage: gogrep commands [packages]
Ein Befehl hat die Form „-A-Muster“, wobei -A eines von Folgendem ist:
-x find all nodes matching a pattern
-g discard nodes not matching a pattern
-v discard nodes matching a pattern
-a filter nodes by certain attributes
-s substitute with a given syntax tree
-w write source back to disk or stdout
Ein Muster ist ein Teil des Go-Codes, der Platzhalter enthalten kann. Es kann sein:
a statement (many if split by semicolons)
an expression (many if split by commas)
a type expression
a top-level declaration (var, func, const)
an entire file
Platzhalter bestehen aus $
und einem Namen. Alle Platzhalter mit demselben Namen innerhalb eines Ausdrucks müssen mit demselben Knoten übereinstimmen, mit Ausnahme von „_“. Beispiel:
$x.$_ = $x // assignment of self to a field in self
Wenn *
vor dem Namen steht, stimmt es mit einer beliebigen Anzahl von Knoten überein. Beispiel:
fmt.Fprintf(os.Stdout, $*_) // all Fprintfs on stdout
*
kann auch verwendet werden, um optionale Knoten abzugleichen, wie zum Beispiel:
for $*_ { $*_ } // will match all for loops
if $*_; $b { $*_ } // will match all ifs with condition $b
Die aus der Anwendung der Befehle resultierenden Knoten werden zeilenweise auf der Standardausgabe ausgegeben.
Hier sind zwei einfache Beispiele für den Operanden -a:
gogrep -x '$x + $y' // will match both numerical and string "+" operations
gogrep -x '$x + $y' -a 'type(string)' // matches only string concatenations