Project

General

Profile

Bug #13371

Updated by ndn (Nikola Nenkov) about 7 years ago

When you skip the parens of method invocations and pass a regex, you can get a `SyntaxError` if the regex starts with a space. 

 ~~~ ruby 
 ''.split(/ ./) # => [] 
 ''.split /./     # => [] 
 ''.split / ./    # !> SyntaxError: unexpected '.' 
 ~~~ 

 As per the syntax highlighting in my text editor and a discussion with another person, it seems that the opening slash is interpreted as division: division. 

 ~~~ ruby 
 require 'ripper' 

 Ripper.lex("''.split /./") 
   # => 
   # [[[1, 0], :on_tstring_beg, "'"], 
   #    [[1, 1], :on_tstring_end, "'"], 
   #    [[1, 2], :on_period, "."], 
   #    [[1, 3], :on_ident, "split"], 
   #    [[1, 8], :on_sp, " "], 
   #    [[1, 9], :on_regexp_beg, "/"], 
   #    #           ^^^ 
   #    [[1, 10], :on_tstring_content, "."], 
   #    [[1, 11], :on_regexp_end, "/"]] 

 Ripper.lex("''.split / ./") 
   # => 
   # [[[1, 0], :on_tstring_beg, "'"], 
   #    [[1, 1], :on_tstring_end, "'"], 
   #    [[1, 2], :on_period, "."], 
   #    [[1, 3], :on_ident, "split"], 
   #    [[1, 8], :on_sp, " "], 
   #    [[1, 9], :on_op, "/"], 
   #    #           ^^^ 
   #    [[1, 10], :on_sp, " "], 
   #    [[1, 11], :on_period, "."], 
   #    [[1, 12], :on_op, "/"]] 
 ~~~ 


 Reproducible with older versions as well (tried it until 2.1.2)

Back