Ruby Issue Tracking System: Issues
https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2017-11-15T19:55:00Z
Ruby Issue Tracking System
Redmine
Ruby master - Feature #14111 (Open): ArgumentErrorが発生した時メソッドのプロトタイプをメッセージに含む
https://bugs.ruby-lang.org/issues/14111
2017-11-15T19:55:00Z
esjee (SJ Stoker)
<p>(日本人じゃないですが、日本語を勉強してますから、日本語でレポートしてみました<br>
日本語で会話することはまだ馴れてないから、読みつらいや見苦しいところもあると思います<br>
そういうを指摘してくれれば幸いです)</p>
<a name="Abstract"></a>
<h1 >Abstract<a href="#Abstract" class="wiki-anchor">¶</a></h1>
<p>ArgumentErrorが発生したときのメッセージをより有意義にするため、コールしたメソッドのプロトタイプを表示することを提案したいと思います</p>
<a name="Background"></a>
<h1 >Background<a href="#Background" class="wiki-anchor">¶</a></h1>
<p>今ではArgumentErrorが発生するとこんな感じです</p>
<pre><code>[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'
</code></pre>
<p>簡単なメソッドやよく使うメソッドではこれでも問題ありません<br>
しかし、他の人のコードとか、あまり使わないメソッドだとこのメソッドのソースを読まないと分からないこともある<br>
Rubyのメソッドだとマニュアルを参照するしかないかもしれない</p>
<a name="Proposal"></a>
<h1 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h1>
<p>ArgumentErrorのメッセージにコールしたメソッドのプロトタイプを含む<br>
例えば</p>
<pre><code>[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'
</code></pre>
<a name="Implementation"></a>
<h1 >Implementation<a href="#Implementation" class="wiki-anchor">¶</a></h1>
<p><a href="https://github.com/esjee/PrintPrototype" class="external">https://github.com/esjee/PrintPrototype</a></p>
<p>とくにこのファイル<br>
<a href="https://github.com/esjee/PrintPrototype/blob/master/lib/printprototype/core_ext/argument_error.rb" class="external">https://github.com/esjee/PrintPrototype/blob/master/lib/printprototype/core_ext/argument_error.rb</a></p>
<a name="Evaluation"></a>
<h1 >Evaluation<a href="#Evaluation" class="wiki-anchor">¶</a></h1>
<p>ですけど、この実装には複数の問題があります</p>
<ul>
<li>複数のラインで書かれたメソッドのプロトタイプはどうやって見つければ?</li>
<li>全ファイルを読み込んでるため、巨大なファイルだとパフォーマンスに問題があるかもしれない</li>
<li>Ruby自身のメソッドではrbファイルが見つからないため、表示できない</li>
<li>sentry-ravenに頼ってはいけないでしょう</li>
</ul>
<a name="Discussion"></a>
<h1 >Discussion<a href="#Discussion" class="wiki-anchor">¶</a></h1>
<p>これまで読んでいただいて、ありがとうございました<br>
私から二つの質問があります</p>
<ul>
<li>これはよいfeatureだと思いますか?</li>
<li>上で挙げられた複数な問題をどうやって乗り越えられるでしょうか?</li>
</ul>
<a name="Summary"></a>
<h1 >Summary<a href="#Summary" class="wiki-anchor">¶</a></h1>
<p>ArgumentErrorが発生した時にもっと有意義なメッセージを表示したいと思います<br>
私はこれをgemにしようと思いましたが、満足のできる実装にはできませんでした<br>
小さくても、これはRubyを改良するfeatueだと信じてるです<br>
皆さんの意見と助けを求め、これを書きました</p>