Issue #13073 has been reported by Alexander Payne.

----------------------------------------
Bug #13073: Hash Key => Proc parse failure
https://bugs.ruby-lang.org/issues/13073

* Author: Alexander Payne
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.4.0p0
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
A Hash that stores multiple Proc literals causes syntax failures when passed as a method argument. Specifically, this only appears to happen on the second Proc literal in a Hash, not the first.

Minimal test case:

```ruby
def foo a, h
  [a, h]
end

foo :bar, {
  a: proc do
  end,
  b: proc do
  end
}
```

Attempting to load this code causes the following error:

```
SyntaxError: test.rb:8: syntax error, unexpected keyword_do_block, expecting '}'
  b: proc do
            ^
```

I first encountered this while attempting to run the Middleman gem (version 4.2.0). The specific error is:

```
/usr/local/lib/ruby/gems/2.4.0/gems/middleman-core-4.2.0/lib/middleman-core/application.rb:194: syntax error, unexpected keyword_do_block, expecting '}' (SyntaxError)
      layout: proc do |file, app|
                     ^
/usr/local/lib/ruby/gems/2.4.0/gems/middleman-core-4.2.0/lib/middleman-core/application.rb:194: syntax error, unexpected '|', expecting '='
   layout: proc do |file, app|
                              ^
/usr/local/lib/ruby/gems/2.4.0/gems/middleman-core-4.2.0/lib/middleman-core/application.rb:197: syntax error, unexpected '}', expecting keyword_end
    }, 'Callbacks that can exclude 
     ^
/usr/local/lib/ruby/gems/2.4.0/gems/middleman-core-4.2.0/lib/middleman-core/application.rb:460: syntax error, unexpected keyword_end, expecting end-of-input
```

The offending code is visible on GitHub, [here](https://github.com/middleman/middleman/blob/master/middleman-core/lib/middleman-core/application.rb#L194).



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>