Project

General

Profile

バグ #1308

Kernel#warnをシグネチャの合わないメソッドで上書きしている

Added by cob odo 4 months ago. Updated 3 months ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
プラグイン名:
ブランチ:
topic/1308-strict-warn
クラッシュする:
Yes

Description

https://docs.ruby-lang.org/ja/latest/method/Kernel/m/warn.html のようにKernel#warnが組み込みライブラリで定義されていますが、 core/utils.rb でグローバルなwarnメソッドを別途定義しているため、こちらが呼ばれてしまいます。
しかし core/utils.rb の方ではキーワード引数 uplevel が無いため、標準ライブラリ内でuplevel付きのwarn呼び出しがあると、エラーとなります(通常は無視されるようですが、RUBYOPT=-Wではクラッシュします)。

さしあたり、

def warn(msg, uplevel: nil)

のようにしておけばクラッシュはしませんでした。


再現手順

環境変数RUBYOPT=-W 付きでmikutterを起動するとクラッシュします。

{MIKUTTER_ROOT}/core/utils.rb:114:in `warn': wrong number of arguments (given 2, expected 1) (ArgumentError)
from ~/.rbenv/versions/2.5.3/lib/ruby/2.5.0/uri/common.rb:339:in `regexp'
from {MIKUTTER_ROOT}/core/lib/diva_hacks/entity/url_entity.rb:14:in `<module:Entity>'

Associated revisions

Revision 628d0d31 (diff)
Added by cob odo 4 months ago

add kwarg 'uplevel' to warn method for #1308

Revision bcb73698 (diff)
Added by toshi_a 初音 4 months ago

ああやだなあこれ消してぇよ refs #1308

History

#1

Updated by toshi_a 初音 4 months ago

  • Status changed from 分類待ち to 実装待ち
  • Assignee set to toshi_a 初音

Ruby 2.5.0から =uplevel:= 名前付き引数が追加されたようですね。

https://docs.ruby-lang.org/ja/2.5.0/method/Kernel/m/warn.html

warnをオーバライドしているのは知らずにやってしまったことが発端で、現在はloggerの改善と一緒にwarnのモンキーパッチをやめようと考えています。
なので、ruby 2.5でuplevelが渡された時は通常のwarnの振る舞いをしようかと思います。

#2

Updated by toshi_a 初音 4 months ago

  • Status changed from 実装待ち to レビュー待ち
  • Assignee changed from toshi_a 初音 to cob odo
  • Target version set to 3.8
  • ブランチ set to topic/1308-strict-warn

こんなのでどうでしょうか

#3

Updated by cob odo 4 months ago

  • Status changed from レビュー待ち to マージ待ち

確認しました。問題なさそうです。

#4

Updated by toshi_a 初音 3 months ago

  • Status changed from マージ待ち to 終了

merged.

Also available in: Atom PDF