KDOC 11: unitcheckerを読む
unitcheckerはGoの構文解析ライブラリである。
memo
unitcheckerはgo vetを呼び出すのに使われるパッケージである。
unitchecker.Main( asmdecl.Analyzer, assign.Analyzer,
というように、独立して存在する各Analyzerを呼び出す形式になっている。
Main()
一般的なコマンドラインツールという感じ。引数・オプションチェックやヘルプの表示をしている。
引数をパースして、最終的にRunを呼び出す。おかしかったときはos.Exitで終了する。
Run()
configファイルを読み取ってanalysisを実行する。
- NewFileSetを実行するのはなぜだろう
- 書き換えもやる
- アウトプット設定による分岐
- runした結果をイテレートしてツリーを作る
- ツリーを表示する
- 結果をイテレートしてプレーンテキストで表示する
- runした結果をイテレートしてツリーを作る
- 本処理はrun()
- load, parse, typecheck
- 渡されたファイル(.go)をパースする。これはparseパッケージのもの
- ASTにしてまずいところを検証するんだな、という感じはわかる
- importerForCompiler()ってなんだ。なんでコンパイラが出てくる
- importerFunc()
- Configのフィールドたくさんあるな。どこで初期化してるんだっけ
- typesは、TypeOf()とか定義してるパッケージ。Info構造体に色々入っている
- types.Infoを初期化して、チェックして値を入れてるのか
- 200行ある関数
- Goにおける静的解析のモジュール化について | メルカリエンジニアリング
- 参考になる
- Analyzerの出力結果は3つある
- factは、静的解析する中で見つけられた事実を示す
- Diagnosticsはソースコードの任意の位置に紐付いた情報
- resultはそのままユーザに返されるわけではなく、ほかのanalyzerに渡される情報
- analyzerの例
- driver(vet) -> unitchecker -> analyzer