simplecov (0.16.1)のコードリーディングをしました。

SimpleCov.startは以下のように定義されており、Coverage.startを呼び出します。

lib/simplecov.rb内ではsimplecov/defaultsも読み込まれます。

simplecov/defaults.rbはSimpleCovに関する各種設定を行います。 Kernel.at_exitでプロセス終了時に処理を実行します。

SimpleCov.run_exit_tasks!は以下のように定義されており、SimpleCov.at_exit.callを呼び出します。

SimpleCov.at_exitはSimpleCov::Configuration.at_exitで、SimpleCov.result.format!を呼び出すprocになります。

SimpleCov.resultはCoverage.resultとloadされていないファイルをマージして返します。

Simplecov::Result.format!はformatterのformatメソッドを呼び出します。simplecov/defaults.rbを読み込んでいる場合、formatterはSimpleCov::Formatter::HTMLFormatterになります。

HTMLFormatter#formatは以下のように定義されています。simplecov-htmlのgemのpublicディレクトリのファイル群をassetの出力パスにコピーし、index.htmlにファイルの内容を書き出します。

templateはERBのインスタンスでlayout.erbのファイルをHTMLFormatterのインスタンスの#format呼び出し時のbindingでレンダリングしています。

layout.erbは以下のように定義されています。

formatted_file_listはtemplateメソッドを使ってfile_list.erbのテンプレートをレンダリングします。source_filesの引数は一見使って無さそうに見えますが、bindingを使ってfile_list.erbのレンダリング時に利用しています。

#formatted_source_fileはsource_fileのレンダリングをします。この部分はjQueryのhide関数で非表示になっており、colorboxを使ってクリック時にポップアップでソースコードを表示する処理を実現しています。