hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

Perlの使ってないメソッド探すやつ

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してるフレームワークやライブラリを全てパースする必要がある.