|
22 | 22 | (assignment !type) @assign |
23 | 23 | { let @assign.node = (ast-node @assign "Assign") } |
24 | 24 |
|
25 | | -[ (expression_list) (tuple) (tuple_pattern) (pattern_list) ] @tuple |
| 25 | +[ (expression_list) (tuple) (tuple_pattern) (pattern_list) (index_expression_list) ] @tuple |
26 | 26 | { let @tuple.node = (ast-node @tuple "Tuple") } |
27 | 27 |
|
28 | 28 | (list_pattern) @list |
|
2543 | 2543 |
|
2544 | 2544 | (subscript |
2545 | 2545 | value: (_) @value |
| 2546 | + subscript: (_) @index |
2546 | 2547 | ) @subscript |
2547 | 2548 | { |
2548 | 2549 | attr (@subscript.node) value = @value.node |
2549 | 2550 | attr (@value.node) ctx = "load" |
2550 | | -} |
2551 | 2551 |
|
2552 | | -; Single subscript |
2553 | | -(subscript |
2554 | | - value: (_) |
2555 | | - . |
2556 | | - subscript: (_) @index |
2557 | | - . |
2558 | | -) @subscript |
2559 | | -{ |
2560 | 2552 | attr (@subscript.node) index = @index.node |
2561 | 2553 | attr (@index.node) ctx = "load" |
2562 | 2554 | } |
2563 | 2555 |
|
2564 | | -; For expressions of the form `a[b, c]` we must explicitly synthesize an internal tuple node |
2565 | | -; We do this and also hook it up: |
2566 | | -(subscript |
2567 | | - value: (_) |
2568 | | - . |
2569 | | - subscript: (_) @first |
2570 | | - . |
2571 | | - subscript: (_) |
2572 | | -) @subscript |
2573 | | -{ |
2574 | | - let @subscript.tuple = (ast-node @first "Tuple") |
2575 | | - attr (@subscript.tuple) ctx = "load" |
2576 | | - attr (@subscript.node) index = @subscript.tuple |
2577 | | - edge @subscript.tuple -> @first.node |
2578 | | - attr (@subscript.tuple -> @first.node) elts = (named-child-index @first) |
2579 | | - attr (@first.node) ctx = "load" |
2580 | | -} |
2581 | | - |
2582 | | -(subscript |
2583 | | - value: (_) |
2584 | | - . |
2585 | | - subscript: (_) |
2586 | | - subscript: (_) @elt |
2587 | | -) @subscript |
2588 | | -{ |
2589 | | - edge @subscript.tuple -> @elt.node |
2590 | | - attr (@subscript.tuple -> @elt.node) elts = (named-child-index @elt) |
2591 | | - attr (@elt.node) ctx = "load" |
2592 | | -} |
2593 | | - |
2594 | | - |
2595 | | -; Set the end position correctly |
2596 | | -(subscript |
2597 | | - value: (_) |
2598 | | - . |
2599 | | - subscript: (_) |
2600 | | - subscript: (_) @last |
2601 | | - . |
2602 | | -) @subscript |
2603 | | -{ |
2604 | | - attr (@subscript.tuple) _location_end = (location-end @last) |
2605 | | -} |
2606 | 2556 |
|
2607 | 2557 |
|
2608 | 2558 |
|
|
3448 | 3398 | ; Left hand side of an assignment such as `[foo, bar] = ...` |
3449 | 3399 | (list_pattern element: (_) @elt) @parent |
3450 | 3400 |
|
3451 | | - ; An unadorned tuple (such as in `x = y, z`) |
| 3401 | + ; An unadorned tuple such as in `x = y, z` |
3452 | 3402 | (expression_list element: (_) @elt) @parent |
3453 | 3403 |
|
| 3404 | + ; An index containing multiple indices such as in `x[y, z]` |
| 3405 | + (index_expression_list element: (_) @elt) @parent |
| 3406 | + |
3454 | 3407 | ; A regular tuple such as `(x, y, z)` |
3455 | 3408 | (tuple element: (_) @elt) @parent |
3456 | 3409 |
|
|
3486 | 3439 | (pattern_list element: (_) @elt) |
3487 | 3440 | (list_pattern element: (_) @elt) |
3488 | 3441 | (expression_list element: (_) @elt) |
| 3442 | + (index_expression_list element: (_) @elt) |
3489 | 3443 | (parenthesized_expression inner: (_) @elt) |
3490 | 3444 | (set element: (_) @elt) |
3491 | 3445 | (match_sequence_pattern (_) @elt) |
|
0 commit comments