gogrep
1.0.0
GO111MODULE=on go get mvdan.cc/gogrep
使用语法树搜索 Go 代码。
gogrep -x 'if $x != nil { return $x, $*_ }'
请注意,该项目已不再开发。有关更多详细信息,请参阅#64。
usage: gogrep commands [packages]
命令的形式为“-A 模式”,其中 -A 是以下之一:
-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
模式是一段可能包含通配符的 Go 代码。它可以是:
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
通配符由$
和名称组成。表达式中所有同名通配符必须匹配同一节点,“_”除外。例子:
$x.$_ = $x // assignment of self to a field in self
如果*
在名称之前,它将匹配任意数量的节点。例子:
fmt.Fprintf(os.Stdout, $*_) // all Fprintfs on stdout
*
也可用于匹配可选节点,例如:
for $*_ { $*_ } // will match all for loops
if $*_; $b { $*_ } // will match all ifs with condition $b
应用命令产生的节点将逐行打印到标准输出。
以下是 -a 操作数的两个简单示例:
gogrep -x '$x + $y' // will match both numerical and string "+" operations
gogrep -x '$x + $y' -a 'type(string)' // matches only string concatenations