Project

General

Profile

Bug #17727

Updated by colintherobot (Colin Hart) about 4 years ago

## Background 

 Given a method that takes a kwarg and a **positional_arg it throws an unexpected syntax error if you pass it an intact hash. This happens when you call the method, but also when you declare the method if it is multi-line. **arg 

 ``` ruby 
 def foo(a:, **b) 
    [a,b] 
 end  
 ``` 

 ## Expectation 

 If you call this method without deconstructing the hash passed to the second argument first it throws an error that I thought was maybe just an unhandled case. I would expect a message indicating that you need to deconstruct the hash first.  


 ## Steps to reproduce 

  

 Instead it throws a syntax error: 
 ``` ruby 
 foo(a: '1', {b: 2}) 
 SyntaxError: unexpected ')', expecting => 
 foo(a: '1', {b: 2}) 
                   ^ 
 ``` 

 Passing case when you deconstruct the hash first: 
 ``` ruby 
 foo(a: '1', **{b: 2}) 
 => ["1", {:b=>2}] 
 ``` 

 But wondering if there's something else going on because you get a different error when defining this case on multiple lines. If you're trying to run this in a repl environment it won't even let you complete the method call. 

 from repl: 
 ``` ruby 
 foo( 
   a: '1', 
   {b: 2} 
 SyntaxError: unexpected '\n', expecting => 
 ``` 

 passing case: 
 ``` ruby 
 foo( 
   a: '1',   
   **{b:1} 
 )   
 => ["1", {:b=>1}] 
 ``` 


 Attached is a ruby script to reproduce the above cases. 

Back