prism 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -1
- data/Makefile +3 -3
- data/README.md +1 -1
- data/config.yml +28 -3
- data/docs/build_system.md +2 -2
- data/docs/cruby_compilation.md +1 -1
- data/docs/releasing.md +2 -2
- data/ext/prism/api_node.c +7 -3
- data/ext/prism/extconf.rb +1 -1
- data/ext/prism/extension.c +2 -3
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +54 -20
- data/include/prism/diagnostic.h +2 -0
- data/include/prism/options.h +8 -2
- data/include/prism/parser.h +3 -0
- data/include/prism/version.h +2 -2
- data/include/prism.h +1 -1
- data/lib/prism/dot_visitor.rb +5 -0
- data/lib/prism/dsl.rb +2 -2
- data/lib/prism/ffi.rb +3 -1
- data/lib/prism/inspect_visitor.rb +1 -0
- data/lib/prism/node.rb +52 -13
- data/lib/prism/parse_result.rb +2 -15
- data/lib/prism/polyfill/scan_byte.rb +1 -1
- data/lib/prism/reflection.rb +1 -1
- data/lib/prism/serialize.rb +6 -4
- data/lib/prism/translation/parser/compiler.rb +16 -16
- data/lib/prism/translation/parser.rb +5 -3
- data/lib/prism/translation/parser35.rb +1 -6
- data/lib/prism/translation/parser40.rb +13 -0
- data/lib/prism/translation/parser41.rb +13 -0
- data/lib/prism/translation/parser_current.rb +4 -2
- data/lib/prism/translation/ripper.rb +2 -2
- data/lib/prism/translation/ruby_parser.rb +53 -18
- data/lib/prism/translation.rb +2 -0
- data/lib/prism.rb +4 -5
- data/prism.gemspec +5 -1
- data/rbi/prism/dsl.rbi +3 -3
- data/rbi/prism/node.rbi +21 -8
- data/rbi/prism/translation/parser35.rbi +0 -2
- data/rbi/prism/translation/parser40.rbi +6 -0
- data/rbi/prism/translation/parser41.rbi +6 -0
- data/sig/prism/dsl.rbs +2 -2
- data/sig/prism/node.rbs +18 -8
- data/src/diagnostic.c +5 -1
- data/src/encoding.c +172 -67
- data/src/node.c +9 -0
- data/src/options.c +17 -7
- data/src/prettyprint.c +16 -0
- data/src/prism.c +1192 -1895
- data/src/serialize.c +7 -1
- data/src/token_type.c +2 -2
- data/src/util/pm_constant_pool.c +1 -1
- metadata +5 -1
data/rbi/prism/dsl.rbi
CHANGED
|
@@ -67,8 +67,8 @@ module Prism::DSL
|
|
|
67
67
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), message_loc: T.nilable(Prism::Location), read_name: Symbol, write_name: Symbol, operator_loc: Prism::Location, value: Prism::Node).returns(Prism::CallAndWriteNode) }
|
|
68
68
|
def call_and_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", operator_loc: location, value: default_node(source, location)); end
|
|
69
69
|
|
|
70
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), name: Symbol, message_loc: T.nilable(Prism::Location), opening_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), closing_loc: T.nilable(Prism::Location), block: T.nilable(T.any(Prism::BlockNode, Prism::BlockArgumentNode))).returns(Prism::CallNode) }
|
|
71
|
-
def call_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, name: :"", message_loc: nil, opening_loc: nil, arguments: nil, closing_loc: nil, block: nil); end
|
|
70
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), name: Symbol, message_loc: T.nilable(Prism::Location), opening_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), closing_loc: T.nilable(Prism::Location), equal_loc: T.nilable(Prism::Location), block: T.nilable(T.any(Prism::BlockNode, Prism::BlockArgumentNode))).returns(Prism::CallNode) }
|
|
71
|
+
def call_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, name: :"", message_loc: nil, opening_loc: nil, arguments: nil, closing_loc: nil, equal_loc: nil, block: nil); end
|
|
72
72
|
|
|
73
73
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), message_loc: T.nilable(Prism::Location), read_name: Symbol, write_name: Symbol, binary_operator: Symbol, binary_operator_loc: Prism::Location, value: Prism::Node).returns(Prism::CallOperatorWriteNode) }
|
|
74
74
|
def call_operator_write_node(source: default_source, node_id: 0, location: default_location, flags: 0, receiver: nil, call_operator_loc: nil, message_loc: nil, read_name: :"", write_name: :"", binary_operator: :"", binary_operator_loc: location, value: default_node(source, location)); end
|
|
@@ -265,7 +265,7 @@ module Prism::DSL
|
|
|
265
265
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: Prism::Location).returns(Prism::InterpolatedRegularExpressionNode) }
|
|
266
266
|
def interpolated_regular_expression_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, parts: [], closing_loc: location); end
|
|
267
267
|
|
|
268
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode, Prism::XStringNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedStringNode) }
|
|
268
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode, Prism::XStringNode, Prism::InterpolatedXStringNode, Prism::SymbolNode, Prism::InterpolatedSymbolNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedStringNode) }
|
|
269
269
|
def interpolated_string_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: nil, parts: [], closing_loc: nil); end
|
|
270
270
|
|
|
271
271
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedSymbolNode) }
|
data/rbi/prism/node.rbi
CHANGED
|
@@ -1132,11 +1132,14 @@ class Prism::CallNode < Prism::Node
|
|
|
1132
1132
|
sig { returns(T.nilable(Prism::Location)) }
|
|
1133
1133
|
def closing_loc; end
|
|
1134
1134
|
|
|
1135
|
+
sig { returns(T.nilable(Prism::Location)) }
|
|
1136
|
+
def equal_loc; end
|
|
1137
|
+
|
|
1135
1138
|
sig { returns(T.nilable(T.any(Prism::BlockNode, Prism::BlockArgumentNode))) }
|
|
1136
1139
|
def block; end
|
|
1137
1140
|
|
|
1138
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), name: Symbol, message_loc: T.nilable(Prism::Location), opening_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), closing_loc: T.nilable(Prism::Location), block: T.nilable(T.any(Prism::BlockNode, Prism::BlockArgumentNode))).void }
|
|
1139
|
-
def initialize(source, node_id, location, flags, receiver, call_operator_loc, name, message_loc, opening_loc, arguments, closing_loc, block); end
|
|
1141
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), name: Symbol, message_loc: T.nilable(Prism::Location), opening_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), closing_loc: T.nilable(Prism::Location), equal_loc: T.nilable(Prism::Location), block: T.nilable(T.any(Prism::BlockNode, Prism::BlockArgumentNode))).void }
|
|
1142
|
+
def initialize(source, node_id, location, flags, receiver, call_operator_loc, name, message_loc, opening_loc, arguments, closing_loc, equal_loc, block); end
|
|
1140
1143
|
|
|
1141
1144
|
sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
|
|
1142
1145
|
def accept(visitor); end
|
|
@@ -1153,8 +1156,8 @@ class Prism::CallNode < Prism::Node
|
|
|
1153
1156
|
sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
|
|
1154
1157
|
def comment_targets; end
|
|
1155
1158
|
|
|
1156
|
-
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), name: Symbol, message_loc: T.nilable(Prism::Location), opening_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), closing_loc: T.nilable(Prism::Location), block: T.nilable(T.any(Prism::BlockNode, Prism::BlockArgumentNode))).returns(Prism::CallNode) }
|
|
1157
|
-
def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, name: self.name, message_loc: self.message_loc, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, block: self.block); end
|
|
1159
|
+
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, receiver: T.nilable(Prism::Node), call_operator_loc: T.nilable(Prism::Location), name: Symbol, message_loc: T.nilable(Prism::Location), opening_loc: T.nilable(Prism::Location), arguments: T.nilable(Prism::ArgumentsNode), closing_loc: T.nilable(Prism::Location), equal_loc: T.nilable(Prism::Location), block: T.nilable(T.any(Prism::BlockNode, Prism::BlockArgumentNode))).returns(Prism::CallNode) }
|
|
1160
|
+
def copy(node_id: self.node_id, location: self.location, flags: self.flags, receiver: self.receiver, call_operator_loc: self.call_operator_loc, name: self.name, message_loc: self.message_loc, opening_loc: self.opening_loc, arguments: self.arguments, closing_loc: self.closing_loc, equal_loc: self.equal_loc, block: self.block); end
|
|
1158
1161
|
|
|
1159
1162
|
sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
|
|
1160
1163
|
def deconstruct_keys(keys); end
|
|
@@ -1171,6 +1174,9 @@ class Prism::CallNode < Prism::Node
|
|
|
1171
1174
|
sig { returns(T.nilable(String)) }
|
|
1172
1175
|
def closing; end
|
|
1173
1176
|
|
|
1177
|
+
sig { returns(T.nilable(String)) }
|
|
1178
|
+
def equal; end
|
|
1179
|
+
|
|
1174
1180
|
sig { override.returns(T::Array[Prism::Reflection::Field]) }
|
|
1175
1181
|
def fields; end
|
|
1176
1182
|
|
|
@@ -3313,10 +3319,15 @@ class Prism::ForwardingParameterNode < Prism::Node
|
|
|
3313
3319
|
def type; end
|
|
3314
3320
|
end
|
|
3315
3321
|
|
|
3316
|
-
# Represents the use of the `super` keyword without parentheses or arguments.
|
|
3322
|
+
# Represents the use of the `super` keyword without parentheses or arguments, but which might have a block.
|
|
3317
3323
|
#
|
|
3318
3324
|
# super
|
|
3319
3325
|
# ^^^^^
|
|
3326
|
+
#
|
|
3327
|
+
# super { 123 }
|
|
3328
|
+
# ^^^^^^^^^^^^^
|
|
3329
|
+
#
|
|
3330
|
+
# If it has any other arguments, it would be a `SuperNode` instead.
|
|
3320
3331
|
class Prism::ForwardingSuperNode < Prism::Node
|
|
3321
3332
|
sig { returns(T.nilable(Prism::BlockNode)) }
|
|
3322
3333
|
def block; end
|
|
@@ -4928,13 +4939,13 @@ class Prism::InterpolatedStringNode < Prism::Node
|
|
|
4928
4939
|
sig { returns(T.nilable(Prism::Location)) }
|
|
4929
4940
|
def opening_loc; end
|
|
4930
4941
|
|
|
4931
|
-
sig { returns(T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode, Prism::XStringNode)]) }
|
|
4942
|
+
sig { returns(T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode, Prism::XStringNode, Prism::InterpolatedXStringNode, Prism::SymbolNode, Prism::InterpolatedSymbolNode)]) }
|
|
4932
4943
|
def parts; end
|
|
4933
4944
|
|
|
4934
4945
|
sig { returns(T.nilable(Prism::Location)) }
|
|
4935
4946
|
def closing_loc; end
|
|
4936
4947
|
|
|
4937
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode, Prism::XStringNode)], closing_loc: T.nilable(Prism::Location)).void }
|
|
4948
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode, Prism::XStringNode, Prism::InterpolatedXStringNode, Prism::SymbolNode, Prism::InterpolatedSymbolNode)], closing_loc: T.nilable(Prism::Location)).void }
|
|
4938
4949
|
def initialize(source, node_id, location, flags, opening_loc, parts, closing_loc); end
|
|
4939
4950
|
|
|
4940
4951
|
sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
|
|
@@ -4952,7 +4963,7 @@ class Prism::InterpolatedStringNode < Prism::Node
|
|
|
4952
4963
|
sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
|
|
4953
4964
|
def comment_targets; end
|
|
4954
4965
|
|
|
4955
|
-
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode, Prism::XStringNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedStringNode) }
|
|
4966
|
+
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: T.nilable(Prism::Location), parts: T::Array[T.any(Prism::StringNode, Prism::EmbeddedStatementsNode, Prism::EmbeddedVariableNode, Prism::InterpolatedStringNode, Prism::XStringNode, Prism::InterpolatedXStringNode, Prism::SymbolNode, Prism::InterpolatedSymbolNode)], closing_loc: T.nilable(Prism::Location)).returns(Prism::InterpolatedStringNode) }
|
|
4956
4967
|
def copy(node_id: self.node_id, location: self.location, flags: self.flags, opening_loc: self.opening_loc, parts: self.parts, closing_loc: self.closing_loc); end
|
|
4957
4968
|
|
|
4958
4969
|
sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
|
|
@@ -7964,6 +7975,8 @@ end
|
|
|
7964
7975
|
#
|
|
7965
7976
|
# super foo, bar
|
|
7966
7977
|
# ^^^^^^^^^^^^^^
|
|
7978
|
+
#
|
|
7979
|
+
# If no arguments are provided (except for a block), it would be a `ForwardingSuperNode` instead.
|
|
7967
7980
|
class Prism::SuperNode < Prism::Node
|
|
7968
7981
|
sig { returns(Prism::Location) }
|
|
7969
7982
|
def keyword_loc; end
|
data/sig/prism/dsl.rbs
CHANGED
|
@@ -44,7 +44,7 @@ module Prism
|
|
|
44
44
|
|
|
45
45
|
def call_and_write_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?message_loc: Location?, ?read_name: Symbol, ?write_name: Symbol, ?operator_loc: Location, ?value: Prism::node) -> CallAndWriteNode
|
|
46
46
|
|
|
47
|
-
def call_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?name: Symbol, ?message_loc: Location?, ?opening_loc: Location?, ?arguments: ArgumentsNode?, ?closing_loc: Location?, ?block: BlockNode | BlockArgumentNode | nil) -> CallNode
|
|
47
|
+
def call_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?name: Symbol, ?message_loc: Location?, ?opening_loc: Location?, ?arguments: ArgumentsNode?, ?closing_loc: Location?, ?equal_loc: Location?, ?block: BlockNode | BlockArgumentNode | nil) -> CallNode
|
|
48
48
|
|
|
49
49
|
def call_operator_write_node: (?source: Source, ?node_id: Integer, ?location: Location, ?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) -> CallOperatorWriteNode
|
|
50
50
|
|
|
@@ -176,7 +176,7 @@ module Prism
|
|
|
176
176
|
|
|
177
177
|
def interpolated_regular_expression_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], ?closing_loc: Location) -> InterpolatedRegularExpressionNode
|
|
178
178
|
|
|
179
|
-
def interpolated_string_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode], ?closing_loc: Location?) -> InterpolatedStringNode
|
|
179
|
+
def interpolated_string_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode | InterpolatedXStringNode | SymbolNode | InterpolatedSymbolNode], ?closing_loc: Location?) -> InterpolatedStringNode
|
|
180
180
|
|
|
181
181
|
def interpolated_symbol_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode], ?closing_loc: Location?) -> InterpolatedSymbolNode
|
|
182
182
|
|
data/sig/prism/node.rbs
CHANGED
|
@@ -553,20 +553,23 @@ module Prism
|
|
|
553
553
|
attr_reader opening_loc: Location?
|
|
554
554
|
attr_reader arguments: ArgumentsNode?
|
|
555
555
|
attr_reader closing_loc: Location?
|
|
556
|
+
attr_reader equal_loc: Location?
|
|
556
557
|
attr_reader block: BlockNode | BlockArgumentNode | nil
|
|
557
558
|
|
|
558
559
|
def save_call_operator_loc: (_Repository repository) -> void
|
|
559
560
|
def save_message_loc: (_Repository repository) -> void
|
|
560
561
|
def save_opening_loc: (_Repository repository) -> void
|
|
561
562
|
def save_closing_loc: (_Repository repository) -> void
|
|
563
|
+
def save_equal_loc: (_Repository repository) -> void
|
|
562
564
|
|
|
563
|
-
def initialize: (Source source, Integer node_id, Location location, Integer flags, Prism::node? receiver, Location? call_operator_loc, Symbol name, Location? message_loc, Location? opening_loc, ArgumentsNode? arguments, Location? closing_loc, BlockNode | BlockArgumentNode | nil block) -> void
|
|
564
|
-
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?name: Symbol, ?message_loc: Location?, ?opening_loc: Location?, ?arguments: ArgumentsNode?, ?closing_loc: Location?, ?block: BlockNode | BlockArgumentNode | nil) -> CallNode
|
|
565
|
-
def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, name: Symbol, message_loc: Location?, opening_loc: Location?, arguments: ArgumentsNode?, closing_loc: Location?, block: BlockNode | BlockArgumentNode | nil }
|
|
565
|
+
def initialize: (Source source, Integer node_id, Location location, Integer flags, Prism::node? receiver, Location? call_operator_loc, Symbol name, Location? message_loc, Location? opening_loc, ArgumentsNode? arguments, Location? closing_loc, Location? equal_loc, BlockNode | BlockArgumentNode | nil block) -> void
|
|
566
|
+
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?receiver: Prism::node?, ?call_operator_loc: Location?, ?name: Symbol, ?message_loc: Location?, ?opening_loc: Location?, ?arguments: ArgumentsNode?, ?closing_loc: Location?, ?equal_loc: Location?, ?block: BlockNode | BlockArgumentNode | nil) -> CallNode
|
|
567
|
+
def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, receiver: Prism::node?, call_operator_loc: Location?, name: Symbol, message_loc: Location?, opening_loc: Location?, arguments: ArgumentsNode?, closing_loc: Location?, equal_loc: Location?, block: BlockNode | BlockArgumentNode | nil }
|
|
566
568
|
def call_operator: () -> String?
|
|
567
569
|
def message: () -> String?
|
|
568
570
|
def opening: () -> String?
|
|
569
571
|
def closing: () -> String?
|
|
572
|
+
def equal: () -> String?
|
|
570
573
|
def type: () -> :call_node
|
|
571
574
|
| ...
|
|
572
575
|
def self.type: () -> :call_node
|
|
@@ -1526,10 +1529,15 @@ module Prism
|
|
|
1526
1529
|
def self.type: () -> :forwarding_parameter_node
|
|
1527
1530
|
end
|
|
1528
1531
|
|
|
1529
|
-
# Represents the use of the `super` keyword without parentheses or arguments.
|
|
1532
|
+
# Represents the use of the `super` keyword without parentheses or arguments, but which might have a block.
|
|
1530
1533
|
#
|
|
1531
1534
|
# super
|
|
1532
1535
|
# ^^^^^
|
|
1536
|
+
#
|
|
1537
|
+
# super { 123 }
|
|
1538
|
+
# ^^^^^^^^^^^^^
|
|
1539
|
+
#
|
|
1540
|
+
# If it has any other arguments, it would be a `SuperNode` instead.
|
|
1533
1541
|
class ForwardingSuperNode < Node
|
|
1534
1542
|
include _Node
|
|
1535
1543
|
|
|
@@ -2254,15 +2262,15 @@ module Prism
|
|
|
2254
2262
|
def mutable?: () -> bool
|
|
2255
2263
|
|
|
2256
2264
|
attr_reader opening_loc: Location?
|
|
2257
|
-
attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode]
|
|
2265
|
+
attr_reader parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode | InterpolatedXStringNode | SymbolNode | InterpolatedSymbolNode]
|
|
2258
2266
|
attr_reader closing_loc: Location?
|
|
2259
2267
|
|
|
2260
2268
|
def save_opening_loc: (_Repository repository) -> void
|
|
2261
2269
|
def save_closing_loc: (_Repository repository) -> void
|
|
2262
2270
|
|
|
2263
|
-
def initialize: (Source source, Integer node_id, Location location, Integer flags, Location? opening_loc, Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode] parts, Location? closing_loc) -> void
|
|
2264
|
-
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode], ?closing_loc: Location?) -> InterpolatedStringNode
|
|
2265
|
-
def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location?, parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode], closing_loc: Location? }
|
|
2271
|
+
def initialize: (Source source, Integer node_id, Location location, Integer flags, Location? opening_loc, Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode | InterpolatedXStringNode | SymbolNode | InterpolatedSymbolNode] parts, Location? closing_loc) -> void
|
|
2272
|
+
def copy: (?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location?, ?parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode | InterpolatedXStringNode | SymbolNode | InterpolatedSymbolNode], ?closing_loc: Location?) -> InterpolatedStringNode
|
|
2273
|
+
def deconstruct_keys: (Array[Symbol] keys) -> { node_id: Integer, location: Location, opening_loc: Location?, parts: Array[StringNode | EmbeddedStatementsNode | EmbeddedVariableNode | InterpolatedStringNode | XStringNode | InterpolatedXStringNode | SymbolNode | InterpolatedSymbolNode], closing_loc: Location? }
|
|
2266
2274
|
def opening: () -> String?
|
|
2267
2275
|
def closing: () -> String?
|
|
2268
2276
|
def type: () -> :interpolated_string_node
|
|
@@ -3594,6 +3602,8 @@ module Prism
|
|
|
3594
3602
|
#
|
|
3595
3603
|
# super foo, bar
|
|
3596
3604
|
# ^^^^^^^^^^^^^^
|
|
3605
|
+
#
|
|
3606
|
+
# If no arguments are provided (except for a block), it would be a `ForwardingSuperNode` instead.
|
|
3597
3607
|
class SuperNode < Node
|
|
3598
3608
|
include _Node
|
|
3599
3609
|
|
data/src/diagnostic.c
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
#include "prism/diagnostic.h"
|
|
12
12
|
|
|
13
|
-
#define PM_DIAGNOSTIC_ID_MAX
|
|
13
|
+
#define PM_DIAGNOSTIC_ID_MAX 324
|
|
14
14
|
|
|
15
15
|
/** This struct holds the data for each diagnostic. */
|
|
16
16
|
typedef struct {
|
|
@@ -311,6 +311,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = {
|
|
|
311
311
|
[PM_ERR_PARAMETER_UNEXPECTED_NO_KW] = { "unexpected **nil; no keywords marker disallowed after keywords", PM_ERROR_LEVEL_SYNTAX },
|
|
312
312
|
[PM_ERR_PATTERN_ARRAY_MULTIPLE_RESTS] = { "unexpected multiple '*' rest patterns in an array pattern", PM_ERROR_LEVEL_SYNTAX },
|
|
313
313
|
[PM_ERR_PATTERN_CAPTURE_DUPLICATE] = { "duplicated variable name", PM_ERROR_LEVEL_SYNTAX },
|
|
314
|
+
[PM_ERR_PATTERN_CAPTURE_IN_ALTERNATIVE] = { "variable capture in alternative pattern", PM_ERROR_LEVEL_SYNTAX },
|
|
314
315
|
[PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET] = { "expected a pattern expression after the `[` operator", PM_ERROR_LEVEL_SYNTAX },
|
|
315
316
|
[PM_ERR_PATTERN_EXPRESSION_AFTER_COMMA] = { "expected a pattern expression after `,`", PM_ERROR_LEVEL_SYNTAX },
|
|
316
317
|
[PM_ERR_PATTERN_EXPRESSION_AFTER_HROCKET] = { "expected a pattern expression after `=>`", PM_ERROR_LEVEL_SYNTAX },
|
|
@@ -371,6 +372,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = {
|
|
|
371
372
|
[PM_ERR_UNEXPECTED_INDEX_KEYWORDS] = { "unexpected keyword arg given in index assignment; keywords are not allowed in index assignment expressions", PM_ERROR_LEVEL_SYNTAX },
|
|
372
373
|
[PM_ERR_UNEXPECTED_LABEL] = { "unexpected label", PM_ERROR_LEVEL_SYNTAX },
|
|
373
374
|
[PM_ERR_UNEXPECTED_MULTI_WRITE] = { "unexpected multiple assignment; multiple assignment is not allowed in this context", PM_ERROR_LEVEL_SYNTAX },
|
|
375
|
+
[PM_ERR_UNEXPECTED_PARAMETER_DEFAULT_VALUE] = { "unexpected %s; expected a default value for a parameter", PM_ERROR_LEVEL_SYNTAX },
|
|
374
376
|
[PM_ERR_UNEXPECTED_RANGE_OPERATOR] = { "unexpected range operator; .. and ... are non-associative and cannot be chained", PM_ERROR_LEVEL_SYNTAX },
|
|
375
377
|
[PM_ERR_UNEXPECTED_SAFE_NAVIGATION] = { "&. inside multiple assignment destination", PM_ERROR_LEVEL_SYNTAX },
|
|
376
378
|
[PM_ERR_UNEXPECTED_TOKEN_CLOSE_CONTEXT] = { "unexpected %s, assuming it is closing the parent %s", PM_ERROR_LEVEL_SYNTAX },
|
|
@@ -642,6 +644,7 @@ pm_diagnostic_id_human(pm_diagnostic_id_t diag_id) {
|
|
|
642
644
|
case PM_ERR_PARAMETER_WILD_LOOSE_COMMA: return "parameter_wild_loose_comma";
|
|
643
645
|
case PM_ERR_PATTERN_ARRAY_MULTIPLE_RESTS: return "pattern_array_multiple_rests";
|
|
644
646
|
case PM_ERR_PATTERN_CAPTURE_DUPLICATE: return "pattern_capture_duplicate";
|
|
647
|
+
case PM_ERR_PATTERN_CAPTURE_IN_ALTERNATIVE: return "pattern_capture_in_alternative";
|
|
645
648
|
case PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET: return "pattern_expression_after_bracket";
|
|
646
649
|
case PM_ERR_PATTERN_EXPRESSION_AFTER_COMMA: return "pattern_expression_after_comma";
|
|
647
650
|
case PM_ERR_PATTERN_EXPRESSION_AFTER_HROCKET: return "pattern_expression_after_hrocket";
|
|
@@ -703,6 +706,7 @@ pm_diagnostic_id_human(pm_diagnostic_id_t diag_id) {
|
|
|
703
706
|
case PM_ERR_UNEXPECTED_INDEX_KEYWORDS: return "unexpected_index_keywords";
|
|
704
707
|
case PM_ERR_UNEXPECTED_LABEL: return "unexpected_label";
|
|
705
708
|
case PM_ERR_UNEXPECTED_MULTI_WRITE: return "unexpected_multi_write";
|
|
709
|
+
case PM_ERR_UNEXPECTED_PARAMETER_DEFAULT_VALUE: return "unexpected_parameter_default_value";
|
|
706
710
|
case PM_ERR_UNEXPECTED_RANGE_OPERATOR: return "unexpected_range_operator";
|
|
707
711
|
case PM_ERR_UNEXPECTED_SAFE_NAVIGATION: return "unexpected_safe_navigation";
|
|
708
712
|
case PM_ERR_UNEXPECTED_TOKEN_CLOSE_CONTEXT: return "unexpected_token_close_context";
|