prism 0.27.0 → 0.28.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/CHANGELOG.md +26 -1
- data/config.yml +39 -27
- data/docs/configuration.md +1 -0
- data/ext/prism/api_node.c +814 -807
- data/ext/prism/extension.c +5 -3
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +38 -16
- data/include/prism/diagnostic.h +12 -5
- data/include/prism/options.h +2 -2
- data/include/prism/parser.h +10 -0
- data/include/prism/static_literals.h +8 -6
- data/include/prism/version.h +2 -2
- data/lib/prism/dot_visitor.rb +22 -6
- data/lib/prism/dsl.rb +8 -8
- data/lib/prism/ffi.rb +3 -3
- data/lib/prism/inspect_visitor.rb +2156 -0
- data/lib/prism/lex_compat.rb +1 -1
- data/lib/prism/mutation_compiler.rb +2 -2
- data/lib/prism/node.rb +589 -1715
- data/lib/prism/node_ext.rb +34 -5
- data/lib/prism/parse_result.rb +78 -0
- data/lib/prism/pattern.rb +12 -6
- data/lib/prism/polyfill/byteindex.rb +13 -0
- data/lib/prism/polyfill/unpack1.rb +14 -0
- data/lib/prism/reflection.rb +13 -13
- data/lib/prism/serialize.rb +21 -14
- data/lib/prism/translation/parser/compiler.rb +2 -2
- data/lib/prism/translation/parser.rb +6 -6
- data/lib/prism/translation/ripper.rb +13 -9
- data/lib/prism/translation/ruby_parser.rb +4 -4
- data/lib/prism.rb +2 -1
- data/prism.gemspec +36 -38
- data/rbi/prism/compiler.rbi +3 -5
- data/rbi/prism/inspect_visitor.rbi +12 -0
- data/rbi/prism/node.rbi +354 -319
- data/rbi/prism/parse_result.rbi +23 -0
- data/rbi/prism/translation/ripper.rbi +1 -11
- data/sig/prism/dsl.rbs +3 -3
- data/sig/prism/inspect_visitor.rbs +22 -0
- data/sig/prism/node.rbs +64 -47
- data/sig/prism/parse_result.rbs +12 -0
- data/src/diagnostic.c +38 -24
- data/src/node.c +41 -16
- data/src/options.c +2 -2
- data/src/prettyprint.c +61 -18
- data/src/prism.c +607 -185
- data/src/serialize.c +5 -2
- data/src/static_literals.c +120 -34
- data/src/token_type.c +4 -4
- metadata +7 -9
- data/lib/prism/node_inspector.rb +0 -68
- data/lib/prism/polyfill/string.rb +0 -12
- data/rbi/prism/desugar_compiler.rbi +0 -5
- data/rbi/prism/mutation_compiler.rbi +0 -5
- data/rbi/prism/translation/parser/compiler.rbi +0 -13
- data/rbi/prism/translation/ripper/ripper_compiler.rbi +0 -5
- data/rbi/prism/translation/ruby_parser.rbi +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7715842445523172c9593bae81ff5c1a889c6735b59f1c5a879fe63bbeacd724
|
4
|
+
data.tar.gz: 755dd34f1e20f374aa2910482a8fac4e709e332d5313a1c80bcc2b3fc9ffbad4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37206e932b34156ad6b1679ea379e8665d987bf9673d37a1e5f74c1abb1a442adbdc0d2045d75624e60507794bd8dd56c5b7bbc8864d7ab9cec1f9a6c1c44b05
|
7
|
+
data.tar.gz: 15fc69115a30581010fb65d540f8d2a0c0cd1f76d59754d9b3c1d2f4c2f4354f2f9cbb5087a7989df6b85ff5285248875d6ed40b05d2fca89753f1235948bb0d
|
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.28.0] - 2024-05-03
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Nested hashes will now warn for duplicated keys, as in: `{ foo: 1, **{ foo: 2 } }`.
|
14
|
+
- `Prism::ReturnNode` now has a flag on it to indicate if it is redundant.
|
15
|
+
- `Prism::Location#slice_lines` and `Prism::Node#slice_lines` are now provided to slice the source code of a node including the content before the node on the same line that it starts on and the content after the node on the same line that it ends on.
|
16
|
+
- Symbols with invalid byte sequences now give errors.
|
17
|
+
- You can now pass `"3.3.1"` to the `version:` parameter on all `Prism.*` APIs.
|
18
|
+
- `Prism::Source#lines`, `Prism::Location#source_lines`, `Prism::Node#source_lines`, and `Prism::Node#script_lines` are now provided, which will all return the source code of the source as an array of strings.
|
19
|
+
- `Prism::ASCIISource` is now provided, which is a subclass of `Prism::Source` but specialized to increase performance when the source is entirely ASCII.
|
20
|
+
- Prism now provides errors when parsing Ruby 3.4+ syntax for index expressions with keywords or blocks.
|
21
|
+
- Prism now provides an error when `**nil` is used after other keyword parameters.
|
22
|
+
- Prism now provides errors when safe navigation is used in call target expressions, e.g., `foo&.bar, = 1`.
|
23
|
+
- `Prism::Node#tunnel` is now provided, which returns an array of nodes starting at the current node that contain a given line and column.
|
24
|
+
|
25
|
+
### Changed
|
26
|
+
|
27
|
+
- All translation layers now assume an eval context, which means they will not return errors for invalid jumps like `yield`.
|
28
|
+
- `Prism::Node#inspect` now uses a queue instead of recursion to avoid stack overflows.
|
29
|
+
- Prism now more closely mirrors CRuby interpolation semantics, which means you could potentially have a static literal string that directly interpolates another static literal string.
|
30
|
+
- The shipped RBI sorbet types no longer use generics.
|
31
|
+
- `Prism::ConstantPathNode#child` and `Prism::ConstantTargetNode#child` are now deprecated, replaced by two new fields on these nodes: `name` and `name_loc`.
|
32
|
+
|
9
33
|
## [0.27.0] - 2024-04-23
|
10
34
|
|
11
35
|
### Added
|
@@ -476,7 +500,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
476
500
|
|
477
501
|
- 🎉 Initial release! 🎉
|
478
502
|
|
479
|
-
[unreleased]: https://github.com/ruby/prism/compare/v0.
|
503
|
+
[unreleased]: https://github.com/ruby/prism/compare/v0.28.0...HEAD
|
504
|
+
[0.28.0]: https://github.com/ruby/prism/compare/v0.27.0...v0.28.0
|
480
505
|
[0.27.0]: https://github.com/ruby/prism/compare/v0.26.0...v0.27.0
|
481
506
|
[0.26.0]: https://github.com/ruby/prism/compare/v0.25.0...v0.26.0
|
482
507
|
[0.25.0]: https://github.com/ruby/prism/compare/v0.24.0...v0.25.0
|
data/config.yml
CHANGED
@@ -123,12 +123,13 @@ errors:
|
|
123
123
|
- HASH_ROCKET
|
124
124
|
- HASH_TERM
|
125
125
|
- HASH_VALUE
|
126
|
+
- HEREDOC_IDENTIFIER
|
126
127
|
- HEREDOC_TERM
|
127
128
|
- INCOMPLETE_QUESTION_MARK
|
128
129
|
- INCOMPLETE_VARIABLE_CLASS
|
129
|
-
-
|
130
|
+
- INCOMPLETE_VARIABLE_CLASS_3_3
|
130
131
|
- INCOMPLETE_VARIABLE_INSTANCE
|
131
|
-
-
|
132
|
+
- INCOMPLETE_VARIABLE_INSTANCE_3_3
|
132
133
|
- INSTANCE_VARIABLE_BARE
|
133
134
|
- INVALID_BLOCK_EXIT
|
134
135
|
- INVALID_CHARACTER
|
@@ -143,14 +144,16 @@ errors:
|
|
143
144
|
- INVALID_NUMBER_DECIMAL
|
144
145
|
- INVALID_NUMBER_HEXADECIMAL
|
145
146
|
- INVALID_NUMBER_OCTAL
|
146
|
-
-
|
147
|
+
- INVALID_NUMBER_UNDERSCORE_INNER
|
148
|
+
- INVALID_NUMBER_UNDERSCORE_TRAILING
|
147
149
|
- INVALID_PERCENT
|
148
150
|
- INVALID_PRINTABLE_CHARACTER
|
149
151
|
- INVALID_RETRY_AFTER_ELSE
|
150
152
|
- INVALID_RETRY_AFTER_ENSURE
|
151
153
|
- INVALID_RETRY_WITHOUT_RESCUE
|
154
|
+
- INVALID_SYMBOL
|
152
155
|
- INVALID_VARIABLE_GLOBAL
|
153
|
-
-
|
156
|
+
- INVALID_VARIABLE_GLOBAL_3_3
|
154
157
|
- INVALID_YIELD
|
155
158
|
- IT_NOT_ALLOWED_NUMBERED
|
156
159
|
- IT_NOT_ALLOWED_ORDINARY
|
@@ -194,6 +197,7 @@ errors:
|
|
194
197
|
- PARAMETER_STAR
|
195
198
|
- PARAMETER_UNEXPECTED_FWD
|
196
199
|
- PARAMETER_WILD_LOOSE_COMMA
|
200
|
+
- PARAMETER_UNEXPECTED_NO_KW
|
197
201
|
- PATTERN_CAPTURE_DUPLICATE
|
198
202
|
- PATTERN_EXPRESSION_AFTER_BRACKET
|
199
203
|
- PATTERN_EXPRESSION_AFTER_COMMA
|
@@ -247,6 +251,9 @@ errors:
|
|
247
251
|
- UNARY_RECEIVER
|
248
252
|
- UNDEF_ARGUMENT
|
249
253
|
- UNEXPECTED_BLOCK_ARGUMENT
|
254
|
+
- UNEXPECTED_INDEX_BLOCK
|
255
|
+
- UNEXPECTED_INDEX_KEYWORDS
|
256
|
+
- UNEXPECTED_SAFE_NAVIGATION
|
250
257
|
- UNEXPECTED_TOKEN_CLOSE_CONTEXT
|
251
258
|
- UNEXPECTED_TOKEN_IGNORE
|
252
259
|
- UNTIL_TERM
|
@@ -266,7 +273,7 @@ warnings:
|
|
266
273
|
- COMPARISON_AFTER_COMPARISON
|
267
274
|
- DOT_DOT_DOT_EOL
|
268
275
|
- EQUAL_IN_CONDITIONAL
|
269
|
-
-
|
276
|
+
- EQUAL_IN_CONDITIONAL_3_3
|
270
277
|
- END_IN_METHOD
|
271
278
|
- DUPLICATED_HASH_KEY
|
272
279
|
- DUPLICATED_WHEN_CLAUSE
|
@@ -617,6 +624,8 @@ tokens:
|
|
617
624
|
flags:
|
618
625
|
- name: ArgumentsNodeFlags
|
619
626
|
values:
|
627
|
+
- name: CONTAINS_KEYWORDS
|
628
|
+
comment: "if arguments contain keywords"
|
620
629
|
- name: CONTAINS_KEYWORD_SPLAT
|
621
630
|
comment: "if arguments contain keyword splat"
|
622
631
|
comment: Flags for arguments nodes.
|
@@ -706,6 +715,11 @@ flags:
|
|
706
715
|
- name: FORCED_US_ASCII_ENCODING
|
707
716
|
comment: "internal bytes forced the encoding to US-ASCII"
|
708
717
|
comment: Flags for regular expression and match last line nodes.
|
718
|
+
- name: ReturnNodeFlags
|
719
|
+
values:
|
720
|
+
- name: REDUNDANT
|
721
|
+
comment: "a return statement that is redundant because it is the last statement in a method"
|
722
|
+
comment: Flags for return nodes.
|
709
723
|
- name: ShareableConstantNodeFlags
|
710
724
|
values:
|
711
725
|
- name: LITERAL
|
@@ -1512,23 +1526,9 @@ nodes:
|
|
1512
1526
|
|
1513
1527
|
a.b::C
|
1514
1528
|
^^^
|
1515
|
-
- name:
|
1516
|
-
type:
|
1517
|
-
|
1518
|
-
- ConstantReadNode
|
1519
|
-
- MissingNode
|
1520
|
-
comment: |
|
1521
|
-
The right-hand node of the path. Always a `ConstantReadNode` in a
|
1522
|
-
valid Ruby syntax tree.
|
1523
|
-
|
1524
|
-
::Foo
|
1525
|
-
^^^
|
1526
|
-
|
1527
|
-
self::Test
|
1528
|
-
^^^^
|
1529
|
-
|
1530
|
-
a.b::C
|
1531
|
-
^
|
1529
|
+
- name: name
|
1530
|
+
type: constant?
|
1531
|
+
comment: The name of the constant being accessed. This could be `nil` in the event of a syntax error.
|
1532
1532
|
- name: delimiter_loc
|
1533
1533
|
type: location
|
1534
1534
|
comment: |
|
@@ -1539,6 +1539,16 @@ nodes:
|
|
1539
1539
|
|
1540
1540
|
One::Two
|
1541
1541
|
^^
|
1542
|
+
- name: name_loc
|
1543
|
+
type: location
|
1544
|
+
comment: |
|
1545
|
+
The location of the name of the constant.
|
1546
|
+
|
1547
|
+
::Foo
|
1548
|
+
^^^
|
1549
|
+
|
1550
|
+
One::Two
|
1551
|
+
^^^
|
1542
1552
|
comment: |
|
1543
1553
|
Represents accessing a constant through a path of `::` operators.
|
1544
1554
|
|
@@ -1578,13 +1588,12 @@ nodes:
|
|
1578
1588
|
fields:
|
1579
1589
|
- name: parent
|
1580
1590
|
type: node?
|
1581
|
-
- name:
|
1582
|
-
type:
|
1583
|
-
kind:
|
1584
|
-
- ConstantReadNode
|
1585
|
-
- MissingNode
|
1591
|
+
- name: name
|
1592
|
+
type: constant?
|
1586
1593
|
- name: delimiter_loc
|
1587
1594
|
type: location
|
1595
|
+
- name: name_loc
|
1596
|
+
type: location
|
1588
1597
|
comment: |
|
1589
1598
|
Represents writing to a constant path in a context that doesn't have an explicit value.
|
1590
1599
|
|
@@ -3330,6 +3339,9 @@ nodes:
|
|
3330
3339
|
^^^^^
|
3331
3340
|
- name: ReturnNode
|
3332
3341
|
fields:
|
3342
|
+
- name: flags
|
3343
|
+
type: flags
|
3344
|
+
kind: ReturnNodeFlags
|
3333
3345
|
- name: keyword_loc
|
3334
3346
|
type: location
|
3335
3347
|
- name: arguments
|
data/docs/configuration.md
CHANGED
@@ -14,6 +14,7 @@ A lot of code in prism's repository is templated from a single configuration fil
|
|
14
14
|
* `lib/prism/dispatcher.rb` - for defining the dispatch visitors for the nodes in Ruby
|
15
15
|
* `lib/prism/dot_visitor.rb` - for defining the dot visitor for the nodes in Ruby
|
16
16
|
* `lib/prism/dsl.rb` - for defining the DSL for the nodes in Ruby
|
17
|
+
* `lib/prism/inspect_visitor.rb` - for defining the `#inspect` methods on nodes in Ruby
|
17
18
|
* `lib/prism/mutation_compiler.rb` - for defining the mutation compiler for the nodes in Ruby
|
18
19
|
* `lib/prism/node.rb` - for defining the nodes in Ruby
|
19
20
|
* `lib/prism/reflection.rb` - for defining the reflection API in Ruby
|