パルカワ2

PerlとRubyとイチャラブ

メソッドの名前でシュシュッと検索出来るようにしておく

Rubyのコードを読んでいると「このメソッドはどこで定義されているのだ!」と知りたくなる時がある。そういう時、僕はagで検索するのだけれども、対象にしたいメソッドdef self.method_nameで定義されているのかdef method_nameで定義されているのか、すぐにわからない。なので、こういう感じのを作っておいて、それを使っている。

function def () {
    ag "def (self\.)?$1" $2 $3
}

するとこんな感じで出来るので、楽

$ def model_name vendor/bundle/ruby/2.1.0/gems -l
vendor/bundle/ruby/2.1.0/gems/actionpack-4.1.10/lib/action_controller/model_naming.rb
vendor/bundle/ruby/2.1.0/gems/actionpack-4.2.1/lib/action_controller/model_naming.rb
vendor/bundle/ruby/2.1.0/gems/actionview-4.1.10/lib/action_view/model_naming.rb
vendor/bundle/ruby/2.1.0/gems/actionview-4.2.1/lib/action_view/model_naming.rb
vendor/bundle/ruby/2.1.0/gems/activemodel-4.1.10/lib/active_model/naming.rb
vendor/bundle/ruby/2.1.0/gems/activemodel-4.2.1/lib/active_model/naming.rb
vendor/bundle/ruby/2.1.0/gems/aws-sdk-v1-1.63.0/lib/aws/record/naming.rb
vendor/bundle/ruby/2.1.0/gems/aws-sdk-v1-1.64.0/lib/aws/record/naming.rb
vendor/bundle/ruby/2.1.0/gems/brakeman-3.0.2/lib/brakeman/checks/base_check.rb
vendor/bundle/ruby/2.1.0/gems/enumerize-0.11.0/test/module_attributes_test.rb
vendor/bundle/ruby/2.1.0/gems/ransack-1.6.5/lib/ransack/naming.rb
vendor/bundle/ruby/2.1.0/gems/ransack-1.6.6/lib/ransack/naming.rb
vendor/bundle/ruby/2.1.0/gems/shoulda-matchers-2.8.0/lib/shoulda/matchers/active_model/allow_value_matcher.rb
vendor/bundle/ruby/2.1.0/gems/shoulda-matchers-2.8.0/lib/shoulda/matchers/active_model/errors.rb
vendor/bundle/ruby/2.1.0/gems/shoulda-matchers-2.8.0/lib/shoulda/matchers/active_record/uniqueness/test_model_creator.rb
vendor/bundle/ruby/2.1.0/gems/shoulda-matchers-2.8.0/spec/support/unit/record_validating_confirmation_builder.rb
vendor/bundle/ruby/2.1.0/gems/shoulda-matchers-2.8.0/spec/support/unit/record_with_different_error_attribute_builder.rb

そうすると「あ〜ワシが知りたかったのはactive_model/naming.rbのやつや〜」とかわかる。嬉しい。

define_methodとか使われていたりするとこの方法では無理なので、binding.pry入れてから実行してsource_location見るとかしている。もっといい感じの方法知りたい。