👏

[Bug #20681] 特定の警告を warn で抑制できないチケット

2024/08/19に公開

[Bug #20681] Regular expression warnings are treated as compiler warnings during runtime

  • 次のような正規表現を定義すると警告が出力されます
source = "/\w**/"
# warning: regular expression has redundant nested repeat operator '*': /\/w**\//
Regexp.new(source)
  • これを次のように #warn で抑制するようにしたいんですが意図する挙動にならないという内容のチケットになります
# 内部で警告が呼びされるときにこのメソッドが呼び出されることを想定しているが呼び出されない
def warn(...)
  puts "CALLED"
end

source = "/\w**/"
Regexp.new(source)
  • これなんですがコメントにも書いてある通りトップレベルの #warn ではなくて Warning.warn の方を再定義する必要があります
module Warning
  def self.warn(...)
    puts "CALLED"
  end
end

source = "/\w**/"
Regexp.new(source)
__END__
output:
CALLED
GitHubで編集を提案

Discussion