You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jun 9, 2021. It is now read-only.
Note that this project is no longer being developed.
See #64 for more details.
Instructions
usage: gogrep commands [packages]
A command is of the form "-A pattern", where -A is one of:
-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
A pattern is a piece of Go code which may include wildcards. It can be:
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
Wildcards consist of $ and a name. All wildcards with the same name
within an expression must match the same node, excluding "_". Example:
$x.$_ = $x // assignment of self to a field in self
If * is before the name, it will match any number of nodes. Example:
fmt.Fprintf(os.Stdout, $*_) // all Fprintfs on stdout
* can also be used to match optional nodes, like:
for $*_ { $*_ } // will match all for loops
if $*_; $b { $*_ } // will match all ifs with condition $b
The nodes resulting from applying the commands will be printed line by
line to standard output.
Here are two simple examples of the -a operand:
gogrep -x '$x + $y' // will match both numerical and string "+" operations
gogrep -x '$x + $y' -a 'type(string)' // matches only string concatenations