prism 1.4.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 +73 -1
- data/Makefile +7 -5
- data/README.md +3 -1
- data/config.yml +294 -41
- data/docs/build_system.md +2 -2
- data/docs/cruby_compilation.md +1 -1
- data/docs/design.md +2 -2
- data/docs/parser_translation.md +8 -23
- data/docs/releasing.md +6 -25
- data/docs/ripper_translation.md +1 -1
- data/ext/prism/api_node.c +9 -3
- data/ext/prism/extconf.rb +1 -1
- data/ext/prism/extension.c +24 -3
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +360 -70
- data/include/prism/diagnostic.h +7 -0
- data/include/prism/options.h +49 -3
- data/include/prism/parser.h +3 -0
- data/include/prism/regexp.h +2 -2
- data/include/prism/util/pm_buffer.h +8 -0
- data/include/prism/util/pm_integer.h +4 -0
- data/include/prism/util/pm_list.h +6 -0
- data/include/prism/util/pm_string.h +12 -2
- data/include/prism/version.h +2 -2
- data/include/prism.h +40 -15
- data/lib/prism/compiler.rb +456 -151
- data/lib/prism/desugar_compiler.rb +1 -0
- data/lib/prism/dispatcher.rb +16 -0
- data/lib/prism/dot_visitor.rb +10 -1
- data/lib/prism/dsl.rb +5 -2
- data/lib/prism/ffi.rb +28 -10
- data/lib/prism/inspect_visitor.rb +4 -0
- data/lib/prism/lex_compat.rb +1 -0
- data/lib/prism/mutation_compiler.rb +3 -0
- data/lib/prism/node.rb +559 -349
- data/lib/prism/node_ext.rb +4 -1
- data/lib/prism/pack.rb +2 -0
- data/lib/prism/parse_result/comments.rb +1 -0
- data/lib/prism/parse_result/errors.rb +1 -0
- data/lib/prism/parse_result/newlines.rb +1 -0
- data/lib/prism/parse_result.rb +3 -15
- data/lib/prism/pattern.rb +1 -0
- data/lib/prism/polyfill/scan_byte.rb +14 -0
- data/lib/prism/polyfill/warn.rb +36 -0
- data/lib/prism/reflection.rb +4 -1
- data/lib/prism/relocation.rb +1 -0
- data/lib/prism/serialize.rb +30 -22
- data/lib/prism/string_query.rb +1 -0
- data/lib/prism/translation/parser/builder.rb +1 -0
- data/lib/prism/translation/parser/compiler.rb +63 -41
- data/lib/prism/translation/parser/lexer.rb +29 -21
- data/lib/prism/translation/parser.rb +25 -4
- data/lib/prism/translation/parser33.rb +1 -0
- data/lib/prism/translation/parser34.rb +1 -0
- data/lib/prism/translation/parser35.rb +2 -6
- data/lib/prism/translation/parser40.rb +13 -0
- data/lib/prism/translation/parser41.rb +13 -0
- data/lib/prism/translation/parser_current.rb +26 -0
- data/lib/prism/translation/ripper/sexp.rb +1 -0
- data/lib/prism/translation/ripper.rb +19 -3
- data/lib/prism/translation/ruby_parser.rb +340 -22
- data/lib/prism/translation.rb +4 -0
- data/lib/prism/visitor.rb +457 -152
- data/lib/prism.rb +22 -0
- data/prism.gemspec +9 -1
- data/rbi/prism/dsl.rbi +6 -6
- data/rbi/prism/node.rbi +42 -17
- 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/dispatcher.rbs +3 -0
- data/sig/prism/dsl.rbs +5 -5
- data/sig/prism/node.rbs +462 -38
- data/sig/prism/node_ext.rbs +84 -17
- data/sig/prism/parse_result/comments.rbs +38 -0
- data/sig/prism/parse_result.rbs +4 -0
- data/sig/prism/reflection.rbs +1 -1
- data/sig/prism.rbs +4 -0
- data/src/diagnostic.c +13 -1
- data/src/encoding.c +172 -67
- data/src/node.c +11 -0
- data/src/options.c +17 -7
- data/src/prettyprint.c +18 -0
- data/src/prism.c +1495 -2021
- data/src/serialize.c +9 -1
- data/src/token_type.c +38 -36
- data/src/util/pm_constant_pool.c +1 -1
- data/src/util/pm_string.c +6 -8
- metadata +11 -3
data/lib/prism.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# :markup: markdown
|
|
2
3
|
|
|
3
4
|
# The Prism Ruby parser.
|
|
4
5
|
#
|
|
@@ -36,6 +37,26 @@ module Prism
|
|
|
36
37
|
private_constant :LexCompat
|
|
37
38
|
private_constant :LexRipper
|
|
38
39
|
|
|
40
|
+
# Raised when requested to parse as the currently running Ruby version but Prism has no support for it.
|
|
41
|
+
class CurrentVersionError < ArgumentError
|
|
42
|
+
# Initialize a new exception for the given ruby version string.
|
|
43
|
+
def initialize(version)
|
|
44
|
+
message = +"invalid version: Requested to parse as `version: 'current'`; "
|
|
45
|
+
segments =
|
|
46
|
+
if version.match?(/\A\d+\.\d+.\d+\z/)
|
|
47
|
+
version.split(".").map(&:to_i)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if segments && ((segments[0] < 3) || (segments[0] == 3 && segments[1] < 3))
|
|
51
|
+
message << " #{version} is below the minimum supported syntax."
|
|
52
|
+
else
|
|
53
|
+
message << " #{version} is unknown. Please update the `prism` gem."
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
super(message)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
39
60
|
# :call-seq:
|
|
40
61
|
# Prism::lex_compat(source, **options) -> LexCompat::Result
|
|
41
62
|
#
|
|
@@ -68,6 +89,7 @@ module Prism
|
|
|
68
89
|
end
|
|
69
90
|
|
|
70
91
|
require_relative "prism/polyfill/byteindex"
|
|
92
|
+
require_relative "prism/polyfill/warn"
|
|
71
93
|
require_relative "prism/node"
|
|
72
94
|
require_relative "prism/node_ext"
|
|
73
95
|
require_relative "prism/parse_result"
|
data/prism.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |spec|
|
|
4
4
|
spec.name = "prism"
|
|
5
|
-
spec.version = "1.
|
|
5
|
+
spec.version = "1.7.0"
|
|
6
6
|
spec.authors = ["Shopify"]
|
|
7
7
|
spec.email = ["ruby@shopify.com"]
|
|
8
8
|
|
|
@@ -88,16 +88,21 @@ Gem::Specification.new do |spec|
|
|
|
88
88
|
"lib/prism/pattern.rb",
|
|
89
89
|
"lib/prism/polyfill/append_as_bytes.rb",
|
|
90
90
|
"lib/prism/polyfill/byteindex.rb",
|
|
91
|
+
"lib/prism/polyfill/scan_byte.rb",
|
|
91
92
|
"lib/prism/polyfill/unpack1.rb",
|
|
93
|
+
"lib/prism/polyfill/warn.rb",
|
|
92
94
|
"lib/prism/reflection.rb",
|
|
93
95
|
"lib/prism/relocation.rb",
|
|
94
96
|
"lib/prism/serialize.rb",
|
|
95
97
|
"lib/prism/string_query.rb",
|
|
96
98
|
"lib/prism/translation.rb",
|
|
97
99
|
"lib/prism/translation/parser.rb",
|
|
100
|
+
"lib/prism/translation/parser_current.rb",
|
|
98
101
|
"lib/prism/translation/parser33.rb",
|
|
99
102
|
"lib/prism/translation/parser34.rb",
|
|
100
103
|
"lib/prism/translation/parser35.rb",
|
|
104
|
+
"lib/prism/translation/parser40.rb",
|
|
105
|
+
"lib/prism/translation/parser41.rb",
|
|
101
106
|
"lib/prism/translation/parser/builder.rb",
|
|
102
107
|
"lib/prism/translation/parser/compiler.rb",
|
|
103
108
|
"lib/prism/translation/parser/lexer.rb",
|
|
@@ -120,6 +125,8 @@ Gem::Specification.new do |spec|
|
|
|
120
125
|
"rbi/prism/translation/parser33.rbi",
|
|
121
126
|
"rbi/prism/translation/parser34.rbi",
|
|
122
127
|
"rbi/prism/translation/parser35.rbi",
|
|
128
|
+
"rbi/prism/translation/parser40.rbi",
|
|
129
|
+
"rbi/prism/translation/parser41.rbi",
|
|
123
130
|
"rbi/prism/translation/ripper.rbi",
|
|
124
131
|
"rbi/prism/visitor.rbi",
|
|
125
132
|
"sig/prism.rbs",
|
|
@@ -134,6 +141,7 @@ Gem::Specification.new do |spec|
|
|
|
134
141
|
"sig/prism/node.rbs",
|
|
135
142
|
"sig/prism/pack.rbs",
|
|
136
143
|
"sig/prism/parse_result.rbs",
|
|
144
|
+
"sig/prism/parse_result/comments.rbs",
|
|
137
145
|
"sig/prism/pattern.rbs",
|
|
138
146
|
"sig/prism/reflection.rbs",
|
|
139
147
|
"sig/prism/relocation.rbs",
|
data/rbi/prism/dsl.rbi
CHANGED
|
@@ -31,7 +31,7 @@ module Prism::DSL
|
|
|
31
31
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, elements: T::Array[Prism::Node], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::ArrayNode) }
|
|
32
32
|
def array_node(source: default_source, node_id: 0, location: default_location, flags: 0, elements: [], opening_loc: nil, closing_loc: nil); end
|
|
33
33
|
|
|
34
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
34
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), requireds: T::Array[Prism::Node], rest: T.nilable(Prism::Node), posts: T::Array[Prism::Node], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::ArrayPatternNode) }
|
|
35
35
|
def array_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, requireds: [], rest: nil, posts: [], opening_loc: nil, closing_loc: nil); end
|
|
36
36
|
|
|
37
37
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, key: Prism::Node, value: Prism::Node, operator_loc: T.nilable(Prism::Location)).returns(Prism::AssocNode) }
|
|
@@ -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
|
|
@@ -166,7 +166,7 @@ module Prism::DSL
|
|
|
166
166
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer).returns(Prism::FalseNode) }
|
|
167
167
|
def false_node(source: default_source, node_id: 0, location: default_location, flags: 0); end
|
|
168
168
|
|
|
169
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
169
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), left: Prism::SplatNode, requireds: T::Array[Prism::Node], right: T.any(Prism::SplatNode, Prism::MissingNode), opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::FindPatternNode) }
|
|
170
170
|
def find_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, left: splat_node(source: source), requireds: [], right: splat_node(source: source), opening_loc: nil, closing_loc: nil); end
|
|
171
171
|
|
|
172
172
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, left: T.nilable(Prism::Node), right: T.nilable(Prism::Node), operator_loc: Prism::Location).returns(Prism::FlipFlopNode) }
|
|
@@ -208,7 +208,7 @@ module Prism::DSL
|
|
|
208
208
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, opening_loc: Prism::Location, elements: T::Array[T.any(Prism::AssocNode, Prism::AssocSplatNode)], closing_loc: Prism::Location).returns(Prism::HashNode) }
|
|
209
209
|
def hash_node(source: default_source, node_id: 0, location: default_location, flags: 0, opening_loc: location, elements: [], closing_loc: location); end
|
|
210
210
|
|
|
211
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
211
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), elements: T::Array[Prism::AssocNode], rest: T.nilable(T.any(Prism::AssocSplatNode, Prism::NoKeywordsParameterNode)), opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::HashPatternNode) }
|
|
212
212
|
def hash_pattern_node(source: default_source, node_id: 0, location: default_location, flags: 0, constant: nil, elements: [], rest: nil, opening_loc: nil, closing_loc: nil); end
|
|
213
213
|
|
|
214
214
|
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, if_keyword_loc: T.nilable(Prism::Location), predicate: Prism::Node, then_keyword_loc: T.nilable(Prism::Location), statements: T.nilable(Prism::StatementsNode), subsequent: T.nilable(T.any(Prism::ElseNode, Prism::IfNode)), end_keyword_loc: T.nilable(Prism::Location)).returns(Prism::IfNode) }
|
|
@@ -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
|
@@ -417,7 +417,7 @@ end
|
|
|
417
417
|
# foo in Bar[1, 2, 3]
|
|
418
418
|
# ^^^^^^^^^^^^^^^^^^^
|
|
419
419
|
class Prism::ArrayPatternNode < Prism::Node
|
|
420
|
-
sig { returns(T.nilable(T.any(Prism::
|
|
420
|
+
sig { returns(T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode))) }
|
|
421
421
|
def constant; end
|
|
422
422
|
|
|
423
423
|
sig { returns(T::Array[Prism::Node]) }
|
|
@@ -435,7 +435,7 @@ class Prism::ArrayPatternNode < Prism::Node
|
|
|
435
435
|
sig { returns(T.nilable(Prism::Location)) }
|
|
436
436
|
def closing_loc; end
|
|
437
437
|
|
|
438
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
438
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), requireds: T::Array[Prism::Node], rest: T.nilable(Prism::Node), posts: T::Array[Prism::Node], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).void }
|
|
439
439
|
def initialize(source, node_id, location, flags, constant, requireds, rest, posts, opening_loc, closing_loc); end
|
|
440
440
|
|
|
441
441
|
sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
|
|
@@ -453,7 +453,7 @@ class Prism::ArrayPatternNode < Prism::Node
|
|
|
453
453
|
sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
|
|
454
454
|
def comment_targets; end
|
|
455
455
|
|
|
456
|
-
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
456
|
+
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), requireds: T::Array[Prism::Node], rest: T.nilable(Prism::Node), posts: T::Array[Prism::Node], opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::ArrayPatternNode) }
|
|
457
457
|
def copy(node_id: self.node_id, location: self.location, flags: self.flags, constant: self.constant, requireds: self.requireds, rest: self.rest, posts: self.posts, opening_loc: self.opening_loc, closing_loc: self.closing_loc); end
|
|
458
458
|
|
|
459
459
|
sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
|
|
@@ -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
|
|
|
@@ -3002,8 +3008,11 @@ end
|
|
|
3002
3008
|
#
|
|
3003
3009
|
# foo in Foo(*bar, baz, *qux)
|
|
3004
3010
|
# ^^^^^^^^^^^^^^^^^^^^
|
|
3011
|
+
#
|
|
3012
|
+
# foo => *bar, baz, *qux
|
|
3013
|
+
# ^^^^^^^^^^^^^^^
|
|
3005
3014
|
class Prism::FindPatternNode < Prism::Node
|
|
3006
|
-
sig { returns(T.nilable(T.any(Prism::
|
|
3015
|
+
sig { returns(T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode))) }
|
|
3007
3016
|
def constant; end
|
|
3008
3017
|
|
|
3009
3018
|
sig { returns(Prism::SplatNode) }
|
|
@@ -3021,7 +3030,7 @@ class Prism::FindPatternNode < Prism::Node
|
|
|
3021
3030
|
sig { returns(T.nilable(Prism::Location)) }
|
|
3022
3031
|
def closing_loc; end
|
|
3023
3032
|
|
|
3024
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
3033
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), left: Prism::SplatNode, requireds: T::Array[Prism::Node], right: T.any(Prism::SplatNode, Prism::MissingNode), opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).void }
|
|
3025
3034
|
def initialize(source, node_id, location, flags, constant, left, requireds, right, opening_loc, closing_loc); end
|
|
3026
3035
|
|
|
3027
3036
|
sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
|
|
@@ -3039,7 +3048,7 @@ class Prism::FindPatternNode < Prism::Node
|
|
|
3039
3048
|
sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
|
|
3040
3049
|
def comment_targets; end
|
|
3041
3050
|
|
|
3042
|
-
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
3051
|
+
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), left: Prism::SplatNode, requireds: T::Array[Prism::Node], right: T.any(Prism::SplatNode, Prism::MissingNode), opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::FindPatternNode) }
|
|
3043
3052
|
def copy(node_id: self.node_id, location: self.location, flags: self.flags, constant: self.constant, left: self.left, requireds: self.requireds, right: self.right, opening_loc: self.opening_loc, closing_loc: self.closing_loc); end
|
|
3044
3053
|
|
|
3045
3054
|
sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
|
|
@@ -3310,10 +3319,15 @@ class Prism::ForwardingParameterNode < Prism::Node
|
|
|
3310
3319
|
def type; end
|
|
3311
3320
|
end
|
|
3312
3321
|
|
|
3313
|
-
# 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.
|
|
3314
3323
|
#
|
|
3315
3324
|
# super
|
|
3316
3325
|
# ^^^^^
|
|
3326
|
+
#
|
|
3327
|
+
# super { 123 }
|
|
3328
|
+
# ^^^^^^^^^^^^^
|
|
3329
|
+
#
|
|
3330
|
+
# If it has any other arguments, it would be a `SuperNode` instead.
|
|
3317
3331
|
class Prism::ForwardingSuperNode < Prism::Node
|
|
3318
3332
|
sig { returns(T.nilable(Prism::BlockNode)) }
|
|
3319
3333
|
def block; end
|
|
@@ -3713,8 +3727,14 @@ end
|
|
|
3713
3727
|
#
|
|
3714
3728
|
# foo => { a: 1, b: 2, **c }
|
|
3715
3729
|
# ^^^^^^^^^^^^^^^^^^^
|
|
3730
|
+
#
|
|
3731
|
+
# foo => Bar[a: 1, b: 2]
|
|
3732
|
+
# ^^^^^^^^^^^^^^^
|
|
3733
|
+
#
|
|
3734
|
+
# foo in { a: 1, b: 2 }
|
|
3735
|
+
# ^^^^^^^^^^^^^^
|
|
3716
3736
|
class Prism::HashPatternNode < Prism::Node
|
|
3717
|
-
sig { returns(T.nilable(T.any(Prism::
|
|
3737
|
+
sig { returns(T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode))) }
|
|
3718
3738
|
def constant; end
|
|
3719
3739
|
|
|
3720
3740
|
sig { returns(T::Array[Prism::AssocNode]) }
|
|
@@ -3729,7 +3749,7 @@ class Prism::HashPatternNode < Prism::Node
|
|
|
3729
3749
|
sig { returns(T.nilable(Prism::Location)) }
|
|
3730
3750
|
def closing_loc; end
|
|
3731
3751
|
|
|
3732
|
-
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
3752
|
+
sig { params(source: Prism::Source, node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), elements: T::Array[Prism::AssocNode], rest: T.nilable(T.any(Prism::AssocSplatNode, Prism::NoKeywordsParameterNode)), opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).void }
|
|
3733
3753
|
def initialize(source, node_id, location, flags, constant, elements, rest, opening_loc, closing_loc); end
|
|
3734
3754
|
|
|
3735
3755
|
sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
|
|
@@ -3747,7 +3767,7 @@ class Prism::HashPatternNode < Prism::Node
|
|
|
3747
3767
|
sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
|
|
3748
3768
|
def comment_targets; end
|
|
3749
3769
|
|
|
3750
|
-
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::
|
|
3770
|
+
sig { params(node_id: Integer, location: Prism::Location, flags: Integer, constant: T.nilable(T.any(Prism::ConstantPathNode, Prism::ConstantReadNode)), elements: T::Array[Prism::AssocNode], rest: T.nilable(T.any(Prism::AssocSplatNode, Prism::NoKeywordsParameterNode)), opening_loc: T.nilable(Prism::Location), closing_loc: T.nilable(Prism::Location)).returns(Prism::HashPatternNode) }
|
|
3751
3771
|
def copy(node_id: self.node_id, location: self.location, flags: self.flags, constant: self.constant, elements: self.elements, rest: self.rest, opening_loc: self.opening_loc, closing_loc: self.closing_loc); end
|
|
3752
3772
|
|
|
3753
3773
|
sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
|
|
@@ -4919,13 +4939,13 @@ class Prism::InterpolatedStringNode < Prism::Node
|
|
|
4919
4939
|
sig { returns(T.nilable(Prism::Location)) }
|
|
4920
4940
|
def opening_loc; end
|
|
4921
4941
|
|
|
4922
|
-
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)]) }
|
|
4923
4943
|
def parts; end
|
|
4924
4944
|
|
|
4925
4945
|
sig { returns(T.nilable(Prism::Location)) }
|
|
4926
4946
|
def closing_loc; end
|
|
4927
4947
|
|
|
4928
|
-
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 }
|
|
4929
4949
|
def initialize(source, node_id, location, flags, opening_loc, parts, closing_loc); end
|
|
4930
4950
|
|
|
4931
4951
|
sig { override.params(visitor: Prism::Visitor).returns(T.untyped) }
|
|
@@ -4943,7 +4963,7 @@ class Prism::InterpolatedStringNode < Prism::Node
|
|
|
4943
4963
|
sig { override.returns(T::Array[T.any(Prism::Node, Prism::Location)]) }
|
|
4944
4964
|
def comment_targets; end
|
|
4945
4965
|
|
|
4946
|
-
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) }
|
|
4947
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
|
|
4948
4968
|
|
|
4949
4969
|
sig { params(keys: T.nilable(T::Array[Symbol])).returns(T::Hash[Symbol, T.untyped]) }
|
|
@@ -5537,6 +5557,9 @@ end
|
|
|
5537
5557
|
#
|
|
5538
5558
|
# foo, bar = baz
|
|
5539
5559
|
# ^^^ ^^^
|
|
5560
|
+
#
|
|
5561
|
+
# foo => baz
|
|
5562
|
+
# ^^^
|
|
5540
5563
|
class Prism::LocalVariableTargetNode < Prism::Node
|
|
5541
5564
|
sig { returns(Symbol) }
|
|
5542
5565
|
def name; end
|
|
@@ -7952,6 +7975,8 @@ end
|
|
|
7952
7975
|
#
|
|
7953
7976
|
# super foo, bar
|
|
7954
7977
|
# ^^^^^^^^^^^^^^
|
|
7978
|
+
#
|
|
7979
|
+
# If no arguments are provided (except for a block), it would be a `ForwardingSuperNode` instead.
|
|
7955
7980
|
class Prism::SuperNode < Prism::Node
|
|
7956
7981
|
sig { returns(Prism::Location) }
|
|
7957
7982
|
def keyword_loc; end
|
data/sig/prism/dispatcher.rbs
CHANGED
|
@@ -4,9 +4,12 @@ module Prism
|
|
|
4
4
|
|
|
5
5
|
def initialize: () -> void
|
|
6
6
|
def register: (untyped, *Symbol) -> void
|
|
7
|
+
def register_public_methods: (untyped) -> void
|
|
7
8
|
def dispatch: (Prism::node) -> void
|
|
8
9
|
def dispatch_once: (Prism::node) -> void
|
|
9
10
|
|
|
11
|
+
private def register_events: (untyped, Array[Symbol]) -> void
|
|
12
|
+
|
|
10
13
|
class DispatchOnce < Visitor
|
|
11
14
|
attr_reader listeners: Hash[Symbol, Array[untyped]]
|
|
12
15
|
|
data/sig/prism/dsl.rbs
CHANGED
|
@@ -20,7 +20,7 @@ module Prism
|
|
|
20
20
|
|
|
21
21
|
def array_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?elements: Array[Prism::node], ?opening_loc: Location?, ?closing_loc: Location?) -> ArrayNode
|
|
22
22
|
|
|
23
|
-
def array_pattern_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?constant:
|
|
23
|
+
def array_pattern_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?constant: ConstantPathNode | ConstantReadNode | nil, ?requireds: Array[Prism::node], ?rest: Prism::node?, ?posts: Array[Prism::node], ?opening_loc: Location?, ?closing_loc: Location?) -> ArrayPatternNode
|
|
24
24
|
|
|
25
25
|
def assoc_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?key: Prism::node, ?value: Prism::node, ?operator_loc: Location?) -> AssocNode
|
|
26
26
|
|
|
@@ -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
|
|
|
@@ -110,7 +110,7 @@ module Prism
|
|
|
110
110
|
|
|
111
111
|
def false_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer) -> FalseNode
|
|
112
112
|
|
|
113
|
-
def find_pattern_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?constant:
|
|
113
|
+
def find_pattern_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?constant: ConstantPathNode | ConstantReadNode | nil, ?left: SplatNode, ?requireds: Array[Prism::node], ?right: SplatNode | MissingNode, ?opening_loc: Location?, ?closing_loc: Location?) -> FindPatternNode
|
|
114
114
|
|
|
115
115
|
def flip_flop_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?left: Prism::node?, ?right: Prism::node?, ?operator_loc: Location) -> FlipFlopNode
|
|
116
116
|
|
|
@@ -138,7 +138,7 @@ module Prism
|
|
|
138
138
|
|
|
139
139
|
def hash_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?opening_loc: Location, ?elements: Array[AssocNode | AssocSplatNode], ?closing_loc: Location) -> HashNode
|
|
140
140
|
|
|
141
|
-
def hash_pattern_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?constant:
|
|
141
|
+
def hash_pattern_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?constant: ConstantPathNode | ConstantReadNode | nil, ?elements: Array[AssocNode], ?rest: AssocSplatNode | NoKeywordsParameterNode | nil, ?opening_loc: Location?, ?closing_loc: Location?) -> HashPatternNode
|
|
142
142
|
|
|
143
143
|
def if_node: (?source: Source, ?node_id: Integer, ?location: Location, ?flags: Integer, ?if_keyword_loc: Location?, ?predicate: Prism::node, ?then_keyword_loc: Location?, ?statements: StatementsNode?, ?subsequent: ElseNode | IfNode | nil, ?end_keyword_loc: Location?) -> IfNode
|
|
144
144
|
|
|
@@ -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
|
|