prism 0.16.0 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -1
- data/Makefile +6 -0
- data/README.md +1 -1
- data/config.yml +50 -35
- data/docs/fuzzing.md +1 -1
- data/docs/serialization.md +28 -29
- data/ext/prism/api_node.c +802 -770
- data/ext/prism/api_pack.c +20 -9
- data/ext/prism/extension.c +464 -162
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +3173 -763
- data/include/prism/defines.h +32 -9
- data/include/prism/diagnostic.h +36 -3
- data/include/prism/enc/pm_encoding.h +118 -28
- data/include/prism/node.h +38 -13
- data/include/prism/options.h +204 -0
- data/include/prism/pack.h +44 -33
- data/include/prism/parser.h +445 -200
- data/include/prism/prettyprint.h +12 -1
- data/include/prism/regexp.h +16 -2
- data/include/prism/util/pm_buffer.h +94 -16
- data/include/prism/util/pm_char.h +162 -48
- data/include/prism/util/pm_constant_pool.h +126 -32
- data/include/prism/util/pm_list.h +68 -38
- data/include/prism/util/pm_memchr.h +18 -3
- data/include/prism/util/pm_newline_list.h +70 -27
- data/include/prism/util/pm_state_stack.h +25 -7
- data/include/prism/util/pm_string.h +115 -27
- data/include/prism/util/pm_string_list.h +25 -6
- data/include/prism/util/pm_strncasecmp.h +32 -0
- data/include/prism/util/pm_strpbrk.h +31 -17
- data/include/prism/version.h +27 -2
- data/include/prism.h +224 -31
- data/lib/prism/compiler.rb +6 -3
- data/lib/prism/debug.rb +23 -7
- data/lib/prism/dispatcher.rb +33 -18
- data/lib/prism/dsl.rb +10 -5
- data/lib/prism/ffi.rb +132 -80
- data/lib/prism/lex_compat.rb +25 -15
- data/lib/prism/mutation_compiler.rb +10 -5
- data/lib/prism/node.rb +370 -135
- data/lib/prism/node_ext.rb +1 -1
- data/lib/prism/node_inspector.rb +1 -1
- data/lib/prism/pack.rb +79 -40
- data/lib/prism/parse_result/comments.rb +7 -2
- data/lib/prism/parse_result/newlines.rb +4 -0
- data/lib/prism/parse_result.rb +150 -30
- data/lib/prism/pattern.rb +11 -0
- data/lib/prism/ripper_compat.rb +28 -10
- data/lib/prism/serialize.rb +86 -54
- data/lib/prism/visitor.rb +10 -3
- data/lib/prism.rb +20 -2
- data/prism.gemspec +4 -2
- data/rbi/prism.rbi +104 -60
- data/rbi/prism_static.rbi +16 -2
- data/sig/prism.rbs +72 -43
- data/sig/prism_static.rbs +14 -1
- data/src/diagnostic.c +56 -53
- data/src/enc/pm_big5.c +1 -0
- data/src/enc/pm_euc_jp.c +1 -0
- data/src/enc/pm_gbk.c +1 -0
- data/src/enc/pm_shift_jis.c +1 -0
- data/src/enc/pm_tables.c +316 -80
- data/src/enc/pm_unicode.c +53 -8
- data/src/enc/pm_windows_31j.c +1 -0
- data/src/node.c +334 -321
- data/src/options.c +170 -0
- data/src/prettyprint.c +74 -47
- data/src/prism.c +1642 -856
- data/src/regexp.c +151 -95
- data/src/serialize.c +44 -20
- data/src/token_type.c +3 -1
- data/src/util/pm_buffer.c +45 -15
- data/src/util/pm_char.c +103 -57
- data/src/util/pm_constant_pool.c +51 -21
- data/src/util/pm_list.c +12 -4
- data/src/util/pm_memchr.c +5 -3
- data/src/util/pm_newline_list.c +20 -12
- data/src/util/pm_state_stack.c +9 -3
- data/src/util/pm_string.c +95 -85
- data/src/util/pm_string_list.c +14 -15
- data/src/util/pm_strncasecmp.c +10 -3
- data/src/util/pm_strpbrk.c +25 -19
- metadata +5 -3
- data/docs/prism.png +0 -0
data/rbi/prism.rbi
CHANGED
@@ -1030,10 +1030,10 @@ module Prism
|
|
1030
1030
|
|
1031
1031
|
# Represents the use of a case statement.
|
1032
1032
|
#
|
1033
|
-
#
|
1034
|
-
#
|
1035
|
-
#
|
1036
|
-
#
|
1033
|
+
# case true
|
1034
|
+
# when false
|
1035
|
+
# end
|
1036
|
+
# ^^^^^^^^^^
|
1037
1037
|
class CaseNode < Node
|
1038
1038
|
sig { returns(T.nilable(Node)) }
|
1039
1039
|
attr_reader :predicate
|
@@ -1141,7 +1141,7 @@ module Prism
|
|
1141
1141
|
# Represents the use of the `&&=` operator for assignment to a class variable.
|
1142
1142
|
#
|
1143
1143
|
# @@target &&= value
|
1144
|
-
#
|
1144
|
+
# ^^^^^^^^^^^^^^^^^^
|
1145
1145
|
class ClassVariableAndWriteNode < Node
|
1146
1146
|
sig { returns(Symbol) }
|
1147
1147
|
attr_reader :name
|
@@ -2160,13 +2160,13 @@ module Prism
|
|
2160
2160
|
# Represents a find pattern in pattern matching.
|
2161
2161
|
#
|
2162
2162
|
# foo in *bar, baz, *qux
|
2163
|
-
#
|
2163
|
+
# ^^^^^^^^^^^^^^^
|
2164
2164
|
#
|
2165
2165
|
# foo in [*bar, baz, *qux]
|
2166
|
-
#
|
2166
|
+
# ^^^^^^^^^^^^^^^^^
|
2167
2167
|
#
|
2168
2168
|
# foo in Foo(*bar, baz, *qux)
|
2169
|
-
#
|
2169
|
+
# ^^^^^^^^^^^^^^^^^^^^
|
2170
2170
|
class FindPatternNode < Node
|
2171
2171
|
sig { returns(T.nilable(Node)) }
|
2172
2172
|
attr_reader :constant
|
@@ -2350,7 +2350,7 @@ module Prism
|
|
2350
2350
|
#
|
2351
2351
|
# def foo(...)
|
2352
2352
|
# bar(...)
|
2353
|
-
#
|
2353
|
+
# ^^^
|
2354
2354
|
# end
|
2355
2355
|
class ForwardingArgumentsNode < Node
|
2356
2356
|
sig { params(location: Location).void }
|
@@ -3708,47 +3708,6 @@ module Prism
|
|
3708
3708
|
def inspect(inspector); end
|
3709
3709
|
end
|
3710
3710
|
|
3711
|
-
# Represents a keyword parameter to a method, block, or lambda definition.
|
3712
|
-
#
|
3713
|
-
# def a(b:)
|
3714
|
-
# ^^
|
3715
|
-
# end
|
3716
|
-
#
|
3717
|
-
# def a(b: 1)
|
3718
|
-
# ^^^^
|
3719
|
-
# end
|
3720
|
-
class KeywordParameterNode < Node
|
3721
|
-
sig { returns(Symbol) }
|
3722
|
-
attr_reader :name
|
3723
|
-
|
3724
|
-
sig { returns(Location) }
|
3725
|
-
attr_reader :name_loc
|
3726
|
-
|
3727
|
-
sig { returns(T.nilable(Node)) }
|
3728
|
-
attr_reader :value
|
3729
|
-
|
3730
|
-
sig { params(name: Symbol, name_loc: Location, value: T.nilable(Node), location: Location).void }
|
3731
|
-
def initialize(name, name_loc, value, location); end
|
3732
|
-
|
3733
|
-
sig { params(visitor: Visitor).void }
|
3734
|
-
def accept(visitor); end
|
3735
|
-
|
3736
|
-
sig { returns(T::Array[T.nilable(Node)]) }
|
3737
|
-
def child_nodes; end
|
3738
|
-
|
3739
|
-
sig { returns(T::Array[T.nilable(Node)]) }
|
3740
|
-
def deconstruct; end
|
3741
|
-
|
3742
|
-
sig { params(params: T.untyped).returns(KeywordParameterNode) }
|
3743
|
-
def copy(**params); end
|
3744
|
-
|
3745
|
-
sig { params(keys: T::Array[Symbol]).returns(T::Hash[Symbol, T.nilable(T.any(Node, T::Array[Node], String, Token, T::Array[Token], Location))]) }
|
3746
|
-
def deconstruct_keys(keys); end
|
3747
|
-
|
3748
|
-
sig { params(inspector: NodeInspector).returns(String) }
|
3749
|
-
def inspect(inspector); end
|
3750
|
-
end
|
3751
|
-
|
3752
3711
|
# Represents a keyword rest parameter to a method, block, or lambda definition.
|
3753
3712
|
#
|
3754
3713
|
# def a(**b)
|
@@ -4594,6 +4553,43 @@ module Prism
|
|
4594
4553
|
def inspect(inspector); end
|
4595
4554
|
end
|
4596
4555
|
|
4556
|
+
# Represents an optional keyword parameter to a method, block, or lambda definition.
|
4557
|
+
#
|
4558
|
+
# def a(b: 1)
|
4559
|
+
# ^^^^
|
4560
|
+
# end
|
4561
|
+
class OptionalKeywordParameterNode < Node
|
4562
|
+
sig { returns(Symbol) }
|
4563
|
+
attr_reader :name
|
4564
|
+
|
4565
|
+
sig { returns(Location) }
|
4566
|
+
attr_reader :name_loc
|
4567
|
+
|
4568
|
+
sig { returns(Node) }
|
4569
|
+
attr_reader :value
|
4570
|
+
|
4571
|
+
sig { params(name: Symbol, name_loc: Location, value: Node, location: Location).void }
|
4572
|
+
def initialize(name, name_loc, value, location); end
|
4573
|
+
|
4574
|
+
sig { params(visitor: Visitor).void }
|
4575
|
+
def accept(visitor); end
|
4576
|
+
|
4577
|
+
sig { returns(T::Array[T.nilable(Node)]) }
|
4578
|
+
def child_nodes; end
|
4579
|
+
|
4580
|
+
sig { returns(T::Array[T.nilable(Node)]) }
|
4581
|
+
def deconstruct; end
|
4582
|
+
|
4583
|
+
sig { params(params: T.untyped).returns(OptionalKeywordParameterNode) }
|
4584
|
+
def copy(**params); end
|
4585
|
+
|
4586
|
+
sig { params(keys: T::Array[Symbol]).returns(T::Hash[Symbol, T.nilable(T.any(Node, T::Array[Node], String, Token, T::Array[Token], Location))]) }
|
4587
|
+
def deconstruct_keys(keys); end
|
4588
|
+
|
4589
|
+
sig { params(inspector: NodeInspector).returns(String) }
|
4590
|
+
def inspect(inspector); end
|
4591
|
+
end
|
4592
|
+
|
4597
4593
|
# Represents an optional parameter to a method, block, or lambda definition.
|
4598
4594
|
#
|
4599
4595
|
# def a(b = 1)
|
@@ -5161,6 +5157,40 @@ module Prism
|
|
5161
5157
|
def inspect(inspector); end
|
5162
5158
|
end
|
5163
5159
|
|
5160
|
+
# Represents a required keyword parameter to a method, block, or lambda definition.
|
5161
|
+
#
|
5162
|
+
# def a(b: )
|
5163
|
+
# ^^
|
5164
|
+
# end
|
5165
|
+
class RequiredKeywordParameterNode < Node
|
5166
|
+
sig { returns(Symbol) }
|
5167
|
+
attr_reader :name
|
5168
|
+
|
5169
|
+
sig { returns(Location) }
|
5170
|
+
attr_reader :name_loc
|
5171
|
+
|
5172
|
+
sig { params(name: Symbol, name_loc: Location, location: Location).void }
|
5173
|
+
def initialize(name, name_loc, location); end
|
5174
|
+
|
5175
|
+
sig { params(visitor: Visitor).void }
|
5176
|
+
def accept(visitor); end
|
5177
|
+
|
5178
|
+
sig { returns(T::Array[T.nilable(Node)]) }
|
5179
|
+
def child_nodes; end
|
5180
|
+
|
5181
|
+
sig { returns(T::Array[T.nilable(Node)]) }
|
5182
|
+
def deconstruct; end
|
5183
|
+
|
5184
|
+
sig { params(params: T.untyped).returns(RequiredKeywordParameterNode) }
|
5185
|
+
def copy(**params); end
|
5186
|
+
|
5187
|
+
sig { params(keys: T::Array[Symbol]).returns(T::Hash[Symbol, T.nilable(T.any(Node, T::Array[Node], String, Token, T::Array[Token], Location))]) }
|
5188
|
+
def deconstruct_keys(keys); end
|
5189
|
+
|
5190
|
+
sig { params(inspector: NodeInspector).returns(String) }
|
5191
|
+
def inspect(inspector); end
|
5192
|
+
end
|
5193
|
+
|
5164
5194
|
# Represents a required parameter to a method, block, or lambda definition.
|
5165
5195
|
#
|
5166
5196
|
# def a(b)
|
@@ -5194,8 +5224,8 @@ module Prism
|
|
5194
5224
|
|
5195
5225
|
# Represents an expression modified with a rescue.
|
5196
5226
|
#
|
5197
|
-
#
|
5198
|
-
#
|
5227
|
+
# foo rescue nil
|
5228
|
+
# ^^^^^^^^^^^^^^
|
5199
5229
|
class RescueModifierNode < Node
|
5200
5230
|
sig { returns(Node) }
|
5201
5231
|
attr_reader :expression
|
@@ -5237,8 +5267,8 @@ module Prism
|
|
5237
5267
|
#
|
5238
5268
|
# begin
|
5239
5269
|
# rescue Foo, *splat, Bar => ex
|
5240
|
-
# ^^^^^^
|
5241
5270
|
# foo
|
5271
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
5242
5272
|
# end
|
5243
5273
|
#
|
5244
5274
|
# `Foo, *splat, Bar` are in the `exceptions` field.
|
@@ -6189,11 +6219,13 @@ module Prism
|
|
6189
6219
|
end
|
6190
6220
|
|
6191
6221
|
|
6222
|
+
# Flags for arguments nodes.
|
6192
6223
|
module ArgumentsNodeFlags
|
6193
6224
|
# if arguments contain keyword splat
|
6194
6225
|
KEYWORD_SPLAT = T.let(1 << 0, Integer)
|
6195
6226
|
end
|
6196
6227
|
|
6228
|
+
# Flags for call nodes.
|
6197
6229
|
module CallNodeFlags
|
6198
6230
|
# &. operator
|
6199
6231
|
SAFE_NAVIGATION = T.let(1 << 0, Integer)
|
@@ -6201,6 +6233,7 @@ module Prism
|
|
6201
6233
|
VARIABLE_CALL = T.let(1 << 1, Integer)
|
6202
6234
|
end
|
6203
6235
|
|
6236
|
+
# Flags for integer nodes that correspond to the base of the integer.
|
6204
6237
|
module IntegerBaseFlags
|
6205
6238
|
# 0b prefix
|
6206
6239
|
BINARY = T.let(1 << 0, Integer)
|
@@ -6212,16 +6245,19 @@ module Prism
|
|
6212
6245
|
HEXADECIMAL = T.let(1 << 3, Integer)
|
6213
6246
|
end
|
6214
6247
|
|
6248
|
+
# Flags for while and until loop nodes.
|
6215
6249
|
module LoopFlags
|
6216
6250
|
# a loop after a begin statement, so the body is executed first before the condition
|
6217
6251
|
BEGIN_MODIFIER = T.let(1 << 0, Integer)
|
6218
6252
|
end
|
6219
6253
|
|
6254
|
+
# Flags for range and flip-flop nodes.
|
6220
6255
|
module RangeFlags
|
6221
6256
|
# ... operator
|
6222
6257
|
EXCLUDE_END = T.let(1 << 0, Integer)
|
6223
6258
|
end
|
6224
6259
|
|
6260
|
+
# Flags for regular expression and match last line nodes.
|
6225
6261
|
module RegularExpressionFlags
|
6226
6262
|
# i - ignores the case of characters when matching
|
6227
6263
|
IGNORE_CASE = T.let(1 << 0, Integer)
|
@@ -6241,6 +6277,7 @@ module Prism
|
|
6241
6277
|
UTF_8 = T.let(1 << 7, Integer)
|
6242
6278
|
end
|
6243
6279
|
|
6280
|
+
# Flags for string nodes.
|
6244
6281
|
module StringFlags
|
6245
6282
|
# frozen by virtue of a `frozen_string_literal` comment
|
6246
6283
|
FROZEN = T.let(1 << 0, Integer)
|
@@ -6584,10 +6621,6 @@ module Prism
|
|
6584
6621
|
sig { params(node: KeywordHashNode).void }
|
6585
6622
|
def visit_keyword_hash_node(node); end
|
6586
6623
|
|
6587
|
-
# Visit a KeywordParameterNode node
|
6588
|
-
sig { params(node: KeywordParameterNode).void }
|
6589
|
-
def visit_keyword_parameter_node(node); end
|
6590
|
-
|
6591
6624
|
# Visit a KeywordRestParameterNode node
|
6592
6625
|
sig { params(node: KeywordRestParameterNode).void }
|
6593
6626
|
def visit_keyword_rest_parameter_node(node); end
|
@@ -6668,6 +6701,10 @@ module Prism
|
|
6668
6701
|
sig { params(node: NumberedReferenceReadNode).void }
|
6669
6702
|
def visit_numbered_reference_read_node(node); end
|
6670
6703
|
|
6704
|
+
# Visit a OptionalKeywordParameterNode node
|
6705
|
+
sig { params(node: OptionalKeywordParameterNode).void }
|
6706
|
+
def visit_optional_keyword_parameter_node(node); end
|
6707
|
+
|
6671
6708
|
# Visit a OptionalParameterNode node
|
6672
6709
|
sig { params(node: OptionalParameterNode).void }
|
6673
6710
|
def visit_optional_parameter_node(node); end
|
@@ -6720,6 +6757,10 @@ module Prism
|
|
6720
6757
|
sig { params(node: RegularExpressionNode).void }
|
6721
6758
|
def visit_regular_expression_node(node); end
|
6722
6759
|
|
6760
|
+
# Visit a RequiredKeywordParameterNode node
|
6761
|
+
sig { params(node: RequiredKeywordParameterNode).void }
|
6762
|
+
def visit_required_keyword_parameter_node(node); end
|
6763
|
+
|
6723
6764
|
# Visit a RequiredParameterNode node
|
6724
6765
|
sig { params(node: RequiredParameterNode).void }
|
6725
6766
|
def visit_required_parameter_node(node); end
|
@@ -7080,9 +7121,6 @@ module Prism
|
|
7080
7121
|
# Create a new KeywordHashNode node
|
7081
7122
|
sig { params(elements: T::Array[Node], location: Location).returns(KeywordHashNode) }
|
7082
7123
|
def KeywordHashNode(elements, location); end
|
7083
|
-
# Create a new KeywordParameterNode node
|
7084
|
-
sig { params(name: Symbol, name_loc: Location, value: T.nilable(Node), location: Location).returns(KeywordParameterNode) }
|
7085
|
-
def KeywordParameterNode(name, name_loc, value, location); end
|
7086
7124
|
# Create a new KeywordRestParameterNode node
|
7087
7125
|
sig { params(name: T.nilable(Symbol), name_loc: T.nilable(Location), operator_loc: Location, location: Location).returns(KeywordRestParameterNode) }
|
7088
7126
|
def KeywordRestParameterNode(name, name_loc, operator_loc, location); end
|
@@ -7143,6 +7181,9 @@ module Prism
|
|
7143
7181
|
# Create a new NumberedReferenceReadNode node
|
7144
7182
|
sig { params(number: Integer, location: Location).returns(NumberedReferenceReadNode) }
|
7145
7183
|
def NumberedReferenceReadNode(number, location); end
|
7184
|
+
# Create a new OptionalKeywordParameterNode node
|
7185
|
+
sig { params(name: Symbol, name_loc: Location, value: Node, location: Location).returns(OptionalKeywordParameterNode) }
|
7186
|
+
def OptionalKeywordParameterNode(name, name_loc, value, location); end
|
7146
7187
|
# Create a new OptionalParameterNode node
|
7147
7188
|
sig { params(name: Symbol, name_loc: Location, operator_loc: Location, value: Node, location: Location).returns(OptionalParameterNode) }
|
7148
7189
|
def OptionalParameterNode(name, name_loc, operator_loc, value, location); end
|
@@ -7182,6 +7223,9 @@ module Prism
|
|
7182
7223
|
# Create a new RegularExpressionNode node
|
7183
7224
|
sig { params(opening_loc: Location, content_loc: Location, closing_loc: Location, unescaped: String, flags: Integer, location: Location).returns(RegularExpressionNode) }
|
7184
7225
|
def RegularExpressionNode(opening_loc, content_loc, closing_loc, unescaped, flags, location); end
|
7226
|
+
# Create a new RequiredKeywordParameterNode node
|
7227
|
+
sig { params(name: Symbol, name_loc: Location, location: Location).returns(RequiredKeywordParameterNode) }
|
7228
|
+
def RequiredKeywordParameterNode(name, name_loc, location); end
|
7185
7229
|
# Create a new RequiredParameterNode node
|
7186
7230
|
sig { params(name: Symbol, location: Location).returns(RequiredParameterNode) }
|
7187
7231
|
def RequiredParameterNode(name, location); end
|
data/rbi/prism_static.rbi
CHANGED
@@ -48,6 +48,20 @@ module Prism
|
|
48
48
|
class Comment
|
49
49
|
sig { returns(Location) }
|
50
50
|
def location; end
|
51
|
+
|
52
|
+
sig { returns(T::Boolean) }
|
53
|
+
def trailing?; end
|
54
|
+
end
|
55
|
+
|
56
|
+
class InlineComment < Comment
|
57
|
+
sig { override.returns(T::Boolean) }
|
58
|
+
def trailing?; end
|
59
|
+
end
|
60
|
+
|
61
|
+
class EmbDocComment < Comment
|
62
|
+
end
|
63
|
+
|
64
|
+
class DATAComment < Comment
|
51
65
|
end
|
52
66
|
|
53
67
|
class Location
|
@@ -83,8 +97,8 @@ module Prism
|
|
83
97
|
end
|
84
98
|
|
85
99
|
class Source
|
86
|
-
sig { params(source: String, offsets: T::Array[Integer]).void }
|
87
|
-
def initialize(source, offsets); end
|
100
|
+
sig { params(source: String, start_line: Integer, offsets: T::Array[Integer]).void }
|
101
|
+
def initialize(source, start_line, offsets); end
|
88
102
|
|
89
103
|
sig { params(offset: Integer, length: Integer).returns(String) }
|
90
104
|
def slice(offset, length); 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
|
-
#
|
611
|
-
#
|
612
|
-
#
|
613
|
-
#
|
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
|
-
#
|
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
|