Project

General

Profile

Feature #16128

Updated by nobu (Nobuyoshi Nakada) about 5 years ago

I was not sure whether the following behaviour is a bug or not, so I filed this under "feature", mostly because 
 this may change existing behaviour; and even if I think the current behaviour in this context may not make a 
 lot of sense, perhaps there are caveats; or it may be too insignificant to want to change. 

 Anyway, without further ado, I will next show the ruby code that can be used to reproduce the issue/behaviour 
 that I refer to: 

 ```ruby 
 

     class Foo 

   

       def initialize 
     
         menu(:random_colour) 
   
       end 

   

       def menu(i) 
     
         case i.to_s 
     
         when /^-?-?random(-|_)?colou?r$/i, 
          
              /rcolour$/i, 
          
              'RCOL', 
          
           print_foobar 
     
         end 
   
       end 

   

       def print_foobar 
     
         print 'foobar' 
   
       end 

 

     end 

 

     Foo.new 
 ``` 

 To those who may not immediately see the problem - it is the last ',' character 
 in the case/when menu, right after the string 'RCOL'. 

 The above snippet was part of a much larger class/codebase, so I narrowed it 
 down to this smaller example. 

 If you run this code, you will see no output. The reason is due to the ','. 

 If you remove the ',', then you get the desired output - the invocation of 
 the method called print_foobar() which will print 'foobar'. 

 I discovered this strange behaviour by accident in a much larger case/when 
 menu (my case/when menu interfaces can be excessively long, I admit this). 

 Sometimes I re-arrange the case menu, and then I may forget the ',' there, 
 so I paste the ',' with the line, which sometimes leads to above situation, 
 which tends to confuse me. I am quite used to this at this point, so  
 discovering the problem does not take me long - but I was wondering whether 
 this current behaviour is useful for anything? 

 Because if not then perhaps there could be a warning by ruby, possibly by 
 the did-you-mean gem, or by ruby directly even without the did-you-mean 
 gem (although I think this may fit the did-you-mean gem). I have, however 
 had, decided to first report this to ruby core anyway, because perhaps I 
 am missing something obvious that may explain the behaviour. Or perhaps it 
 is difficult to distuingish what the next lines should be. But I assume 
 that the ruby parser assumes another case/when statement here, after the 
 ',', so does not treat the above as an error or problematic behaviour. 

 Perhaps the above can still be reported based on additional information, 
 such as correct indent level? I indent uniformly and consistently, so 
 the above could provide additional cues what the ruby user at hand may 
 have wanted to see - as in the example above, I don't think the trailing 
 ',' is useful; it was just a typo. I am not sure how easy it is to distinguish 
 this case between cases where the user wanted to have a ','. 

 I am not sure how easy it would be to change the behaviour of ruby in  
 this regard, or if it is wanted, or if it takes too much time, but I thought 
 it is better to report it anyway - others can give their opinion in this 
 case. Thanks!

Back