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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +77 -1
  3. data/CONTRIBUTING.md +0 -4
  4. data/README.md +4 -0
  5. data/config.yml +498 -145
  6. data/docs/fuzzing.md +1 -1
  7. data/docs/parsing_rules.md +4 -1
  8. data/docs/ripper_translation.md +22 -0
  9. data/docs/serialization.md +3 -0
  10. data/ext/prism/api_node.c +2858 -2082
  11. data/ext/prism/extconf.rb +1 -1
  12. data/ext/prism/extension.c +203 -421
  13. data/ext/prism/extension.h +2 -2
  14. data/include/prism/ast.h +1732 -453
  15. data/include/prism/defines.h +36 -0
  16. data/include/prism/diagnostic.h +23 -6
  17. data/include/prism/node.h +0 -21
  18. data/include/prism/options.h +94 -3
  19. data/include/prism/parser.h +57 -28
  20. data/include/prism/regexp.h +18 -8
  21. data/include/prism/static_literals.h +3 -2
  22. data/include/prism/util/pm_char.h +1 -2
  23. data/include/prism/util/pm_constant_pool.h +0 -8
  24. data/include/prism/util/pm_integer.h +22 -15
  25. data/include/prism/util/pm_newline_list.h +11 -0
  26. data/include/prism/util/pm_string.h +28 -12
  27. data/include/prism/version.h +3 -3
  28. data/include/prism.h +0 -11
  29. data/lib/prism/compiler.rb +3 -0
  30. data/lib/prism/desugar_compiler.rb +111 -74
  31. data/lib/prism/dispatcher.rb +16 -1
  32. data/lib/prism/dot_visitor.rb +45 -34
  33. data/lib/prism/dsl.rb +660 -468
  34. data/lib/prism/ffi.rb +64 -6
  35. data/lib/prism/inspect_visitor.rb +294 -64
  36. data/lib/prism/lex_compat.rb +1 -1
  37. data/lib/prism/mutation_compiler.rb +11 -6
  38. data/lib/prism/node.rb +2469 -4973
  39. data/lib/prism/node_ext.rb +91 -14
  40. data/lib/prism/parse_result/comments.rb +0 -7
  41. data/lib/prism/parse_result/errors.rb +65 -0
  42. data/lib/prism/parse_result/newlines.rb +101 -11
  43. data/lib/prism/parse_result.rb +43 -3
  44. data/lib/prism/reflection.rb +10 -8
  45. data/lib/prism/serialize.rb +484 -609
  46. data/lib/prism/translation/parser/compiler.rb +152 -132
  47. data/lib/prism/translation/parser/lexer.rb +26 -4
  48. data/lib/prism/translation/parser.rb +9 -4
  49. data/lib/prism/translation/ripper.rb +22 -20
  50. data/lib/prism/translation/ruby_parser.rb +73 -13
  51. data/lib/prism/visitor.rb +3 -0
  52. data/lib/prism.rb +0 -4
  53. data/prism.gemspec +3 -5
  54. data/rbi/prism/dsl.rbi +521 -0
  55. data/rbi/prism/node.rbi +744 -4837
  56. data/rbi/prism/visitor.rbi +3 -0
  57. data/rbi/prism.rbi +36 -30
  58. data/sig/prism/dsl.rbs +190 -303
  59. data/sig/prism/mutation_compiler.rbs +1 -0
  60. data/sig/prism/node.rbs +759 -628
  61. data/sig/prism/parse_result.rbs +2 -0
  62. data/sig/prism/visitor.rbs +1 -0
  63. data/sig/prism.rbs +103 -64
  64. data/src/diagnostic.c +62 -28
  65. data/src/node.c +499 -1754
  66. data/src/options.c +76 -27
  67. data/src/prettyprint.c +156 -112
  68. data/src/prism.c +2773 -2081
  69. data/src/regexp.c +202 -69
  70. data/src/serialize.c +170 -50
  71. data/src/static_literals.c +63 -84
  72. data/src/token_type.c +4 -4
  73. data/src/util/pm_constant_pool.c +0 -8
  74. data/src/util/pm_integer.c +53 -25
  75. data/src/util/pm_newline_list.c +29 -0
  76. data/src/util/pm_string.c +130 -80
  77. data/src/util/pm_strpbrk.c +32 -6
  78. metadata +4 -6
  79. data/include/prism/util/pm_string_list.h +0 -44
  80. data/lib/prism/debug.rb +0 -249
  81. data/lib/prism/translation/parser/rubocop.rb +0 -73
  82. data/src/util/pm_string_list.c +0 -28
@@ -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
@@ -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
- ?encoding: Encoding,
17
- ?frozen_string_literal: bool,
18
- ?verbose: bool,
19
- ?scopes: Array[Array[Symbol]]
19
+ ?scopes: Array[Array[Symbol]],
20
+ ?verbose: bool
20
21
  ) -> ParseResult
21
22
 
22
- def self.lex: (
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
- ?encoding: Encoding,
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
- ?verbose: bool,
30
- ?scopes: Array[Array[Symbol]]
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
- ?encoding: Encoding,
39
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
50
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
61
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
72
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
83
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
94
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
115
- ?frozen_string_literal: bool,
116
- ?verbose: bool,
117
- ?scopes: Array[Array[Symbol]]
137
+ ?scopes: Array[Array[Symbol]],
138
+ ?verbose: bool
118
139
  ) -> ParseResult
119
140
 
120
- def self.lex_file: (
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
- ?encoding: Encoding,
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
- ?verbose: bool,
127
- ?scopes: Array[Array[Symbol]]
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
- ?encoding: Encoding,
135
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
145
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
155
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
165
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
175
- ?frozen_string_literal: bool,
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
- ?encoding: Encoding,
190
- ?frozen_string_literal: bool,
191
- ?verbose: bool,
192
- ?scopes: Array[Array[Symbol]]
230
+ ?scopes: Array[Array[Symbol]],
231
+ ?verbose: bool
193
232
  ) -> ParseResult
194
233
  end