Project

General

Profile

Feature #14111

ArgumentErrorが発生した時メソッドのプロトタイプをメッセージに含む

Added by esjee (SJ Stoker) almost 3 years ago. Updated over 1 year ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:83790]

Description

(日本人じゃないですが、日本語を勉強してますから、日本語でレポートしてみました
日本語で会話することはまだ馴れてないから、読みつらいや見苦しいところもあると思います
そういうを指摘してくれれば幸いです)

Abstract

ArgumentErrorが発生したときのメッセージをより有意義にするため、コールしたメソッドのプロトタイプを表示することを提案したいと思います

Background

今ではArgumentErrorが発生するとこんな感じです

[1] pry(main)> cat ./spec/kerk_class.rb
class Kerk
  def foo1(a)
  end
end
[2] pry(main)> require './spec/kerk_class.rb'
=> true
[3] pry(main)> Kerk.new.foo1
ArgumentError: wrong number of arguments (0 for 1)
from /home/esjee/src/printprototype/spec/kerk_class.rb:2:in `foo1'

簡単なメソッドやよく使うメソッドではこれでも問題ありません
しかし、他の人のコードとか、あまり使わないメソッドだとこのメソッドのソースを読まないと分からないこともある
Rubyのメソッドだとマニュアルを参照するしかないかもしれない

Proposal

ArgumentErrorのメッセージにコールしたメソッドのプロトタイプを含む
例えば

[4] pry(main)> Kerk.new.foo1
ArgumentError: wrong number of arguments (0 for 1)
Method prototype:
    def foo1(a)
from /home/esjee/src/printprototype/spec/kerk_class.rb:2:in `foo1'

Implementation

https://github.com/esjee/PrintPrototype

とくにこのファイル
https://github.com/esjee/PrintPrototype/blob/master/lib/printprototype/core_ext/argument_error.rb

Evaluation

ですけど、この実装には複数の問題があります

  • 複数のラインで書かれたメソッドのプロトタイプはどうやって見つければ?
  • 全ファイルを読み込んでるため、巨大なファイルだとパフォーマンスに問題があるかもしれない
  • Ruby自身のメソッドではrbファイルが見つからないため、表示できない
  • sentry-ravenに頼ってはいけないでしょう

Discussion

これまで読んでいただいて、ありがとうございました
私から二つの質問があります

  • これはよいfeatureだと思いますか?
  • 上で挙げられた複数な問題をどうやって乗り越えられるでしょうか?

Summary

ArgumentErrorが発生した時にもっと有意義なメッセージを表示したいと思います
私はこれをgemにしようと思いましたが、満足のできる実装にはできませんでした
小さくても、これはRubyを改良するfeatueだと信じてるです
皆さんの意見と助けを求め、これを書きました


Files


Related issues

Related to Ruby master - Feature #14145: Proposal: Better Method#inspectClosedActions

Also available in: Atom PDF