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()
    • load, parse, typecheck
    • 渡されたファイル(.go)をパースする。これはparseパッケージのもの
      • ASTにしてまずいところを検証するんだな、という感じはわかる
    • importerForCompiler()ってなんだ。なんでコンパイラが出てくる
    • importerFunc()
    • Configのフィールドたくさんあるな。どこで初期化してるんだっけ
    • typesは、TypeOf()とか定義してるパッケージ。Info構造体に色々入っている
    • types.Infoを初期化して、チェックして値を入れてるのか
    • 200行ある関数
  • Goにおける静的解析のモジュール化について | メルカリエンジニアリング
  • driver(vet) -> unitchecker -> analyzer