Project

General

Profile

Feature #8956

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

=begin 
 Currently, hashes require members to be delimited by commas (`,`), ((({,}))), even inside curly braces. E.g., 

 ~~~ruby 
 

   some_hash = { 
   
     :foo => 'bar', 
   
     :bar => 'foo', 
   
     :baz => { 
     
       :qux => 'quux', 
     
       :corge => 'grault' 
     } 
   } 
 } 
 ~~~ 

 In my opinion, these commas add nothing of value to this particular example since, visually, the members are already delimited by a newline (`\n`). ((({\n}))). Additionally, missing a comma between members results in `syntax (({syntax error, unexpected tSYMBEG, expecting '}'`. '}'})). 

 I propose we make these commas optional, such that the following syntax would be possible: 

 ~~~ruby 
 

   some_hash = { 
   
     :foo => 'bar' 
   
     :bar => 'foo' 
   
     :baz => { 
     
       :qux => 'quux' 
     
       :corge => 'grault' 
     } 
   } 
 } 
 ~~~ 

 This change would not affect existing hashes. Developers would be able to mix and match the old and new syntaxes as such: 

 ~~~ruby 
 

   some_hash = { 
   
     :foo => 'bar' 
   
     :bar => 'foo' 
   
     :baz => { 
     
       :foo => 'bar' + 'baz' 
     
       :bar => 'foo', :qux => 'quux' 
     
       :corge => 'grault' 
     } 
   } 
 } 
 ~~~ 

 This change would also reduce the occurrence of syntax errors in cases where the developer temporarily replaces a value in the hash, e.g., 

 ~~~ruby 
 

   some_hash = { 
   
     :this => 'that', 
   
     :foo => 'not bar'#'bar', 
   
     :those => 'the other' 
 
   } 
 ~~~ 

 Finally, this change would only affect hashes inside curly braces (for hopefully obvious reasons). 

 I have attached a diff of my suggested changes along with a script to test a variety of use cases. I also have an open pull request on GitHub: URL:https://github.com/ruby/ruby/pull/402 ((<URL:https://github.com/ruby/ruby/pull/402>)) 

 Please let me know if there's anything I've missed or that needs clarification. 
 =end

Back