From: "eileencodes (Eileen Uchitelle) via ruby-core" Date: 2025-03-07T19:41:04+00:00 Subject: [ruby-core:121258] [Ruby master Bug#21168] Prism doesn't require argument parentheses (in some cases) when a block is present but parse.y does Issue #21168 has been updated by eileencodes (Eileen Uchitelle). I took a look at this and I'm not sure any of these cases should fail - which would mean the consistently rejected cases are incorrect. If the argument is wrapped in parenthesis it passes the syntax check (in all cases provided in this report). Prism can parse the first example without error, and if all the methods are defined it runs and produces correct results. So I'd argue that `parse.y` is incorrect in all cases and Prism should be fixed for the last two. Also for what it's worth, with `parse.y` the last two examples point to the passed argument as where the syntax error is occurring, whereas the first example points to the `do` keyword. If it's decided these should all error, I think the error should be consistent in which part of these examples are incorrect (ie is it the argument passes to `bar` or is it the `do` keyword that's unexpected?) Syntax error at the `1` argument with parse.y. ``` [ bar 1 do end ] => ./miniruby: test.rb:2: syntax error, unexpected integer literal, expecting 'do' or '{' or '(' (SyntaxError) bar 1 do ^ ``` Syntax error at the `do` keyword with parse.y: ``` foo( bar 1 do end ) => ./miniruby: test2.rb:2: syntax error, unexpected 'do' for block, expecting ')' (SyntaxError) bar 1 do ^~ ``` ---------------------------------------- Bug #21168: Prism doesn't require argument parentheses (in some cases) when a block is present but parse.y does https://bugs.ruby-lang.org/issues/21168#change-112213 * Author: Earlopain (Earlopain _) * Status: Open * Assignee: prism * ruby -v: ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- It's a bit more than that but explaining it in full would be a bit much. Instead, see this: ```rb foo( bar baz do end ) ``` ```sh $ 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 ^~ ``` OTOH, this is consistently rejected: ```rb [ foo bar do end, ] # And also foo || bar baz do end ``` -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/