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