ripper_ruby_parser 1.7.2 → 1.10.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 +50 -0
- data/README.md +4 -4
- data/lib/ripper_ruby_parser/commenting_ripper_parser.rb +24 -12
- data/lib/ripper_ruby_parser/sexp_handlers/assignment.rb +2 -2
- data/lib/ripper_ruby_parser/sexp_handlers/blocks.rb +47 -53
- data/lib/ripper_ruby_parser/sexp_handlers/conditionals.rb +17 -19
- data/lib/ripper_ruby_parser/sexp_handlers/helper_methods.rb +34 -1
- data/lib/ripper_ruby_parser/sexp_handlers/literals.rb +1 -1
- data/lib/ripper_ruby_parser/sexp_handlers/method_calls.rb +9 -5
- data/lib/ripper_ruby_parser/sexp_handlers/methods.rb +17 -15
- data/lib/ripper_ruby_parser/sexp_handlers/operators.rb +3 -3
- data/lib/ripper_ruby_parser/sexp_handlers/string_literals.rb +24 -28
- data/lib/ripper_ruby_parser/sexp_processor.rb +5 -18
- data/lib/ripper_ruby_parser/unescape.rb +63 -22
- data/lib/ripper_ruby_parser/version.rb +1 -1
- metadata +140 -79
- data/Rakefile +0 -33
- data/test/end_to_end/comments_test.rb +0 -59
- data/test/end_to_end/comparison_test.rb +0 -104
- data/test/end_to_end/lib_comparison_test.rb +0 -18
- data/test/end_to_end/line_numbering_test.rb +0 -31
- data/test/end_to_end/samples_comparison_test.rb +0 -13
- data/test/end_to_end/test_comparison_test.rb +0 -18
- data/test/pt_testcase/pt_test.rb +0 -44
- data/test/ripper_ruby_parser/commenting_ripper_parser_test.rb +0 -200
- data/test/ripper_ruby_parser/parser_test.rb +0 -576
- data/test/ripper_ruby_parser/sexp_handlers/assignment_test.rb +0 -597
- data/test/ripper_ruby_parser/sexp_handlers/blocks_test.rb +0 -717
- data/test/ripper_ruby_parser/sexp_handlers/conditionals_test.rb +0 -536
- data/test/ripper_ruby_parser/sexp_handlers/literals_test.rb +0 -165
- data/test/ripper_ruby_parser/sexp_handlers/loops_test.rb +0 -209
- data/test/ripper_ruby_parser/sexp_handlers/method_calls_test.rb +0 -237
- data/test/ripper_ruby_parser/sexp_handlers/methods_test.rb +0 -429
- data/test/ripper_ruby_parser/sexp_handlers/operators_test.rb +0 -405
- data/test/ripper_ruby_parser/sexp_handlers/string_literals_test.rb +0 -973
- data/test/ripper_ruby_parser/sexp_processor_test.rb +0 -327
- data/test/ripper_ruby_parser/version_test.rb +0 -7
- data/test/samples/assignment.rb +0 -22
- data/test/samples/comments.rb +0 -13
- data/test/samples/conditionals.rb +0 -23
- data/test/samples/lambdas.rb +0 -5
- data/test/samples/loops.rb +0 -36
- data/test/samples/misc.rb +0 -285
- data/test/samples/number.rb +0 -9
- data/test/samples/operators.rb +0 -18
- data/test/samples/strings.rb +0 -147
- data/test/test_helper.rb +0 -111
@@ -1,429 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require File.expand_path("../../test_helper.rb", File.dirname(__FILE__))
|
4
|
-
|
5
|
-
describe RipperRubyParser::Parser do
|
6
|
-
describe "#parse" do
|
7
|
-
describe "for instance method definitions" do
|
8
|
-
it "treats kwrest argument as a local variable" do
|
9
|
-
_("def foo(**bar); bar; end")
|
10
|
-
.must_be_parsed_as s(:defn,
|
11
|
-
:foo,
|
12
|
-
s(:args, :"**bar"),
|
13
|
-
s(:lvar, :bar))
|
14
|
-
end
|
15
|
-
|
16
|
-
it "treats kwrest argument as a local variable when other arguments are present" do
|
17
|
-
_("def foo(bar, **baz); baz; end")
|
18
|
-
.must_be_parsed_as s(:defn,
|
19
|
-
:foo,
|
20
|
-
s(:args, :bar, :"**baz"),
|
21
|
-
s(:lvar, :baz))
|
22
|
-
end
|
23
|
-
|
24
|
-
it "treats kwrest argument as a local variable when an explicit block is present" do
|
25
|
-
_("def foo(**bar, &baz); bar; end")
|
26
|
-
.must_be_parsed_as s(:defn,
|
27
|
-
:foo,
|
28
|
-
s(:args, :"**bar", :"&baz"),
|
29
|
-
s(:lvar, :bar))
|
30
|
-
end
|
31
|
-
|
32
|
-
it "treats block kwrest argument as an lvar" do
|
33
|
-
_("def foo(**bar); baz { |**qux| bar; qux }; end")
|
34
|
-
.must_be_parsed_as s(:defn, :foo,
|
35
|
-
s(:args, :"**bar"),
|
36
|
-
s(:iter,
|
37
|
-
s(:call, nil, :baz),
|
38
|
-
s(:args, :"**qux"),
|
39
|
-
s(:block,
|
40
|
-
s(:lvar, :bar),
|
41
|
-
s(:lvar, :qux))))
|
42
|
-
end
|
43
|
-
|
44
|
-
it "works with a method argument with a default value" do
|
45
|
-
_("def foo bar=nil; end")
|
46
|
-
.must_be_parsed_as s(:defn,
|
47
|
-
:foo,
|
48
|
-
s(:args, s(:lasgn, :bar, s(:nil))),
|
49
|
-
s(:nil))
|
50
|
-
end
|
51
|
-
|
52
|
-
it "works with several method arguments with default values" do
|
53
|
-
_("def foo bar=1, baz=2; end")
|
54
|
-
.must_be_parsed_as s(:defn,
|
55
|
-
:foo,
|
56
|
-
s(:args,
|
57
|
-
s(:lasgn, :bar, s(:lit, 1)),
|
58
|
-
s(:lasgn, :baz, s(:lit, 2))),
|
59
|
-
s(:nil))
|
60
|
-
end
|
61
|
-
|
62
|
-
it "works with parentheses around the parameter list" do
|
63
|
-
_("def foo(bar); end")
|
64
|
-
.must_be_parsed_as s(:defn, :foo, s(:args, :bar), s(:nil))
|
65
|
-
end
|
66
|
-
|
67
|
-
it "works with a simple splat" do
|
68
|
-
_("def foo *bar; end")
|
69
|
-
.must_be_parsed_as s(:defn, :foo, s(:args, :"*bar"), s(:nil))
|
70
|
-
end
|
71
|
-
|
72
|
-
it "works with a regular argument plus splat" do
|
73
|
-
_("def foo bar, *baz; end")
|
74
|
-
.must_be_parsed_as s(:defn, :foo, s(:args, :bar, :"*baz"), s(:nil))
|
75
|
-
end
|
76
|
-
|
77
|
-
it "works with a nameless splat" do
|
78
|
-
_("def foo *; end")
|
79
|
-
.must_be_parsed_as s(:defn,
|
80
|
-
:foo,
|
81
|
-
s(:args, :"*"),
|
82
|
-
s(:nil))
|
83
|
-
end
|
84
|
-
|
85
|
-
it "works with a nameless kwrest argument" do
|
86
|
-
_("def foo **; end")
|
87
|
-
.must_be_parsed_as s(:defn,
|
88
|
-
:foo,
|
89
|
-
s(:args, :"**"),
|
90
|
-
s(:nil))
|
91
|
-
end
|
92
|
-
|
93
|
-
it "works for a simple case with explicit block parameter" do
|
94
|
-
_("def foo &bar; end")
|
95
|
-
.must_be_parsed_as s(:defn,
|
96
|
-
:foo,
|
97
|
-
s(:args, :"&bar"),
|
98
|
-
s(:nil))
|
99
|
-
end
|
100
|
-
|
101
|
-
it "works with a regular argument plus explicit block parameter" do
|
102
|
-
_("def foo bar, &baz; end")
|
103
|
-
.must_be_parsed_as s(:defn,
|
104
|
-
:foo,
|
105
|
-
s(:args, :bar, :"&baz"),
|
106
|
-
s(:nil))
|
107
|
-
end
|
108
|
-
|
109
|
-
it "works with a default value plus explicit block parameter" do
|
110
|
-
_("def foo bar=1, &baz; end")
|
111
|
-
.must_be_parsed_as s(:defn,
|
112
|
-
:foo,
|
113
|
-
s(:args,
|
114
|
-
s(:lasgn, :bar, s(:lit, 1)),
|
115
|
-
:"&baz"),
|
116
|
-
s(:nil))
|
117
|
-
end
|
118
|
-
|
119
|
-
it "works with a default value plus mandatory argument" do
|
120
|
-
_("def foo bar=1, baz; end")
|
121
|
-
.must_be_parsed_as s(:defn,
|
122
|
-
:foo,
|
123
|
-
s(:args,
|
124
|
-
s(:lasgn, :bar, s(:lit, 1)),
|
125
|
-
:baz),
|
126
|
-
s(:nil))
|
127
|
-
end
|
128
|
-
|
129
|
-
it "works with a splat plus explicit block parameter" do
|
130
|
-
_("def foo *bar, &baz; end")
|
131
|
-
.must_be_parsed_as s(:defn,
|
132
|
-
:foo,
|
133
|
-
s(:args, :"*bar", :"&baz"),
|
134
|
-
s(:nil))
|
135
|
-
end
|
136
|
-
|
137
|
-
it "works with a default value plus splat" do
|
138
|
-
_("def foo bar=1, *baz; end")
|
139
|
-
.must_be_parsed_as s(:defn,
|
140
|
-
:foo,
|
141
|
-
s(:args,
|
142
|
-
s(:lasgn, :bar, s(:lit, 1)),
|
143
|
-
:"*baz"),
|
144
|
-
s(:nil))
|
145
|
-
end
|
146
|
-
|
147
|
-
it "works with a default value, splat, plus final mandatory arguments" do
|
148
|
-
_("def foo bar=1, *baz, qux, quuz; end")
|
149
|
-
.must_be_parsed_as s(:defn,
|
150
|
-
:foo,
|
151
|
-
s(:args,
|
152
|
-
s(:lasgn, :bar, s(:lit, 1)),
|
153
|
-
:"*baz", :qux, :quuz),
|
154
|
-
s(:nil))
|
155
|
-
end
|
156
|
-
|
157
|
-
it "works with a named argument with a default value" do
|
158
|
-
_("def foo bar: 1; end")
|
159
|
-
.must_be_parsed_as s(:defn,
|
160
|
-
:foo,
|
161
|
-
s(:args,
|
162
|
-
s(:kwarg, :bar, s(:lit, 1))),
|
163
|
-
s(:nil))
|
164
|
-
end
|
165
|
-
|
166
|
-
it "works with a named argument with no default value" do
|
167
|
-
_("def foo bar:; end")
|
168
|
-
.must_be_parsed_as s(:defn,
|
169
|
-
:foo,
|
170
|
-
s(:args,
|
171
|
-
s(:kwarg, :bar)),
|
172
|
-
s(:nil))
|
173
|
-
end
|
174
|
-
|
175
|
-
it "works with a double splat" do
|
176
|
-
_("def foo **bar; end")
|
177
|
-
.must_be_parsed_as s(:defn,
|
178
|
-
:foo,
|
179
|
-
s(:args, :'**bar'),
|
180
|
-
s(:nil))
|
181
|
-
end
|
182
|
-
|
183
|
-
it "works with argument destructuring" do
|
184
|
-
_("def foo((bar, baz)); end")
|
185
|
-
.must_be_parsed_as s(:defn, :foo,
|
186
|
-
s(:args, s(:masgn, :bar, :baz)),
|
187
|
-
s(:nil))
|
188
|
-
end
|
189
|
-
|
190
|
-
it "works with argument destructuring including splat" do
|
191
|
-
_("def foo((bar, *baz)); end")
|
192
|
-
.must_be_parsed_as s(:defn, :foo,
|
193
|
-
s(:args, s(:masgn, :bar, :'*baz')),
|
194
|
-
s(:nil))
|
195
|
-
end
|
196
|
-
|
197
|
-
it "works with nested argument destructuring" do
|
198
|
-
_("def foo((bar, (baz, qux))); end")
|
199
|
-
.must_be_parsed_as s(:defn, :foo,
|
200
|
-
s(:args, s(:masgn, :bar, s(:masgn, :baz, :qux))),
|
201
|
-
s(:nil))
|
202
|
-
end
|
203
|
-
|
204
|
-
it "works when the method name is an operator" do
|
205
|
-
_("def +; end")
|
206
|
-
.must_be_parsed_as s(:defn, :+, s(:args),
|
207
|
-
s(:nil))
|
208
|
-
end
|
209
|
-
|
210
|
-
it "works when the method name is a keyword" do
|
211
|
-
_("def for; end")
|
212
|
-
.must_be_parsed_as s(:defn, :for, s(:args),
|
213
|
-
s(:nil))
|
214
|
-
end
|
215
|
-
|
216
|
-
it "assigns correct line numbers when the body is empty" do
|
217
|
-
_("def bar\nend")
|
218
|
-
.must_be_parsed_as s(:defn,
|
219
|
-
:bar,
|
220
|
-
s(:args).line(1),
|
221
|
-
s(:nil).line(2)).line(1),
|
222
|
-
with_line_numbers: true
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
describe "for singleton method definitions" do
|
227
|
-
it "works with empty body" do
|
228
|
-
_("def foo.bar; end")
|
229
|
-
.must_be_parsed_as s(:defs,
|
230
|
-
s(:call, nil, :foo),
|
231
|
-
:bar,
|
232
|
-
s(:args),
|
233
|
-
s(:nil))
|
234
|
-
end
|
235
|
-
|
236
|
-
it "works with a body with multiple statements" do
|
237
|
-
_("def foo.bar; baz; qux; end")
|
238
|
-
.must_be_parsed_as s(:defs,
|
239
|
-
s(:call, nil, :foo),
|
240
|
-
:bar,
|
241
|
-
s(:args),
|
242
|
-
s(:call, nil, :baz),
|
243
|
-
s(:call, nil, :qux))
|
244
|
-
end
|
245
|
-
|
246
|
-
it "works with a simple splat" do
|
247
|
-
_("def foo.bar *baz; end")
|
248
|
-
.must_be_parsed_as s(:defs,
|
249
|
-
s(:call, nil, :foo),
|
250
|
-
:bar,
|
251
|
-
s(:args, :"*baz"),
|
252
|
-
s(:nil))
|
253
|
-
end
|
254
|
-
|
255
|
-
it "works when the method name is a keyword" do
|
256
|
-
_("def foo.for; end")
|
257
|
-
.must_be_parsed_as s(:defs,
|
258
|
-
s(:call, nil, :foo),
|
259
|
-
:for, s(:args),
|
260
|
-
s(:nil))
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
|
-
describe "for the alias statement" do
|
265
|
-
it "works with regular barewords" do
|
266
|
-
_("alias foo bar")
|
267
|
-
.must_be_parsed_as s(:alias,
|
268
|
-
s(:lit, :foo), s(:lit, :bar))
|
269
|
-
end
|
270
|
-
|
271
|
-
it "works with symbols" do
|
272
|
-
_("alias :foo :bar")
|
273
|
-
.must_be_parsed_as s(:alias,
|
274
|
-
s(:lit, :foo), s(:lit, :bar))
|
275
|
-
end
|
276
|
-
|
277
|
-
it "works with operator barewords" do
|
278
|
-
_("alias + -")
|
279
|
-
.must_be_parsed_as s(:alias,
|
280
|
-
s(:lit, :+), s(:lit, :-))
|
281
|
-
end
|
282
|
-
|
283
|
-
it "treats keywords as symbols" do
|
284
|
-
_("alias next foo")
|
285
|
-
.must_be_parsed_as s(:alias, s(:lit, :next), s(:lit, :foo))
|
286
|
-
end
|
287
|
-
|
288
|
-
it "works with global variables" do
|
289
|
-
_("alias $foo $bar")
|
290
|
-
.must_be_parsed_as s(:valias, :$foo, :$bar)
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
describe "for the undef statement" do
|
295
|
-
it "works with a single bareword identifier" do
|
296
|
-
_("undef foo")
|
297
|
-
.must_be_parsed_as s(:undef, s(:lit, :foo))
|
298
|
-
end
|
299
|
-
|
300
|
-
it "works with a single symbol" do
|
301
|
-
_("undef :foo")
|
302
|
-
.must_be_parsed_as s(:undef, s(:lit, :foo))
|
303
|
-
end
|
304
|
-
|
305
|
-
it "works with multiple bareword identifiers" do
|
306
|
-
_("undef foo, bar")
|
307
|
-
.must_be_parsed_as s(:block,
|
308
|
-
s(:undef, s(:lit, :foo)),
|
309
|
-
s(:undef, s(:lit, :bar)))
|
310
|
-
end
|
311
|
-
|
312
|
-
it "works with multiple bareword symbols" do
|
313
|
-
_("undef :foo, :bar")
|
314
|
-
.must_be_parsed_as s(:block,
|
315
|
-
s(:undef, s(:lit, :foo)),
|
316
|
-
s(:undef, s(:lit, :bar)))
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
describe "for the return statement" do
|
321
|
-
it "works with no arguments" do
|
322
|
-
_("return")
|
323
|
-
.must_be_parsed_as s(:return)
|
324
|
-
end
|
325
|
-
|
326
|
-
it "works with one argument" do
|
327
|
-
_("return foo")
|
328
|
-
.must_be_parsed_as s(:return,
|
329
|
-
s(:call, nil, :foo))
|
330
|
-
end
|
331
|
-
|
332
|
-
it "works with a splat argument" do
|
333
|
-
_("return *foo")
|
334
|
-
.must_be_parsed_as s(:return,
|
335
|
-
s(:svalue,
|
336
|
-
s(:splat,
|
337
|
-
s(:call, nil, :foo))))
|
338
|
-
end
|
339
|
-
|
340
|
-
it "works with multiple arguments" do
|
341
|
-
_("return foo, bar")
|
342
|
-
.must_be_parsed_as s(:return,
|
343
|
-
s(:array,
|
344
|
-
s(:call, nil, :foo),
|
345
|
-
s(:call, nil, :bar)))
|
346
|
-
end
|
347
|
-
|
348
|
-
it "works with a regular argument and a splat argument" do
|
349
|
-
_("return foo, *bar")
|
350
|
-
.must_be_parsed_as s(:return,
|
351
|
-
s(:array,
|
352
|
-
s(:call, nil, :foo),
|
353
|
-
s(:splat,
|
354
|
-
s(:call, nil, :bar))))
|
355
|
-
end
|
356
|
-
|
357
|
-
it "works with a function call with parentheses" do
|
358
|
-
_("return foo(bar)")
|
359
|
-
.must_be_parsed_as s(:return,
|
360
|
-
s(:call, nil, :foo,
|
361
|
-
s(:call, nil, :bar)))
|
362
|
-
end
|
363
|
-
|
364
|
-
it "works with a function call without parentheses" do
|
365
|
-
_("return foo bar")
|
366
|
-
.must_be_parsed_as s(:return,
|
367
|
-
s(:call, nil, :foo,
|
368
|
-
s(:call, nil, :bar)))
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
describe "for yield" do
|
373
|
-
it "works with no arguments and no parentheses" do
|
374
|
-
_("yield")
|
375
|
-
.must_be_parsed_as s(:yield)
|
376
|
-
end
|
377
|
-
|
378
|
-
it "works with parentheses but no arguments" do
|
379
|
-
_("yield()")
|
380
|
-
.must_be_parsed_as s(:yield)
|
381
|
-
end
|
382
|
-
|
383
|
-
it "works with one argument and no parentheses" do
|
384
|
-
_("yield foo")
|
385
|
-
.must_be_parsed_as s(:yield, s(:call, nil, :foo))
|
386
|
-
end
|
387
|
-
|
388
|
-
it "works with one argument and parentheses" do
|
389
|
-
_("yield(foo)")
|
390
|
-
.must_be_parsed_as s(:yield, s(:call, nil, :foo))
|
391
|
-
end
|
392
|
-
|
393
|
-
it "works with multiple arguments and no parentheses" do
|
394
|
-
_("yield foo, bar")
|
395
|
-
.must_be_parsed_as s(:yield,
|
396
|
-
s(:call, nil, :foo),
|
397
|
-
s(:call, nil, :bar))
|
398
|
-
end
|
399
|
-
|
400
|
-
it "works with multiple arguments and parentheses" do
|
401
|
-
_("yield(foo, bar)")
|
402
|
-
.must_be_parsed_as s(:yield,
|
403
|
-
s(:call, nil, :foo),
|
404
|
-
s(:call, nil, :bar))
|
405
|
-
end
|
406
|
-
|
407
|
-
it "works with splat" do
|
408
|
-
_("yield foo, *bar")
|
409
|
-
.must_be_parsed_as s(:yield,
|
410
|
-
s(:call, nil, :foo),
|
411
|
-
s(:splat, s(:call, nil, :bar)))
|
412
|
-
end
|
413
|
-
|
414
|
-
it "works with a function call with parentheses" do
|
415
|
-
_("yield foo(bar)")
|
416
|
-
.must_be_parsed_as s(:yield,
|
417
|
-
s(:call, nil, :foo,
|
418
|
-
s(:call, nil, :bar)))
|
419
|
-
end
|
420
|
-
|
421
|
-
it "works with a function call without parentheses" do
|
422
|
-
_("yield foo bar")
|
423
|
-
.must_be_parsed_as s(:yield,
|
424
|
-
s(:call, nil, :foo,
|
425
|
-
s(:call, nil, :bar)))
|
426
|
-
end
|
427
|
-
end
|
428
|
-
end
|
429
|
-
end
|