🐙
[Bug #21168] メソッドの引数にブロック構文がある場合で Prism と parse.y に差異があるバグ報告
[Bug #21168] Prism doesn't require argument parentheses (in some cases) when a block is present but parse.y does
- 次のように『メソッドの引数にブロック構文がある場合』に『
Prismではシンタックスエラーでない』が『parse.yだとシンタックスエラーになる』というバグ報告
foo(
bar baz do
end
)
$ ruby -c --parser=prism test.rb
Syntax OK
$ ruby -c --parser=parse.y test.rb
ruby: test.rb:2: syntax error, unexpected 'do' for block, expecting ')' (SyntaxError)
bar baz do
^~
- 以下のようなコードの場合は
Prismparse.yともに一貫してシンタックスエラーにはならない
# Syntax OK
foo(
bar(baz do
end)
)
# Syntax OK
foo(
(bar baz do
end)
)
# Syntax OK
foo(
bar baz {
}
)
# Syntax OK
bar baz do
end
- また、逆に以下のコードは
Prismparse.yともに一貫してシンタックスエラーになる
# Syntax Error
[
foo bar do
end,
]
# Syntax Error
foo || bar baz do
end
-
bar baz do end単体ではエラーにならないが、これが引数に含まれているとエラーになるみたいですね - 個人的にヒア
bar baz do end単体でエラーにならないなら引数に含まれていてもエラーにならないほうが一貫性があり自然な気がしますが - matz としては『
parse.yの挙動に準じたい』みたいですねー
Discussion