■ 1. 既存ツールの課題
- Goの標準ツール: Go言語には、コードの抽象構文木(AST)を解析し、整形するツールが備わっている。
ast.Walk()
とVisitor
を使うことで、ASTのノードを走査・変更できる。- ツールの限界:
ast.Walk()
は、既存ノードの内容やサブノードの変更は可能だが、ノード自体を別のノードに置き換えることはできない。これは、ある種の式を別の種類の式に書き換える場合などに必要となる。■ 2. gorewriteの機能と利点
- 解決策: 「gorewrite」は、この問題を解決するために開発されたツールである。
- 主要機能:
ast.Walk()
と似ているが、Rewriter
という機能拡張されたVisitor
を使用する。このRewriter
は、修正したast.Node
を返すことが可能である。- 利点: 既存のノードを別のノードに置き換えることができ、コードの書き換えをより柔軟に行うことができる。利用者は
ast.Walk()
の代わりにRewrite()
を呼び出すだけでよい。