😺

[Feature #15554] ブロック引数を利用しないメソッドにブロック引数を渡したときに警告を出すようにする対応

2024/04/18に公開

[Feature #15554] warn/error passing a block to a method which never use a block

  • 以下のようにユーザはブロック引数を渡してそれが呼び出されることを期待しているが実際には呼び出されない事がある
def my_open(name)
  open(name)
end

# ユーザはブロック引数が呼ばれていることを期待しているが、実際には動かない
my_open(name){|f| important_work_with f }
  • このような問題を解決するために『ブロック引数を渡しているが、ブロック引数が使用されない場合』に警告を出すようにする対応案
  • この対応をするにあたりどこまで対応するのか、ルールや実装はどうするのかの議論がチケット内で行われています
  • で、このチケットの内容が matz から Go サインがでたので既に master ブランチにマージされています
  • 現状の開発版の Ruby 3.4 では以下のようなコードを -w 付きで実行すると警告が出力されるようになっています
def foo
end

# ブロック引数を利用していないメソッドにブロック引数を渡すとエラーになる
# warning: the passed block for 'Object#foo' defined at test.rb:2 may be ignored
foo {}
  • ただ、一旦機能は入ったんですが細かい挙動などはまだ調整しているみたいです
  • このあたりの細かい挙動はもう少し落ち着いてから別途まとめようかと思います
GitHubで編集を提案

Discussion