prism 0.27.0 → 0.29.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 +45 -1
- data/config.yml +68 -44
- data/docs/configuration.md +1 -0
- data/ext/prism/api_node.c +854 -847
- data/ext/prism/extconf.rb +27 -23
- data/ext/prism/extension.c +5 -3
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +70 -48
- data/include/prism/diagnostic.h +23 -6
- 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/desugar_compiler.rb +4 -4
- data/lib/prism/dot_visitor.rb +54 -38
- data/lib/prism/dsl.rb +24 -24
- data/lib/prism/ffi.rb +4 -4
- 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 +737 -1863
- data/lib/prism/node_ext.rb +176 -5
- data/lib/prism/parse_result/comments.rb +1 -1
- data/lib/prism/parse_result/newlines.rb +1 -1
- 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 +20 -20
- data/lib/prism/serialize.rb +32 -15
- data/lib/prism/translation/parser/compiler.rb +156 -26
- data/lib/prism/translation/parser.rb +7 -7
- data/lib/prism/translation/ripper.rb +29 -25
- data/lib/prism/translation/ruby_parser.rb +13 -13
- data/lib/prism.rb +2 -1
- data/prism.gemspec +37 -38
- data/rbi/prism/compiler.rbi +3 -5
- data/rbi/prism/inspect_visitor.rbi +12 -0
- data/rbi/prism/node.rbi +405 -370
- data/rbi/prism/node_ext.rbi +5 -0
- data/rbi/prism/parse_result.rbi +23 -0
- data/rbi/prism/translation/ripper.rbi +1 -11
- data/sig/prism/dsl.rbs +12 -12
- data/sig/prism/inspect_visitor.rbs +22 -0
- data/sig/prism/lex_compat.rbs +10 -0
- data/sig/prism/node.rbs +108 -91
- data/sig/prism/node_ext.rbs +4 -0
- data/sig/prism/parse_result.rbs +12 -0
- data/src/diagnostic.c +66 -33
- data/src/node.c +89 -64
- data/src/options.c +2 -2
- data/src/prettyprint.c +109 -66
- data/src/prism.c +862 -317
- data/src/serialize.c +21 -18
- data/src/static_literals.c +120 -34
- data/src/token_type.c +6 -6
- metadata +8 -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
data/lib/prism/serialize.rb
CHANGED
@@ -7,7 +7,7 @@ if you are looking to modify the template
|
|
7
7
|
=end
|
8
8
|
|
9
9
|
require "stringio"
|
10
|
-
require_relative "polyfill/
|
10
|
+
require_relative "polyfill/unpack1"
|
11
11
|
|
12
12
|
module Prism
|
13
13
|
# A module responsible for deserializing parse results.
|
@@ -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 = 29
|
22
22
|
|
23
23
|
# The patch version of prism that we are expecting to find in the serialized
|
24
24
|
# strings.
|
@@ -27,7 +27,7 @@ module Prism
|
|
27
27
|
# Deserialize the AST represented by the given string into a parse result.
|
28
28
|
def self.load(input, serialized)
|
29
29
|
input = input.dup
|
30
|
-
source = Source.
|
30
|
+
source = Source.for(input)
|
31
31
|
loader = Loader.new(source, serialized)
|
32
32
|
result = loader.load_result
|
33
33
|
|
@@ -133,13 +133,16 @@ module Prism
|
|
133
133
|
:argument_bare_hash,
|
134
134
|
:argument_block_forwarding,
|
135
135
|
:argument_block_multi,
|
136
|
+
:argument_conflict_ampersand,
|
137
|
+
:argument_conflict_star,
|
138
|
+
:argument_conflict_star_star,
|
136
139
|
:argument_formal_class,
|
137
140
|
:argument_formal_constant,
|
138
141
|
:argument_formal_global,
|
139
142
|
:argument_formal_ivar,
|
140
143
|
:argument_forwarding_unbound,
|
141
144
|
:argument_in,
|
142
|
-
:
|
145
|
+
:argument_no_forwarding_ampersand,
|
143
146
|
:argument_no_forwarding_ellipses,
|
144
147
|
:argument_no_forwarding_star,
|
145
148
|
:argument_no_forwarding_star_star,
|
@@ -221,6 +224,7 @@ module Prism
|
|
221
224
|
:expect_expression_after_splat_hash,
|
222
225
|
:expect_expression_after_star,
|
223
226
|
:expect_ident_req_parameter,
|
227
|
+
:expect_in_delimiter,
|
224
228
|
:expect_lparen_req_parameter,
|
225
229
|
:expect_message,
|
226
230
|
:expect_rbracket,
|
@@ -249,16 +253,18 @@ module Prism
|
|
249
253
|
:hash_rocket,
|
250
254
|
:hash_term,
|
251
255
|
:hash_value,
|
256
|
+
:heredoc_identifier,
|
252
257
|
:heredoc_term,
|
253
258
|
:incomplete_question_mark,
|
254
259
|
:incomplete_variable_class,
|
255
|
-
:
|
260
|
+
:incomplete_variable_class_3_3,
|
256
261
|
:incomplete_variable_instance,
|
257
|
-
:
|
262
|
+
:incomplete_variable_instance_3_3,
|
258
263
|
:instance_variable_bare,
|
259
264
|
:invalid_block_exit,
|
260
265
|
:invalid_character,
|
261
266
|
:invalid_encoding_magic_comment,
|
267
|
+
:invalid_escape_character,
|
262
268
|
:invalid_float_exponent,
|
263
269
|
:invalid_local_variable_read,
|
264
270
|
:invalid_local_variable_write,
|
@@ -267,16 +273,19 @@ module Prism
|
|
267
273
|
:invalid_multibyte_escape,
|
268
274
|
:invalid_number_binary,
|
269
275
|
:invalid_number_decimal,
|
276
|
+
:invalid_number_fraction,
|
270
277
|
:invalid_number_hexadecimal,
|
271
278
|
:invalid_number_octal,
|
272
|
-
:
|
279
|
+
:invalid_number_underscore_inner,
|
280
|
+
:invalid_number_underscore_trailing,
|
273
281
|
:invalid_percent,
|
274
282
|
:invalid_printable_character,
|
275
283
|
:invalid_retry_after_else,
|
276
284
|
:invalid_retry_after_ensure,
|
277
285
|
:invalid_retry_without_rescue,
|
286
|
+
:invalid_symbol,
|
278
287
|
:invalid_variable_global,
|
279
|
-
:
|
288
|
+
:invalid_variable_global_3_3,
|
280
289
|
:invalid_yield,
|
281
290
|
:it_not_allowed_numbered,
|
282
291
|
:it_not_allowed_ordinary,
|
@@ -310,6 +319,7 @@ module Prism
|
|
310
319
|
:parameter_assoc_splat_multi,
|
311
320
|
:parameter_block_multi,
|
312
321
|
:parameter_circular,
|
322
|
+
:parameter_forwarding_after_rest,
|
313
323
|
:parameter_method_name,
|
314
324
|
:parameter_name_duplicated,
|
315
325
|
:parameter_no_default,
|
@@ -320,6 +330,7 @@ module Prism
|
|
320
330
|
:parameter_star,
|
321
331
|
:parameter_unexpected_fwd,
|
322
332
|
:parameter_wild_loose_comma,
|
333
|
+
:parameter_unexpected_no_kw,
|
323
334
|
:pattern_capture_duplicate,
|
324
335
|
:pattern_expression_after_bracket,
|
325
336
|
:pattern_expression_after_comma,
|
@@ -331,8 +342,10 @@ module Prism
|
|
331
342
|
:pattern_expression_after_pipe,
|
332
343
|
:pattern_expression_after_range,
|
333
344
|
:pattern_expression_after_rest,
|
345
|
+
:pattern_hash_implicit,
|
334
346
|
:pattern_hash_key,
|
335
347
|
:pattern_hash_key_duplicate,
|
348
|
+
:pattern_hash_key_interpolated,
|
336
349
|
:pattern_hash_key_label,
|
337
350
|
:pattern_hash_key_locals,
|
338
351
|
:pattern_ident_after_hrocket,
|
@@ -373,6 +386,9 @@ module Prism
|
|
373
386
|
:unary_receiver,
|
374
387
|
:undef_argument,
|
375
388
|
:unexpected_block_argument,
|
389
|
+
:unexpected_index_block,
|
390
|
+
:unexpected_index_keywords,
|
391
|
+
:unexpected_safe_navigation,
|
376
392
|
:unexpected_token_close_context,
|
377
393
|
:unexpected_token_ignore,
|
378
394
|
:until_term,
|
@@ -391,7 +407,7 @@ module Prism
|
|
391
407
|
:comparison_after_comparison,
|
392
408
|
:dot_dot_dot_eol,
|
393
409
|
:equal_in_conditional,
|
394
|
-
:
|
410
|
+
:equal_in_conditional_3_3,
|
395
411
|
:end_in_method,
|
396
412
|
:duplicated_hash_key,
|
397
413
|
:duplicated_when_clause,
|
@@ -404,6 +420,7 @@ module Prism
|
|
404
420
|
:keyword_eol,
|
405
421
|
:literal_in_condition_default,
|
406
422
|
:literal_in_condition_verbose,
|
423
|
+
:shareable_constant_value_line,
|
407
424
|
:shebang_carriage_return,
|
408
425
|
:unexpected_carriage_return,
|
409
426
|
:unreachable_statement,
|
@@ -721,7 +738,7 @@ module Prism
|
|
721
738
|
source, load_node, load_location, load_node, location)
|
722
739
|
when 37 then
|
723
740
|
ConstantPathNode.new(
|
724
|
-
source, load_optional_node,
|
741
|
+
source, load_optional_node, load_optional_constant, load_location, load_location, location)
|
725
742
|
when 38 then
|
726
743
|
ConstantPathOperatorWriteNode.new(
|
727
744
|
source, load_node, load_location, load_node, load_required_constant, location)
|
@@ -730,7 +747,7 @@ module Prism
|
|
730
747
|
source, load_node, load_location, load_node, location)
|
731
748
|
when 40 then
|
732
749
|
ConstantPathTargetNode.new(
|
733
|
-
source, load_optional_node,
|
750
|
+
source, load_optional_node, load_optional_constant, load_location, load_location, location)
|
734
751
|
when 41 then
|
735
752
|
ConstantPathWriteNode.new(
|
736
753
|
source, load_node, load_location, load_node, location)
|
@@ -1004,7 +1021,7 @@ module Prism
|
|
1004
1021
|
source, location)
|
1005
1022
|
when 131 then
|
1006
1023
|
ReturnNode.new(
|
1007
|
-
source, load_location, load_optional_node, location)
|
1024
|
+
source, load_varuint, load_location, load_optional_node, location)
|
1008
1025
|
when 132 then
|
1009
1026
|
SelfNode.new(
|
1010
1027
|
source, location)
|
@@ -1256,7 +1273,7 @@ module Prism
|
|
1256
1273
|
-> {
|
1257
1274
|
location = load_location
|
1258
1275
|
ConstantPathNode.new(
|
1259
|
-
source, load_optional_node,
|
1276
|
+
source, load_optional_node, load_optional_constant, load_location, load_location, location)
|
1260
1277
|
},
|
1261
1278
|
-> {
|
1262
1279
|
location = load_location
|
@@ -1271,7 +1288,7 @@ module Prism
|
|
1271
1288
|
-> {
|
1272
1289
|
location = load_location
|
1273
1290
|
ConstantPathTargetNode.new(
|
1274
|
-
source, load_optional_node,
|
1291
|
+
source, load_optional_node, load_optional_constant, load_location, load_location, location)
|
1275
1292
|
},
|
1276
1293
|
-> {
|
1277
1294
|
location = load_location
|
@@ -1727,7 +1744,7 @@ module Prism
|
|
1727
1744
|
-> {
|
1728
1745
|
location = load_location
|
1729
1746
|
ReturnNode.new(
|
1730
|
-
source, load_location, load_optional_node, location)
|
1747
|
+
source, load_varuint, load_location, load_optional_node, location)
|
1731
1748
|
},
|
1732
1749
|
-> {
|
1733
1750
|
location = load_location
|
@@ -328,18 +328,48 @@ module Prism
|
|
328
328
|
[],
|
329
329
|
nil
|
330
330
|
),
|
331
|
-
[node.
|
331
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
332
332
|
visit(node.value)
|
333
333
|
)
|
334
334
|
end
|
335
335
|
|
336
336
|
# foo.bar &&= baz
|
337
337
|
# ^^^^^^^^^^^^^^^
|
338
|
-
|
338
|
+
def visit_call_and_write_node(node)
|
339
|
+
call_operator_loc = node.call_operator_loc
|
340
|
+
|
341
|
+
builder.op_assign(
|
342
|
+
builder.call_method(
|
343
|
+
visit(node.receiver),
|
344
|
+
call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
|
345
|
+
node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
|
346
|
+
nil,
|
347
|
+
[],
|
348
|
+
nil
|
349
|
+
),
|
350
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
351
|
+
visit(node.value)
|
352
|
+
)
|
353
|
+
end
|
339
354
|
|
340
355
|
# foo.bar ||= baz
|
341
356
|
# ^^^^^^^^^^^^^^^
|
342
|
-
|
357
|
+
def visit_call_or_write_node(node)
|
358
|
+
call_operator_loc = node.call_operator_loc
|
359
|
+
|
360
|
+
builder.op_assign(
|
361
|
+
builder.call_method(
|
362
|
+
visit(node.receiver),
|
363
|
+
call_operator_loc.nil? ? nil : [{ "." => :dot, "&." => :anddot, "::" => "::" }.fetch(call_operator_loc.slice), srange(call_operator_loc)],
|
364
|
+
node.message_loc ? [node.read_name, srange(node.message_loc)] : nil,
|
365
|
+
nil,
|
366
|
+
[],
|
367
|
+
nil
|
368
|
+
),
|
369
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
370
|
+
visit(node.value)
|
371
|
+
)
|
372
|
+
end
|
343
373
|
|
344
374
|
# foo.bar, = 1
|
345
375
|
# ^^^^^^^
|
@@ -419,18 +449,30 @@ module Prism
|
|
419
449
|
def visit_class_variable_operator_write_node(node)
|
420
450
|
builder.op_assign(
|
421
451
|
builder.assignable(builder.cvar(token(node.name_loc))),
|
422
|
-
[node.
|
452
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
423
453
|
visit(node.value)
|
424
454
|
)
|
425
455
|
end
|
426
456
|
|
427
457
|
# @@foo &&= bar
|
428
458
|
# ^^^^^^^^^^^^^
|
429
|
-
|
459
|
+
def visit_class_variable_and_write_node(node)
|
460
|
+
builder.op_assign(
|
461
|
+
builder.assignable(builder.cvar(token(node.name_loc))),
|
462
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
463
|
+
visit(node.value)
|
464
|
+
)
|
465
|
+
end
|
430
466
|
|
431
467
|
# @@foo ||= bar
|
432
468
|
# ^^^^^^^^^^^^^
|
433
|
-
|
469
|
+
def visit_class_variable_or_write_node(node)
|
470
|
+
builder.op_assign(
|
471
|
+
builder.assignable(builder.cvar(token(node.name_loc))),
|
472
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
473
|
+
visit(node.value)
|
474
|
+
)
|
475
|
+
end
|
434
476
|
|
435
477
|
# @@foo, = bar
|
436
478
|
# ^^^^^
|
@@ -458,18 +500,30 @@ module Prism
|
|
458
500
|
def visit_constant_operator_write_node(node)
|
459
501
|
builder.op_assign(
|
460
502
|
builder.assignable(builder.const([node.name, srange(node.name_loc)])),
|
461
|
-
[node.
|
503
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
462
504
|
visit(node.value)
|
463
505
|
)
|
464
506
|
end
|
465
507
|
|
466
508
|
# Foo &&= bar
|
467
509
|
# ^^^^^^^^^^^^
|
468
|
-
|
510
|
+
def visit_constant_and_write_node(node)
|
511
|
+
builder.op_assign(
|
512
|
+
builder.assignable(builder.const([node.name, srange(node.name_loc)])),
|
513
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
514
|
+
visit(node.value)
|
515
|
+
)
|
516
|
+
end
|
469
517
|
|
470
518
|
# Foo ||= bar
|
471
519
|
# ^^^^^^^^^^^^
|
472
|
-
|
520
|
+
def visit_constant_or_write_node(node)
|
521
|
+
builder.op_assign(
|
522
|
+
builder.assignable(builder.const([node.name, srange(node.name_loc)])),
|
523
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
524
|
+
visit(node.value)
|
525
|
+
)
|
526
|
+
end
|
473
527
|
|
474
528
|
# Foo, = bar
|
475
529
|
# ^^^
|
@@ -483,13 +537,13 @@ module Prism
|
|
483
537
|
if node.parent.nil?
|
484
538
|
builder.const_global(
|
485
539
|
token(node.delimiter_loc),
|
486
|
-
[node.
|
540
|
+
[node.name, srange(node.name_loc)]
|
487
541
|
)
|
488
542
|
else
|
489
543
|
builder.const_fetch(
|
490
544
|
visit(node.parent),
|
491
545
|
token(node.delimiter_loc),
|
492
|
-
[node.
|
546
|
+
[node.name, srange(node.name_loc)]
|
493
547
|
)
|
494
548
|
end
|
495
549
|
end
|
@@ -512,18 +566,30 @@ module Prism
|
|
512
566
|
def visit_constant_path_operator_write_node(node)
|
513
567
|
builder.op_assign(
|
514
568
|
builder.assignable(visit(node.target)),
|
515
|
-
[node.
|
569
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
516
570
|
visit(node.value)
|
517
571
|
)
|
518
572
|
end
|
519
573
|
|
520
574
|
# Foo::Bar &&= baz
|
521
575
|
# ^^^^^^^^^^^^^^^^
|
522
|
-
|
576
|
+
def visit_constant_path_and_write_node(node)
|
577
|
+
builder.op_assign(
|
578
|
+
builder.assignable(visit(node.target)),
|
579
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
580
|
+
visit(node.value)
|
581
|
+
)
|
582
|
+
end
|
523
583
|
|
524
584
|
# Foo::Bar ||= baz
|
525
585
|
# ^^^^^^^^^^^^^^^^
|
526
|
-
|
586
|
+
def visit_constant_path_or_write_node(node)
|
587
|
+
builder.op_assign(
|
588
|
+
builder.assignable(visit(node.target)),
|
589
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
590
|
+
visit(node.value)
|
591
|
+
)
|
592
|
+
end
|
527
593
|
|
528
594
|
# Foo::Bar, = baz
|
529
595
|
# ^^^^^^^^
|
@@ -711,18 +777,30 @@ module Prism
|
|
711
777
|
def visit_global_variable_operator_write_node(node)
|
712
778
|
builder.op_assign(
|
713
779
|
builder.assignable(builder.gvar(token(node.name_loc))),
|
714
|
-
[node.
|
780
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
715
781
|
visit(node.value)
|
716
782
|
)
|
717
783
|
end
|
718
784
|
|
719
785
|
# $foo &&= bar
|
720
786
|
# ^^^^^^^^^^^^
|
721
|
-
|
787
|
+
def visit_global_variable_and_write_node(node)
|
788
|
+
builder.op_assign(
|
789
|
+
builder.assignable(builder.gvar(token(node.name_loc))),
|
790
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
791
|
+
visit(node.value)
|
792
|
+
)
|
793
|
+
end
|
722
794
|
|
723
795
|
# $foo ||= bar
|
724
796
|
# ^^^^^^^^^^^^
|
725
|
-
|
797
|
+
def visit_global_variable_or_write_node(node)
|
798
|
+
builder.op_assign(
|
799
|
+
builder.assignable(builder.gvar(token(node.name_loc))),
|
800
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
801
|
+
visit(node.value)
|
802
|
+
)
|
803
|
+
end
|
726
804
|
|
727
805
|
# $foo, = bar
|
728
806
|
# ^^^^
|
@@ -857,18 +935,46 @@ module Prism
|
|
857
935
|
visit_all(arguments),
|
858
936
|
token(node.closing_loc)
|
859
937
|
),
|
860
|
-
[node.
|
938
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
861
939
|
visit(node.value)
|
862
940
|
)
|
863
941
|
end
|
864
942
|
|
865
943
|
# foo[bar] &&= baz
|
866
944
|
# ^^^^^^^^^^^^^^^^
|
867
|
-
|
945
|
+
def visit_index_and_write_node(node)
|
946
|
+
arguments = node.arguments&.arguments || []
|
947
|
+
arguments << node.block if node.block
|
948
|
+
|
949
|
+
builder.op_assign(
|
950
|
+
builder.index(
|
951
|
+
visit(node.receiver),
|
952
|
+
token(node.opening_loc),
|
953
|
+
visit_all(arguments),
|
954
|
+
token(node.closing_loc)
|
955
|
+
),
|
956
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
957
|
+
visit(node.value)
|
958
|
+
)
|
959
|
+
end
|
868
960
|
|
869
961
|
# foo[bar] ||= baz
|
870
962
|
# ^^^^^^^^^^^^^^^^
|
871
|
-
|
963
|
+
def visit_index_or_write_node(node)
|
964
|
+
arguments = node.arguments&.arguments || []
|
965
|
+
arguments << node.block if node.block
|
966
|
+
|
967
|
+
builder.op_assign(
|
968
|
+
builder.index(
|
969
|
+
visit(node.receiver),
|
970
|
+
token(node.opening_loc),
|
971
|
+
visit_all(arguments),
|
972
|
+
token(node.closing_loc)
|
973
|
+
),
|
974
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
975
|
+
visit(node.value)
|
976
|
+
)
|
977
|
+
end
|
872
978
|
|
873
979
|
# foo[bar], = 1
|
874
980
|
# ^^^^^^^^
|
@@ -902,18 +1008,30 @@ module Prism
|
|
902
1008
|
def visit_instance_variable_operator_write_node(node)
|
903
1009
|
builder.op_assign(
|
904
1010
|
builder.assignable(builder.ivar(token(node.name_loc))),
|
905
|
-
[node.
|
1011
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
906
1012
|
visit(node.value)
|
907
1013
|
)
|
908
1014
|
end
|
909
1015
|
|
910
1016
|
# @foo &&= bar
|
911
1017
|
# ^^^^^^^^^^^^
|
912
|
-
|
1018
|
+
def visit_instance_variable_and_write_node(node)
|
1019
|
+
builder.op_assign(
|
1020
|
+
builder.assignable(builder.ivar(token(node.name_loc))),
|
1021
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
1022
|
+
visit(node.value)
|
1023
|
+
)
|
1024
|
+
end
|
913
1025
|
|
914
1026
|
# @foo ||= bar
|
915
1027
|
# ^^^^^^^^^^^^
|
916
|
-
|
1028
|
+
def visit_instance_variable_or_write_node(node)
|
1029
|
+
builder.op_assign(
|
1030
|
+
builder.assignable(builder.ivar(token(node.name_loc))),
|
1031
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
1032
|
+
visit(node.value)
|
1033
|
+
)
|
1034
|
+
end
|
917
1035
|
|
918
1036
|
# @foo, = bar
|
919
1037
|
# ^^^^
|
@@ -1108,18 +1226,30 @@ module Prism
|
|
1108
1226
|
def visit_local_variable_operator_write_node(node)
|
1109
1227
|
builder.op_assign(
|
1110
1228
|
builder.assignable(builder.ident(token(node.name_loc))),
|
1111
|
-
[node.
|
1229
|
+
[node.binary_operator_loc.slice.chomp("="), srange(node.binary_operator_loc)],
|
1112
1230
|
visit(node.value)
|
1113
1231
|
)
|
1114
1232
|
end
|
1115
1233
|
|
1116
1234
|
# foo &&= bar
|
1117
1235
|
# ^^^^^^^^^^^
|
1118
|
-
|
1236
|
+
def visit_local_variable_and_write_node(node)
|
1237
|
+
builder.op_assign(
|
1238
|
+
builder.assignable(builder.ident(token(node.name_loc))),
|
1239
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
1240
|
+
visit(node.value)
|
1241
|
+
)
|
1242
|
+
end
|
1119
1243
|
|
1120
1244
|
# foo ||= bar
|
1121
1245
|
# ^^^^^^^^^^^
|
1122
|
-
|
1246
|
+
def visit_local_variable_or_write_node(node)
|
1247
|
+
builder.op_assign(
|
1248
|
+
builder.assignable(builder.ident(token(node.name_loc))),
|
1249
|
+
[node.operator_loc.slice.chomp("="), srange(node.operator_loc)],
|
1250
|
+
visit(node.value)
|
1251
|
+
)
|
1252
|
+
end
|
1123
1253
|
|
1124
1254
|
# foo, = bar
|
1125
1255
|
# ^^^
|
@@ -46,7 +46,7 @@ module Prism
|
|
46
46
|
source = source_buffer.source
|
47
47
|
|
48
48
|
offset_cache = build_offset_cache(source)
|
49
|
-
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version)), offset_cache)
|
49
|
+
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]]), offset_cache)
|
50
50
|
|
51
51
|
build_ast(result.value, offset_cache)
|
52
52
|
ensure
|
@@ -59,7 +59,7 @@ module Prism
|
|
59
59
|
source = source_buffer.source
|
60
60
|
|
61
61
|
offset_cache = build_offset_cache(source)
|
62
|
-
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version)), offset_cache)
|
62
|
+
result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]]), offset_cache)
|
63
63
|
|
64
64
|
[
|
65
65
|
build_ast(result.value, offset_cache),
|
@@ -78,7 +78,7 @@ module Prism
|
|
78
78
|
offset_cache = build_offset_cache(source)
|
79
79
|
result =
|
80
80
|
begin
|
81
|
-
unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version)), offset_cache)
|
81
|
+
unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]]), offset_cache)
|
82
82
|
rescue ::Parser::SyntaxError
|
83
83
|
raise if !recover
|
84
84
|
end
|
@@ -149,17 +149,17 @@ module Prism
|
|
149
149
|
Diagnostic.new(:error, :endless_setter, {}, diagnostic_location, [])
|
150
150
|
when :embdoc_term
|
151
151
|
Diagnostic.new(:error, :embedded_document, {}, diagnostic_location, [])
|
152
|
-
when :incomplete_variable_class, :
|
152
|
+
when :incomplete_variable_class, :incomplete_variable_class_3_3
|
153
153
|
location = location.copy(length: location.length + 1)
|
154
154
|
diagnostic_location = build_range(location, offset_cache)
|
155
155
|
|
156
156
|
Diagnostic.new(:error, :cvar_name, { name: location.slice }, diagnostic_location, [])
|
157
|
-
when :incomplete_variable_instance, :
|
157
|
+
when :incomplete_variable_instance, :incomplete_variable_instance_3_3
|
158
158
|
location = location.copy(length: location.length + 1)
|
159
159
|
diagnostic_location = build_range(location, offset_cache)
|
160
160
|
|
161
161
|
Diagnostic.new(:error, :ivar_name, { name: location.slice }, diagnostic_location, [])
|
162
|
-
when :invalid_variable_global, :
|
162
|
+
when :invalid_variable_global, :invalid_variable_global_3_3
|
163
163
|
Diagnostic.new(:error, :gvar_name, { name: location.slice }, diagnostic_location, [])
|
164
164
|
when :module_in_method
|
165
165
|
Diagnostic.new(:error, :module_in_def, {}, diagnostic_location, [])
|
@@ -284,7 +284,7 @@ module Prism
|
|
284
284
|
def convert_for_prism(version)
|
285
285
|
case version
|
286
286
|
when 33
|
287
|
-
"3.3.
|
287
|
+
"3.3.1"
|
288
288
|
when 34
|
289
289
|
"3.4.0"
|
290
290
|
else
|