prism 1.1.0 → 1.2.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 +17 -1
- data/config.yml +2 -1
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +1 -1
- data/include/prism/diagnostic.h +1 -0
- data/include/prism/parser.h +25 -12
- data/include/prism/version.h +2 -2
- data/lib/prism/node.rb +1 -1
- data/lib/prism/parse_result.rb +140 -3
- data/lib/prism/serialize.rb +13 -1
- data/lib/prism/translation/parser.rb +3 -3
- data/lib/prism/translation/ripper.rb +1 -5
- data/lib/prism/translation/ruby_parser.rb +2 -2
- data/prism.gemspec +1 -1
- data/rbi/prism/node.rbi +5777 -1701
- data/rbi/prism/parse_result.rbi +29 -0
- data/rbi/prism.rbi +34 -34
- data/sig/prism/node.rbs +1 -90
- data/sig/prism/parse_result.rbs +20 -0
- data/src/diagnostic.c +3 -1
- data/src/prism.c +223 -115
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f16f842a06eec8141246c60a39f509a59817de34ab4be3a33502ada040ac1602
|
4
|
+
data.tar.gz: 38bd30b4ba63fe67892a0138be5b7b2c84fb6bd66e011871a07ee453be7b0aec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9877dc80270515e91c5357418a67721fa832c6de44d755047f576d69a3b09129d64da19e5ac767d184df74afe40982f56c88be3851ce7fc7c99c1d0bbf15ec77
|
7
|
+
data.tar.gz: 4578c2f1e2e934f763d6c55ae84dc076b0676ac0560c13364db1ade75425da76d64b7a4cf8fb07ea723568fbfc58c20fb8055e9dec364ac5da05765d26398d39
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,21 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [1.2.0] - 2024-10-10
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Introduce `Prism::CodeUnitsCache`.
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
- Properly handle lexing global variables that begin with `$-`.
|
18
|
+
- Properly reject invalid multi writes within parentheses.
|
19
|
+
- Fix unary `*` binding power.
|
20
|
+
- Set `contains_keywords` flag for implicit `gets` calls when `-p` is used.
|
21
|
+
- Properly reject invalid non-associative operator patterns.
|
22
|
+
- Do not warn about unused variables declared on negative lines.
|
23
|
+
|
9
24
|
## [1.1.0] - 2024-10-02
|
10
25
|
|
11
26
|
### Added
|
@@ -591,7 +606,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
591
606
|
|
592
607
|
- 🎉 Initial release! 🎉
|
593
608
|
|
594
|
-
[unreleased]: https://github.com/ruby/prism/compare/v1.
|
609
|
+
[unreleased]: https://github.com/ruby/prism/compare/v1.2.0...HEAD
|
610
|
+
[1.2.0]: https://github.com/ruby/prism/compare/v1.1.0...v1.2.0
|
595
611
|
[1.1.0]: https://github.com/ruby/prism/compare/v1.0.0...v1.1.0
|
596
612
|
[1.0.0]: https://github.com/ruby/prism/compare/v0.30.0...v1.0.0
|
597
613
|
[0.30.0]: https://github.com/ruby/prism/compare/v0.29.0...v0.30.0
|
data/config.yml
CHANGED
@@ -141,6 +141,7 @@ errors:
|
|
141
141
|
- INSTANCE_VARIABLE_BARE
|
142
142
|
- INVALID_BLOCK_EXIT
|
143
143
|
- INVALID_CHARACTER
|
144
|
+
- INVALID_COMMA
|
144
145
|
- INVALID_ENCODING_MAGIC_COMMENT
|
145
146
|
- INVALID_ESCAPE_CHARACTER
|
146
147
|
- INVALID_FLOAT_EXPONENT
|
@@ -3684,7 +3685,7 @@ nodes:
|
|
3684
3685
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
3685
3686
|
end
|
3686
3687
|
|
3687
|
-
`Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `
|
3688
|
+
`Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `reference` field.
|
3688
3689
|
- name: RestParameterNode
|
3689
3690
|
flags: ParameterFlags
|
3690
3691
|
fields:
|
data/ext/prism/extension.h
CHANGED
data/include/prism/ast.h
CHANGED
@@ -6490,7 +6490,7 @@ typedef struct pm_rescue_modifier_node {
|
|
6490
6490
|
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
6491
6491
|
* end
|
6492
6492
|
*
|
6493
|
-
* `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `
|
6493
|
+
* `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `reference` field.
|
6494
6494
|
*
|
6495
6495
|
* Type: ::PM_RESCUE_NODE
|
6496
6496
|
*
|
data/include/prism/diagnostic.h
CHANGED
data/include/prism/parser.h
CHANGED
@@ -82,6 +82,23 @@ typedef enum {
|
|
82
82
|
PM_HEREDOC_INDENT_TILDE,
|
83
83
|
} pm_heredoc_indent_t;
|
84
84
|
|
85
|
+
/**
|
86
|
+
* All of the information necessary to store to lexing a heredoc.
|
87
|
+
*/
|
88
|
+
typedef struct {
|
89
|
+
/** A pointer to the start of the heredoc identifier. */
|
90
|
+
const uint8_t *ident_start;
|
91
|
+
|
92
|
+
/** The length of the heredoc identifier. */
|
93
|
+
size_t ident_length;
|
94
|
+
|
95
|
+
/** The type of quote that the heredoc uses. */
|
96
|
+
pm_heredoc_quote_t quote;
|
97
|
+
|
98
|
+
/** The type of indentation that the heredoc uses. */
|
99
|
+
pm_heredoc_indent_t indent;
|
100
|
+
} pm_heredoc_lex_mode_t;
|
101
|
+
|
85
102
|
/**
|
86
103
|
* When lexing Ruby source, the lexer has a small amount of state to tell which
|
87
104
|
* kind of token it is currently lexing. For example, when we find the start of
|
@@ -210,17 +227,10 @@ typedef struct pm_lex_mode {
|
|
210
227
|
} string;
|
211
228
|
|
212
229
|
struct {
|
213
|
-
/**
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
size_t ident_length;
|
218
|
-
|
219
|
-
/** The type of quote that the heredoc uses. */
|
220
|
-
pm_heredoc_quote_t quote;
|
221
|
-
|
222
|
-
/** The type of indentation that the heredoc uses. */
|
223
|
-
pm_heredoc_indent_t indent;
|
230
|
+
/**
|
231
|
+
* All of the data necessary to lex a heredoc.
|
232
|
+
*/
|
233
|
+
pm_heredoc_lex_mode_t base;
|
224
234
|
|
225
235
|
/**
|
226
236
|
* This is the pointer to the character where lexing should resume
|
@@ -233,7 +243,7 @@ typedef struct pm_lex_mode {
|
|
233
243
|
* line so that we know how much to dedent each line in the case of
|
234
244
|
* a tilde heredoc.
|
235
245
|
*/
|
236
|
-
size_t common_whitespace;
|
246
|
+
size_t *common_whitespace;
|
237
247
|
|
238
248
|
/** True if the previous token ended with a line continuation. */
|
239
249
|
bool line_continuation;
|
@@ -382,6 +392,9 @@ typedef enum {
|
|
382
392
|
/** a rescue statement within a module statement */
|
383
393
|
PM_CONTEXT_MODULE_RESCUE,
|
384
394
|
|
395
|
+
/** a multiple target expression */
|
396
|
+
PM_CONTEXT_MULTI_TARGET,
|
397
|
+
|
385
398
|
/** a parenthesized expression */
|
386
399
|
PM_CONTEXT_PARENS,
|
387
400
|
|
data/include/prism/version.h
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
/**
|
15
15
|
* The minor version of the Prism library as an int.
|
16
16
|
*/
|
17
|
-
#define PRISM_VERSION_MINOR
|
17
|
+
#define PRISM_VERSION_MINOR 2
|
18
18
|
|
19
19
|
/**
|
20
20
|
* The patch version of the Prism library as an int.
|
@@ -24,6 +24,6 @@
|
|
24
24
|
/**
|
25
25
|
* The version of the Prism library as a constant string.
|
26
26
|
*/
|
27
|
-
#define PRISM_VERSION "1.
|
27
|
+
#define PRISM_VERSION "1.2.0"
|
28
28
|
|
29
29
|
#endif
|
data/lib/prism/node.rb
CHANGED
@@ -14219,7 +14219,7 @@ module Prism
|
|
14219
14219
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
14220
14220
|
# end
|
14221
14221
|
#
|
14222
|
-
# `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `
|
14222
|
+
# `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `reference` field.
|
14223
14223
|
class RescueNode < Node
|
14224
14224
|
# Initialize a new RescueNode node.
|
14225
14225
|
def initialize(source, node_id, location, flags, keyword_loc, exceptions, operator_loc, reference, statements, subsequent)
|
data/lib/prism/parse_result.rb
CHANGED
@@ -12,6 +12,21 @@ module Prism
|
|
12
12
|
def self.for(source, start_line = 1, offsets = [])
|
13
13
|
if source.ascii_only?
|
14
14
|
ASCIISource.new(source, start_line, offsets)
|
15
|
+
elsif source.encoding == Encoding::BINARY
|
16
|
+
source.force_encoding(Encoding::UTF_8)
|
17
|
+
|
18
|
+
if source.valid_encoding?
|
19
|
+
new(source, start_line, offsets)
|
20
|
+
else
|
21
|
+
# This is an extremely niche use case where the file is marked as
|
22
|
+
# binary, contains multi-byte characters, and those characters are not
|
23
|
+
# valid UTF-8. In this case we'll mark it as binary and fall back to
|
24
|
+
# treating everything as a single-byte character. This _may_ cause
|
25
|
+
# problems when asking for code units, but it appears to be the
|
26
|
+
# cleanest solution at the moment.
|
27
|
+
source.force_encoding(Encoding::BINARY)
|
28
|
+
ASCIISource.new(source, start_line, offsets)
|
29
|
+
end
|
15
30
|
else
|
16
31
|
new(source, start_line, offsets)
|
17
32
|
end
|
@@ -89,8 +104,14 @@ module Prism
|
|
89
104
|
# This method is tested with UTF-8, UTF-16, and UTF-32. If there is the
|
90
105
|
# concept of code units that differs from the number of characters in other
|
91
106
|
# encodings, it is not captured here.
|
107
|
+
#
|
108
|
+
# We purposefully replace invalid and undefined characters with replacement
|
109
|
+
# characters in this conversion. This happens for two reasons. First, it's
|
110
|
+
# possible that the given byte offset will not occur on a character
|
111
|
+
# boundary. Second, it's possible that the source code will contain a
|
112
|
+
# character that has no equivalent in the given encoding.
|
92
113
|
def code_units_offset(byte_offset, encoding)
|
93
|
-
byteslice = (source.byteslice(0, byte_offset) or raise).encode(encoding)
|
114
|
+
byteslice = (source.byteslice(0, byte_offset) or raise).encode(encoding, invalid: :replace, undef: :replace)
|
94
115
|
|
95
116
|
if encoding == Encoding::UTF_16LE || encoding == Encoding::UTF_16BE
|
96
117
|
byteslice.bytesize / 2
|
@@ -99,6 +120,12 @@ module Prism
|
|
99
120
|
end
|
100
121
|
end
|
101
122
|
|
123
|
+
# Generate a cache that targets a specific encoding for calculating code
|
124
|
+
# unit offsets.
|
125
|
+
def code_units_cache(encoding)
|
126
|
+
CodeUnitsCache.new(source, encoding)
|
127
|
+
end
|
128
|
+
|
102
129
|
# Returns the column number in code units for the given encoding for the
|
103
130
|
# given byte offset.
|
104
131
|
def code_units_column(byte_offset, encoding)
|
@@ -128,10 +155,84 @@ module Prism
|
|
128
155
|
end
|
129
156
|
end
|
130
157
|
|
158
|
+
# A cache that can be used to quickly compute code unit offsets from byte
|
159
|
+
# offsets. It purposefully provides only a single #[] method to access the
|
160
|
+
# cache in order to minimize surface area.
|
161
|
+
#
|
162
|
+
# Note that there are some known issues here that may or may not be addressed
|
163
|
+
# in the future:
|
164
|
+
#
|
165
|
+
# * The first is that there are issues when the cache computes values that are
|
166
|
+
# not on character boundaries. This can result in subsequent computations
|
167
|
+
# being off by one or more code units.
|
168
|
+
# * The second is that this cache is currently unbounded. In theory we could
|
169
|
+
# introduce some kind of LRU cache to limit the number of entries, but this
|
170
|
+
# has not yet been implemented.
|
171
|
+
#
|
172
|
+
class CodeUnitsCache
|
173
|
+
class UTF16Counter # :nodoc:
|
174
|
+
def initialize(source, encoding)
|
175
|
+
@source = source
|
176
|
+
@encoding = encoding
|
177
|
+
end
|
178
|
+
|
179
|
+
def count(byte_offset, byte_length)
|
180
|
+
@source.byteslice(byte_offset, byte_length).encode(@encoding, invalid: :replace, undef: :replace).bytesize / 2
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
class LengthCounter # :nodoc:
|
185
|
+
def initialize(source, encoding)
|
186
|
+
@source = source
|
187
|
+
@encoding = encoding
|
188
|
+
end
|
189
|
+
|
190
|
+
def count(byte_offset, byte_length)
|
191
|
+
@source.byteslice(byte_offset, byte_length).encode(@encoding, invalid: :replace, undef: :replace).length
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
private_constant :UTF16Counter, :LengthCounter
|
196
|
+
|
197
|
+
# Initialize a new cache with the given source and encoding.
|
198
|
+
def initialize(source, encoding)
|
199
|
+
@source = source
|
200
|
+
@counter =
|
201
|
+
if encoding == Encoding::UTF_16LE || encoding == Encoding::UTF_16BE
|
202
|
+
UTF16Counter.new(source, encoding)
|
203
|
+
else
|
204
|
+
LengthCounter.new(source, encoding)
|
205
|
+
end
|
206
|
+
|
207
|
+
@cache = {}
|
208
|
+
@offsets = []
|
209
|
+
end
|
210
|
+
|
211
|
+
# Retrieve the code units offset from the given byte offset.
|
212
|
+
def [](byte_offset)
|
213
|
+
@cache[byte_offset] ||=
|
214
|
+
if (index = @offsets.bsearch_index { |offset| offset > byte_offset }).nil?
|
215
|
+
@offsets << byte_offset
|
216
|
+
@counter.count(0, byte_offset)
|
217
|
+
elsif index == 0
|
218
|
+
@offsets.unshift(byte_offset)
|
219
|
+
@counter.count(0, byte_offset)
|
220
|
+
else
|
221
|
+
@offsets.insert(index, byte_offset)
|
222
|
+
offset = @offsets[index - 1]
|
223
|
+
@cache[offset] + @counter.count(offset, byte_offset - offset)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
131
228
|
# Specialized version of Prism::Source for source code that includes ASCII
|
132
229
|
# characters only. This class is used to apply performance optimizations that
|
133
|
-
# cannot be applied to sources that include multibyte characters.
|
134
|
-
#
|
230
|
+
# cannot be applied to sources that include multibyte characters.
|
231
|
+
#
|
232
|
+
# In the extremely rare case that a source includes multi-byte characters but
|
233
|
+
# is marked as binary because of a magic encoding comment and it cannot be
|
234
|
+
# eagerly converted to UTF-8, this class will be used as well. This is because
|
235
|
+
# at that point we will treat everything as single-byte characters.
|
135
236
|
class ASCIISource < Source
|
136
237
|
# Return the character offset for the given byte offset.
|
137
238
|
def character_offset(byte_offset)
|
@@ -153,6 +254,13 @@ module Prism
|
|
153
254
|
byte_offset
|
154
255
|
end
|
155
256
|
|
257
|
+
# Returns a cache that is the identity function in order to maintain the
|
258
|
+
# same interface. We can do this because code units are always equivalent to
|
259
|
+
# byte offsets for ASCII-only sources.
|
260
|
+
def code_units_cache(encoding)
|
261
|
+
->(byte_offset) { byte_offset }
|
262
|
+
end
|
263
|
+
|
156
264
|
# Specialized version of `code_units_column` that does not depend on
|
157
265
|
# `code_units_offset`, which is a more expensive operation. This is
|
158
266
|
# essentially the same as `Prism::Source#column`.
|
@@ -262,6 +370,12 @@ module Prism
|
|
262
370
|
source.code_units_offset(start_offset, encoding)
|
263
371
|
end
|
264
372
|
|
373
|
+
# The start offset from the start of the file in code units using the given
|
374
|
+
# cache to fetch or calculate the value.
|
375
|
+
def cached_start_code_units_offset(cache)
|
376
|
+
cache[start_offset]
|
377
|
+
end
|
378
|
+
|
265
379
|
# The byte offset from the beginning of the source where this location ends.
|
266
380
|
def end_offset
|
267
381
|
start_offset + length
|
@@ -278,6 +392,12 @@ module Prism
|
|
278
392
|
source.code_units_offset(end_offset, encoding)
|
279
393
|
end
|
280
394
|
|
395
|
+
# The end offset from the start of the file in code units using the given
|
396
|
+
# cache to fetch or calculate the value.
|
397
|
+
def cached_end_code_units_offset(cache)
|
398
|
+
cache[end_offset]
|
399
|
+
end
|
400
|
+
|
281
401
|
# The line number where this location starts.
|
282
402
|
def start_line
|
283
403
|
source.line(start_offset)
|
@@ -312,6 +432,12 @@ module Prism
|
|
312
432
|
source.code_units_column(start_offset, encoding)
|
313
433
|
end
|
314
434
|
|
435
|
+
# The start column in code units using the given cache to fetch or calculate
|
436
|
+
# the value.
|
437
|
+
def cached_start_code_units_column(cache)
|
438
|
+
cache[start_offset] - cache[source.line_start(start_offset)]
|
439
|
+
end
|
440
|
+
|
315
441
|
# The column number in bytes where this location ends from the start of the
|
316
442
|
# line.
|
317
443
|
def end_column
|
@@ -330,6 +456,12 @@ module Prism
|
|
330
456
|
source.code_units_column(end_offset, encoding)
|
331
457
|
end
|
332
458
|
|
459
|
+
# The end column in code units using the given cache to fetch or calculate
|
460
|
+
# the value.
|
461
|
+
def cached_end_code_units_column(cache)
|
462
|
+
cache[end_offset] - cache[source.line_start(end_offset)]
|
463
|
+
end
|
464
|
+
|
333
465
|
# Implement the hash pattern matching interface for Location.
|
334
466
|
def deconstruct_keys(keys)
|
335
467
|
{ start_offset: start_offset, end_offset: end_offset }
|
@@ -579,6 +711,11 @@ module Prism
|
|
579
711
|
def failure?
|
580
712
|
!success?
|
581
713
|
end
|
714
|
+
|
715
|
+
# Create a code units cache for the given encoding.
|
716
|
+
def code_units_cache(encoding)
|
717
|
+
source.code_units_cache(encoding)
|
718
|
+
end
|
582
719
|
end
|
583
720
|
|
584
721
|
# This is a result specific to the `parse` and `parse_file` methods.
|
data/lib/prism/serialize.rb
CHANGED
@@ -18,7 +18,7 @@ module Prism
|
|
18
18
|
|
19
19
|
# The minor version of prism that we are expecting to find in the serialized
|
20
20
|
# strings.
|
21
|
-
MINOR_VERSION =
|
21
|
+
MINOR_VERSION = 2
|
22
22
|
|
23
23
|
# The patch version of prism that we are expecting to find in the serialized
|
24
24
|
# strings.
|
@@ -28,10 +28,21 @@ module Prism
|
|
28
28
|
def self.load(input, serialized)
|
29
29
|
input = input.dup
|
30
30
|
source = Source.for(input)
|
31
|
+
|
31
32
|
loader = Loader.new(source, serialized)
|
32
33
|
result = loader.load_result
|
33
34
|
|
34
35
|
input.force_encoding(loader.encoding)
|
36
|
+
|
37
|
+
# This is an extremely niche use-case where the file was marked as binary
|
38
|
+
# but it contained UTF-8-encoded characters. In that case we will actually
|
39
|
+
# put it back to UTF-8 to give the location APIs the best chance of being
|
40
|
+
# correct.
|
41
|
+
if !input.ascii_only? && input.encoding == Encoding::BINARY
|
42
|
+
input.force_encoding(Encoding::UTF_8)
|
43
|
+
input.force_encoding(Encoding::BINARY) unless input.valid_encoding?
|
44
|
+
end
|
45
|
+
|
35
46
|
result
|
36
47
|
end
|
37
48
|
|
@@ -267,6 +278,7 @@ module Prism
|
|
267
278
|
:instance_variable_bare,
|
268
279
|
:invalid_block_exit,
|
269
280
|
:invalid_character,
|
281
|
+
:invalid_comma,
|
270
282
|
:invalid_encoding_magic_comment,
|
271
283
|
:invalid_escape_character,
|
272
284
|
:invalid_float_exponent,
|
@@ -51,7 +51,7 @@ module Prism
|
|
51
51
|
source = source_buffer.source
|
52
52
|
|
53
53
|
offset_cache = build_offset_cache(source)
|
54
|
-
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version),
|
54
|
+
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache)
|
55
55
|
|
56
56
|
build_ast(result.value, offset_cache)
|
57
57
|
ensure
|
@@ -64,7 +64,7 @@ module Prism
|
|
64
64
|
source = source_buffer.source
|
65
65
|
|
66
66
|
offset_cache = build_offset_cache(source)
|
67
|
-
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version),
|
67
|
+
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache)
|
68
68
|
|
69
69
|
[
|
70
70
|
build_ast(result.value, offset_cache),
|
@@ -83,7 +83,7 @@ module Prism
|
|
83
83
|
offset_cache = build_offset_cache(source)
|
84
84
|
result =
|
85
85
|
begin
|
86
|
-
unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version),
|
86
|
+
unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache)
|
87
87
|
rescue ::Parser::SyntaxError
|
88
88
|
raise if !recover
|
89
89
|
end
|
@@ -3269,11 +3269,7 @@ module Prism
|
|
3269
3269
|
|
3270
3270
|
# Lazily initialize the parse result.
|
3271
3271
|
def result
|
3272
|
-
@result ||=
|
3273
|
-
begin
|
3274
|
-
scopes = RUBY_VERSION >= "3.3.0" ? [] : [[]]
|
3275
|
-
Prism.parse(source, scopes: scopes)
|
3276
|
-
end
|
3272
|
+
@result ||= Prism.parse(source, partial_script: true)
|
3277
3273
|
end
|
3278
3274
|
|
3279
3275
|
##########################################################################
|
@@ -1596,13 +1596,13 @@ module Prism
|
|
1596
1596
|
# Parse the given source and translate it into the seattlerb/ruby_parser
|
1597
1597
|
# gem's Sexp format.
|
1598
1598
|
def parse(source, filepath = "(string)")
|
1599
|
-
translate(Prism.parse(source, filepath: filepath,
|
1599
|
+
translate(Prism.parse(source, filepath: filepath, partial_script: true), filepath)
|
1600
1600
|
end
|
1601
1601
|
|
1602
1602
|
# Parse the given file and translate it into the seattlerb/ruby_parser
|
1603
1603
|
# gem's Sexp format.
|
1604
1604
|
def parse_file(filepath)
|
1605
|
-
translate(Prism.parse_file(filepath,
|
1605
|
+
translate(Prism.parse_file(filepath, partial_script: true), filepath)
|
1606
1606
|
end
|
1607
1607
|
|
1608
1608
|
class << self
|