From: "mame (Yusuke Endoh)" Date: 2021-12-08T04:09:26+00:00 Subject: [ruby-core:106544] [Ruby master Bug#18396] An unexpected "hash value omission" syntax error when without parentheses call expr follows Issue #18396 has been updated by mame (Yusuke Endoh). Status changed from Open to Rejected It is by design. ``` foo key: bar ``` was parsed as `foo(key: bar)` in Ruby 3.0 or before. It is incompatible to change it to `foo(key: key); bar`. Except some traditional exceptions like `puts "foo"` and `require "foo"`, it would be good to write parentheses when a method call has any argument. ---------------------------------------- Bug #18396: An unexpected "hash value omission" syntax error when without parentheses call expr follows https://bugs.ruby-lang.org/issues/18396#change-95208 * Author: koic (Koichi ITO) * Status: Rejected * Priority: Normal * ruby -v: ruby 3.1.0dev (2021-12-07T23:18:11Z master 4a3e7984bf) [x86_64-darwin19] * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- ## Summary I encountered an unexpected "hash value omission" syntax error when parentheses call expression follows: ```ruby % cat example.rb foo key: foo arg ``` ```console % ruby -cv /tmp/b.rb ruby 3.1.0dev (2021-12-07T23:18:11Z master 4a3e7984bf) [x86_64-darwin19] example.rb:2: syntax error, unexpected local variable or method, expecting `do' or '{' or '(' foo arg ``` ## Additional Information The following is a traditional usage. ```ruby # No errors. foo key: key foo arg ``` A syntax error is unexpectedly raised when hash value omission argument without parentheses is followed by a method call without parentheses. ```ruby # No errors is expected, but syntax error is raised. foo key: foo arg ``` No error occurs if any of the calls have parentheses. ```ruby # No errors. foo(key:) foo arg ``` ```ruby # Also no errors. foo key: foo(arg) ``` No error occurs when calling alone. ```ruby # No errors. foo key: ``` I encountered this error while trying to apply hash value omission to RSpec code of a real-world application (proprietary) . But this is a new Ruby 3.1 syntax and may not be supported yet. Thank you. -- https://bugs.ruby-lang.org/ Unsubscribe: