prism 0.27.0 → 0.29.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -1
  3. data/config.yml +68 -44
  4. data/docs/configuration.md +1 -0
  5. data/ext/prism/api_node.c +854 -847
  6. data/ext/prism/extconf.rb +27 -23
  7. data/ext/prism/extension.c +5 -3
  8. data/ext/prism/extension.h +1 -1
  9. data/include/prism/ast.h +70 -48
  10. data/include/prism/diagnostic.h +23 -6
  11. data/include/prism/options.h +2 -2
  12. data/include/prism/parser.h +10 -0
  13. data/include/prism/static_literals.h +8 -6
  14. data/include/prism/version.h +2 -2
  15. data/lib/prism/desugar_compiler.rb +4 -4
  16. data/lib/prism/dot_visitor.rb +54 -38
  17. data/lib/prism/dsl.rb +24 -24
  18. data/lib/prism/ffi.rb +4 -4
  19. data/lib/prism/inspect_visitor.rb +2156 -0
  20. data/lib/prism/lex_compat.rb +1 -1
  21. data/lib/prism/mutation_compiler.rb +2 -2
  22. data/lib/prism/node.rb +737 -1863
  23. data/lib/prism/node_ext.rb +176 -5
  24. data/lib/prism/parse_result/comments.rb +1 -1
  25. data/lib/prism/parse_result/newlines.rb +1 -1
  26. data/lib/prism/parse_result.rb +78 -0
  27. data/lib/prism/pattern.rb +12 -6
  28. data/lib/prism/polyfill/byteindex.rb +13 -0
  29. data/lib/prism/polyfill/unpack1.rb +14 -0
  30. data/lib/prism/reflection.rb +20 -20
  31. data/lib/prism/serialize.rb +32 -15
  32. data/lib/prism/translation/parser/compiler.rb +156 -26
  33. data/lib/prism/translation/parser.rb +7 -7
  34. data/lib/prism/translation/ripper.rb +29 -25
  35. data/lib/prism/translation/ruby_parser.rb +13 -13
  36. data/lib/prism.rb +2 -1
  37. data/prism.gemspec +37 -38
  38. data/rbi/prism/compiler.rbi +3 -5
  39. data/rbi/prism/inspect_visitor.rbi +12 -0
  40. data/rbi/prism/node.rbi +405 -370
  41. data/rbi/prism/node_ext.rbi +5 -0
  42. data/rbi/prism/parse_result.rbi +23 -0
  43. data/rbi/prism/translation/ripper.rbi +1 -11
  44. data/sig/prism/dsl.rbs +12 -12
  45. data/sig/prism/inspect_visitor.rbs +22 -0
  46. data/sig/prism/lex_compat.rbs +10 -0
  47. data/sig/prism/node.rbs +108 -91
  48. data/sig/prism/node_ext.rbs +4 -0
  49. data/sig/prism/parse_result.rbs +12 -0
  50. data/src/diagnostic.c +66 -33
  51. data/src/node.c +89 -64
  52. data/src/options.c +2 -2
  53. data/src/prettyprint.c +109 -66
  54. data/src/prism.c +862 -317
  55. data/src/serialize.c +21 -18
  56. data/src/static_literals.c +120 -34
  57. data/src/token_type.c +6 -6
  58. metadata +8 -9
  59. data/lib/prism/node_inspector.rb +0 -68
  60. data/lib/prism/polyfill/string.rb +0 -12
  61. data/rbi/prism/desugar_compiler.rbi +0 -5
  62. data/rbi/prism/mutation_compiler.rbi +0 -5
  63. data/rbi/prism/translation/parser/compiler.rbi +0 -13
  64. data/rbi/prism/translation/ripper/ripper_compiler.rbi +0 -5
  65. data/rbi/prism/translation/ruby_parser.rbi +0 -11
data/sig/prism/node.rbs CHANGED
@@ -16,9 +16,13 @@ module Prism
16
16
 
17
17
  def start_offset: () -> Integer
18
18
  def end_offset: () -> Integer
19
+ def source_lines: () -> Array[String]
20
+ alias script_lines source_lines
19
21
  def slice: () -> String
22
+ def slice_lines: () -> String
20
23
  def pretty_print: (untyped q) -> untyped
21
24
  def to_dot: () -> String
25
+ def tunnel: (Integer line, Integer column) -> Array[Prism::node]
22
26
  end
23
27
 
24
28
  type node_singleton = singleton(Node) & _NodeSingleton
@@ -31,7 +35,7 @@ module Prism
31
35
  def compact_child_nodes: () -> Array[Prism::node]
32
36
  def comment_targets: () -> Array[Prism::node | Location]
33
37
  def fields: () -> Array[Prism::Reflection::Field]
34
- def inspect: (?untyped) -> String
38
+ def inspect: () -> String
35
39
  def type: () -> Symbol
36
40
  end
37
41
 
@@ -125,12 +129,13 @@ module Prism
125
129
  class ArgumentsNode < Node
126
130
  include _Node
127
131
 
128
- private attr_reader flags: Integer
132
+ attr_reader flags: Integer
129
133
  attr_reader arguments: Array[Prism::node]
130
134
 
131
135
  def initialize: (Source source, Integer flags, Array[Prism::node] arguments, Location location) -> void
132
136
  def copy: (?flags: Integer, ?arguments: Array[Prism::node], ?location: Location) -> ArgumentsNode
133
137
  def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, arguments: Array[Prism::node], location: Location }
138
+ def contains_keywords?: () -> bool
134
139
  def contains_keyword_splat?: () -> bool
135
140
  def type: () -> :arguments_node
136
141
  | ...
@@ -144,7 +149,7 @@ module Prism
144
149
  class ArrayNode < Node
145
150
  include _Node
146
151
 
147
- private attr_reader flags: Integer
152
+ attr_reader flags: Integer
148
153
  attr_reader elements: Array[Prism::node]
149
154
  attr_reader opening_loc: Location?
150
155
  attr_reader closing_loc: Location?
@@ -304,7 +309,7 @@ module Prism
304
309
  class BlockLocalVariableNode < Node
305
310
  include _Node
306
311
 
307
- private attr_reader flags: Integer
312
+ attr_reader flags: Integer
308
313
  attr_reader name: Symbol
309
314
 
310
315
  def initialize: (Source source, Integer flags, Symbol name, Location location) -> void
@@ -347,7 +352,7 @@ module Prism
347
352
  class BlockParameterNode < Node
348
353
  include _Node
349
354
 
350
- private attr_reader flags: Integer
355
+ attr_reader flags: Integer
351
356
  attr_reader name: Symbol?
352
357
  attr_reader name_loc: Location?
353
358
  attr_reader operator_loc: Location
@@ -414,7 +419,7 @@ module Prism
414
419
  class CallAndWriteNode < Node
415
420
  include _Node
416
421
 
417
- private attr_reader flags: Integer
422
+ attr_reader flags: Integer
418
423
  attr_reader receiver: Prism::node?
419
424
  attr_reader call_operator_loc: Location?
420
425
  attr_reader message_loc: Location?
@@ -460,7 +465,7 @@ module Prism
460
465
  class CallNode < Node
461
466
  include _Node
462
467
 
463
- private attr_reader flags: Integer
468
+ attr_reader flags: Integer
464
469
  attr_reader receiver: Prism::node?
465
470
  attr_reader call_operator_loc: Location?
466
471
  attr_reader name: Symbol
@@ -493,19 +498,19 @@ module Prism
493
498
  class CallOperatorWriteNode < Node
494
499
  include _Node
495
500
 
496
- private attr_reader flags: Integer
501
+ attr_reader flags: Integer
497
502
  attr_reader receiver: Prism::node?
498
503
  attr_reader call_operator_loc: Location?
499
504
  attr_reader message_loc: Location?
500
505
  attr_reader read_name: Symbol
501
506
  attr_reader write_name: Symbol
502
- attr_reader operator: Symbol
503
- attr_reader operator_loc: Location
507
+ attr_reader binary_operator: Symbol
508
+ attr_reader binary_operator_loc: Location
504
509
  attr_reader value: Prism::node
505
510
 
506
- def initialize: (Source source, Integer flags, Prism::node? receiver, Location? call_operator_loc, Location? message_loc, Symbol read_name, Symbol write_name, Symbol operator, Location operator_loc, Prism::node value, Location location) -> void
507
- def copy: (?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?message_loc: Location?, ?read_name: Symbol, ?write_name: Symbol, ?operator: Symbol, ?operator_loc: Location, ?value: Prism::node, ?location: Location) -> CallOperatorWriteNode
508
- def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, receiver: Prism::node?, call_operator_loc: Location?, message_loc: Location?, read_name: Symbol, write_name: Symbol, operator: Symbol, operator_loc: Location, value: Prism::node, location: Location }
511
+ def initialize: (Source source, Integer flags, Prism::node? receiver, Location? call_operator_loc, Location? message_loc, Symbol read_name, Symbol write_name, Symbol binary_operator, Location binary_operator_loc, Prism::node value, Location location) -> void
512
+ def copy: (?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?message_loc: Location?, ?read_name: Symbol, ?write_name: Symbol, ?binary_operator: Symbol, ?binary_operator_loc: Location, ?value: Prism::node, ?location: Location) -> CallOperatorWriteNode
513
+ def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, receiver: Prism::node?, call_operator_loc: Location?, message_loc: Location?, read_name: Symbol, write_name: Symbol, binary_operator: Symbol, binary_operator_loc: Location, value: Prism::node, location: Location }
509
514
  def safe_navigation?: () -> bool
510
515
  def variable_call?: () -> bool
511
516
  def attribute_write?: () -> bool
@@ -524,7 +529,7 @@ module Prism
524
529
  class CallOrWriteNode < Node
525
530
  include _Node
526
531
 
527
- private attr_reader flags: Integer
532
+ attr_reader flags: Integer
528
533
  attr_reader receiver: Prism::node?
529
534
  attr_reader call_operator_loc: Location?
530
535
  attr_reader message_loc: Location?
@@ -563,7 +568,7 @@ module Prism
563
568
  class CallTargetNode < Node
564
569
  include _Node
565
570
 
566
- private attr_reader flags: Integer
571
+ attr_reader flags: Integer
567
572
  attr_reader receiver: Prism::node
568
573
  attr_reader call_operator_loc: Location
569
574
  attr_reader name: Symbol
@@ -710,13 +715,13 @@ module Prism
710
715
 
711
716
  attr_reader name: Symbol
712
717
  attr_reader name_loc: Location
713
- attr_reader operator_loc: Location
718
+ attr_reader binary_operator_loc: Location
714
719
  attr_reader value: Prism::node
715
- attr_reader operator: Symbol
720
+ attr_reader binary_operator: Symbol
716
721
 
717
- def initialize: (Source source, Symbol name, Location name_loc, Location operator_loc, Prism::node value, Symbol operator, Location location) -> void
718
- def copy: (?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node, ?operator: Symbol, ?location: Location) -> ClassVariableOperatorWriteNode
719
- def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node, operator: Symbol, location: Location }
722
+ def initialize: (Source source, Symbol name, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
723
+ def copy: (?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> ClassVariableOperatorWriteNode
724
+ def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
720
725
  def type: () -> :class_variable_operator_write_node
721
726
  | ...
722
727
  def self.type: () -> :class_variable_operator_write_node
@@ -828,13 +833,13 @@ module Prism
828
833
 
829
834
  attr_reader name: Symbol
830
835
  attr_reader name_loc: Location
831
- attr_reader operator_loc: Location
836
+ attr_reader binary_operator_loc: Location
832
837
  attr_reader value: Prism::node
833
- attr_reader operator: Symbol
838
+ attr_reader binary_operator: Symbol
834
839
 
835
- def initialize: (Source source, Symbol name, Location name_loc, Location operator_loc, Prism::node value, Symbol operator, Location location) -> void
836
- def copy: (?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node, ?operator: Symbol, ?location: Location) -> ConstantOperatorWriteNode
837
- def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node, operator: Symbol, location: Location }
840
+ def initialize: (Source source, Symbol name, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
841
+ def copy: (?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> ConstantOperatorWriteNode
842
+ def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
838
843
  def type: () -> :constant_operator_write_node
839
844
  | ...
840
845
  def self.type: () -> :constant_operator_write_node
@@ -889,12 +894,13 @@ module Prism
889
894
  include _Node
890
895
 
891
896
  attr_reader parent: Prism::node?
892
- attr_reader child: ConstantReadNode | MissingNode
897
+ attr_reader name: Symbol?
893
898
  attr_reader delimiter_loc: Location
899
+ attr_reader name_loc: Location
894
900
 
895
- def initialize: (Source source, Prism::node? parent, ConstantReadNode | MissingNode child, Location delimiter_loc, Location location) -> void
896
- def copy: (?parent: Prism::node?, ?child: ConstantReadNode | MissingNode, ?delimiter_loc: Location, ?location: Location) -> ConstantPathNode
897
- def deconstruct_keys: (Array[Symbol] keys) -> { parent: Prism::node?, child: ConstantReadNode | MissingNode, delimiter_loc: Location, location: Location }
901
+ def initialize: (Source source, Prism::node? parent, Symbol? name, Location delimiter_loc, Location name_loc, Location location) -> void
902
+ def copy: (?parent: Prism::node?, ?name: Symbol?, ?delimiter_loc: Location, ?name_loc: Location, ?location: Location) -> ConstantPathNode
903
+ def deconstruct_keys: (Array[Symbol] keys) -> { parent: Prism::node?, name: Symbol?, delimiter_loc: Location, name_loc: Location, location: Location }
898
904
  def delimiter: () -> String
899
905
  def type: () -> :constant_path_node
900
906
  | ...
@@ -909,13 +915,13 @@ module Prism
909
915
  include _Node
910
916
 
911
917
  attr_reader target: ConstantPathNode
912
- attr_reader operator_loc: Location
918
+ attr_reader binary_operator_loc: Location
913
919
  attr_reader value: Prism::node
914
- attr_reader operator: Symbol
920
+ attr_reader binary_operator: Symbol
915
921
 
916
- def initialize: (Source source, ConstantPathNode target, Location operator_loc, Prism::node value, Symbol operator, Location location) -> void
917
- def copy: (?target: ConstantPathNode, ?operator_loc: Location, ?value: Prism::node, ?operator: Symbol, ?location: Location) -> ConstantPathOperatorWriteNode
918
- def deconstruct_keys: (Array[Symbol] keys) -> { target: ConstantPathNode, operator_loc: Location, value: Prism::node, operator: Symbol, location: Location }
922
+ def initialize: (Source source, ConstantPathNode target, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
923
+ def copy: (?target: ConstantPathNode, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> ConstantPathOperatorWriteNode
924
+ def deconstruct_keys: (Array[Symbol] keys) -> { target: ConstantPathNode, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
919
925
  def type: () -> :constant_path_operator_write_node
920
926
  | ...
921
927
  def self.type: () -> :constant_path_operator_write_node
@@ -949,12 +955,13 @@ module Prism
949
955
  include _Node
950
956
 
951
957
  attr_reader parent: Prism::node?
952
- attr_reader child: ConstantReadNode | MissingNode
958
+ attr_reader name: Symbol?
953
959
  attr_reader delimiter_loc: Location
960
+ attr_reader name_loc: Location
954
961
 
955
- def initialize: (Source source, Prism::node? parent, ConstantReadNode | MissingNode child, Location delimiter_loc, Location location) -> void
956
- def copy: (?parent: Prism::node?, ?child: ConstantReadNode | MissingNode, ?delimiter_loc: Location, ?location: Location) -> ConstantPathTargetNode
957
- def deconstruct_keys: (Array[Symbol] keys) -> { parent: Prism::node?, child: ConstantReadNode | MissingNode, delimiter_loc: Location, location: Location }
962
+ def initialize: (Source source, Prism::node? parent, Symbol? name, Location delimiter_loc, Location name_loc, Location location) -> void
963
+ def copy: (?parent: Prism::node?, ?name: Symbol?, ?delimiter_loc: Location, ?name_loc: Location, ?location: Location) -> ConstantPathTargetNode
964
+ def deconstruct_keys: (Array[Symbol] keys) -> { parent: Prism::node?, name: Symbol?, delimiter_loc: Location, name_loc: Location, location: Location }
958
965
  def delimiter: () -> String
959
966
  def type: () -> :constant_path_target_node
960
967
  | ...
@@ -1239,7 +1246,7 @@ module Prism
1239
1246
  class FlipFlopNode < Node
1240
1247
  include _Node
1241
1248
 
1242
- private attr_reader flags: Integer
1249
+ attr_reader flags: Integer
1243
1250
  attr_reader left: Prism::node?
1244
1251
  attr_reader right: Prism::node?
1245
1252
  attr_reader operator_loc: Location
@@ -1380,13 +1387,13 @@ module Prism
1380
1387
 
1381
1388
  attr_reader name: Symbol
1382
1389
  attr_reader name_loc: Location
1383
- attr_reader operator_loc: Location
1390
+ attr_reader binary_operator_loc: Location
1384
1391
  attr_reader value: Prism::node
1385
- attr_reader operator: Symbol
1392
+ attr_reader binary_operator: Symbol
1386
1393
 
1387
- def initialize: (Source source, Symbol name, Location name_loc, Location operator_loc, Prism::node value, Symbol operator, Location location) -> void
1388
- def copy: (?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node, ?operator: Symbol, ?location: Location) -> GlobalVariableOperatorWriteNode
1389
- def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node, operator: Symbol, location: Location }
1394
+ def initialize: (Source source, Symbol name, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
1395
+ def copy: (?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> GlobalVariableOperatorWriteNode
1396
+ def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
1390
1397
  def type: () -> :global_variable_operator_write_node
1391
1398
  | ...
1392
1399
  def self.type: () -> :global_variable_operator_write_node
@@ -1640,7 +1647,7 @@ module Prism
1640
1647
  class IndexAndWriteNode < Node
1641
1648
  include _Node
1642
1649
 
1643
- private attr_reader flags: Integer
1650
+ attr_reader flags: Integer
1644
1651
  attr_reader receiver: Prism::node?
1645
1652
  attr_reader call_operator_loc: Location?
1646
1653
  attr_reader opening_loc: Location
@@ -1673,20 +1680,20 @@ module Prism
1673
1680
  class IndexOperatorWriteNode < Node
1674
1681
  include _Node
1675
1682
 
1676
- private attr_reader flags: Integer
1683
+ attr_reader flags: Integer
1677
1684
  attr_reader receiver: Prism::node?
1678
1685
  attr_reader call_operator_loc: Location?
1679
1686
  attr_reader opening_loc: Location
1680
1687
  attr_reader arguments: ArgumentsNode?
1681
1688
  attr_reader closing_loc: Location
1682
1689
  attr_reader block: Prism::node?
1683
- attr_reader operator: Symbol
1684
- attr_reader operator_loc: Location
1690
+ attr_reader binary_operator: Symbol
1691
+ attr_reader binary_operator_loc: Location
1685
1692
  attr_reader value: Prism::node
1686
1693
 
1687
- def initialize: (Source source, Integer flags, Prism::node? receiver, Location? call_operator_loc, Location opening_loc, ArgumentsNode? arguments, Location closing_loc, Prism::node? block, Symbol operator, Location operator_loc, Prism::node value, Location location) -> void
1688
- def copy: (?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?opening_loc: Location, ?arguments: ArgumentsNode?, ?closing_loc: Location, ?block: Prism::node?, ?operator: Symbol, ?operator_loc: Location, ?value: Prism::node, ?location: Location) -> IndexOperatorWriteNode
1689
- def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, receiver: Prism::node?, call_operator_loc: Location?, opening_loc: Location, arguments: ArgumentsNode?, closing_loc: Location, block: Prism::node?, operator: Symbol, operator_loc: Location, value: Prism::node, location: Location }
1694
+ def initialize: (Source source, Integer flags, Prism::node? receiver, Location? call_operator_loc, Location opening_loc, ArgumentsNode? arguments, Location closing_loc, Prism::node? block, Symbol binary_operator, Location binary_operator_loc, Prism::node value, Location location) -> void
1695
+ def copy: (?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?opening_loc: Location, ?arguments: ArgumentsNode?, ?closing_loc: Location, ?block: Prism::node?, ?binary_operator: Symbol, ?binary_operator_loc: Location, ?value: Prism::node, ?location: Location) -> IndexOperatorWriteNode
1696
+ def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, receiver: Prism::node?, call_operator_loc: Location?, opening_loc: Location, arguments: ArgumentsNode?, closing_loc: Location, block: Prism::node?, binary_operator: Symbol, binary_operator_loc: Location, value: Prism::node, location: Location }
1690
1697
  def safe_navigation?: () -> bool
1691
1698
  def variable_call?: () -> bool
1692
1699
  def attribute_write?: () -> bool
@@ -1706,7 +1713,7 @@ module Prism
1706
1713
  class IndexOrWriteNode < Node
1707
1714
  include _Node
1708
1715
 
1709
- private attr_reader flags: Integer
1716
+ attr_reader flags: Integer
1710
1717
  attr_reader receiver: Prism::node?
1711
1718
  attr_reader call_operator_loc: Location?
1712
1719
  attr_reader opening_loc: Location
@@ -1747,7 +1754,7 @@ module Prism
1747
1754
  class IndexTargetNode < Node
1748
1755
  include _Node
1749
1756
 
1750
- private attr_reader flags: Integer
1757
+ attr_reader flags: Integer
1751
1758
  attr_reader receiver: Prism::node
1752
1759
  attr_reader opening_loc: Location
1753
1760
  attr_reader arguments: ArgumentsNode?
@@ -1798,13 +1805,13 @@ module Prism
1798
1805
 
1799
1806
  attr_reader name: Symbol
1800
1807
  attr_reader name_loc: Location
1801
- attr_reader operator_loc: Location
1808
+ attr_reader binary_operator_loc: Location
1802
1809
  attr_reader value: Prism::node
1803
- attr_reader operator: Symbol
1810
+ attr_reader binary_operator: Symbol
1804
1811
 
1805
- def initialize: (Source source, Symbol name, Location name_loc, Location operator_loc, Prism::node value, Symbol operator, Location location) -> void
1806
- def copy: (?name: Symbol, ?name_loc: Location, ?operator_loc: Location, ?value: Prism::node, ?operator: Symbol, ?location: Location) -> InstanceVariableOperatorWriteNode
1807
- def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, operator_loc: Location, value: Prism::node, operator: Symbol, location: Location }
1812
+ def initialize: (Source source, Symbol name, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol binary_operator, Location location) -> void
1813
+ def copy: (?name: Symbol, ?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?binary_operator: Symbol, ?location: Location) -> InstanceVariableOperatorWriteNode
1814
+ def deconstruct_keys: (Array[Symbol] keys) -> { name: Symbol, name_loc: Location, binary_operator_loc: Location, value: Prism::node, binary_operator: Symbol, location: Location }
1808
1815
  def type: () -> :instance_variable_operator_write_node
1809
1816
  | ...
1810
1817
  def self.type: () -> :instance_variable_operator_write_node
@@ -1893,7 +1900,7 @@ module Prism
1893
1900
  class IntegerNode < Node
1894
1901
  include _Node
1895
1902
 
1896
- private attr_reader flags: Integer
1903
+ attr_reader flags: Integer
1897
1904
  attr_reader value: Integer
1898
1905
 
1899
1906
  def initialize: (Source source, Integer flags, Integer value, Location location) -> void
@@ -1915,7 +1922,7 @@ module Prism
1915
1922
  class InterpolatedMatchLastLineNode < Node
1916
1923
  include _Node
1917
1924
 
1918
- private attr_reader flags: Integer
1925
+ attr_reader flags: Integer
1919
1926
  attr_reader opening_loc: Location
1920
1927
  attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode]
1921
1928
  attr_reader closing_loc: Location
@@ -1948,7 +1955,7 @@ module Prism
1948
1955
  class InterpolatedRegularExpressionNode < Node
1949
1956
  include _Node
1950
1957
 
1951
- private attr_reader flags: Integer
1958
+ attr_reader flags: Integer
1952
1959
  attr_reader opening_loc: Location
1953
1960
  attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode]
1954
1961
  attr_reader closing_loc: Location
@@ -1981,7 +1988,7 @@ module Prism
1981
1988
  class InterpolatedStringNode < Node
1982
1989
  include _Node
1983
1990
 
1984
- private attr_reader flags: Integer
1991
+ attr_reader flags: Integer
1985
1992
  attr_reader opening_loc: Location?
1986
1993
  attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode]
1987
1994
  attr_reader closing_loc: Location?
@@ -2063,7 +2070,7 @@ module Prism
2063
2070
  class KeywordHashNode < Node
2064
2071
  include _Node
2065
2072
 
2066
- private attr_reader flags: Integer
2073
+ attr_reader flags: Integer
2067
2074
  attr_reader elements: Array[AssocNode | AssocSplatNode]
2068
2075
 
2069
2076
  def initialize: (Source source, Integer flags, Array[AssocNode | AssocSplatNode] elements, Location location) -> void
@@ -2083,7 +2090,7 @@ module Prism
2083
2090
  class KeywordRestParameterNode < Node
2084
2091
  include _Node
2085
2092
 
2086
- private attr_reader flags: Integer
2093
+ attr_reader flags: Integer
2087
2094
  attr_reader name: Symbol?
2088
2095
  attr_reader name_loc: Location?
2089
2096
  attr_reader operator_loc: Location
@@ -2153,15 +2160,15 @@ module Prism
2153
2160
  include _Node
2154
2161
 
2155
2162
  attr_reader name_loc: Location
2156
- attr_reader operator_loc: Location
2163
+ attr_reader binary_operator_loc: Location
2157
2164
  attr_reader value: Prism::node
2158
2165
  attr_reader name: Symbol
2159
- attr_reader operator: Symbol
2166
+ attr_reader binary_operator: Symbol
2160
2167
  attr_reader depth: Integer
2161
2168
 
2162
- def initialize: (Source source, Location name_loc, Location operator_loc, Prism::node value, Symbol name, Symbol operator, Integer depth, Location location) -> void
2163
- def copy: (?name_loc: Location, ?operator_loc: Location, ?value: Prism::node, ?name: Symbol, ?operator: Symbol, ?depth: Integer, ?location: Location) -> LocalVariableOperatorWriteNode
2164
- def deconstruct_keys: (Array[Symbol] keys) -> { name_loc: Location, operator_loc: Location, value: Prism::node, name: Symbol, operator: Symbol, depth: Integer, location: Location }
2169
+ def initialize: (Source source, Location name_loc, Location binary_operator_loc, Prism::node value, Symbol name, Symbol binary_operator, Integer depth, Location location) -> void
2170
+ def copy: (?name_loc: Location, ?binary_operator_loc: Location, ?value: Prism::node, ?name: Symbol, ?binary_operator: Symbol, ?depth: Integer, ?location: Location) -> LocalVariableOperatorWriteNode
2171
+ def deconstruct_keys: (Array[Symbol] keys) -> { name_loc: Location, binary_operator_loc: Location, value: Prism::node, name: Symbol, binary_operator: Symbol, depth: Integer, location: Location }
2165
2172
  def type: () -> :local_variable_operator_write_node
2166
2173
  | ...
2167
2174
  def self.type: () -> :local_variable_operator_write_node
@@ -2254,7 +2261,7 @@ module Prism
2254
2261
  class MatchLastLineNode < Node
2255
2262
  include _Node
2256
2263
 
2257
- private attr_reader flags: Integer
2264
+ attr_reader flags: Integer
2258
2265
  attr_reader opening_loc: Location
2259
2266
  attr_reader content_loc: Location
2260
2267
  attr_reader closing_loc: Location
@@ -2524,7 +2531,7 @@ module Prism
2524
2531
  class OptionalKeywordParameterNode < Node
2525
2532
  include _Node
2526
2533
 
2527
- private attr_reader flags: Integer
2534
+ attr_reader flags: Integer
2528
2535
  attr_reader name: Symbol
2529
2536
  attr_reader name_loc: Location
2530
2537
  attr_reader value: Prism::node
@@ -2546,7 +2553,7 @@ module Prism
2546
2553
  class OptionalParameterNode < Node
2547
2554
  include _Node
2548
2555
 
2549
- private attr_reader flags: Integer
2556
+ attr_reader flags: Integer
2550
2557
  attr_reader name: Symbol
2551
2558
  attr_reader name_loc: Location
2552
2559
  attr_reader operator_loc: Location
@@ -2593,14 +2600,14 @@ module Prism
2593
2600
  attr_reader requireds: Array[RequiredParameterNode | MultiTargetNode]
2594
2601
  attr_reader optionals: Array[OptionalParameterNode]
2595
2602
  attr_reader rest: RestParameterNode | ImplicitRestNode | nil
2596
- attr_reader posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode]
2603
+ attr_reader posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode]
2597
2604
  attr_reader keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode]
2598
2605
  attr_reader keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil
2599
2606
  attr_reader block: BlockParameterNode?
2600
2607
 
2601
- def initialize: (Source source, Array[RequiredParameterNode | MultiTargetNode] requireds, Array[OptionalParameterNode] optionals, RestParameterNode | ImplicitRestNode | nil rest, Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode] posts, Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode] keywords, KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil keyword_rest, BlockParameterNode? block, Location location) -> void
2602
- def copy: (?requireds: Array[RequiredParameterNode | MultiTargetNode], ?optionals: Array[OptionalParameterNode], ?rest: RestParameterNode | ImplicitRestNode | nil, ?posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode], ?keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], ?keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, ?block: BlockParameterNode?, ?location: Location) -> ParametersNode
2603
- def deconstruct_keys: (Array[Symbol] keys) -> { requireds: Array[RequiredParameterNode | MultiTargetNode], optionals: Array[OptionalParameterNode], rest: RestParameterNode | ImplicitRestNode | nil, posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode], keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, block: BlockParameterNode?, location: Location }
2608
+ def initialize: (Source source, Array[RequiredParameterNode | MultiTargetNode] requireds, Array[OptionalParameterNode] optionals, RestParameterNode | ImplicitRestNode | nil rest, Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode] posts, Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode] keywords, KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil keyword_rest, BlockParameterNode? block, Location location) -> void
2609
+ def copy: (?requireds: Array[RequiredParameterNode | MultiTargetNode], ?optionals: Array[OptionalParameterNode], ?rest: RestParameterNode | ImplicitRestNode | nil, ?posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode], ?keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], ?keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, ?block: BlockParameterNode?, ?location: Location) -> ParametersNode
2610
+ def deconstruct_keys: (Array[Symbol] keys) -> { requireds: Array[RequiredParameterNode | MultiTargetNode], optionals: Array[OptionalParameterNode], rest: RestParameterNode | ImplicitRestNode | nil, posts: Array[RequiredParameterNode | MultiTargetNode | KeywordRestParameterNode | NoKeywordsParameterNode | ForwardingParameterNode], keywords: Array[RequiredKeywordParameterNode | OptionalKeywordParameterNode], keyword_rest: KeywordRestParameterNode | ForwardingParameterNode | NoKeywordsParameterNode | nil, block: BlockParameterNode?, location: Location }
2604
2611
  def type: () -> :parameters_node
2605
2612
  | ...
2606
2613
  def self.type: () -> :parameters_node
@@ -2740,7 +2747,7 @@ module Prism
2740
2747
  class RangeNode < Node
2741
2748
  include _Node
2742
2749
 
2743
- private attr_reader flags: Integer
2750
+ attr_reader flags: Integer
2744
2751
  attr_reader left: Prism::node?
2745
2752
  attr_reader right: Prism::node?
2746
2753
  attr_reader operator_loc: Location
@@ -2795,7 +2802,7 @@ module Prism
2795
2802
  class RegularExpressionNode < Node
2796
2803
  include _Node
2797
2804
 
2798
- private attr_reader flags: Integer
2805
+ attr_reader flags: Integer
2799
2806
  attr_reader opening_loc: Location
2800
2807
  attr_reader content_loc: Location
2801
2808
  attr_reader closing_loc: Location
@@ -2831,7 +2838,7 @@ module Prism
2831
2838
  class RequiredKeywordParameterNode < Node
2832
2839
  include _Node
2833
2840
 
2834
- private attr_reader flags: Integer
2841
+ attr_reader flags: Integer
2835
2842
  attr_reader name: Symbol
2836
2843
  attr_reader name_loc: Location
2837
2844
 
@@ -2852,7 +2859,7 @@ module Prism
2852
2859
  class RequiredParameterNode < Node
2853
2860
  include _Node
2854
2861
 
2855
- private attr_reader flags: Integer
2862
+ attr_reader flags: Integer
2856
2863
  attr_reader name: Symbol
2857
2864
 
2858
2865
  def initialize: (Source source, Integer flags, Symbol name, Location location) -> void
@@ -2921,7 +2928,7 @@ module Prism
2921
2928
  class RestParameterNode < Node
2922
2929
  include _Node
2923
2930
 
2924
- private attr_reader flags: Integer
2931
+ attr_reader flags: Integer
2925
2932
  attr_reader name: Symbol?
2926
2933
  attr_reader name_loc: Location?
2927
2934
  attr_reader operator_loc: Location
@@ -2959,12 +2966,14 @@ module Prism
2959
2966
  class ReturnNode < Node
2960
2967
  include _Node
2961
2968
 
2969
+ attr_reader flags: Integer
2962
2970
  attr_reader keyword_loc: Location
2963
2971
  attr_reader arguments: ArgumentsNode?
2964
2972
 
2965
- def initialize: (Source source, Location keyword_loc, ArgumentsNode? arguments, Location location) -> void
2966
- def copy: (?keyword_loc: Location, ?arguments: ArgumentsNode?, ?location: Location) -> ReturnNode
2967
- def deconstruct_keys: (Array[Symbol] keys) -> { keyword_loc: Location, arguments: ArgumentsNode?, location: Location }
2973
+ def initialize: (Source source, Integer flags, Location keyword_loc, ArgumentsNode? arguments, Location location) -> void
2974
+ def copy: (?flags: Integer, ?keyword_loc: Location, ?arguments: ArgumentsNode?, ?location: Location) -> ReturnNode
2975
+ def deconstruct_keys: (Array[Symbol] keys) -> { flags: Integer, keyword_loc: Location, arguments: ArgumentsNode?, location: Location }
2976
+ def redundant?: () -> bool
2968
2977
  def keyword: () -> String
2969
2978
  def type: () -> :return_node
2970
2979
  | ...
@@ -2995,7 +3004,7 @@ module Prism
2995
3004
  class ShareableConstantNode < Node
2996
3005
  include _Node
2997
3006
 
2998
- private attr_reader flags: Integer
3007
+ attr_reader flags: Integer
2999
3008
  attr_reader write: ConstantWriteNode | ConstantAndWriteNode | ConstantOrWriteNode | ConstantOperatorWriteNode | ConstantPathWriteNode | ConstantPathAndWriteNode | ConstantPathOrWriteNode | ConstantPathOperatorWriteNode
3000
3009
 
3001
3010
  def initialize: (Source source, Integer flags, ConstantWriteNode | ConstantAndWriteNode | ConstantOrWriteNode | ConstantOperatorWriteNode | ConstantPathWriteNode | ConstantPathAndWriteNode | ConstantPathOrWriteNode | ConstantPathOperatorWriteNode write, Location location) -> void
@@ -3057,7 +3066,7 @@ module Prism
3057
3066
  class SourceFileNode < Node
3058
3067
  include _Node
3059
3068
 
3060
- private attr_reader flags: Integer
3069
+ attr_reader flags: Integer
3061
3070
  attr_reader filepath: String
3062
3071
 
3063
3072
  def initialize: (Source source, Integer flags, String filepath, Location location) -> void
@@ -3137,7 +3146,7 @@ module Prism
3137
3146
  class StringNode < Node
3138
3147
  include _Node
3139
3148
 
3140
- private attr_reader flags: Integer
3149
+ attr_reader flags: Integer
3141
3150
  attr_reader opening_loc: Location?
3142
3151
  attr_reader content_loc: Location
3143
3152
  attr_reader closing_loc: Location?
@@ -3195,7 +3204,7 @@ module Prism
3195
3204
  class SymbolNode < Node
3196
3205
  include _Node
3197
3206
 
3198
- private attr_reader flags: Integer
3207
+ attr_reader flags: Integer
3199
3208
  attr_reader opening_loc: Location?
3200
3209
  attr_reader value_loc: Location?
3201
3210
  attr_reader closing_loc: Location?
@@ -3288,7 +3297,7 @@ module Prism
3288
3297
  class UntilNode < Node
3289
3298
  include _Node
3290
3299
 
3291
- private attr_reader flags: Integer
3300
+ attr_reader flags: Integer
3292
3301
  attr_reader keyword_loc: Location
3293
3302
  attr_reader closing_loc: Location?
3294
3303
  attr_reader predicate: Prism::node
@@ -3339,7 +3348,7 @@ module Prism
3339
3348
  class WhileNode < Node
3340
3349
  include _Node
3341
3350
 
3342
- private attr_reader flags: Integer
3351
+ attr_reader flags: Integer
3343
3352
  attr_reader keyword_loc: Location
3344
3353
  attr_reader closing_loc: Location?
3345
3354
  attr_reader predicate: Prism::node
@@ -3363,7 +3372,7 @@ module Prism
3363
3372
  class XStringNode < Node
3364
3373
  include _Node
3365
3374
 
3366
- private attr_reader flags: Integer
3375
+ attr_reader flags: Integer
3367
3376
  attr_reader opening_loc: Location
3368
3377
  attr_reader content_loc: Location
3369
3378
  attr_reader closing_loc: Location
@@ -3407,6 +3416,8 @@ module Prism
3407
3416
 
3408
3417
  # Flags for arguments nodes.
3409
3418
  module ArgumentsNodeFlags
3419
+ # if arguments contain keywords
3420
+ CONTAINS_KEYWORDS: Integer
3410
3421
  # if arguments contain keyword splat
3411
3422
  CONTAINS_KEYWORD_SPLAT: Integer
3412
3423
  end
@@ -3507,6 +3518,12 @@ module Prism
3507
3518
  FORCED_US_ASCII_ENCODING: Integer
3508
3519
  end
3509
3520
 
3521
+ # Flags for return nodes.
3522
+ module ReturnNodeFlags
3523
+ # a return statement that is redundant because it is the last statement in a method
3524
+ REDUNDANT: Integer
3525
+ end
3526
+
3510
3527
  # Flags for shareable constant nodes.
3511
3528
  module ShareableConstantNodeFlags
3512
3529
  # constant writes that should be modified with shareable constant value literal
@@ -75,4 +75,8 @@ module Prism
75
75
  class ParametersNode < Node
76
76
  def signature: () -> Array[[Symbol, Symbol] | [Symbol]]
77
77
  end
78
+
79
+ class CallNode < Node
80
+ def full_message_loc: () -> Location?
81
+ end
78
82
  end
@@ -6,9 +6,11 @@ module Prism
6
6
 
7
7
  def initialize: (String source, ?Integer start_line, ?Array[Integer] offsets) -> void
8
8
  def encoding: () -> Encoding
9
+ def lines: () -> Array[String]
9
10
  def slice: (Integer byte_offset, Integer length) -> String
10
11
  def line: (Integer byte_offset) -> Integer
11
12
  def line_start: (Integer byte_offset) -> Integer
13
+ def line_end: (Integer byte_offset) -> Integer
12
14
  def line_offset: (Integer byte_offset) -> Integer
13
15
  def column: (Integer byte_offset) -> Integer
14
16
  def character_offset: (Integer byte_offset) -> Integer
@@ -17,6 +19,13 @@ module Prism
17
19
  def code_units_column: (Integer byte_offset, Encoding encoding) -> Integer
18
20
  end
19
21
 
22
+ class ASCIISource < Source
23
+ def character_offset: (Integer byte_offset) -> Integer
24
+ def character_column: (Integer byte_offset) -> Integer
25
+ def code_units_offset: (Integer byte_offset, Encoding encoding) -> Integer
26
+ def code_units_column: (Integer byte_offset, Encoding encoding) -> Integer
27
+ end
28
+
20
29
  class Location
21
30
  attr_reader source: Source
22
31
  attr_reader start_offset: Integer
@@ -30,7 +39,9 @@ module Prism
30
39
  def comments: () -> Array[comment]
31
40
  def copy: (?source: Source, ?start_offset: Integer, ?length: Integer) -> Location
32
41
  def chop: () -> Location
42
+ def source_lines: () -> Array[String]
33
43
  def slice: () -> String
44
+ def slice_lines: () -> String
34
45
  def start_character_offset: () -> Integer
35
46
  def end_offset: () -> Integer
36
47
  def end_character_offset: () -> Integer
@@ -44,6 +55,7 @@ module Prism
44
55
  def deconstruct_keys: (Array[Symbol]? keys) -> Hash[Symbol, untyped]
45
56
  def pretty_print: (untyped q) -> untyped
46
57
  def join: (Location other) -> Location
58
+ def adjoin: (String string) -> Location
47
59
  end
48
60
 
49
61
  class Comment