行目の部分でエラーが表示されます。ツールを使って雛形を作成しています。使った雛形のソースコードが生成されるだけでなく、テストデータの雛形とテストコードも一緒に作ってくれます。これにより、ロジックに集中して、静的解析ツールを作成することができます。文を探索して見つけます。その後、そこで定義されているイテレーター変数の識別子を取得します。最後に、ブロック内でその変数が使われている箇所を探し、そこで参照を取っていたらエラーを出します。ロジックはかなりシンプルにまとめることができました。同じ名前の変数を子スコープの中で定義することができます。回定義していますが問題なく動きます。}}したがって、子スコープ内で再度定義されているiの参照をとっている部分でエラーを出してはいけません。変数名だけをみて検出するとこのパターンで引っかかるので、*ast.Objectを比較して、イテレータ変数と一致すればエラーを出す実装にしました。検出が多いのでもう少し精度良く検出できたら嬉しいと考えています。現在の実装では、参照を取っているだけでエラーにしていて、その参照がもう一度他の箇所で使われるかどうか確認していません。するだけであればバグが発生することはありませんが、エラーが出てしまいます。パターンを網羅するのは難しいので、これから良い方法を模索していきたいです。作りましたが、「思ったより簡単に作れたな」というのが正直な感想です。静的解析のしやすさのおかげなのかなと思っています。皆さんもぜひ何か静的解析ネタ思いついたら作ってみてください。(p1ass)サーバーサイドエンジニア。GoやISUCONが好きです。Analyticsを使用しています。