yarp 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -1
- data/config.yml +105 -6
- data/ext/yarp/api_node.c +200 -34
- data/ext/yarp/extension.c +8 -1
- data/ext/yarp/extension.h +1 -1
- data/include/yarp/ast.h +246 -293
- data/include/yarp/diagnostic.h +7 -2
- data/include/yarp/enc/yp_encoding.h +1 -1
- data/include/yarp/parser.h +44 -16
- data/include/yarp/util/yp_char.h +21 -5
- data/include/yarp/version.h +2 -2
- data/lib/yarp/mutation_visitor.rb +28 -3
- data/lib/yarp/node.rb +3507 -85
- data/lib/yarp/serialize.rb +146 -136
- data/lib/yarp.rb +57 -42
- data/src/diagnostic.c +6 -1
- data/src/enc/yp_unicode.c +5 -5
- data/src/node.c +87 -8
- data/src/prettyprint.c +85 -21
- data/src/serialize.c +59 -19
- data/src/util/yp_char.c +57 -9
- data/src/util/yp_constant_pool.c +69 -18
- data/src/yarp.c +1528 -1018
- data/yarp.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9afbc3b5f4c070c404f0421f1814d5a1200cb849ef9bf38b2ae23f50ba738fdf
|
4
|
+
data.tar.gz: bed121fb1ac414cf5918a2bcf7df2a9b1318df2f46dff9863cc5b4427ce79409
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fd5831ab86ca1ca299e86ca5f2ca184164fa56de353cfa0d9b51d2ece522c2f5bebfadd1896222e4b7e1e984604be414ee8900b1a5bbc0b8eb3b6ee7bb738dc
|
7
|
+
data.tar.gz: 6fa02c77777391a1c4b5dc47445d905fee835213c7c02687cac432a4b566bbae8ead26467609066e83bf030ce19e09f46cf553fc0acdd8f7ef977074568b7061
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,30 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.12.0] - 2023-09-15
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- `RegularExpressionNode#options` and `InterpolatedRegularExpressionNode#options` are now provided. These return integers that match up to the `Regexp#options` API.
|
14
|
+
- Greatly improved `Node#inspect` and `Node#pretty_print` APIs.
|
15
|
+
- `MatchLastLineNode` and `InterpolatedMatchLastLineNode` are introduced to represent using a regular expression as the predicate of an `if` or `unless` statement.
|
16
|
+
- `IntegerNode` now has a base flag on it.
|
17
|
+
- Heredocs that were previously `InterpolatedStringNode` and `InterpolatedXStringNode` nodes without any actual interpolation are now `StringNode` and `XStringNode`, respectively.
|
18
|
+
- `StringNode` now has a `frozen?` flag on it, which respects the `frozen_string_literal` magic comment.
|
19
|
+
- Numbered parameters are now supported, and are properly represented using `LocalVariableReadNode` nodes.
|
20
|
+
- `ImplicitNode` is introduced, which wraps implicit calls, local variable reads, or constant reads in omitted hash values.
|
21
|
+
- `YARP::Dispatcher` is introduced, which provides a way for multiple objects to listen for certain events on the AST while it is being walked. This is effectively a way to implement a more efficient visitor pattern when you have many different uses for the AST.
|
22
|
+
|
23
|
+
### Changed
|
24
|
+
|
25
|
+
- **BREAKING**: Flags fields are now marked as private, to ensure we can change their implementation under the hood. Actually querying should be through the accessor methods.
|
26
|
+
- **BREAKING**: `AliasNode` is now split into `AliasMethodNode` and `AliasGlobalVariableNode`.
|
27
|
+
- Method definitions on local variables is now correctly handled.
|
28
|
+
- Unary minus precedence has been fixed.
|
29
|
+
- Concatenating character literals with string literals is now fixed.
|
30
|
+
- Many more invalid syntaxes are now properly rejected.
|
31
|
+
- **BREAKING**: Comments now no longer include their trailing newline.
|
32
|
+
|
9
33
|
## [0.11.0] - 2023-09-08
|
10
34
|
|
11
35
|
### Added
|
@@ -117,7 +141,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
117
141
|
|
118
142
|
- 🎉 Initial release! 🎉
|
119
143
|
|
120
|
-
[unreleased]: https://github.com/ruby/yarp/compare/v0.
|
144
|
+
[unreleased]: https://github.com/ruby/yarp/compare/v0.12.0...HEAD
|
145
|
+
[0.12.0]: https://github.com/ruby/yarp/compare/v0.11.0...v0.12.0
|
121
146
|
[0.11.0]: https://github.com/ruby/yarp/compare/v0.10.0...v0.11.0
|
122
147
|
[0.10.0]: https://github.com/ruby/yarp/compare/v0.9.0...v0.10.0
|
123
148
|
[0.9.0]: https://github.com/ruby/yarp/compare/v0.8.0...v0.9.0
|
data/config.yml
CHANGED
@@ -333,6 +333,16 @@ flags:
|
|
333
333
|
comment: "&. operator"
|
334
334
|
- name: VARIABLE_CALL
|
335
335
|
comment: "a call that could have been a local variable"
|
336
|
+
- name: IntegerBaseFlags
|
337
|
+
values:
|
338
|
+
- name: BINARY
|
339
|
+
comment: "0b prefix"
|
340
|
+
- name: OCTAL
|
341
|
+
comment: "0o or 0 prefix"
|
342
|
+
- name: DECIMAL
|
343
|
+
comment: "0d or no prefix"
|
344
|
+
- name: HEXADECIMAL
|
345
|
+
comment: "0x prefix"
|
336
346
|
- name: LoopFlags
|
337
347
|
values:
|
338
348
|
- name: BEGIN_MODIFIER
|
@@ -345,10 +355,10 @@ flags:
|
|
345
355
|
values:
|
346
356
|
- name: IGNORE_CASE
|
347
357
|
comment: "i - ignores the case of characters when matching"
|
348
|
-
- name: MULTI_LINE
|
349
|
-
comment: "m - allows $ to match the end of lines within strings"
|
350
358
|
- name: EXTENDED
|
351
359
|
comment: "x - ignores whitespace and allows comments in regular expressions"
|
360
|
+
- name: MULTI_LINE
|
361
|
+
comment: "m - allows $ to match the end of lines within strings"
|
352
362
|
- name: EUC_JP
|
353
363
|
comment: "e - forces the EUC-JP encoding"
|
354
364
|
- name: ASCII_8BIT
|
@@ -359,8 +369,12 @@ flags:
|
|
359
369
|
comment: "u - forces the UTF-8 encoding"
|
360
370
|
- name: ONCE
|
361
371
|
comment: "o - only interpolates values into the regular expression once"
|
372
|
+
- name: StringFlags
|
373
|
+
values:
|
374
|
+
- name: FROZEN
|
375
|
+
comment: "frozen by virtue of a frozen_string_literal comment"
|
362
376
|
nodes:
|
363
|
-
- name:
|
377
|
+
- name: AliasGlobalVariableNode
|
364
378
|
fields:
|
365
379
|
- name: new_name
|
366
380
|
type: node
|
@@ -369,7 +383,20 @@ nodes:
|
|
369
383
|
- name: keyword_loc
|
370
384
|
type: location
|
371
385
|
comment: |
|
372
|
-
Represents the use of the `alias` keyword.
|
386
|
+
Represents the use of the `alias` keyword to alias a global variable.
|
387
|
+
|
388
|
+
alias $foo $bar
|
389
|
+
^^^^^^^^^^^^^^^
|
390
|
+
- name: AliasMethodNode
|
391
|
+
fields:
|
392
|
+
- name: new_name
|
393
|
+
type: node
|
394
|
+
- name: old_name
|
395
|
+
type: node
|
396
|
+
- name: keyword_loc
|
397
|
+
type: location
|
398
|
+
comment: |
|
399
|
+
Represents the use of the `alias` keyword to alias a method.
|
373
400
|
|
374
401
|
alias foo bar
|
375
402
|
^^^^^^^^^^^^^
|
@@ -1386,6 +1413,19 @@ nodes:
|
|
1386
1413
|
|
1387
1414
|
1.0i
|
1388
1415
|
^^^^
|
1416
|
+
- name: ImplicitNode
|
1417
|
+
fields:
|
1418
|
+
- name: value
|
1419
|
+
type: node
|
1420
|
+
comment: |
|
1421
|
+
Represents a node that is implicitly being added to the tree but doesn't
|
1422
|
+
correspond directly to a node in the source.
|
1423
|
+
|
1424
|
+
{ foo: }
|
1425
|
+
^^^^
|
1426
|
+
|
1427
|
+
{ Foo: }
|
1428
|
+
^^^^
|
1389
1429
|
- name: InNode
|
1390
1430
|
fields:
|
1391
1431
|
- name: pattern
|
@@ -1483,11 +1523,34 @@ nodes:
|
|
1483
1523
|
@foo = 1
|
1484
1524
|
^^^^^^^^
|
1485
1525
|
- name: IntegerNode
|
1526
|
+
fields:
|
1527
|
+
- name: flags
|
1528
|
+
type: flags
|
1529
|
+
kind: IntegerBaseFlags
|
1486
1530
|
comment: |
|
1487
1531
|
Represents an integer number literal.
|
1488
1532
|
|
1489
1533
|
1
|
1490
1534
|
^
|
1535
|
+
- name: InterpolatedMatchLastLineNode
|
1536
|
+
fields:
|
1537
|
+
- name: opening_loc
|
1538
|
+
type: location
|
1539
|
+
- name: parts
|
1540
|
+
type: node[]
|
1541
|
+
- name: closing_loc
|
1542
|
+
type: location
|
1543
|
+
- name: flags
|
1544
|
+
type: flags
|
1545
|
+
kind: RegularExpressionFlags
|
1546
|
+
newline: parts
|
1547
|
+
comment: |
|
1548
|
+
Represents a regular expression literal that contains interpolation that
|
1549
|
+
is being used in the predicate of a conditional to implicitly match
|
1550
|
+
against the last line read by an IO object.
|
1551
|
+
|
1552
|
+
if /foo #{bar} baz/ then end
|
1553
|
+
^^^^^^^^^^^^^^^^
|
1491
1554
|
- name: InterpolatedRegularExpressionNode
|
1492
1555
|
fields:
|
1493
1556
|
- name: opening_loc
|
@@ -1702,6 +1765,26 @@ nodes:
|
|
1702
1765
|
|
1703
1766
|
foo = 1
|
1704
1767
|
^^^^^^^
|
1768
|
+
- name: MatchLastLineNode
|
1769
|
+
fields:
|
1770
|
+
- name: opening_loc
|
1771
|
+
type: location
|
1772
|
+
- name: content_loc
|
1773
|
+
type: location
|
1774
|
+
- name: closing_loc
|
1775
|
+
type: location
|
1776
|
+
- name: unescaped
|
1777
|
+
type: string
|
1778
|
+
- name: flags
|
1779
|
+
type: flags
|
1780
|
+
kind: RegularExpressionFlags
|
1781
|
+
comment: |
|
1782
|
+
Represents a regular expression literal used in the predicate of a
|
1783
|
+
conditional to implicitly match against the last line read by an IO
|
1784
|
+
object.
|
1785
|
+
|
1786
|
+
if /foo/i then end
|
1787
|
+
^^^^^^
|
1705
1788
|
- name: MatchPredicateNode
|
1706
1789
|
fields:
|
1707
1790
|
- name: value
|
@@ -1728,6 +1811,19 @@ nodes:
|
|
1728
1811
|
|
1729
1812
|
foo => bar
|
1730
1813
|
^^^^^^^^^^
|
1814
|
+
- name: MatchWriteNode
|
1815
|
+
fields:
|
1816
|
+
- name: call
|
1817
|
+
type: node
|
1818
|
+
kind: CallNode
|
1819
|
+
- name: locals
|
1820
|
+
type: constant[]
|
1821
|
+
comment: |
|
1822
|
+
Represents writing local variables using a regular expression match with
|
1823
|
+
named capture groups.
|
1824
|
+
|
1825
|
+
/(?<foo>bar)/ =~ baz
|
1826
|
+
^^^^^^^^^^^^^^^^^^^^
|
1731
1827
|
- name: MissingNode
|
1732
1828
|
comment: |
|
1733
1829
|
Represents a node that is missing from the source and results in a syntax
|
@@ -1855,11 +1951,11 @@ nodes:
|
|
1855
1951
|
type: node[]
|
1856
1952
|
- name: optionals
|
1857
1953
|
type: node[]
|
1858
|
-
- name: posts
|
1859
|
-
type: node[]
|
1860
1954
|
- name: rest
|
1861
1955
|
type: node?
|
1862
1956
|
kind: RestParameterNode
|
1957
|
+
- name: posts
|
1958
|
+
type: node[]
|
1863
1959
|
- name: keywords
|
1864
1960
|
type: node[]
|
1865
1961
|
- name: keyword_rest
|
@@ -2183,6 +2279,9 @@ nodes:
|
|
2183
2279
|
^^^^^^^^^^^
|
2184
2280
|
- name: StringNode
|
2185
2281
|
fields:
|
2282
|
+
- name: flags
|
2283
|
+
type: flags
|
2284
|
+
kind: StringFlags
|
2186
2285
|
- name: opening_loc
|
2187
2286
|
type: location?
|
2188
2287
|
- name: content_loc
|