Perlの使ってないメソッド探すやつ作った.
r7kamuraさんのやつそこそこ使えるって聞いたのでPerl用のを作ってみた.
プロジェクト内で,fooっていうメソッド定義だけして,プロジェクト内で呼んでないときに,消しましょうって教えてくれる.メソッド名だけ見ているので,他のクラスに同名のメソッドがあって,そっちは呼んでない,みたいなのは発見できない.
中村さんのはメソッドの定義とかにフックしてコールバックが呼ばれるといったかっこいい設計だけど,Perlでどうやるか分からなかったから,PPIでsub xxx と ->xxx と ::xxxを取ってきて比べるといったことをしている.
簡単な例では動く.this_is_unused_methodっていうのが,サンプルのために用意した,呼んでないメソッドで,それを発見できてる.
% carton exec -- bin/find-unused-methods.pl lib/**/** bin/* lib/FindUnusedMethod.pm#L82 this_is_unused_method
以下のような場合に動かない.
$self->$method
みたいに動的に呼ぶメソッドを決める場合- 実行しないと分からない,$methodが毎回変わるからこういう書き方をしているので,カバレッジの高いテストが必要,そうすると,テストのカバレッジを取るのと同じ結果になる(カバレッジ取るほうが実際に実行されたパスを見るので精度良い)
- テンプレートエンジンだけからメソッドを呼んでる場合
- テンプレートエンジンのテンプレートをパースすればできる
- フレームワークから呼ばれる場合
- useしてるフレームワークやライブラリを全てパースする必要がある.