From: daniel@...42.com Date: 2019-08-09T18:51:23+00:00 Subject: [ruby-core:94230] [Ruby master Bug#16092] [doc] precedence of modifier-rescue Issue #16092 has been updated by Dan0042 (Daniel DeLorme). Status changed from Rejected to Feedback Description updated File modifier-statements.patch added Ok, I'm starting to see. The difference between statements and expressions is why we get this ```ruby puts( 1 if 2 ) #=> SyntaxError puts((1 if 2)) #=> 1 puts(if 2;1;end) #=> 1 ...interesting puts( 1 rescue 2 ) #=> SyntaxError puts((1 rescue 2)) #=> 1 defined?(1 rescue 2) #=> SyntaxError defined? (1 rescue 2) #=> "expression" ``` So `a if b rescue c` is parsed as `���a if b��� rescue c` because `a if ���b rescue c���` would be a SyntaxError. In any case, even if the issue is not precedence itself, I think the documentation should be updated somehow, because it leads one to think that `a if b rescue c` is equivalent to `a if (b rescue c)` Now that I understand the nature of the issue I've tried writing a documentation patch. ---------------------------------------- Bug #16092: [doc] precedence of modifier-rescue https://bugs.ruby-lang.org/issues/16092#change-80535 * Author: Dan0042 (Daniel DeLorme) * Status: Feedback * Priority: Normal * Assignee: * Target version: * ruby -v: * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- The docs state that modifier-rescue has higher precedence than assignments which have higher precedence than modifier-if. This is true for `v = expr rescue $! if condition` but not for `v = expr if condition rescue $!` which is treated as `(v = expr if condition) rescue $!` rather than `v = expr if (condition rescue $!)` This goes similarly for `defined? expr rescue $!` `not expr rescue $!` `expr1 and expr2 rescue $!` `expr1 or expr2 rescue $!` So maybe the documentation should state that modifier-rescue has **equal** precedence to modifier-if & others, with an **exception** made for assignments? I'm not entirely sure how to describe that exception though. ---Files-------------------------------- modifier-statements.patch (3.74 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: