Project

General

Profile

Feature #14111

Updated by esjee (SJ Stoker) almost 3 years ago

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

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

 # Background 
 今ではArgumentErrorが発生するとこんな感じです 今は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だと信じてるです 
 皆さんの意見と助けを求め、これを書きました

Back