prism 0.29.0 → 1.1.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 +77 -1
- data/CONTRIBUTING.md +0 -4
- data/README.md +4 -0
- data/config.yml +498 -145
- data/docs/fuzzing.md +1 -1
- data/docs/parsing_rules.md +4 -1
- data/docs/ripper_translation.md +22 -0
- data/docs/serialization.md +3 -0
- data/ext/prism/api_node.c +2858 -2082
- data/ext/prism/extconf.rb +1 -1
- data/ext/prism/extension.c +203 -421
- data/ext/prism/extension.h +2 -2
- data/include/prism/ast.h +1732 -453
- data/include/prism/defines.h +36 -0
- data/include/prism/diagnostic.h +23 -6
- data/include/prism/node.h +0 -21
- data/include/prism/options.h +94 -3
- data/include/prism/parser.h +57 -28
- data/include/prism/regexp.h +18 -8
- data/include/prism/static_literals.h +3 -2
- data/include/prism/util/pm_char.h +1 -2
- data/include/prism/util/pm_constant_pool.h +0 -8
- data/include/prism/util/pm_integer.h +22 -15
- data/include/prism/util/pm_newline_list.h +11 -0
- data/include/prism/util/pm_string.h +28 -12
- data/include/prism/version.h +3 -3
- data/include/prism.h +0 -11
- data/lib/prism/compiler.rb +3 -0
- data/lib/prism/desugar_compiler.rb +111 -74
- data/lib/prism/dispatcher.rb +16 -1
- data/lib/prism/dot_visitor.rb +45 -34
- data/lib/prism/dsl.rb +660 -468
- data/lib/prism/ffi.rb +64 -6
- data/lib/prism/inspect_visitor.rb +294 -64
- data/lib/prism/lex_compat.rb +1 -1
- data/lib/prism/mutation_compiler.rb +11 -6
- data/lib/prism/node.rb +2469 -4973
- data/lib/prism/node_ext.rb +91 -14
- data/lib/prism/parse_result/comments.rb +0 -7
- data/lib/prism/parse_result/errors.rb +65 -0
- data/lib/prism/parse_result/newlines.rb +101 -11
- data/lib/prism/parse_result.rb +43 -3
- data/lib/prism/reflection.rb +10 -8
- data/lib/prism/serialize.rb +484 -609
- data/lib/prism/translation/parser/compiler.rb +152 -132
- data/lib/prism/translation/parser/lexer.rb +26 -4
- data/lib/prism/translation/parser.rb +9 -4
- data/lib/prism/translation/ripper.rb +22 -20
- data/lib/prism/translation/ruby_parser.rb +73 -13
- data/lib/prism/visitor.rb +3 -0
- data/lib/prism.rb +0 -4
- data/prism.gemspec +3 -5
- data/rbi/prism/dsl.rbi +521 -0
- data/rbi/prism/node.rbi +744 -4837
- data/rbi/prism/visitor.rbi +3 -0
- data/rbi/prism.rbi +36 -30
- data/sig/prism/dsl.rbs +190 -303
- data/sig/prism/mutation_compiler.rbs +1 -0
- data/sig/prism/node.rbs +759 -628
- data/sig/prism/parse_result.rbs +2 -0
- data/sig/prism/visitor.rbs +1 -0
- data/sig/prism.rbs +103 -64
- data/src/diagnostic.c +62 -28
- data/src/node.c +499 -1754
- data/src/options.c +76 -27
- data/src/prettyprint.c +156 -112
- data/src/prism.c +2773 -2081
- data/src/regexp.c +202 -69
- data/src/serialize.c +170 -50
- data/src/static_literals.c +63 -84
- data/src/token_type.c +4 -4
- data/src/util/pm_constant_pool.c +0 -8
- data/src/util/pm_integer.c +53 -25
- data/src/util/pm_newline_list.c +29 -0
- data/src/util/pm_string.c +130 -80
- data/src/util/pm_strpbrk.c +32 -6
- metadata +4 -6
- data/include/prism/util/pm_string_list.h +0 -44
- data/lib/prism/debug.rb +0 -249
- data/lib/prism/translation/parser/rubocop.rb +0 -73
- data/src/util/pm_string_list.c +0 -28
data/sig/prism/parse_result.rbs
CHANGED
@@ -17,6 +17,8 @@ module Prism
|
|
17
17
|
def character_column: (Integer byte_offset) -> Integer
|
18
18
|
def code_units_offset: (Integer byte_offset, Encoding encoding) -> Integer
|
19
19
|
def code_units_column: (Integer byte_offset, Encoding encoding) -> Integer
|
20
|
+
|
21
|
+
def self.for: (String source) -> Source
|
20
22
|
end
|
21
23
|
|
22
24
|
class ASCIISource < Source
|
data/sig/prism/visitor.rbs
CHANGED
@@ -97,6 +97,7 @@ module Prism
|
|
97
97
|
def visit_interpolated_string_node: (InterpolatedStringNode) -> void
|
98
98
|
def visit_interpolated_symbol_node: (InterpolatedSymbolNode) -> void
|
99
99
|
def visit_interpolated_x_string_node: (InterpolatedXStringNode) -> void
|
100
|
+
def visit_it_local_variable_read_node: (ItLocalVariableReadNode) -> void
|
100
101
|
def visit_it_parameters_node: (ItParametersNode) -> void
|
101
102
|
def visit_keyword_hash_node: (KeywordHashNode) -> void
|
102
103
|
def visit_keyword_rest_parameter_node: (KeywordRestParameterNode) -> void
|
data/sig/prism.rbs
CHANGED
@@ -10,90 +10,110 @@ module Prism
|
|
10
10
|
|
11
11
|
def self.parse: (
|
12
12
|
String source,
|
13
|
+
?encoding: Encoding | false,
|
13
14
|
?filepath: String,
|
15
|
+
?frozen_string_literal: bool,
|
14
16
|
?line: Integer,
|
17
|
+
?main_script: bool,
|
15
18
|
?offset: Integer,
|
16
|
-
?
|
17
|
-
?
|
18
|
-
?verbose: bool,
|
19
|
-
?scopes: Array[Array[Symbol]]
|
19
|
+
?scopes: Array[Array[Symbol]],
|
20
|
+
?verbose: bool
|
20
21
|
) -> ParseResult
|
21
22
|
|
22
|
-
def self.
|
23
|
+
def self.profile: (
|
23
24
|
String source,
|
25
|
+
?encoding: Encoding | false,
|
24
26
|
?filepath: String,
|
27
|
+
?frozen_string_literal: bool,
|
25
28
|
?line: Integer,
|
29
|
+
?main_script: bool,
|
26
30
|
?offset: Integer,
|
27
|
-
?
|
31
|
+
?scopes: Array[Array[Symbol]],
|
32
|
+
?verbose: bool
|
33
|
+
) -> nil
|
34
|
+
|
35
|
+
def self.lex: (
|
36
|
+
String source,
|
37
|
+
?encoding: Encoding | false,
|
38
|
+
?filepath: String,
|
28
39
|
?frozen_string_literal: bool,
|
29
|
-
?
|
30
|
-
?
|
40
|
+
?line: Integer,
|
41
|
+
?main_script: bool,
|
42
|
+
?offset: Integer,
|
43
|
+
?scopes: Array[Array[Symbol]],
|
44
|
+
?verbose: bool
|
31
45
|
) -> LexResult
|
32
46
|
|
33
47
|
def self.lex_compat: (
|
34
48
|
String source,
|
49
|
+
?encoding: Encoding | false,
|
35
50
|
?filepath: String,
|
51
|
+
?frozen_string_literal: bool,
|
36
52
|
?line: Integer,
|
53
|
+
?main_script: bool,
|
37
54
|
?offset: Integer,
|
38
|
-
?
|
39
|
-
?
|
40
|
-
?verbose: bool,
|
41
|
-
?scopes: Array[Array[Symbol]]
|
55
|
+
?scopes: Array[Array[Symbol]],
|
56
|
+
?verbose: bool
|
42
57
|
) -> LexCompat::Result
|
43
58
|
|
44
59
|
def self.parse_lex: (
|
45
60
|
String source,
|
61
|
+
?encoding: Encoding | false,
|
46
62
|
?filepath: String,
|
63
|
+
?frozen_string_literal: bool,
|
47
64
|
?line: Integer,
|
65
|
+
?main_script: bool,
|
48
66
|
?offset: Integer,
|
49
|
-
?
|
50
|
-
?
|
51
|
-
?verbose: bool,
|
52
|
-
?scopes: Array[Array[Symbol]]
|
67
|
+
?scopes: Array[Array[Symbol]],
|
68
|
+
?verbose: bool
|
53
69
|
) -> ParseLexResult
|
54
70
|
|
55
71
|
def self.dump: (
|
56
72
|
String source,
|
73
|
+
?encoding: Encoding | false,
|
57
74
|
?filepath: String,
|
75
|
+
?frozen_string_literal: bool,
|
58
76
|
?line: Integer,
|
77
|
+
?main_script: bool,
|
59
78
|
?offset: Integer,
|
60
|
-
?
|
61
|
-
?
|
62
|
-
?verbose: bool,
|
63
|
-
?scopes: Array[Array[Symbol]]
|
79
|
+
?scopes: Array[Array[Symbol]],
|
80
|
+
?verbose: bool
|
64
81
|
) -> String
|
65
82
|
|
66
83
|
def self.parse_comments: (
|
67
84
|
String source,
|
85
|
+
?encoding: Encoding | false,
|
68
86
|
?filepath: String,
|
87
|
+
?frozen_string_literal: bool,
|
69
88
|
?line: Integer,
|
89
|
+
?main_script: bool,
|
70
90
|
?offset: Integer,
|
71
|
-
?
|
72
|
-
?
|
73
|
-
?verbose: bool,
|
74
|
-
?scopes: Array[Array[Symbol]]
|
91
|
+
?scopes: Array[Array[Symbol]],
|
92
|
+
?verbose: bool
|
75
93
|
) -> Array[comment]
|
76
94
|
|
77
95
|
def self.parse_success?: (
|
78
96
|
String source,
|
97
|
+
?encoding: Encoding | false,
|
79
98
|
?filepath: String,
|
99
|
+
?frozen_string_literal: bool,
|
80
100
|
?line: Integer,
|
101
|
+
?main_script: bool,
|
81
102
|
?offset: Integer,
|
82
|
-
?
|
83
|
-
?
|
84
|
-
?verbose: bool,
|
85
|
-
?scopes: Array[Array[Symbol]]
|
103
|
+
?scopes: Array[Array[Symbol]],
|
104
|
+
?verbose: bool
|
86
105
|
) -> bool
|
87
106
|
|
88
107
|
def self.parse_failure?: (
|
89
108
|
String source,
|
109
|
+
?encoding: Encoding | false,
|
90
110
|
?filepath: String,
|
111
|
+
?frozen_string_literal: bool,
|
91
112
|
?line: Integer,
|
113
|
+
?main_script: bool,
|
92
114
|
?offset: Integer,
|
93
|
-
?
|
94
|
-
?
|
95
|
-
?verbose: bool,
|
96
|
-
?scopes: Array[Array[Symbol]]
|
115
|
+
?scopes: Array[Array[Symbol]],
|
116
|
+
?verbose: bool
|
97
117
|
) -> bool
|
98
118
|
|
99
119
|
def self.load: (
|
@@ -109,72 +129,90 @@ module Prism
|
|
109
129
|
|
110
130
|
def self.parse_file: (
|
111
131
|
String filepath,
|
132
|
+
?encoding: Encoding | false,
|
133
|
+
?frozen_string_literal: bool,
|
112
134
|
?line: Integer,
|
135
|
+
?main_script: bool,
|
113
136
|
?offset: Integer,
|
114
|
-
?
|
115
|
-
?
|
116
|
-
?verbose: bool,
|
117
|
-
?scopes: Array[Array[Symbol]]
|
137
|
+
?scopes: Array[Array[Symbol]],
|
138
|
+
?verbose: bool
|
118
139
|
) -> ParseResult
|
119
140
|
|
120
|
-
def self.
|
141
|
+
def self.profile_file: (
|
121
142
|
String filepath,
|
143
|
+
?encoding: Encoding | false,
|
144
|
+
?frozen_string_literal: bool,
|
122
145
|
?line: Integer,
|
146
|
+
?main_script: bool,
|
123
147
|
?offset: Integer,
|
124
|
-
?
|
148
|
+
?scopes: Array[Array[Symbol]],
|
149
|
+
?verbose: bool
|
150
|
+
) -> nil
|
151
|
+
|
152
|
+
def self.lex_file: (
|
153
|
+
String filepath,
|
154
|
+
?encoding: Encoding | false,
|
125
155
|
?frozen_string_literal: bool,
|
126
|
-
?
|
127
|
-
?
|
156
|
+
?line: Integer,
|
157
|
+
?main_script: bool,
|
158
|
+
?offset: Integer,
|
159
|
+
?scopes: Array[Array[Symbol]],
|
160
|
+
?verbose: bool
|
128
161
|
) -> LexResult
|
129
162
|
|
130
163
|
def self.parse_lex_file: (
|
131
164
|
String filepath,
|
165
|
+
?encoding: Encoding | false,
|
166
|
+
?frozen_string_literal: bool,
|
132
167
|
?line: Integer,
|
168
|
+
?main_script: bool,
|
133
169
|
?offset: Integer,
|
134
|
-
?
|
135
|
-
?
|
136
|
-
?verbose: bool,
|
137
|
-
?scopes: Array[Array[Symbol]]
|
170
|
+
?scopes: Array[Array[Symbol]],
|
171
|
+
?verbose: bool
|
138
172
|
) -> ParseLexResult
|
139
173
|
|
140
174
|
def self.dump_file: (
|
141
175
|
String filepath,
|
176
|
+
?encoding: Encoding | false,
|
177
|
+
?frozen_string_literal: bool,
|
142
178
|
?line: Integer,
|
179
|
+
?main_script: bool,
|
143
180
|
?offset: Integer,
|
144
|
-
?
|
145
|
-
?
|
146
|
-
?verbose: bool,
|
147
|
-
?scopes: Array[Array[Symbol]]
|
181
|
+
?scopes: Array[Array[Symbol]],
|
182
|
+
?verbose: bool
|
148
183
|
) -> String
|
149
184
|
|
150
185
|
def self.parse_file_comments: (
|
151
186
|
String filepath,
|
187
|
+
?encoding: Encoding | false,
|
188
|
+
?frozen_string_literal: bool,
|
152
189
|
?line: Integer,
|
190
|
+
?main_script: bool,
|
153
191
|
?offset: Integer,
|
154
|
-
?
|
155
|
-
?
|
156
|
-
?verbose: bool,
|
157
|
-
?scopes: Array[Array[Symbol]]
|
192
|
+
?scopes: Array[Array[Symbol]],
|
193
|
+
?verbose: bool
|
158
194
|
) -> Array[comment]
|
159
195
|
|
160
196
|
def self.parse_file_success?: (
|
161
197
|
String filepath,
|
198
|
+
?encoding: Encoding | false,
|
199
|
+
?frozen_string_literal: bool,
|
162
200
|
?line: Integer,
|
201
|
+
?main_script: bool,
|
163
202
|
?offset: Integer,
|
164
|
-
?
|
165
|
-
?
|
166
|
-
?verbose: bool,
|
167
|
-
?scopes: Array[Array[Symbol]]
|
203
|
+
?scopes: Array[Array[Symbol]],
|
204
|
+
?verbose: bool
|
168
205
|
) -> bool
|
169
206
|
|
170
207
|
def self.parse_file_failure?: (
|
171
208
|
String filepath,
|
209
|
+
?encoding: Encoding | false,
|
210
|
+
?frozen_string_literal: bool,
|
172
211
|
?line: Integer,
|
212
|
+
?main_script: bool,
|
173
213
|
?offset: Integer,
|
174
|
-
?
|
175
|
-
?
|
176
|
-
?verbose: bool,
|
177
|
-
?scopes: Array[Array[Symbol]]
|
214
|
+
?scopes: Array[Array[Symbol]],
|
215
|
+
?verbose: bool
|
178
216
|
) -> bool
|
179
217
|
|
180
218
|
interface _Stream
|
@@ -183,12 +221,13 @@ module Prism
|
|
183
221
|
|
184
222
|
def self.parse_stream: (
|
185
223
|
_Stream stream,
|
224
|
+
?encoding: Encoding | false,
|
186
225
|
?filepath: String,
|
226
|
+
?frozen_string_literal: bool,
|
187
227
|
?line: Integer,
|
228
|
+
?main_script: bool,
|
188
229
|
?offset: Integer,
|
189
|
-
?
|
190
|
-
?
|
191
|
-
?verbose: bool,
|
192
|
-
?scopes: Array[Array[Symbol]]
|
230
|
+
?scopes: Array[Array[Symbol]],
|
231
|
+
?verbose: bool
|
193
232
|
) -> ParseResult
|
194
233
|
end
|