syntax_tree 4.3.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.gitattributes +1 -0
 - data/.rubocop.yml +1 -1
 - data/CHANGELOG.md +26 -1
 - data/Gemfile.lock +4 -4
 - data/README.md +111 -12
 - data/lib/syntax_tree/cli.rb +57 -25
 - data/lib/syntax_tree/formatter.rb +56 -20
 - data/lib/syntax_tree/node.rb +3119 -1409
 - data/lib/syntax_tree/parser.rb +118 -92
 - data/lib/syntax_tree/pattern.rb +3 -3
 - data/lib/syntax_tree/plugin/single_quotes.rb +5 -1
 - data/lib/syntax_tree/plugin/trailing_comma.rb +5 -1
 - data/lib/syntax_tree/version.rb +1 -1
 - data/lib/syntax_tree/visitor/environment.rb +7 -4
 - data/lib/syntax_tree/visitor/field_visitor.rb +23 -117
 - data/lib/syntax_tree/visitor/mutation_visitor.rb +924 -0
 - data/lib/syntax_tree/visitor/with_environment.rb +0 -8
 - data/lib/syntax_tree/visitor.rb +12 -48
 - data/lib/syntax_tree.rb +14 -2
 - data/syntax_tree.gemspec +1 -1
 - metadata +6 -4
 
    
        data/lib/syntax_tree/parser.rb
    CHANGED
    
    | 
         @@ -421,11 +421,11 @@ module SyntaxTree 
     | 
|
| 
       421 
421 
     | 
    
         
             
                #   on_alias: (
         
     | 
| 
       422 
422 
     | 
    
         
             
                #     (DynaSymbol | SymbolLiteral) left,
         
     | 
| 
       423 
423 
     | 
    
         
             
                #     (DynaSymbol | SymbolLiteral) right
         
     | 
| 
       424 
     | 
    
         
            -
                #   ) ->  
     | 
| 
      
 424 
     | 
    
         
            +
                #   ) -> AliasNode
         
     | 
| 
       425 
425 
     | 
    
         
             
                def on_alias(left, right)
         
     | 
| 
       426 
426 
     | 
    
         
             
                  keyword = consume_keyword(:alias)
         
     | 
| 
       427 
427 
     | 
    
         | 
| 
       428 
     | 
    
         
            -
                   
     | 
| 
      
 428 
     | 
    
         
            +
                  AliasNode.new(
         
     | 
| 
       429 
429 
     | 
    
         
             
                    left: left,
         
     | 
| 
       430 
430 
     | 
    
         
             
                    right: right,
         
     | 
| 
       431 
431 
     | 
    
         
             
                    location: keyword.location.to(right.location)
         
     | 
| 
         @@ -575,7 +575,7 @@ module SyntaxTree 
     | 
|
| 
       575 
575 
     | 
    
         
             
                def on_args_forward
         
     | 
| 
       576 
576 
     | 
    
         
             
                  op = consume_operator(:"...")
         
     | 
| 
       577 
577 
     | 
    
         | 
| 
       578 
     | 
    
         
            -
                  ArgsForward.new( 
     | 
| 
      
 578 
     | 
    
         
            +
                  ArgsForward.new(location: op.location)
         
     | 
| 
       579 
579 
     | 
    
         
             
                end
         
     | 
| 
       580 
580 
     | 
    
         | 
| 
       581 
581 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
         @@ -920,7 +920,7 @@ module SyntaxTree 
     | 
|
| 
       920 
920 
     | 
    
         
             
                #   on_brace_block: (
         
     | 
| 
       921 
921 
     | 
    
         
             
                #     (nil | BlockVar) block_var,
         
     | 
| 
       922 
922 
     | 
    
         
             
                #     Statements statements
         
     | 
| 
       923 
     | 
    
         
            -
                #   ) ->  
     | 
| 
      
 923 
     | 
    
         
            +
                #   ) -> BlockNode
         
     | 
| 
       924 
924 
     | 
    
         
             
                def on_brace_block(block_var, statements)
         
     | 
| 
       925 
925 
     | 
    
         
             
                  lbrace = consume_token(LBrace)
         
     | 
| 
       926 
926 
     | 
    
         
             
                  rbrace = consume_token(RBrace)
         
     | 
| 
         @@ -947,10 +947,10 @@ module SyntaxTree 
     | 
|
| 
       947 
947 
     | 
    
         
             
                      end_column: rbrace.location.end_column
         
     | 
| 
       948 
948 
     | 
    
         
             
                    )
         
     | 
| 
       949 
949 
     | 
    
         | 
| 
       950 
     | 
    
         
            -
                   
     | 
| 
       951 
     | 
    
         
            -
                     
     | 
| 
      
 950 
     | 
    
         
            +
                  BlockNode.new(
         
     | 
| 
      
 951 
     | 
    
         
            +
                    opening: lbrace,
         
     | 
| 
       952 
952 
     | 
    
         
             
                    block_var: block_var,
         
     | 
| 
       953 
     | 
    
         
            -
                     
     | 
| 
      
 953 
     | 
    
         
            +
                    bodystmt: statements,
         
     | 
| 
       954 
954 
     | 
    
         
             
                    location: location
         
     | 
| 
       955 
955 
     | 
    
         
             
                  )
         
     | 
| 
       956 
956 
     | 
    
         
             
                end
         
     | 
| 
         @@ -971,7 +971,7 @@ module SyntaxTree 
     | 
|
| 
       971 
971 
     | 
    
         
             
                #     untyped receiver,
         
     | 
| 
       972 
972 
     | 
    
         
             
                #     (:"::" | Op | Period) operator,
         
     | 
| 
       973 
973 
     | 
    
         
             
                #     (:call | Backtick | Const | Ident | Op) message
         
     | 
| 
       974 
     | 
    
         
            -
                #   ) ->  
     | 
| 
      
 974 
     | 
    
         
            +
                #   ) -> CallNode
         
     | 
| 
       975 
975 
     | 
    
         
             
                def on_call(receiver, operator, message)
         
     | 
| 
       976 
976 
     | 
    
         
             
                  ending =
         
     | 
| 
       977 
977 
     | 
    
         
             
                    if message != :call
         
     | 
| 
         @@ -982,7 +982,7 @@ module SyntaxTree 
     | 
|
| 
       982 
982 
     | 
    
         
             
                      receiver
         
     | 
| 
       983 
983 
     | 
    
         
             
                    end
         
     | 
| 
       984 
984 
     | 
    
         | 
| 
       985 
     | 
    
         
            -
                   
     | 
| 
      
 985 
     | 
    
         
            +
                  CallNode.new(
         
     | 
| 
       986 
986 
     | 
    
         
             
                    receiver: receiver,
         
     | 
| 
       987 
987 
     | 
    
         
             
                    operator: operator,
         
     | 
| 
       988 
988 
     | 
    
         
             
                    message: message,
         
     | 
| 
         @@ -1076,6 +1076,7 @@ module SyntaxTree 
     | 
|
| 
       1076 
1076 
     | 
    
         
             
                  Command.new(
         
     | 
| 
       1077 
1077 
     | 
    
         
             
                    message: message,
         
     | 
| 
       1078 
1078 
     | 
    
         
             
                    arguments: arguments,
         
     | 
| 
      
 1079 
     | 
    
         
            +
                    block: nil,
         
     | 
| 
       1079 
1080 
     | 
    
         
             
                    location: message.location.to(arguments.location)
         
     | 
| 
       1080 
1081 
     | 
    
         
             
                  )
         
     | 
| 
       1081 
1082 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1095,6 +1096,7 @@ module SyntaxTree 
     | 
|
| 
       1095 
1096 
     | 
    
         
             
                    operator: operator,
         
     | 
| 
       1096 
1097 
     | 
    
         
             
                    message: message,
         
     | 
| 
       1097 
1098 
     | 
    
         
             
                    arguments: arguments,
         
     | 
| 
      
 1099 
     | 
    
         
            +
                    block: nil,
         
     | 
| 
       1098 
1100 
     | 
    
         
             
                    location: receiver.location.to(ending.location)
         
     | 
| 
       1099 
1101 
     | 
    
         
             
                  )
         
     | 
| 
       1100 
1102 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1181,7 +1183,7 @@ module SyntaxTree 
     | 
|
| 
       1181 
1183 
     | 
    
         
             
                #     (Backtick | Const | Ident | Kw | Op) name,
         
     | 
| 
       1182 
1184 
     | 
    
         
             
                #     (nil | Params | Paren) params,
         
     | 
| 
       1183 
1185 
     | 
    
         
             
                #     untyped bodystmt
         
     | 
| 
       1184 
     | 
    
         
            -
                #   ) ->  
     | 
| 
      
 1186 
     | 
    
         
            +
                #   ) -> DefNode
         
     | 
| 
       1185 
1187 
     | 
    
         
             
                def on_def(name, params, bodystmt)
         
     | 
| 
       1186 
1188 
     | 
    
         
             
                  # Make sure to delete this token in case you're defining something like
         
     | 
| 
       1187 
1189 
     | 
    
         
             
                  # def class which would lead to this being a kw and causing all kinds of
         
     | 
| 
         @@ -1223,7 +1225,9 @@ module SyntaxTree 
     | 
|
| 
       1223 
1225 
     | 
    
         
             
                      ending.location.start_column
         
     | 
| 
       1224 
1226 
     | 
    
         
             
                    )
         
     | 
| 
       1225 
1227 
     | 
    
         | 
| 
       1226 
     | 
    
         
            -
                     
     | 
| 
      
 1228 
     | 
    
         
            +
                    DefNode.new(
         
     | 
| 
      
 1229 
     | 
    
         
            +
                      target: nil,
         
     | 
| 
      
 1230 
     | 
    
         
            +
                      operator: nil,
         
     | 
| 
       1227 
1231 
     | 
    
         
             
                      name: name,
         
     | 
| 
       1228 
1232 
     | 
    
         
             
                      params: params,
         
     | 
| 
       1229 
1233 
     | 
    
         
             
                      bodystmt: bodystmt,
         
     | 
| 
         @@ -1234,12 +1238,12 @@ module SyntaxTree 
     | 
|
| 
       1234 
1238 
     | 
    
         
             
                    # the statements list. Before, it was just the individual statement.
         
     | 
| 
       1235 
1239 
     | 
    
         
             
                    statement = bodystmt.is_a?(BodyStmt) ? bodystmt.statements : bodystmt
         
     | 
| 
       1236 
1240 
     | 
    
         | 
| 
       1237 
     | 
    
         
            -
                     
     | 
| 
      
 1241 
     | 
    
         
            +
                    DefNode.new(
         
     | 
| 
       1238 
1242 
     | 
    
         
             
                      target: nil,
         
     | 
| 
       1239 
1243 
     | 
    
         
             
                      operator: nil,
         
     | 
| 
       1240 
1244 
     | 
    
         
             
                      name: name,
         
     | 
| 
       1241 
     | 
    
         
            -
                       
     | 
| 
       1242 
     | 
    
         
            -
                       
     | 
| 
      
 1245 
     | 
    
         
            +
                      params: params,
         
     | 
| 
      
 1246 
     | 
    
         
            +
                      bodystmt: statement,
         
     | 
| 
       1243 
1247 
     | 
    
         
             
                      location: beginning.location.to(bodystmt.location)
         
     | 
| 
       1244 
1248 
     | 
    
         
             
                    )
         
     | 
| 
       1245 
1249 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1270,7 +1274,7 @@ module SyntaxTree 
     | 
|
| 
       1270 
1274 
     | 
    
         
             
                #     (Backtick | Const | Ident | Kw | Op) name,
         
     | 
| 
       1271 
1275 
     | 
    
         
             
                #     (Params | Paren) params,
         
     | 
| 
       1272 
1276 
     | 
    
         
             
                #     BodyStmt bodystmt
         
     | 
| 
       1273 
     | 
    
         
            -
                #   ) ->  
     | 
| 
      
 1277 
     | 
    
         
            +
                #   ) -> DefNode
         
     | 
| 
       1274 
1278 
     | 
    
         
             
                def on_defs(target, operator, name, params, bodystmt)
         
     | 
| 
       1275 
1279 
     | 
    
         
             
                  # Make sure to delete this token in case you're defining something
         
     | 
| 
       1276 
1280 
     | 
    
         
             
                  # like def class which would lead to this being a kw and causing all kinds
         
     | 
| 
         @@ -1309,7 +1313,7 @@ module SyntaxTree 
     | 
|
| 
       1309 
1313 
     | 
    
         
             
                      ending.location.start_column
         
     | 
| 
       1310 
1314 
     | 
    
         
             
                    )
         
     | 
| 
       1311 
1315 
     | 
    
         | 
| 
       1312 
     | 
    
         
            -
                     
     | 
| 
      
 1316 
     | 
    
         
            +
                    DefNode.new(
         
     | 
| 
       1313 
1317 
     | 
    
         
             
                      target: target,
         
     | 
| 
       1314 
1318 
     | 
    
         
             
                      operator: operator,
         
     | 
| 
       1315 
1319 
     | 
    
         
             
                      name: name,
         
     | 
| 
         @@ -1322,19 +1326,19 @@ module SyntaxTree 
     | 
|
| 
       1322 
1326 
     | 
    
         
             
                    # the statements list. Before, it was just the individual statement.
         
     | 
| 
       1323 
1327 
     | 
    
         
             
                    statement = bodystmt.is_a?(BodyStmt) ? bodystmt.statements : bodystmt
         
     | 
| 
       1324 
1328 
     | 
    
         | 
| 
       1325 
     | 
    
         
            -
                     
     | 
| 
      
 1329 
     | 
    
         
            +
                    DefNode.new(
         
     | 
| 
       1326 
1330 
     | 
    
         
             
                      target: target,
         
     | 
| 
       1327 
1331 
     | 
    
         
             
                      operator: operator,
         
     | 
| 
       1328 
1332 
     | 
    
         
             
                      name: name,
         
     | 
| 
       1329 
     | 
    
         
            -
                       
     | 
| 
       1330 
     | 
    
         
            -
                       
     | 
| 
      
 1333 
     | 
    
         
            +
                      params: params,
         
     | 
| 
      
 1334 
     | 
    
         
            +
                      bodystmt: statement,
         
     | 
| 
       1331 
1335 
     | 
    
         
             
                      location: beginning.location.to(bodystmt.location)
         
     | 
| 
       1332 
1336 
     | 
    
         
             
                    )
         
     | 
| 
       1333 
1337 
     | 
    
         
             
                  end
         
     | 
| 
       1334 
1338 
     | 
    
         
             
                end
         
     | 
| 
       1335 
1339 
     | 
    
         | 
| 
       1336 
1340 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       1337 
     | 
    
         
            -
                #   on_do_block: (BlockVar block_var, BodyStmt bodystmt) ->  
     | 
| 
      
 1341 
     | 
    
         
            +
                #   on_do_block: (BlockVar block_var, BodyStmt bodystmt) -> BlockNode
         
     | 
| 
       1338 
1342 
     | 
    
         
             
                def on_do_block(block_var, bodystmt)
         
     | 
| 
       1339 
1343 
     | 
    
         
             
                  beginning = consume_keyword(:do)
         
     | 
| 
       1340 
1344 
     | 
    
         
             
                  ending = consume_keyword(:end)
         
     | 
| 
         @@ -1348,8 +1352,8 @@ module SyntaxTree 
     | 
|
| 
       1348 
1352 
     | 
    
         
             
                    ending.location.start_column
         
     | 
| 
       1349 
1353 
     | 
    
         
             
                  )
         
     | 
| 
       1350 
1354 
     | 
    
         | 
| 
       1351 
     | 
    
         
            -
                   
     | 
| 
       1352 
     | 
    
         
            -
                     
     | 
| 
      
 1355 
     | 
    
         
            +
                  BlockNode.new(
         
     | 
| 
      
 1356 
     | 
    
         
            +
                    opening: beginning,
         
     | 
| 
       1353 
1357 
     | 
    
         
             
                    block_var: block_var,
         
     | 
| 
       1354 
1358 
     | 
    
         
             
                    bodystmt: bodystmt,
         
     | 
| 
       1355 
1359 
     | 
    
         
             
                    location: beginning.location.to(ending.location)
         
     | 
| 
         @@ -1357,30 +1361,32 @@ module SyntaxTree 
     | 
|
| 
       1357 
1361 
     | 
    
         
             
                end
         
     | 
| 
       1358 
1362 
     | 
    
         | 
| 
       1359 
1363 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       1360 
     | 
    
         
            -
                #   on_dot2: ((nil | untyped) left, (nil | untyped) right) ->  
     | 
| 
      
 1364 
     | 
    
         
            +
                #   on_dot2: ((nil | untyped) left, (nil | untyped) right) -> RangeNode
         
     | 
| 
       1361 
1365 
     | 
    
         
             
                def on_dot2(left, right)
         
     | 
| 
       1362 
1366 
     | 
    
         
             
                  operator = consume_operator(:"..")
         
     | 
| 
       1363 
1367 
     | 
    
         | 
| 
       1364 
1368 
     | 
    
         
             
                  beginning = left || operator
         
     | 
| 
       1365 
1369 
     | 
    
         
             
                  ending = right || operator
         
     | 
| 
       1366 
1370 
     | 
    
         | 
| 
       1367 
     | 
    
         
            -
                   
     | 
| 
      
 1371 
     | 
    
         
            +
                  RangeNode.new(
         
     | 
| 
       1368 
1372 
     | 
    
         
             
                    left: left,
         
     | 
| 
      
 1373 
     | 
    
         
            +
                    operator: operator,
         
     | 
| 
       1369 
1374 
     | 
    
         
             
                    right: right,
         
     | 
| 
       1370 
1375 
     | 
    
         
             
                    location: beginning.location.to(ending.location)
         
     | 
| 
       1371 
1376 
     | 
    
         
             
                  )
         
     | 
| 
       1372 
1377 
     | 
    
         
             
                end
         
     | 
| 
       1373 
1378 
     | 
    
         | 
| 
       1374 
1379 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       1375 
     | 
    
         
            -
                #   on_dot3: ((nil | untyped) left, (nil | untyped) right) ->  
     | 
| 
      
 1380 
     | 
    
         
            +
                #   on_dot3: ((nil | untyped) left, (nil | untyped) right) -> RangeNode
         
     | 
| 
       1376 
1381 
     | 
    
         
             
                def on_dot3(left, right)
         
     | 
| 
       1377 
1382 
     | 
    
         
             
                  operator = consume_operator(:"...")
         
     | 
| 
       1378 
1383 
     | 
    
         | 
| 
       1379 
1384 
     | 
    
         
             
                  beginning = left || operator
         
     | 
| 
       1380 
1385 
     | 
    
         
             
                  ending = right || operator
         
     | 
| 
       1381 
1386 
     | 
    
         | 
| 
       1382 
     | 
    
         
            -
                   
     | 
| 
      
 1387 
     | 
    
         
            +
                  RangeNode.new(
         
     | 
| 
       1383 
1388 
     | 
    
         
             
                    left: left,
         
     | 
| 
      
 1389 
     | 
    
         
            +
                    operator: operator,
         
     | 
| 
       1384 
1390 
     | 
    
         
             
                    right: right,
         
     | 
| 
       1385 
1391 
     | 
    
         
             
                    location: beginning.location.to(ending.location)
         
     | 
| 
       1386 
1392 
     | 
    
         
             
                  )
         
     | 
| 
         @@ -1608,9 +1614,15 @@ module SyntaxTree 
     | 
|
| 
       1608 
1614 
     | 
    
         
             
                end
         
     | 
| 
       1609 
1615 
     | 
    
         | 
| 
       1610 
1616 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       1611 
     | 
    
         
            -
                #   on_fcall: ((Const | Ident) value) ->  
     | 
| 
      
 1617 
     | 
    
         
            +
                #   on_fcall: ((Const | Ident) value) -> CallNode
         
     | 
| 
       1612 
1618 
     | 
    
         
             
                def on_fcall(value)
         
     | 
| 
       1613 
     | 
    
         
            -
                   
     | 
| 
      
 1619 
     | 
    
         
            +
                  CallNode.new(
         
     | 
| 
      
 1620 
     | 
    
         
            +
                    receiver: nil,
         
     | 
| 
      
 1621 
     | 
    
         
            +
                    operator: nil,
         
     | 
| 
      
 1622 
     | 
    
         
            +
                    message: value,
         
     | 
| 
      
 1623 
     | 
    
         
            +
                    arguments: nil,
         
     | 
| 
      
 1624 
     | 
    
         
            +
                    location: value.location
         
     | 
| 
      
 1625 
     | 
    
         
            +
                  )
         
     | 
| 
       1614 
1626 
     | 
    
         
             
                end
         
     | 
| 
       1615 
1627 
     | 
    
         | 
| 
       1616 
1628 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
         @@ -1878,7 +1890,7 @@ module SyntaxTree 
     | 
|
| 
       1878 
1890 
     | 
    
         
             
                #     untyped predicate,
         
     | 
| 
       1879 
1891 
     | 
    
         
             
                #     Statements statements,
         
     | 
| 
       1880 
1892 
     | 
    
         
             
                #     (nil | Elsif | Else) consequent
         
     | 
| 
       1881 
     | 
    
         
            -
                #   ) ->  
     | 
| 
      
 1893 
     | 
    
         
            +
                #   ) -> IfNode
         
     | 
| 
       1882 
1894 
     | 
    
         
             
                def on_if(predicate, statements, consequent)
         
     | 
| 
       1883 
1895 
     | 
    
         
             
                  beginning = consume_keyword(:if)
         
     | 
| 
       1884 
1896 
     | 
    
         
             
                  ending = consequent || consume_keyword(:end)
         
     | 
| 
         @@ -1891,7 +1903,7 @@ module SyntaxTree 
     | 
|
| 
       1891 
1903 
     | 
    
         
             
                    ending.location.start_column
         
     | 
| 
       1892 
1904 
     | 
    
         
             
                  )
         
     | 
| 
       1893 
1905 
     | 
    
         | 
| 
       1894 
     | 
    
         
            -
                   
     | 
| 
      
 1906 
     | 
    
         
            +
                  IfNode.new(
         
     | 
| 
       1895 
1907 
     | 
    
         
             
                    predicate: predicate,
         
     | 
| 
       1896 
1908 
     | 
    
         
             
                    statements: statements,
         
     | 
| 
       1897 
1909 
     | 
    
         
             
                    consequent: consequent,
         
     | 
| 
         @@ -1911,13 +1923,15 @@ module SyntaxTree 
     | 
|
| 
       1911 
1923 
     | 
    
         
             
                end
         
     | 
| 
       1912 
1924 
     | 
    
         | 
| 
       1913 
1925 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       1914 
     | 
    
         
            -
                #   on_if_mod: (untyped predicate, untyped statement) ->  
     | 
| 
      
 1926 
     | 
    
         
            +
                #   on_if_mod: (untyped predicate, untyped statement) -> IfNode
         
     | 
| 
       1915 
1927 
     | 
    
         
             
                def on_if_mod(predicate, statement)
         
     | 
| 
       1916 
1928 
     | 
    
         
             
                  consume_keyword(:if)
         
     | 
| 
       1917 
1929 
     | 
    
         | 
| 
       1918 
     | 
    
         
            -
                   
     | 
| 
       1919 
     | 
    
         
            -
                    statement: statement,
         
     | 
| 
      
 1930 
     | 
    
         
            +
                  IfNode.new(
         
     | 
| 
       1920 
1931 
     | 
    
         
             
                    predicate: predicate,
         
     | 
| 
      
 1932 
     | 
    
         
            +
                    statements:
         
     | 
| 
      
 1933 
     | 
    
         
            +
                      Statements.new(self, body: [statement], location: statement.location),
         
     | 
| 
      
 1934 
     | 
    
         
            +
                    consequent: nil,
         
     | 
| 
       1921 
1935 
     | 
    
         
             
                    location: statement.location.to(predicate.location)
         
     | 
| 
       1922 
1936 
     | 
    
         
             
                  )
         
     | 
| 
       1923 
1937 
     | 
    
         
             
                end
         
     | 
| 
         @@ -2104,17 +2118,20 @@ module SyntaxTree 
     | 
|
| 
       2104 
2118 
     | 
    
         
             
                      location = params.contents.location
         
     | 
| 
       2105 
2119 
     | 
    
         
             
                      location = location.to(locals.last.location) if locals.any?
         
     | 
| 
       2106 
2120 
     | 
    
         | 
| 
       2107 
     | 
    
         
            -
                       
     | 
| 
       2108 
     | 
    
         
            -
                         
     | 
| 
       2109 
     | 
    
         
            -
             
     | 
| 
       2110 
     | 
    
         
            -
                           
     | 
| 
       2111 
     | 
    
         
            -
                             
     | 
| 
       2112 
     | 
    
         
            -
             
     | 
| 
       2113 
     | 
    
         
            -
             
     | 
| 
       2114 
     | 
    
         
            -
             
     | 
| 
       2115 
     | 
    
         
            -
             
     | 
| 
       2116 
     | 
    
         
            -
             
     | 
| 
       2117 
     | 
    
         
            -
             
     | 
| 
      
 2121 
     | 
    
         
            +
                      node =
         
     | 
| 
      
 2122 
     | 
    
         
            +
                        Paren.new(
         
     | 
| 
      
 2123 
     | 
    
         
            +
                          lparen: params.lparen,
         
     | 
| 
      
 2124 
     | 
    
         
            +
                          contents:
         
     | 
| 
      
 2125 
     | 
    
         
            +
                            LambdaVar.new(
         
     | 
| 
      
 2126 
     | 
    
         
            +
                              params: params.contents,
         
     | 
| 
      
 2127 
     | 
    
         
            +
                              locals: locals,
         
     | 
| 
      
 2128 
     | 
    
         
            +
                              location: location
         
     | 
| 
      
 2129 
     | 
    
         
            +
                            ),
         
     | 
| 
      
 2130 
     | 
    
         
            +
                          location: params.location
         
     | 
| 
      
 2131 
     | 
    
         
            +
                        )
         
     | 
| 
      
 2132 
     | 
    
         
            +
             
     | 
| 
      
 2133 
     | 
    
         
            +
                      node.comments.concat(params.comments)
         
     | 
| 
      
 2134 
     | 
    
         
            +
                      node
         
     | 
| 
       2118 
2135 
     | 
    
         
             
                    when Params
         
     | 
| 
       2119 
2136 
     | 
    
         
             
                      # In this case we've gotten to the <3.2 plain set of parameters. In
         
     | 
| 
       2120 
2137 
     | 
    
         
             
                      # this case there cannot be lambda locals, so we will wrap the
         
     | 
| 
         @@ -2302,37 +2319,42 @@ module SyntaxTree 
     | 
|
| 
       2302 
2319 
     | 
    
         | 
| 
       2303 
2320 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       2304 
2321 
     | 
    
         
             
                #   on_method_add_arg: (
         
     | 
| 
       2305 
     | 
    
         
            -
                #      
     | 
| 
      
 2322 
     | 
    
         
            +
                #     CallNode call,
         
     | 
| 
       2306 
2323 
     | 
    
         
             
                #     (ArgParen | Args) arguments
         
     | 
| 
       2307 
     | 
    
         
            -
                #   ) ->  
     | 
| 
      
 2324 
     | 
    
         
            +
                #   ) -> CallNode
         
     | 
| 
       2308 
2325 
     | 
    
         
             
                def on_method_add_arg(call, arguments)
         
     | 
| 
       2309 
2326 
     | 
    
         
             
                  location = call.location
         
     | 
| 
       2310 
2327 
     | 
    
         
             
                  location = location.to(arguments.location) if arguments.is_a?(ArgParen)
         
     | 
| 
       2311 
2328 
     | 
    
         | 
| 
       2312 
     | 
    
         
            -
                   
     | 
| 
       2313 
     | 
    
         
            -
                     
     | 
| 
       2314 
     | 
    
         
            -
             
     | 
| 
       2315 
     | 
    
         
            -
                     
     | 
| 
       2316 
     | 
    
         
            -
             
     | 
| 
       2317 
     | 
    
         
            -
             
     | 
| 
       2318 
     | 
    
         
            -
             
     | 
| 
       2319 
     | 
    
         
            -
                      arguments: arguments,
         
     | 
| 
       2320 
     | 
    
         
            -
                      location: location
         
     | 
| 
       2321 
     | 
    
         
            -
                    )
         
     | 
| 
       2322 
     | 
    
         
            -
                  end
         
     | 
| 
      
 2329 
     | 
    
         
            +
                  CallNode.new(
         
     | 
| 
      
 2330 
     | 
    
         
            +
                    receiver: call.receiver,
         
     | 
| 
      
 2331 
     | 
    
         
            +
                    operator: call.operator,
         
     | 
| 
      
 2332 
     | 
    
         
            +
                    message: call.message,
         
     | 
| 
      
 2333 
     | 
    
         
            +
                    arguments: arguments,
         
     | 
| 
      
 2334 
     | 
    
         
            +
                    location: location
         
     | 
| 
      
 2335 
     | 
    
         
            +
                  )
         
     | 
| 
       2323 
2336 
     | 
    
         
             
                end
         
     | 
| 
       2324 
2337 
     | 
    
         | 
| 
       2325 
2338 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       2326 
2339 
     | 
    
         
             
                #   on_method_add_block: (
         
     | 
| 
       2327 
     | 
    
         
            -
                #     (Call | Command | CommandCall 
     | 
| 
       2328 
     | 
    
         
            -
                #      
     | 
| 
      
 2340 
     | 
    
         
            +
                #     (Call | Command | CommandCall) call,
         
     | 
| 
      
 2341 
     | 
    
         
            +
                #     Block block
         
     | 
| 
       2329 
2342 
     | 
    
         
             
                #   ) -> MethodAddBlock
         
     | 
| 
       2330 
2343 
     | 
    
         
             
                def on_method_add_block(call, block)
         
     | 
| 
       2331 
     | 
    
         
            -
                   
     | 
| 
       2332 
     | 
    
         
            -
             
     | 
| 
       2333 
     | 
    
         
            -
             
     | 
| 
       2334 
     | 
    
         
            -
             
     | 
| 
       2335 
     | 
    
         
            -
             
     | 
| 
      
 2344 
     | 
    
         
            +
                  location = call.location.to(block.location)
         
     | 
| 
      
 2345 
     | 
    
         
            +
             
     | 
| 
      
 2346 
     | 
    
         
            +
                  case call
         
     | 
| 
      
 2347 
     | 
    
         
            +
                  when Command, CommandCall
         
     | 
| 
      
 2348 
     | 
    
         
            +
                    node = call.copy(block: block, location: location)
         
     | 
| 
      
 2349 
     | 
    
         
            +
                    node.comments.concat(call.comments)
         
     | 
| 
      
 2350 
     | 
    
         
            +
                    node
         
     | 
| 
      
 2351 
     | 
    
         
            +
                  else
         
     | 
| 
      
 2352 
     | 
    
         
            +
                    MethodAddBlock.new(
         
     | 
| 
      
 2353 
     | 
    
         
            +
                      call: call,
         
     | 
| 
      
 2354 
     | 
    
         
            +
                      block: block,
         
     | 
| 
      
 2355 
     | 
    
         
            +
                      location: call.location.to(block.location)
         
     | 
| 
      
 2356 
     | 
    
         
            +
                    )
         
     | 
| 
      
 2357 
     | 
    
         
            +
                  end
         
     | 
| 
       2336 
2358 
     | 
    
         
             
                end
         
     | 
| 
       2337 
2359 
     | 
    
         | 
| 
       2338 
2360 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
         @@ -2900,7 +2922,7 @@ module SyntaxTree 
     | 
|
| 
       2900 
2922 
     | 
    
         
             
                def on_redo
         
     | 
| 
       2901 
2923 
     | 
    
         
             
                  keyword = consume_keyword(:redo)
         
     | 
| 
       2902 
2924 
     | 
    
         | 
| 
       2903 
     | 
    
         
            -
                  Redo.new( 
     | 
| 
      
 2925 
     | 
    
         
            +
                  Redo.new(location: keyword.location)
         
     | 
| 
       2904 
2926 
     | 
    
         
             
                end
         
     | 
| 
       2905 
2927 
     | 
    
         | 
| 
       2906 
2928 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
         @@ -3066,26 +3088,26 @@ module SyntaxTree 
     | 
|
| 
       3066 
3088 
     | 
    
         
             
                def on_retry
         
     | 
| 
       3067 
3089 
     | 
    
         
             
                  keyword = consume_keyword(:retry)
         
     | 
| 
       3068 
3090 
     | 
    
         | 
| 
       3069 
     | 
    
         
            -
                  Retry.new( 
     | 
| 
      
 3091 
     | 
    
         
            +
                  Retry.new(location: keyword.location)
         
     | 
| 
       3070 
3092 
     | 
    
         
             
                end
         
     | 
| 
       3071 
3093 
     | 
    
         | 
| 
       3072 
3094 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3073 
     | 
    
         
            -
                #   on_return: (Args arguments) ->  
     | 
| 
      
 3095 
     | 
    
         
            +
                #   on_return: (Args arguments) -> ReturnNode
         
     | 
| 
       3074 
3096 
     | 
    
         
             
                def on_return(arguments)
         
     | 
| 
       3075 
3097 
     | 
    
         
             
                  keyword = consume_keyword(:return)
         
     | 
| 
       3076 
3098 
     | 
    
         | 
| 
       3077 
     | 
    
         
            -
                   
     | 
| 
      
 3099 
     | 
    
         
            +
                  ReturnNode.new(
         
     | 
| 
       3078 
3100 
     | 
    
         
             
                    arguments: arguments,
         
     | 
| 
       3079 
3101 
     | 
    
         
             
                    location: keyword.location.to(arguments.location)
         
     | 
| 
       3080 
3102 
     | 
    
         
             
                  )
         
     | 
| 
       3081 
3103 
     | 
    
         
             
                end
         
     | 
| 
       3082 
3104 
     | 
    
         | 
| 
       3083 
3105 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3084 
     | 
    
         
            -
                #   on_return0: () ->  
     | 
| 
      
 3106 
     | 
    
         
            +
                #   on_return0: () -> ReturnNode
         
     | 
| 
       3085 
3107 
     | 
    
         
             
                def on_return0
         
     | 
| 
       3086 
3108 
     | 
    
         
             
                  keyword = consume_keyword(:return)
         
     | 
| 
       3087 
3109 
     | 
    
         | 
| 
       3088 
     | 
    
         
            -
                   
     | 
| 
      
 3110 
     | 
    
         
            +
                  ReturnNode.new(arguments: nil, location: keyword.location)
         
     | 
| 
       3089 
3111 
     | 
    
         
             
                end
         
     | 
| 
       3090 
3112 
     | 
    
         | 
| 
       3091 
3113 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
         @@ -3562,7 +3584,7 @@ module SyntaxTree 
     | 
|
| 
       3562 
3584 
     | 
    
         
             
                #     untyped predicate,
         
     | 
| 
       3563 
3585 
     | 
    
         
             
                #     Statements statements,
         
     | 
| 
       3564 
3586 
     | 
    
         
             
                #     ((nil | Elsif | Else) consequent)
         
     | 
| 
       3565 
     | 
    
         
            -
                #   ) ->  
     | 
| 
      
 3587 
     | 
    
         
            +
                #   ) -> UnlessNode
         
     | 
| 
       3566 
3588 
     | 
    
         
             
                def on_unless(predicate, statements, consequent)
         
     | 
| 
       3567 
3589 
     | 
    
         
             
                  beginning = consume_keyword(:unless)
         
     | 
| 
       3568 
3590 
     | 
    
         
             
                  ending = consequent || consume_keyword(:end)
         
     | 
| 
         @@ -3575,7 +3597,7 @@ module SyntaxTree 
     | 
|
| 
       3575 
3597 
     | 
    
         
             
                    ending.location.start_column
         
     | 
| 
       3576 
3598 
     | 
    
         
             
                  )
         
     | 
| 
       3577 
3599 
     | 
    
         | 
| 
       3578 
     | 
    
         
            -
                   
     | 
| 
      
 3600 
     | 
    
         
            +
                  UnlessNode.new(
         
     | 
| 
       3579 
3601 
     | 
    
         
             
                    predicate: predicate,
         
     | 
| 
       3580 
3602 
     | 
    
         
             
                    statements: statements,
         
     | 
| 
       3581 
3603 
     | 
    
         
             
                    consequent: consequent,
         
     | 
| 
         @@ -3584,19 +3606,21 @@ module SyntaxTree 
     | 
|
| 
       3584 
3606 
     | 
    
         
             
                end
         
     | 
| 
       3585 
3607 
     | 
    
         | 
| 
       3586 
3608 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3587 
     | 
    
         
            -
                #   on_unless_mod: (untyped predicate, untyped statement) ->  
     | 
| 
      
 3609 
     | 
    
         
            +
                #   on_unless_mod: (untyped predicate, untyped statement) -> UnlessNode
         
     | 
| 
       3588 
3610 
     | 
    
         
             
                def on_unless_mod(predicate, statement)
         
     | 
| 
       3589 
3611 
     | 
    
         
             
                  consume_keyword(:unless)
         
     | 
| 
       3590 
3612 
     | 
    
         | 
| 
       3591 
     | 
    
         
            -
                   
     | 
| 
       3592 
     | 
    
         
            -
                    statement: statement,
         
     | 
| 
      
 3613 
     | 
    
         
            +
                  UnlessNode.new(
         
     | 
| 
       3593 
3614 
     | 
    
         
             
                    predicate: predicate,
         
     | 
| 
      
 3615 
     | 
    
         
            +
                    statements:
         
     | 
| 
      
 3616 
     | 
    
         
            +
                      Statements.new(self, body: [statement], location: statement.location),
         
     | 
| 
      
 3617 
     | 
    
         
            +
                    consequent: nil,
         
     | 
| 
       3594 
3618 
     | 
    
         
             
                    location: statement.location.to(predicate.location)
         
     | 
| 
       3595 
3619 
     | 
    
         
             
                  )
         
     | 
| 
       3596 
3620 
     | 
    
         
             
                end
         
     | 
| 
       3597 
3621 
     | 
    
         | 
| 
       3598 
3622 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3599 
     | 
    
         
            -
                #   on_until: (untyped predicate, Statements statements) ->  
     | 
| 
      
 3623 
     | 
    
         
            +
                #   on_until: (untyped predicate, Statements statements) -> UntilNode
         
     | 
| 
       3600 
3624 
     | 
    
         
             
                def on_until(predicate, statements)
         
     | 
| 
       3601 
3625 
     | 
    
         
             
                  beginning = consume_keyword(:until)
         
     | 
| 
       3602 
3626 
     | 
    
         
             
                  ending = consume_keyword(:end)
         
     | 
| 
         @@ -3618,7 +3642,7 @@ module SyntaxTree 
     | 
|
| 
       3618 
3642 
     | 
    
         
             
                    ending.location.start_column
         
     | 
| 
       3619 
3643 
     | 
    
         
             
                  )
         
     | 
| 
       3620 
3644 
     | 
    
         | 
| 
       3621 
     | 
    
         
            -
                   
     | 
| 
      
 3645 
     | 
    
         
            +
                  UntilNode.new(
         
     | 
| 
       3622 
3646 
     | 
    
         
             
                    predicate: predicate,
         
     | 
| 
       3623 
3647 
     | 
    
         
             
                    statements: statements,
         
     | 
| 
       3624 
3648 
     | 
    
         
             
                    location: beginning.location.to(ending.location)
         
     | 
| 
         @@ -3626,23 +3650,24 @@ module SyntaxTree 
     | 
|
| 
       3626 
3650 
     | 
    
         
             
                end
         
     | 
| 
       3627 
3651 
     | 
    
         | 
| 
       3628 
3652 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3629 
     | 
    
         
            -
                #   on_until_mod: (untyped predicate, untyped statement) ->  
     | 
| 
      
 3653 
     | 
    
         
            +
                #   on_until_mod: (untyped predicate, untyped statement) -> UntilNode
         
     | 
| 
       3630 
3654 
     | 
    
         
             
                def on_until_mod(predicate, statement)
         
     | 
| 
       3631 
3655 
     | 
    
         
             
                  consume_keyword(:until)
         
     | 
| 
       3632 
3656 
     | 
    
         | 
| 
       3633 
     | 
    
         
            -
                   
     | 
| 
       3634 
     | 
    
         
            -
                    statement: statement,
         
     | 
| 
      
 3657 
     | 
    
         
            +
                  UntilNode.new(
         
     | 
| 
       3635 
3658 
     | 
    
         
             
                    predicate: predicate,
         
     | 
| 
      
 3659 
     | 
    
         
            +
                    statements:
         
     | 
| 
      
 3660 
     | 
    
         
            +
                      Statements.new(self, body: [statement], location: statement.location),
         
     | 
| 
       3636 
3661 
     | 
    
         
             
                    location: statement.location.to(predicate.location)
         
     | 
| 
       3637 
3662 
     | 
    
         
             
                  )
         
     | 
| 
       3638 
3663 
     | 
    
         
             
                end
         
     | 
| 
       3639 
3664 
     | 
    
         | 
| 
       3640 
3665 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3641 
     | 
    
         
            -
                #   on_var_alias: (GVar left, (Backref | GVar) right) ->  
     | 
| 
      
 3666 
     | 
    
         
            +
                #   on_var_alias: (GVar left, (Backref | GVar) right) -> AliasNode
         
     | 
| 
       3642 
3667 
     | 
    
         
             
                def on_var_alias(left, right)
         
     | 
| 
       3643 
3668 
     | 
    
         
             
                  keyword = consume_keyword(:alias)
         
     | 
| 
       3644 
3669 
     | 
    
         | 
| 
       3645 
     | 
    
         
            -
                   
     | 
| 
      
 3670 
     | 
    
         
            +
                  AliasNode.new(
         
     | 
| 
       3646 
3671 
     | 
    
         
             
                    left: left,
         
     | 
| 
       3647 
3672 
     | 
    
         
             
                    right: right,
         
     | 
| 
       3648 
3673 
     | 
    
         
             
                    location: keyword.location.to(right.location)
         
     | 
| 
         @@ -3722,7 +3747,7 @@ module SyntaxTree 
     | 
|
| 
       3722 
3747 
     | 
    
         
             
                end
         
     | 
| 
       3723 
3748 
     | 
    
         | 
| 
       3724 
3749 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3725 
     | 
    
         
            -
                #   on_while: (untyped predicate, Statements statements) ->  
     | 
| 
      
 3750 
     | 
    
         
            +
                #   on_while: (untyped predicate, Statements statements) -> WhileNode
         
     | 
| 
       3726 
3751 
     | 
    
         
             
                def on_while(predicate, statements)
         
     | 
| 
       3727 
3752 
     | 
    
         
             
                  beginning = consume_keyword(:while)
         
     | 
| 
       3728 
3753 
     | 
    
         
             
                  ending = consume_keyword(:end)
         
     | 
| 
         @@ -3744,7 +3769,7 @@ module SyntaxTree 
     | 
|
| 
       3744 
3769 
     | 
    
         
             
                    ending.location.start_column
         
     | 
| 
       3745 
3770 
     | 
    
         
             
                  )
         
     | 
| 
       3746 
3771 
     | 
    
         | 
| 
       3747 
     | 
    
         
            -
                   
     | 
| 
      
 3772 
     | 
    
         
            +
                  WhileNode.new(
         
     | 
| 
       3748 
3773 
     | 
    
         
             
                    predicate: predicate,
         
     | 
| 
       3749 
3774 
     | 
    
         
             
                    statements: statements,
         
     | 
| 
       3750 
3775 
     | 
    
         
             
                    location: beginning.location.to(ending.location)
         
     | 
| 
         @@ -3752,13 +3777,14 @@ module SyntaxTree 
     | 
|
| 
       3752 
3777 
     | 
    
         
             
                end
         
     | 
| 
       3753 
3778 
     | 
    
         | 
| 
       3754 
3779 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3755 
     | 
    
         
            -
                #   on_while_mod: (untyped predicate, untyped statement) ->  
     | 
| 
      
 3780 
     | 
    
         
            +
                #   on_while_mod: (untyped predicate, untyped statement) -> WhileNode
         
     | 
| 
       3756 
3781 
     | 
    
         
             
                def on_while_mod(predicate, statement)
         
     | 
| 
       3757 
3782 
     | 
    
         
             
                  consume_keyword(:while)
         
     | 
| 
       3758 
3783 
     | 
    
         | 
| 
       3759 
     | 
    
         
            -
                   
     | 
| 
       3760 
     | 
    
         
            -
                    statement: statement,
         
     | 
| 
      
 3784 
     | 
    
         
            +
                  WhileNode.new(
         
     | 
| 
       3761 
3785 
     | 
    
         
             
                    predicate: predicate,
         
     | 
| 
      
 3786 
     | 
    
         
            +
                    statements:
         
     | 
| 
      
 3787 
     | 
    
         
            +
                      Statements.new(self, body: [statement], location: statement.location),
         
     | 
| 
       3762 
3788 
     | 
    
         
             
                    location: statement.location.to(predicate.location)
         
     | 
| 
       3763 
3789 
     | 
    
         
             
                  )
         
     | 
| 
       3764 
3790 
     | 
    
         
             
                end
         
     | 
| 
         @@ -3881,22 +3907,22 @@ module SyntaxTree 
     | 
|
| 
       3881 
3907 
     | 
    
         
             
                end
         
     | 
| 
       3882 
3908 
     | 
    
         | 
| 
       3883 
3909 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3884 
     | 
    
         
            -
                #   on_yield: ((Args | Paren) arguments) ->  
     | 
| 
      
 3910 
     | 
    
         
            +
                #   on_yield: ((Args | Paren) arguments) -> YieldNode
         
     | 
| 
       3885 
3911 
     | 
    
         
             
                def on_yield(arguments)
         
     | 
| 
       3886 
3912 
     | 
    
         
             
                  keyword = consume_keyword(:yield)
         
     | 
| 
       3887 
3913 
     | 
    
         | 
| 
       3888 
     | 
    
         
            -
                   
     | 
| 
      
 3914 
     | 
    
         
            +
                  YieldNode.new(
         
     | 
| 
       3889 
3915 
     | 
    
         
             
                    arguments: arguments,
         
     | 
| 
       3890 
3916 
     | 
    
         
             
                    location: keyword.location.to(arguments.location)
         
     | 
| 
       3891 
3917 
     | 
    
         
             
                  )
         
     | 
| 
       3892 
3918 
     | 
    
         
             
                end
         
     | 
| 
       3893 
3919 
     | 
    
         | 
| 
       3894 
3920 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
       3895 
     | 
    
         
            -
                #   on_yield0: () ->  
     | 
| 
      
 3921 
     | 
    
         
            +
                #   on_yield0: () -> YieldNode
         
     | 
| 
       3896 
3922 
     | 
    
         
             
                def on_yield0
         
     | 
| 
       3897 
3923 
     | 
    
         
             
                  keyword = consume_keyword(:yield)
         
     | 
| 
       3898 
3924 
     | 
    
         | 
| 
       3899 
     | 
    
         
            -
                   
     | 
| 
      
 3925 
     | 
    
         
            +
                  YieldNode.new(arguments: nil, location: keyword.location)
         
     | 
| 
       3900 
3926 
     | 
    
         
             
                end
         
     | 
| 
       3901 
3927 
     | 
    
         | 
| 
       3902 
3928 
     | 
    
         
             
                # :call-seq:
         
     | 
| 
         @@ -3904,7 +3930,7 @@ module SyntaxTree 
     | 
|
| 
       3904 
3930 
     | 
    
         
             
                def on_zsuper
         
     | 
| 
       3905 
3931 
     | 
    
         
             
                  keyword = consume_keyword(:super)
         
     | 
| 
       3906 
3932 
     | 
    
         | 
| 
       3907 
     | 
    
         
            -
                  ZSuper.new( 
     | 
| 
      
 3933 
     | 
    
         
            +
                  ZSuper.new(location: keyword.location)
         
     | 
| 
       3908 
3934 
     | 
    
         
             
                end
         
     | 
| 
       3909 
3935 
     | 
    
         
             
              end
         
     | 
| 
       3910 
3936 
     | 
    
         
             
            end
         
     | 
    
        data/lib/syntax_tree/pattern.rb
    CHANGED
    
    | 
         @@ -142,11 +142,11 @@ module SyntaxTree 
     | 
|
| 
       142 
142 
     | 
    
         
             
                def compile_const(node)
         
     | 
| 
       143 
143 
     | 
    
         
             
                  value = node.value
         
     | 
| 
       144 
144 
     | 
    
         | 
| 
       145 
     | 
    
         
            -
                  if SyntaxTree.const_defined?(value)
         
     | 
| 
      
 145 
     | 
    
         
            +
                  if SyntaxTree.const_defined?(value, false)
         
     | 
| 
       146 
146 
     | 
    
         
             
                    clazz = SyntaxTree.const_get(value)
         
     | 
| 
       147 
147 
     | 
    
         | 
| 
       148 
148 
     | 
    
         
             
                    ->(other) { clazz === other }
         
     | 
| 
       149 
     | 
    
         
            -
                  elsif Object.const_defined?(value)
         
     | 
| 
      
 149 
     | 
    
         
            +
                  elsif Object.const_defined?(value, false)
         
     | 
| 
       150 
150 
     | 
    
         
             
                    clazz = Object.const_get(value)
         
     | 
| 
       151 
151 
     | 
    
         | 
| 
       152 
152 
     | 
    
         
             
                    ->(other) { clazz === other }
         
     | 
| 
         @@ -179,7 +179,7 @@ module SyntaxTree 
     | 
|
| 
       179 
179 
     | 
    
         | 
| 
       180 
180 
     | 
    
         
             
                    ->(other) { symbol === other }
         
     | 
| 
       181 
181 
     | 
    
         
             
                  else
         
     | 
| 
       182 
     | 
    
         
            -
                    compile_error( 
     | 
| 
      
 182 
     | 
    
         
            +
                    compile_error(node)
         
     | 
| 
       183 
183 
     | 
    
         
             
                  end
         
     | 
| 
       184 
184 
     | 
    
         
             
                end
         
     | 
| 
       185 
185 
     | 
    
         | 
    
        data/lib/syntax_tree/version.rb
    CHANGED
    
    
| 
         @@ -4,10 +4,6 @@ module SyntaxTree 
     | 
|
| 
       4 
4 
     | 
    
         
             
              # The environment class is used to keep track of local variables and arguments
         
     | 
| 
       5 
5 
     | 
    
         
             
              # inside a particular scope
         
     | 
| 
       6 
6 
     | 
    
         
             
              class Environment
         
     | 
| 
       7 
     | 
    
         
            -
                # [Array[Local]] The local variables and arguments defined in this
         
     | 
| 
       8 
     | 
    
         
            -
                # environment
         
     | 
| 
       9 
     | 
    
         
            -
                attr_reader :locals
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
7 
     | 
    
         
             
                # This class tracks the occurrences of a local variable or argument
         
     | 
| 
       12 
8 
     | 
    
         
             
                class Local
         
     | 
| 
       13 
9 
     | 
    
         
             
                  # [Symbol] The type of the local (e.g. :argument, :variable)
         
     | 
| 
         @@ -38,6 +34,13 @@ module SyntaxTree 
     | 
|
| 
       38 
34 
     | 
    
         
             
                  end
         
     | 
| 
       39 
35 
     | 
    
         
             
                end
         
     | 
| 
       40 
36 
     | 
    
         | 
| 
      
 37 
     | 
    
         
            +
                # [Array[Local]] The local variables and arguments defined in this
         
     | 
| 
      
 38 
     | 
    
         
            +
                # environment
         
     | 
| 
      
 39 
     | 
    
         
            +
                attr_reader :locals
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                # [Environment | nil] The parent environment
         
     | 
| 
      
 42 
     | 
    
         
            +
                attr_reader :parent
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
       41 
44 
     | 
    
         
             
                #   initialize: (Environment | nil parent) -> void
         
     | 
| 
       42 
45 
     | 
    
         
             
                def initialize(parent = nil)
         
     | 
| 
       43 
46 
     | 
    
         
             
                  @locals = {}
         
     |