🙄

[Feature #20922] assert_xx 時に -1 を渡した時の警告を削除する提案

2024/11/16に公開

[Feature #20922] Should not we omit parentheses in assert calls?

  • Ruby では次のように第一引数がマイナスリテラルだったり正規表現リテラルだったりすると警告が表示されます
    • 警告がでるのは -W が有効な場合のみ
def hoge(a = 0)
  42
end

# warning: ambiguous first argument; put parentheses or a space even after `-' operator
hoge -1

# warning: ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `/' operator
hoge /a/
  • これは (hoge - 1) なのか hoge(-1) なのかが曖昧なので警告がでるようになっています(上記の場合だと hoge(-1) として処理される
  • それを踏まえた上で次のような assert_equal でも同様の警告が出力されます
assert_equal -1, val    #=> warning: ambiguous first argument; put parentheses or a space even after `-` operator
assert_match /foo/, str #=> warning: ambiguous `/`; wrap regexp in parentheses or add a space after `/` operator
  • この警告に対応する場合、メソッド呼び出しに () をつける必要があるんですがそうすると次のように () がついてたりついてたりするようなコードになります
assert_equal 1, one
assert_equal 0, zero
assert_equal(-1, minus_one)
  • チケットの内容は assert_xxx のときのみ警告を削除する提案になります
  • 警告は削除せずに Close されています
  • その上でリテラルだけにカッコをつけたり変数に代入した場合は警告が出ないなどの提示もされています
# 以下はいずれも警告は出ない
assert_equal (-1), minus_one
assert_match (/foo/), str

re = /foo/
assert_match re, str
  • そもそも仕様(やパーサ)として曖昧にしないようにするのはむずかしいんですかねえ
GitHubで編集を提案

Discussion