Goによる静的解析ツールに関する活動
登壇資料
- エディタの壁を越えるGoの開発ツールの文化と作成法 at VimConf 2016
- 条件式評価器の実装による管理ツールの抽象化 at Go Conference 2017 Spring
- 静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話 at builderscon tokyo 2017
- Goにおける静的解析と製品開発への応用 at ハッカーズチャンプルー2017
- Static Analysis in Go at Golang UK Conference 2017
- Goでかんたんソースコードの静的解析 at プロ生勉強会 第46回
- 粗探しをしてGoのコントリビューターになる方法 at Go1.8 Release Party
- goパッケージで型情報を用いたソースコード検索を実現する at Shinjuku.go#1
- Go静的解析ハンズオン at 第6回Golang勉強会 in Okinawa
- 静的解析を使った開発ツールの開発 at kamakura.go #3
- Goで静的解析ツールを作ろう at N高等学校 プログラミング クラスLT大会
- Goによる静的解析のはじめかた at Go Conference’19 Summer in Fukuoka
- Go Quiz Analyzer at Go Conference’19 Summer in Fukuoka LT
- ソースコードを堪能せよ at builderscon tokyo 2019
- A Tour of Static Analysis at golang.tokyo#22
- 静的解析を用いたISUCON向けツール
書籍
記事
- Goにおける静的解析のモジュール化について
- Google Cloud Spannerのセッションリークを静的解析で防ぐ
- gorenameをライブラリとして使う
- 簡単な式の評価機を作ってみる
- ASTを取得する方法を調べる
- 抽象構文木(AST)をトラバースする
- 抽象構文木(AST)をいじってフォーマットをかける
- Goのスコープについて考えてみよう
- Goの抽象構文木(AST)を手入力してHello, Worldを作る
- go/typesパッケージを使い変数名をリネームしてみる
- もっと楽して式の評価器を作る
- Goパッケージで簡単に静的解析して世界を広げよう
- astutil.Applyで抽象構文木を置き換える
- モジュール化された静的解析の実装を追ってみよう
- 静的解析で型を扱う
- ソースコードを堪能せよ -builderscon tokyo 2019で登壇しました-
- Goの静的解析ツールを簡単に使うためのエコシステムについて考える
- 特定の関数やメソッドの呼び出しを検知するLinterを作った
コードラボ/ハンズオン
開発したツール
- skeleton
- go/analysis用のスケルトンコードを生成するツール
- analysisutil
go/analysis
向けのユーティリティライブラリ
- zagane
- Google Cloud Spannerのセッションリークなどを見つけるツール
- nilerr
nil
であることをチェックしたのにerr
を返してしまうバグ(またはその逆)を検出するツール
- comment
- CommentMapを簡単にgo/analysisで扱うためのAnalyzer
- unitconst
5 * time.Second
の* time.Second
などの書き忘れを検出するツール
- forcetypeassert
- 2つめの結果を受け取らずに型アサーションをしている部分を検出するツール
- importgroup
- importのグルーピングが複数に分かれている場合に検出するツール
- lion
- テストされていない関数を検出するツール
- coverprofile
- go/analysisでcoverprofileを簡単に扱うためのAnalyzer
- noreplace
- go.modにreplaceがある場合に検出するツール
- modfile
- go/analysisでgo.modの解析を簡単に行うためのAnalyzer
- called
- 特定の関数が呼ばれているかチェックするツール
- vetgen
- 自分だけのgo/analysisベースの静的解析ツールコレクションを作るためのツール
- builtinprint
- 組み込み関数のprintやprintlnを使っていることを検出するツール
- ctxfield
- 構造体にcontext.Context型のフィールドがある場合に検出するツール
- unused
- どこからも参照されていないパッケージ関数や変数など検出するツール
- dupimport
- インポートパスが重複しているimportを検出するツール
- notest
- テストファイルがないことを検出するツール
- testutil
- go/analysisのためのテストユーティリティ
- nofmt
- gofmtなどによってフォーマットがかけられていないファイルを検出するツール
- readonly
- パッケージ変数への再代入を検出するツール
- gqlanalysis
- GraphQLの静的解析基盤