whitequark / parser

A Ruby parser.
Other
1.59k stars 199 forks source link

Part of the parsing for the ternary operator is not compatible with Ruby 2.2+ #1041

Open koic opened 1 month ago

koic commented 1 month ago

The following changes have been made between Ruby 2.1 and earlier and 2.2 and later:

Ruby 2.1 and earlier:

$ ruby -cve 'x ? !y: z'
ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-darwin13.0]
-e:1: syntax error, unexpected tLABEL
x ? !y: z
       ^

Ruby 2.2 and later:

$ ruby -cve 'x ? !y: z'
ruby 2.2.10p489 (2018-03-28 revision 63023) [x86_64-darwin17]
Syntax OK

Expected Behavior:

In Ruby 2.2 and later, the expression x ? !y : z is successfully parsed without parse error.

Actual Behavior:

The latest version of the Parser gem (3.3.5.0) still follows the behavior of Ruby 2.1 and earlier, which raises a syntax error when attempting to parse x ? !y : z.

For example:

$ ruby-parse --22 -e 'x ? !y: z'
(fragment:0):1:6: error: unexpected token tLABEL
(fragment:0):1: x ? !y: z
(fragment:0):1:      ^~

$ ruby-parse --33 -e 'x ? !y: z'
(fragment:0):1:6: error: unexpected token tLABEL
(fragment:0):1: x ? !y: z
(fragment:0):1:      ^~