MetricsReloadedのライン数が他のステップカウンタ系と異なる
ってのに気づいた。MetricsReloadedってのは、IntelliJのプラグインでLOCやら循環参照複雑度とか計測してくれるプラグイン。IntelliJ標準のInspectorにもmetricsカテゴリでいくつか計測可能なんだけど、どうゆうわけかLOCは計測できない。
#あ、LOCって"Lines of Code"の事ね。
そんでよく使ってたのが、このMetricsReloaded。似たようなのにStatisticってのがある。IntelliJでLOC数えたいと思ったら、MetricsReloadedかStatistic使うしか選択肢はないんじゃないかな。
で、モノは試しにこいつら同じ値を計測するんだよな?と試してみたら違かった。:-(
検証用にEclipseのstepcounterでも計ってみたら、Statisticと同じ値になった。さらに目視でも確認したところ、MetricsReloadedの値がおかしいってのがわかった。
MetricsReloadedのソースみたら理由は分かったんだけど、つまりはこうゆうことらしい。
- Lines of Code
- いわゆるライン数なんだけど、空白とクラス宣言前の文(packageとimport)が計測されない。つまりクラス本体の空白以外のライン数が計上される。
- Source Lines of Code
- 実行行数。Lines of Codeからコメント行を除いたライン数。上と同じ理由でpackageとimport部分が計測されない。
- Comment Lines of Code
- コメント行数。LOCと似たような理由でpackage宣言より前のコメント(ヘッダコメント?)が計測されない。
- Member of top-level classes
- いわゆるクラスファイル数。Member of classesだと内部クラスも別に数えちゃうので、クラスファイル数にならないのに注意。
うむ、とっても微妙。package、importを無視するのは百歩譲って許すとして(イヤ、許したくないけどw)、なぜ空白行を無視する。そんでもって、空白行だけを計測する方法もない。つまり、今のMetricsReloadedでは、どうがんばってもStatisticやstepcounterと同じ測定値を出せないってところまでわかった。
計測値が合わない理由はわりと簡単で、このプラグイン、単純に対象ファイルを読み込んでいるのではなく、IntelliJが内部的に管理してるAST(IntelliJ用語だとPSI?)を元にLOCとかを計測してるからみたい。ちょうどPsiViewerって便利プラグインがあるので、それ使うと一目瞭然だった。
PSI使うアイデアは面白いのだけれど、そもそもの計測結果が間違ってるのに、さらに計測対象を変えると、もっと違う値になるとかやめて欲しい(プロジェクトの総LOCとか、クラス別に集計した値と、モジュール/プロジェクト単位で集計した値が異なるとかあった。
理屈がわかったので、その気になったら直すかもしんない。それよっかStatisticを使うか、stepcounterをIntelliJのプラグイン化したほうが良い気もするけど...。とりあえず覚えている内にメモは残した。
あと、IDEA11でMetricsReloaded動かないと思うのだけど、もしダメそうだったら、ここにあるの試してみて。
→ Downloads · masanobuimai/MetricsReloaded · GitHub