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