GO111MODULE=on go get mvdan.cc/gogrep
Busque código Go utilizando árboles de sintaxis.
gogrep -x 'if $x != nil { return $x, $*_ }'
Tenga en cuenta que este proyecto ya no se está desarrollando . Consulte el n.° 64 para obtener más detalles.
usage: gogrep commands [packages]
Un comando tiene la forma "-A patrón", donde -A es uno de:
-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
Un patrón es un fragmento de código Go que puede incluir comodines. Puede ser:
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
Los comodines constan de $
y un nombre. Todos los comodines con el mismo nombre dentro de una expresión deben coincidir con el mismo nodo, excepto "_". Ejemplo:
$x.$_ = $x // assignment of self to a field in self
Si *
está antes del nombre, coincidirá con cualquier número de nodos. Ejemplo:
fmt.Fprintf(os.Stdout, $*_) // all Fprintfs on stdout
*
también se puede utilizar para hacer coincidir nodos opcionales, como:
for $*_ { $*_ } // will match all for loops
if $*_; $b { $*_ } // will match all ifs with condition $b
Los nodos resultantes de aplicar los comandos se imprimirán línea por línea en la salida estándar.
Aquí hay dos ejemplos simples del operando -a:
gogrep -x '$x + $y' // will match both numerical and string "+" operations
gogrep -x '$x + $y' -a 'type(string)' // matches only string concatenations