遅くなってしまいましたが、11/26(火)にgolang.tokyo#37で登壇しました。
今回が初めてのオフラインでの登壇だったので少し緊張しましたが、懇親会で直接感想をいただけたのが嬉しかったです。
登壇内容について
Goの静的解析をテーマに登壇しました。
以下、登壇中に紹介できなかった点について簡単に紹介します。
解析対象のASTを確認する
静的解析ツールを作成中、ASTノードをキャストしながら目的の構文を探すことがよくあります。
この時、解析対象のソースコードのASTがどうなっているのか、どのような ast.Node
具象型 かがコードの位置ごとにわかると便利です。
ASTを出力するツールはいくつかあります。
go/parser
でAST Treeを出力するコードを自分で書くgotype -ast
でAST Tree を出力する- GoAST Viewerを使う
自分は2.3.をよく使っています。特にGoAST Viewerはブラウザベースで簡単に使えるので便利です (WASM向けにビルドされたGoバイナリをローカルで実行しているようなので、サーバー通信もなく高速です)。
ReviewDog
既にご存知の方も多いと思いますが、ReviewDogを使用すればLinterの結果をレビューコメントとしてGitリポジトリのホスティングサービス上に表示させることができます。 よくある使い方として、GitHub PRへのコメントがあります。
様々なLinterの結果をpipeで入力できるので、独自Linter含めgolangci-lintなどのOSS Linterも流して表示することができます。
$ gofmt -s -d . | reviewdog -name="gofmt" -f=diff -f.diff.strip=0 -reporter=github-pr-review $ shellcheck -f diff $(shfmt -f .) | reviewdog -f=diff
おわりに
今後もGoやっていきます。