GO111MODULE=on go get mvdan.cc/gogrep
Recherchez le code Go à l’aide des arbres de syntaxe.
gogrep -x 'if $x != nil { return $x, $*_ }'
A noter que ce projet n'est plus en développement . Voir #64 pour plus de détails.
usage: gogrep commands [packages]
Une commande est de la forme "-A pattern", où -A est l'un des suivants :
-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 modèle est un morceau de code Go qui peut inclure des caractères génériques. Cela peut être :
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
Les caractères génériques se composent de $
et d'un nom. Tous les caractères génériques portant le même nom dans une expression doivent correspondre au même nœud, à l'exclusion de "_". Exemple:
$x.$_ = $x // assignment of self to a field in self
Si *
est avant le nom, il correspondra à n'importe quel nombre de nœuds. Exemple:
fmt.Fprintf(os.Stdout, $*_) // all Fprintfs on stdout
*
peut également être utilisé pour faire correspondre des nœuds facultatifs, comme :
for $*_ { $*_ } // will match all for loops
if $*_; $b { $*_ } // will match all ifs with condition $b
Les nœuds résultant de l'application des commandes seront imprimés ligne par ligne sur la sortie standard.
Voici deux exemples simples de l’opérande -a :
gogrep -x '$x + $y' // will match both numerical and string "+" operations
gogrep -x '$x + $y' -a 'type(string)' // matches only string concatenations