Issue #6868 has been updated by alexeymuranov (Alexey Muranov). Thanks for the explanation and for the last example with method call inside `def`, i did not think well enough. I see that keywords can be parsed because they are known to be keywords. I think this can be closed, sorry. ---------------------------------------- Feature #6868: Make `do` in block syntax optional when the block is the last argument of a method and is not an optional argument https://bugs.ruby-lang.org/issues/6868#change-28887 Author: alexeymuranov (Alexey Muranov) Status: Feedback Priority: Normal Assignee: Category: core Target version: 3.0 =begin I propose to make the use of "(({do}))" in block syntax optional if the block is the last argument of a method and if it is a required argument, at least if the block does not take parameters. (I think this would be in line with how for example the last hash argument is treated.) I also think that this syntactic change may allow in future versions of Ruby to make (({def})), (({class})), (({module})) methods instead of keywords. Something like: 3.time puts "Hi!" end instead of 3.time do puts "Hi!" end I know this is not a good example, because for (({#times})) the block argument is optional. =end -- http://bugs.ruby-lang.org/