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