prism 0.16.0 → 0.17.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -1
- data/Makefile +6 -0
- data/README.md +1 -1
- data/config.yml +50 -35
- data/docs/fuzzing.md +1 -1
- data/docs/releasing.md +4 -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 +465 -160
- 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 +28 -3
- 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 +87 -55
- data/lib/prism/visitor.rb +10 -3
- data/lib/prism.rb +20 -2
- data/prism.gemspec +4 -2
- data/rbi/prism.rbi +5545 -5505
- data/rbi/prism_static.rbi +141 -131
- 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_static.rbi
CHANGED
@@ -1,182 +1,192 @@
|
|
1
|
-
|
1
|
+
class Prism::ParseResult
|
2
|
+
sig { returns(Prism::ProgramNode) }
|
3
|
+
def value; end
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
sig { returns(ProgramNode) }
|
6
|
-
def value; end
|
5
|
+
sig { returns(T::Array[Prism::Comment]) }
|
6
|
+
def comments; end
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
sig { returns(T::Array[Prism::ParseError]) }
|
9
|
+
def errors; end
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
sig { returns(T::Array[Prism::ParseWarning]) }
|
12
|
+
def warnings; end
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
sig { returns(Prism::Source) }
|
15
|
+
def source; end
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
end
|
18
|
+
class Prism::ParseError
|
19
|
+
sig { returns(String) }
|
20
|
+
def message; end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
sig { returns(Prism::Location) }
|
23
|
+
def location; end
|
24
|
+
end
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
end
|
26
|
+
class Prism::ParseWarning
|
27
|
+
sig { returns(String) }
|
28
|
+
def message; end
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
sig { returns(Prism::Location) }
|
31
|
+
def location; end
|
32
|
+
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
end
|
34
|
+
class Prism::Node
|
35
|
+
sig { returns(T::Array[T.nilable(Prism::Node)]) }
|
36
|
+
def child_nodes; end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
def child_nodes; end
|
38
|
+
sig { returns(Prism::Location) }
|
39
|
+
def location; end
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
sig { returns(String) }
|
42
|
+
def slice; end
|
43
|
+
end
|
43
44
|
|
44
|
-
|
45
|
-
|
46
|
-
end
|
45
|
+
class Prism::Comment
|
46
|
+
sig { returns(Prism::Location) }
|
47
|
+
def location; end
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
49
|
+
sig { returns(T::Boolean) }
|
50
|
+
def trailing?; end
|
51
|
+
end
|
52
52
|
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
class Prism::InlineComment < Prism::Comment
|
54
|
+
sig { override.returns(T::Boolean) }
|
55
|
+
def trailing?; end
|
56
|
+
end
|
56
57
|
|
57
|
-
|
58
|
-
|
58
|
+
class Prism::EmbDocComment < Prism::Comment
|
59
|
+
end
|
59
60
|
|
60
|
-
|
61
|
-
|
61
|
+
class Prism::DATAComment < Prism::Comment
|
62
|
+
end
|
62
63
|
|
63
|
-
|
64
|
-
|
64
|
+
class Prism::Location
|
65
|
+
sig { params(source: Prism::Source, start_offset: Integer, length: Integer).void }
|
66
|
+
def initialize(source, start_offset, length); end
|
65
67
|
|
66
|
-
|
67
|
-
|
68
|
+
sig { returns(String) }
|
69
|
+
def slice; end
|
68
70
|
|
69
|
-
|
70
|
-
|
71
|
+
sig { returns(T::Array[Prism::Comment]) }
|
72
|
+
def comments; end
|
71
73
|
|
72
|
-
|
73
|
-
|
74
|
+
sig { params(options: T.untyped).returns(Prism::Location) }
|
75
|
+
def copy(**options); end
|
74
76
|
|
75
|
-
|
76
|
-
|
77
|
+
sig { returns(Integer) }
|
78
|
+
def start_offset; end
|
77
79
|
|
78
|
-
|
79
|
-
|
80
|
+
sig { returns(Integer) }
|
81
|
+
def end_offset; end
|
80
82
|
|
81
|
-
|
82
|
-
|
83
|
-
end
|
83
|
+
sig { returns(Integer) }
|
84
|
+
def start_line; end
|
84
85
|
|
85
|
-
|
86
|
-
|
87
|
-
def initialize(source, offsets); end
|
86
|
+
sig { returns(Integer) }
|
87
|
+
def end_line; end
|
88
88
|
|
89
|
-
|
90
|
-
|
89
|
+
sig { returns(Integer) }
|
90
|
+
def start_column; end
|
91
91
|
|
92
|
-
|
93
|
-
|
92
|
+
sig { returns(Integer) }
|
93
|
+
def end_column; end
|
94
|
+
end
|
95
|
+
|
96
|
+
class Prism::Source
|
97
|
+
sig { params(source: String, start_line: Integer, offsets: T::Array[Integer]).void }
|
98
|
+
def initialize(source, start_line, offsets); end
|
94
99
|
|
95
|
-
|
96
|
-
|
100
|
+
sig { params(offset: Integer, length: Integer).returns(String) }
|
101
|
+
def slice(offset, length); end
|
97
102
|
|
98
|
-
|
99
|
-
|
103
|
+
sig { params(value: Integer).returns(Integer) }
|
104
|
+
def line(value); end
|
100
105
|
|
101
|
-
|
102
|
-
|
106
|
+
sig { params(value: Integer).returns(Integer) }
|
107
|
+
def line_offset(value); end
|
103
108
|
|
104
|
-
|
105
|
-
|
106
|
-
end
|
109
|
+
sig { params(value: Integer).returns(Integer) }
|
110
|
+
def column(value); end
|
107
111
|
|
108
|
-
|
109
|
-
|
110
|
-
def initialize(type, value, location); end
|
112
|
+
sig { returns(String) }
|
113
|
+
def source; end
|
111
114
|
|
112
|
-
|
113
|
-
|
115
|
+
sig { returns(T::Array[Integer]) }
|
116
|
+
def offsets; end
|
117
|
+
end
|
114
118
|
|
115
|
-
|
116
|
-
|
119
|
+
class Prism::Token
|
120
|
+
sig { params(type: T.untyped, value: String, location: Prism::Location).void }
|
121
|
+
def initialize(type, value, location); end
|
117
122
|
|
118
|
-
|
119
|
-
|
123
|
+
sig { params(keys: T.untyped).returns(T.untyped) }
|
124
|
+
def deconstruct_keys(keys); end
|
120
125
|
|
121
|
-
|
122
|
-
|
126
|
+
sig { params(q: T.untyped).returns(T.untyped) }
|
127
|
+
def pretty_print(q); end
|
123
128
|
|
124
|
-
|
125
|
-
|
129
|
+
sig { params(other: T.untyped).returns(T::Boolean) }
|
130
|
+
def ==(other); end
|
126
131
|
|
127
|
-
|
128
|
-
|
129
|
-
end
|
132
|
+
sig { returns(T.untyped) }
|
133
|
+
def type; end
|
130
134
|
|
131
|
-
|
132
|
-
|
133
|
-
def initialize(prefix); end
|
135
|
+
sig { returns(String) }
|
136
|
+
def value; end
|
134
137
|
|
135
|
-
|
136
|
-
|
138
|
+
sig { returns(Prism::Location) }
|
139
|
+
def location; end
|
140
|
+
end
|
137
141
|
|
138
|
-
|
139
|
-
|
142
|
+
class Prism::NodeInspector
|
143
|
+
sig { params(prefix: String).void }
|
144
|
+
def initialize(prefix); end
|
140
145
|
|
141
|
-
|
142
|
-
|
143
|
-
def <<(line); end
|
146
|
+
sig { returns(String) }
|
147
|
+
def prefix; end
|
144
148
|
|
145
|
-
|
146
|
-
|
147
|
-
sig { params(node: Node).returns(String) }
|
148
|
-
def header(node); end
|
149
|
+
sig { returns(String) }
|
150
|
+
def output; end
|
149
151
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
def list(prefix, nodes); end
|
152
|
+
# Appends a line to the output with the current prefix.
|
153
|
+
sig { params(line: String).void }
|
154
|
+
def <<(line); end
|
154
155
|
|
155
|
-
|
156
|
-
|
157
|
-
|
156
|
+
# This generates a string that is used as the header of the inspect output
|
157
|
+
# for any given node.
|
158
|
+
sig { params(node: Prism::Node).returns(String) }
|
159
|
+
def header(node); end
|
158
160
|
|
159
|
-
|
160
|
-
|
161
|
-
|
161
|
+
# Generates a string that represents a list of nodes. It handles properly
|
162
|
+
# using the box drawing characters to make the output look nice.
|
163
|
+
sig { params(prefix: String, nodes: T::Array[Prism::Node]).returns(String) }
|
164
|
+
def list(prefix, nodes); end
|
162
165
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
+
# Generates a string that represents a location field on a node.
|
167
|
+
sig { params(value: Prism::Location).returns(String) }
|
168
|
+
def location(value); end
|
166
169
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
170
|
+
# Generates a string that represents a child node.
|
171
|
+
sig { params(node: Prism::Node, append: String).returns(String) }
|
172
|
+
def child_node(node, append); end
|
173
|
+
|
174
|
+
# Returns a new inspector that can be used to inspect a child node.
|
175
|
+
sig { params(append: String).returns(Prism::NodeInspector) }
|
176
|
+
def child_inspector(append); end
|
177
|
+
|
178
|
+
# Returns the output as a string.
|
179
|
+
sig { returns(String) }
|
180
|
+
def to_str; end
|
181
|
+
end
|
171
182
|
|
172
|
-
|
173
|
-
|
174
|
-
|
183
|
+
class Prism::BasicVisitor
|
184
|
+
sig { params(node: T.nilable(Prism::Node)).void }
|
185
|
+
def visit(node); end
|
175
186
|
|
176
|
-
|
177
|
-
|
187
|
+
sig { params(nodes: T::Array[T.nilable(Prism::Node)]).void }
|
188
|
+
def visit_all(nodes); end
|
178
189
|
|
179
|
-
|
180
|
-
|
181
|
-
end
|
190
|
+
sig { params(node: Prism::Node).void }
|
191
|
+
def visit_child_nodes(node); end
|
182
192
|
end
|
data/sig/prism.rbs
CHANGED
@@ -607,10 +607,10 @@ module Prism
|
|
607
607
|
end
|
608
608
|
# Represents the use of a case statement.
|
609
609
|
#
|
610
|
-
#
|
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
|