prism 0.27.0 → 0.28.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 +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
|