prism 0.16.0 → 0.17.1

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.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -1
  3. data/Makefile +6 -0
  4. data/README.md +1 -1
  5. data/config.yml +50 -35
  6. data/docs/fuzzing.md +1 -1
  7. data/docs/releasing.md +4 -1
  8. data/docs/serialization.md +28 -29
  9. data/ext/prism/api_node.c +802 -770
  10. data/ext/prism/api_pack.c +20 -9
  11. data/ext/prism/extension.c +465 -160
  12. data/ext/prism/extension.h +1 -1
  13. data/include/prism/ast.h +3173 -763
  14. data/include/prism/defines.h +32 -9
  15. data/include/prism/diagnostic.h +36 -3
  16. data/include/prism/enc/pm_encoding.h +118 -28
  17. data/include/prism/node.h +38 -13
  18. data/include/prism/options.h +204 -0
  19. data/include/prism/pack.h +44 -33
  20. data/include/prism/parser.h +445 -200
  21. data/include/prism/prettyprint.h +12 -1
  22. data/include/prism/regexp.h +16 -2
  23. data/include/prism/util/pm_buffer.h +94 -16
  24. data/include/prism/util/pm_char.h +162 -48
  25. data/include/prism/util/pm_constant_pool.h +126 -32
  26. data/include/prism/util/pm_list.h +68 -38
  27. data/include/prism/util/pm_memchr.h +18 -3
  28. data/include/prism/util/pm_newline_list.h +70 -27
  29. data/include/prism/util/pm_state_stack.h +25 -7
  30. data/include/prism/util/pm_string.h +115 -27
  31. data/include/prism/util/pm_string_list.h +25 -6
  32. data/include/prism/util/pm_strncasecmp.h +32 -0
  33. data/include/prism/util/pm_strpbrk.h +31 -17
  34. data/include/prism/version.h +28 -3
  35. data/include/prism.h +224 -31
  36. data/lib/prism/compiler.rb +6 -3
  37. data/lib/prism/debug.rb +23 -7
  38. data/lib/prism/dispatcher.rb +33 -18
  39. data/lib/prism/dsl.rb +10 -5
  40. data/lib/prism/ffi.rb +132 -80
  41. data/lib/prism/lex_compat.rb +25 -15
  42. data/lib/prism/mutation_compiler.rb +10 -5
  43. data/lib/prism/node.rb +370 -135
  44. data/lib/prism/node_ext.rb +1 -1
  45. data/lib/prism/node_inspector.rb +1 -1
  46. data/lib/prism/pack.rb +79 -40
  47. data/lib/prism/parse_result/comments.rb +7 -2
  48. data/lib/prism/parse_result/newlines.rb +4 -0
  49. data/lib/prism/parse_result.rb +150 -30
  50. data/lib/prism/pattern.rb +11 -0
  51. data/lib/prism/ripper_compat.rb +28 -10
  52. data/lib/prism/serialize.rb +87 -55
  53. data/lib/prism/visitor.rb +10 -3
  54. data/lib/prism.rb +20 -2
  55. data/prism.gemspec +4 -2
  56. data/rbi/prism.rbi +5545 -5505
  57. data/rbi/prism_static.rbi +141 -131
  58. data/sig/prism.rbs +72 -43
  59. data/sig/prism_static.rbs +14 -1
  60. data/src/diagnostic.c +56 -53
  61. data/src/enc/pm_big5.c +1 -0
  62. data/src/enc/pm_euc_jp.c +1 -0
  63. data/src/enc/pm_gbk.c +1 -0
  64. data/src/enc/pm_shift_jis.c +1 -0
  65. data/src/enc/pm_tables.c +316 -80
  66. data/src/enc/pm_unicode.c +53 -8
  67. data/src/enc/pm_windows_31j.c +1 -0
  68. data/src/node.c +334 -321
  69. data/src/options.c +170 -0
  70. data/src/prettyprint.c +74 -47
  71. data/src/prism.c +1642 -856
  72. data/src/regexp.c +151 -95
  73. data/src/serialize.c +44 -20
  74. data/src/token_type.c +3 -1
  75. data/src/util/pm_buffer.c +45 -15
  76. data/src/util/pm_char.c +103 -57
  77. data/src/util/pm_constant_pool.c +51 -21
  78. data/src/util/pm_list.c +12 -4
  79. data/src/util/pm_memchr.c +5 -3
  80. data/src/util/pm_newline_list.c +20 -12
  81. data/src/util/pm_state_stack.c +9 -3
  82. data/src/util/pm_string.c +95 -85
  83. data/src/util/pm_string_list.c +14 -15
  84. data/src/util/pm_strncasecmp.c +10 -3
  85. data/src/util/pm_strpbrk.c +25 -19
  86. metadata +5 -3
  87. data/docs/prism.png +0 -0
data/rbi/prism_static.rbi CHANGED
@@ -1,182 +1,192 @@
1
- # typed: true
1
+ class Prism::ParseResult
2
+ sig { returns(Prism::ProgramNode) }
3
+ def value; end
2
4
 
3
- module Prism
4
- class ParseResult
5
- sig { returns(ProgramNode) }
6
- def value; end
5
+ sig { returns(T::Array[Prism::Comment]) }
6
+ def comments; end
7
7
 
8
- sig { returns(T::Array[Comment]) }
9
- def comments; end
8
+ sig { returns(T::Array[Prism::ParseError]) }
9
+ def errors; end
10
10
 
11
- sig { returns(T::Array[ParseError]) }
12
- def errors; end
11
+ sig { returns(T::Array[Prism::ParseWarning]) }
12
+ def warnings; end
13
13
 
14
- sig { returns(T::Array[ParseWarning]) }
15
- def warnings; end
14
+ sig { returns(Prism::Source) }
15
+ def source; end
16
+ end
16
17
 
17
- sig { returns(Source) }
18
- def source; end
19
- end
18
+ class Prism::ParseError
19
+ sig { returns(String) }
20
+ def message; end
20
21
 
21
- class ParseError
22
- sig { returns(String) }
23
- def message; end
22
+ sig { returns(Prism::Location) }
23
+ def location; end
24
+ end
24
25
 
25
- sig { returns(Location) }
26
- def location; end
27
- end
26
+ class Prism::ParseWarning
27
+ sig { returns(String) }
28
+ def message; end
28
29
 
29
- class ParseWarning
30
- sig { returns(String) }
31
- def message; end
30
+ sig { returns(Prism::Location) }
31
+ def location; end
32
+ end
32
33
 
33
- sig { returns(Location) }
34
- def location; end
35
- end
34
+ class Prism::Node
35
+ sig { returns(T::Array[T.nilable(Prism::Node)]) }
36
+ def child_nodes; end
36
37
 
37
- class Node
38
- sig { returns(T::Array[T.nilable(Node)]) }
39
- def child_nodes; end
38
+ sig { returns(Prism::Location) }
39
+ def location; end
40
40
 
41
- sig { returns(Location) }
42
- def location; end
41
+ sig { returns(String) }
42
+ def slice; end
43
+ end
43
44
 
44
- sig { returns(String) }
45
- def slice; end
46
- end
45
+ class Prism::Comment
46
+ sig { returns(Prism::Location) }
47
+ def location; end
47
48
 
48
- class Comment
49
- sig { returns(Location) }
50
- def location; end
51
- end
49
+ sig { returns(T::Boolean) }
50
+ def trailing?; end
51
+ end
52
52
 
53
- class Location
54
- sig { params(source: Source, start_offset: Integer, length: Integer).void }
55
- def initialize(source, start_offset, length); end
53
+ class Prism::InlineComment < Prism::Comment
54
+ sig { override.returns(T::Boolean) }
55
+ def trailing?; end
56
+ end
56
57
 
57
- sig { returns(String) }
58
- def slice; end
58
+ class Prism::EmbDocComment < Prism::Comment
59
+ end
59
60
 
60
- sig { returns(T::Array[Comment]) }
61
- def comments; end
61
+ class Prism::DATAComment < Prism::Comment
62
+ end
62
63
 
63
- sig { params(options: T.untyped).returns(Location) }
64
- def copy(**options); end
64
+ class Prism::Location
65
+ sig { params(source: Prism::Source, start_offset: Integer, length: Integer).void }
66
+ def initialize(source, start_offset, length); end
65
67
 
66
- sig { returns(Integer) }
67
- def start_offset; end
68
+ sig { returns(String) }
69
+ def slice; end
68
70
 
69
- sig { returns(Integer) }
70
- def end_offset; end
71
+ sig { returns(T::Array[Prism::Comment]) }
72
+ def comments; end
71
73
 
72
- sig { returns(Integer) }
73
- def start_line; end
74
+ sig { params(options: T.untyped).returns(Prism::Location) }
75
+ def copy(**options); end
74
76
 
75
- sig { returns(Integer) }
76
- def end_line; end
77
+ sig { returns(Integer) }
78
+ def start_offset; end
77
79
 
78
- sig { returns(Integer) }
79
- def start_column; end
80
+ sig { returns(Integer) }
81
+ def end_offset; end
80
82
 
81
- sig { returns(Integer) }
82
- def end_column; end
83
- end
83
+ sig { returns(Integer) }
84
+ def start_line; end
84
85
 
85
- class Source
86
- sig { params(source: String, offsets: T::Array[Integer]).void }
87
- def initialize(source, offsets); end
86
+ sig { returns(Integer) }
87
+ def end_line; end
88
88
 
89
- sig { params(offset: Integer, length: Integer).returns(String) }
90
- def slice(offset, length); end
89
+ sig { returns(Integer) }
90
+ def start_column; end
91
91
 
92
- sig { params(value: Integer).returns(Integer) }
93
- def line(value); end
92
+ sig { returns(Integer) }
93
+ def end_column; end
94
+ end
95
+
96
+ class Prism::Source
97
+ sig { params(source: String, start_line: Integer, offsets: T::Array[Integer]).void }
98
+ def initialize(source, start_line, offsets); end
94
99
 
95
- sig { params(value: Integer).returns(Integer) }
96
- def line_offset(value); end
100
+ sig { params(offset: Integer, length: Integer).returns(String) }
101
+ def slice(offset, length); end
97
102
 
98
- sig { params(value: Integer).returns(Integer) }
99
- def column(value); end
103
+ sig { params(value: Integer).returns(Integer) }
104
+ def line(value); end
100
105
 
101
- sig { returns(String) }
102
- def source; end
106
+ sig { params(value: Integer).returns(Integer) }
107
+ def line_offset(value); end
103
108
 
104
- sig { returns(T::Array[Integer]) }
105
- def offsets; end
106
- end
109
+ sig { params(value: Integer).returns(Integer) }
110
+ def column(value); end
107
111
 
108
- class Token
109
- sig { params(type: T.untyped, value: String, location: Location).void }
110
- def initialize(type, value, location); end
112
+ sig { returns(String) }
113
+ def source; end
111
114
 
112
- sig { params(keys: T.untyped).returns(T.untyped) }
113
- def deconstruct_keys(keys); end
115
+ sig { returns(T::Array[Integer]) }
116
+ def offsets; end
117
+ end
114
118
 
115
- sig { params(q: T.untyped).returns(T.untyped) }
116
- def pretty_print(q); end
119
+ class Prism::Token
120
+ sig { params(type: T.untyped, value: String, location: Prism::Location).void }
121
+ def initialize(type, value, location); end
117
122
 
118
- sig { params(other: T.untyped).returns(T::Boolean) }
119
- def ==(other); end
123
+ sig { params(keys: T.untyped).returns(T.untyped) }
124
+ def deconstruct_keys(keys); end
120
125
 
121
- sig { returns(T.untyped) }
122
- def type; end
126
+ sig { params(q: T.untyped).returns(T.untyped) }
127
+ def pretty_print(q); end
123
128
 
124
- sig { returns(String) }
125
- def value; end
129
+ sig { params(other: T.untyped).returns(T::Boolean) }
130
+ def ==(other); end
126
131
 
127
- sig { returns(Location) }
128
- def location; end
129
- end
132
+ sig { returns(T.untyped) }
133
+ def type; end
130
134
 
131
- class NodeInspector
132
- sig { params(prefix: String).void }
133
- def initialize(prefix); end
135
+ sig { returns(String) }
136
+ def value; end
134
137
 
135
- sig { returns(String) }
136
- def prefix; end
138
+ sig { returns(Prism::Location) }
139
+ def location; end
140
+ end
137
141
 
138
- sig { returns(String) }
139
- def output; end
142
+ class Prism::NodeInspector
143
+ sig { params(prefix: String).void }
144
+ def initialize(prefix); end
140
145
 
141
- # Appends a line to the output with the current prefix.
142
- sig { params(line: String).void }
143
- def <<(line); end
146
+ sig { returns(String) }
147
+ def prefix; end
144
148
 
145
- # This generates a string that is used as the header of the inspect output
146
- # for any given node.
147
- sig { params(node: Node).returns(String) }
148
- def header(node); end
149
+ sig { returns(String) }
150
+ def output; end
149
151
 
150
- # Generates a string that represents a list of nodes. It handles properly
151
- # using the box drawing characters to make the output look nice.
152
- sig { params(prefix: String, nodes: T::Array[Node]).returns(String) }
153
- def list(prefix, nodes); end
152
+ # Appends a line to the output with the current prefix.
153
+ sig { params(line: String).void }
154
+ def <<(line); end
154
155
 
155
- # Generates a string that represents a location field on a node.
156
- sig { params(value: Location).returns(String) }
157
- def location(value); end
156
+ # This generates a string that is used as the header of the inspect output
157
+ # for any given node.
158
+ sig { params(node: Prism::Node).returns(String) }
159
+ def header(node); end
158
160
 
159
- # Generates a string that represents a child node.
160
- sig { params(node: Node, append: String).returns(String) }
161
- def child_node(node, append); end
161
+ # Generates a string that represents a list of nodes. It handles properly
162
+ # using the box drawing characters to make the output look nice.
163
+ sig { params(prefix: String, nodes: T::Array[Prism::Node]).returns(String) }
164
+ def list(prefix, nodes); end
162
165
 
163
- # Returns a new inspector that can be used to inspect a child node.
164
- sig { params(append: String).returns(NodeInspector) }
165
- def child_inspector(append); end
166
+ # Generates a string that represents a location field on a node.
167
+ sig { params(value: Prism::Location).returns(String) }
168
+ def location(value); end
166
169
 
167
- # Returns the output as a string.
168
- sig { returns(String) }
169
- def to_str; end
170
- end
170
+ # Generates a string that represents a child node.
171
+ sig { params(node: Prism::Node, append: String).returns(String) }
172
+ def child_node(node, append); end
173
+
174
+ # Returns a new inspector that can be used to inspect a child node.
175
+ sig { params(append: String).returns(Prism::NodeInspector) }
176
+ def child_inspector(append); end
177
+
178
+ # Returns the output as a string.
179
+ sig { returns(String) }
180
+ def to_str; end
181
+ end
171
182
 
172
- class BasicVisitor
173
- sig { params(node: T.nilable(Node)).void }
174
- def visit(node); end
183
+ class Prism::BasicVisitor
184
+ sig { params(node: T.nilable(Prism::Node)).void }
185
+ def visit(node); end
175
186
 
176
- sig { params(nodes: T::Array[T.nilable(Node)]).void }
177
- def visit_all(nodes); end
187
+ sig { params(nodes: T::Array[T.nilable(Prism::Node)]).void }
188
+ def visit_all(nodes); end
178
189
 
179
- sig { params(node: Node).void }
180
- def visit_child_nodes(node); end
181
- end
190
+ sig { params(node: Prism::Node).void }
191
+ def visit_child_nodes(node); end
182
192
  end
data/sig/prism.rbs CHANGED
@@ -607,10 +607,10 @@ module Prism
607
607
  end
608
608
  # Represents the use of a case statement.
609
609
  #
610
- # case true
611
- # ^^^^^^^^^
612
- # when false
613
- # end
610
+ # case true
611
+ # when false
612
+ # end
613
+ # ^^^^^^^^^^
614
614
  class CaseNode < Node
615
615
  attr_reader predicate: Node?
616
616
  attr_reader conditions: Array[Node]
@@ -669,7 +669,7 @@ module Prism
669
669
  # Represents the use of the `&&=` operator for assignment to a class variable.
670
670
  #
671
671
  # @@target &&= value
672
- # ^^^^^^^^^^^^^^^^
672
+ # ^^^^^^^^^^^^^^^^^^
673
673
  class ClassVariableAndWriteNode < Node
674
674
  attr_reader name: Symbol
675
675
  attr_reader name_loc: Location
@@ -1268,13 +1268,13 @@ module Prism
1268
1268
  # Represents a find pattern in pattern matching.
1269
1269
  #
1270
1270
  # foo in *bar, baz, *qux
1271
- # ^^^^^^^^^^^^^^^^^^^^^^
1271
+ # ^^^^^^^^^^^^^^^
1272
1272
  #
1273
1273
  # foo in [*bar, baz, *qux]
1274
- # ^^^^^^^^^^^^^^^^^^^^^^^^
1274
+ # ^^^^^^^^^^^^^^^^^
1275
1275
  #
1276
1276
  # foo in Foo(*bar, baz, *qux)
1277
- # ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1277
+ # ^^^^^^^^^^^^^^^^^^^^
1278
1278
  class FindPatternNode < Node
1279
1279
  attr_reader constant: Node?
1280
1280
  attr_reader left: Node
@@ -1380,7 +1380,7 @@ module Prism
1380
1380
  #
1381
1381
  # def foo(...)
1382
1382
  # bar(...)
1383
- # ^^^^^^^^
1383
+ # ^^^
1384
1384
  # end
1385
1385
  class ForwardingArgumentsNode < Node
1386
1386
 
@@ -2176,32 +2176,6 @@ module Prism
2176
2176
 
2177
2177
  def inspect: (inspector: NodeInspector) -> String
2178
2178
  end
2179
- # Represents a keyword parameter to a method, block, or lambda definition.
2180
- #
2181
- # def a(b:)
2182
- # ^^
2183
- # end
2184
- #
2185
- # def a(b: 1)
2186
- # ^^^^
2187
- # end
2188
- class KeywordParameterNode < Node
2189
- attr_reader name: Symbol
2190
- attr_reader name_loc: Location
2191
- attr_reader value: Node?
2192
-
2193
- def initialize: (name: Symbol, name_loc: Location, value: Node?, location: Location) -> void
2194
- def accept: (visitor: Visitor) -> void
2195
- def set_newline_flag: (newline_marked: Array[bool]) -> void
2196
- def child_nodes: () -> Array[Node?]
2197
- def deconstruct: () -> Array[Node?]
2198
-
2199
- def copy: (**untyped) -> KeywordParameterNode
2200
-
2201
- def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, (Node | Array[Node] | String | Token | Array[Token] | Location)?]
2202
-
2203
- def inspect: (inspector: NodeInspector) -> String
2204
- end
2205
2179
  # Represents a keyword rest parameter to a method, block, or lambda definition.
2206
2180
  #
2207
2181
  # def a(**b)
@@ -2697,6 +2671,28 @@ module Prism
2697
2671
 
2698
2672
  def inspect: (inspector: NodeInspector) -> String
2699
2673
  end
2674
+ # Represents an optional keyword parameter to a method, block, or lambda definition.
2675
+ #
2676
+ # def a(b: 1)
2677
+ # ^^^^
2678
+ # end
2679
+ class OptionalKeywordParameterNode < Node
2680
+ attr_reader name: Symbol
2681
+ attr_reader name_loc: Location
2682
+ attr_reader value: Node
2683
+
2684
+ def initialize: (name: Symbol, name_loc: Location, value: Node, location: Location) -> void
2685
+ def accept: (visitor: Visitor) -> void
2686
+ def set_newline_flag: (newline_marked: Array[bool]) -> void
2687
+ def child_nodes: () -> Array[Node?]
2688
+ def deconstruct: () -> Array[Node?]
2689
+
2690
+ def copy: (**untyped) -> OptionalKeywordParameterNode
2691
+
2692
+ def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, (Node | Array[Node] | String | Token | Array[Token] | Location)?]
2693
+
2694
+ def inspect: (inspector: NodeInspector) -> String
2695
+ end
2700
2696
  # Represents an optional parameter to a method, block, or lambda definition.
2701
2697
  #
2702
2698
  # def a(b = 1)
@@ -3032,6 +3028,27 @@ module Prism
3032
3028
 
3033
3029
  def inspect: (inspector: NodeInspector) -> String
3034
3030
  end
3031
+ # Represents a required keyword parameter to a method, block, or lambda definition.
3032
+ #
3033
+ # def a(b: )
3034
+ # ^^
3035
+ # end
3036
+ class RequiredKeywordParameterNode < Node
3037
+ attr_reader name: Symbol
3038
+ attr_reader name_loc: Location
3039
+
3040
+ def initialize: (name: Symbol, name_loc: Location, location: Location) -> void
3041
+ def accept: (visitor: Visitor) -> void
3042
+ def set_newline_flag: (newline_marked: Array[bool]) -> void
3043
+ def child_nodes: () -> Array[Node?]
3044
+ def deconstruct: () -> Array[Node?]
3045
+
3046
+ def copy: (**untyped) -> RequiredKeywordParameterNode
3047
+
3048
+ def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, (Node | Array[Node] | String | Token | Array[Token] | Location)?]
3049
+
3050
+ def inspect: (inspector: NodeInspector) -> String
3051
+ end
3035
3052
  # Represents a required parameter to a method, block, or lambda definition.
3036
3053
  #
3037
3054
  # def a(b)
@@ -3054,8 +3071,8 @@ module Prism
3054
3071
  end
3055
3072
  # Represents an expression modified with a rescue.
3056
3073
  #
3057
- # foo rescue nil
3058
- # ^^^^^^^^^^^^^^
3074
+ # foo rescue nil
3075
+ # ^^^^^^^^^^^^^^
3059
3076
  class RescueModifierNode < Node
3060
3077
  attr_reader expression: Node
3061
3078
  attr_reader keyword_loc: Location
@@ -3079,8 +3096,8 @@ module Prism
3079
3096
  #
3080
3097
  # begin
3081
3098
  # rescue Foo, *splat, Bar => ex
3082
- # ^^^^^^
3083
3099
  # foo
3100
+ # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3084
3101
  # end
3085
3102
  #
3086
3103
  # `Foo, *splat, Bar` are in the `exceptions` field.
@@ -3654,11 +3671,13 @@ module Prism
3654
3671
  def inspect: (inspector: NodeInspector) -> String
3655
3672
  end
3656
3673
 
3674
+ # Flags for arguments nodes.
3657
3675
  module ArgumentsNodeFlags
3658
3676
  # if arguments contain keyword splat
3659
3677
  KEYWORD_SPLAT: Integer
3660
3678
  end
3661
3679
 
3680
+ # Flags for call nodes.
3662
3681
  module CallNodeFlags
3663
3682
  # &. operator
3664
3683
  SAFE_NAVIGATION: Integer
@@ -3666,6 +3685,7 @@ module Prism
3666
3685
  VARIABLE_CALL: Integer
3667
3686
  end
3668
3687
 
3688
+ # Flags for integer nodes that correspond to the base of the integer.
3669
3689
  module IntegerBaseFlags
3670
3690
  # 0b prefix
3671
3691
  BINARY: Integer
@@ -3677,16 +3697,19 @@ module Prism
3677
3697
  HEXADECIMAL: Integer
3678
3698
  end
3679
3699
 
3700
+ # Flags for while and until loop nodes.
3680
3701
  module LoopFlags
3681
3702
  # a loop after a begin statement, so the body is executed first before the condition
3682
3703
  BEGIN_MODIFIER: Integer
3683
3704
  end
3684
3705
 
3706
+ # Flags for range and flip-flop nodes.
3685
3707
  module RangeFlags
3686
3708
  # ... operator
3687
3709
  EXCLUDE_END: Integer
3688
3710
  end
3689
3711
 
3712
+ # Flags for regular expression and match last line nodes.
3690
3713
  module RegularExpressionFlags
3691
3714
  # i - ignores the case of characters when matching
3692
3715
  IGNORE_CASE: Integer
@@ -3706,6 +3729,7 @@ module Prism
3706
3729
  UTF_8: Integer
3707
3730
  end
3708
3731
 
3732
+ # Flags for string nodes.
3709
3733
  module StringFlags
3710
3734
  # frozen by virtue of a `frozen_string_literal` comment
3711
3735
  FROZEN: Integer
@@ -3965,9 +3989,6 @@ module Prism
3965
3989
  # Visit a KeywordHashNode node
3966
3990
  def visit_keyword_hash_node: (node: KeywordHashNode) -> void
3967
3991
 
3968
- # Visit a KeywordParameterNode node
3969
- def visit_keyword_parameter_node: (node: KeywordParameterNode) -> void
3970
-
3971
3992
  # Visit a KeywordRestParameterNode node
3972
3993
  def visit_keyword_rest_parameter_node: (node: KeywordRestParameterNode) -> void
3973
3994
 
@@ -4028,6 +4049,9 @@ module Prism
4028
4049
  # Visit a NumberedReferenceReadNode node
4029
4050
  def visit_numbered_reference_read_node: (node: NumberedReferenceReadNode) -> void
4030
4051
 
4052
+ # Visit a OptionalKeywordParameterNode node
4053
+ def visit_optional_keyword_parameter_node: (node: OptionalKeywordParameterNode) -> void
4054
+
4031
4055
  # Visit a OptionalParameterNode node
4032
4056
  def visit_optional_parameter_node: (node: OptionalParameterNode) -> void
4033
4057
 
@@ -4067,6 +4091,9 @@ module Prism
4067
4091
  # Visit a RegularExpressionNode node
4068
4092
  def visit_regular_expression_node: (node: RegularExpressionNode) -> void
4069
4093
 
4094
+ # Visit a RequiredKeywordParameterNode node
4095
+ def visit_required_keyword_parameter_node: (node: RequiredKeywordParameterNode) -> void
4096
+
4070
4097
  # Visit a RequiredParameterNode node
4071
4098
  def visit_required_parameter_node: (node: RequiredParameterNode) -> void
4072
4099
 
@@ -4317,8 +4344,6 @@ module Prism
4317
4344
  def InterpolatedXStringNode: (opening_loc: Location, parts: Array[Node], closing_loc: Location, location: Location) -> InterpolatedXStringNode
4318
4345
  # Create a new KeywordHashNode node
4319
4346
  def KeywordHashNode: (elements: Array[Node], location: Location) -> KeywordHashNode
4320
- # Create a new KeywordParameterNode node
4321
- def KeywordParameterNode: (name: Symbol, name_loc: Location, value: Node?, location: Location) -> KeywordParameterNode
4322
4347
  # Create a new KeywordRestParameterNode node
4323
4348
  def KeywordRestParameterNode: (name: Symbol?, name_loc: Location?, operator_loc: Location, location: Location) -> KeywordRestParameterNode
4324
4349
  # Create a new LambdaNode node
@@ -4359,6 +4384,8 @@ module Prism
4359
4384
  def NoKeywordsParameterNode: (operator_loc: Location, keyword_loc: Location, location: Location) -> NoKeywordsParameterNode
4360
4385
  # Create a new NumberedReferenceReadNode node
4361
4386
  def NumberedReferenceReadNode: (number: Integer, location: Location) -> NumberedReferenceReadNode
4387
+ # Create a new OptionalKeywordParameterNode node
4388
+ def OptionalKeywordParameterNode: (name: Symbol, name_loc: Location, value: Node, location: Location) -> OptionalKeywordParameterNode
4362
4389
  # Create a new OptionalParameterNode node
4363
4390
  def OptionalParameterNode: (name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location) -> OptionalParameterNode
4364
4391
  # Create a new OrNode node
@@ -4385,6 +4412,8 @@ module Prism
4385
4412
  def RedoNode: (location: Location) -> RedoNode
4386
4413
  # Create a new RegularExpressionNode node
4387
4414
  def RegularExpressionNode: (opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, flags: Integer, location: Location) -> RegularExpressionNode
4415
+ # Create a new RequiredKeywordParameterNode node
4416
+ def RequiredKeywordParameterNode: (name: Symbol, name_loc: Location, location: Location) -> RequiredKeywordParameterNode
4388
4417
  # Create a new RequiredParameterNode node
4389
4418
  def RequiredParameterNode: (name: Symbol, location: Location) -> RequiredParameterNode
4390
4419
  # Create a new RescueModifierNode node
data/sig/prism_static.rbs CHANGED
@@ -25,6 +25,17 @@ module Prism
25
25
 
26
26
  class Comment
27
27
  def location: () -> Location
28
+ def trailing?: () -> bool
29
+ end
30
+
31
+ class InlineComment < Comment
32
+ def trailing?: () -> bool
33
+ end
34
+
35
+ class EmbDocComment < Comment
36
+ end
37
+
38
+ class DATAComment < Comment
28
39
  end
29
40
 
30
41
  class Location
@@ -42,12 +53,14 @@ module Prism
42
53
 
43
54
  class Source
44
55
  attr_reader source: String
56
+ attr_reader start_line: Integer
45
57
  attr_reader offsets: Array[Integer]
46
58
 
47
59
  @source: String
60
+ @start_line: Integer
48
61
  @offsets: Array[Integer]
49
62
 
50
- def initialize: (source: String, offsets: Array[Integer]) -> void
63
+ def initialize: (source: String, start_line: Integer, offsets: Array[Integer]) -> void
51
64
  def slice: (offset: Integer, length: Integer) -> String
52
65
  def line: (value: Integer) -> Integer
53
66
  def line_offset: (value: Integer) -> Integer