prism 0.16.0 → 0.17.1

Sign up to get free protection for your applications and to get access to all the features.
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