ripper_ruby_parser 1.7.0 → 1.9.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +76 -0
  3. data/README.md +6 -4
  4. data/lib/ripper_ruby_parser/commenting_ripper_parser.rb +24 -12
  5. data/lib/ripper_ruby_parser/sexp_handlers.rb +2 -0
  6. data/lib/ripper_ruby_parser/sexp_handlers/assignment.rb +9 -4
  7. data/lib/ripper_ruby_parser/sexp_handlers/blocks.rb +40 -52
  8. data/lib/ripper_ruby_parser/sexp_handlers/conditionals.rb +17 -19
  9. data/lib/ripper_ruby_parser/sexp_handlers/helper_methods.rb +35 -2
  10. data/lib/ripper_ruby_parser/sexp_handlers/literals.rb +15 -242
  11. data/lib/ripper_ruby_parser/sexp_handlers/method_calls.rb +9 -5
  12. data/lib/ripper_ruby_parser/sexp_handlers/methods.rb +22 -17
  13. data/lib/ripper_ruby_parser/sexp_handlers/operators.rb +3 -3
  14. data/lib/ripper_ruby_parser/sexp_handlers/string_literals.rb +256 -0
  15. data/lib/ripper_ruby_parser/sexp_processor.rb +12 -56
  16. data/lib/ripper_ruby_parser/unescape.rb +89 -43
  17. data/lib/ripper_ruby_parser/version.rb +1 -1
  18. metadata +125 -76
  19. data/Rakefile +0 -33
  20. data/test/end_to_end/comments_test.rb +0 -59
  21. data/test/end_to_end/comparison_test.rb +0 -104
  22. data/test/end_to_end/lib_comparison_test.rb +0 -29
  23. data/test/end_to_end/line_numbering_test.rb +0 -31
  24. data/test/end_to_end/samples_comparison_test.rb +0 -13
  25. data/test/end_to_end/test_comparison_test.rb +0 -32
  26. data/test/pt_testcase/pt_test.rb +0 -44
  27. data/test/ripper_ruby_parser/commenting_ripper_parser_test.rb +0 -200
  28. data/test/ripper_ruby_parser/parser_test.rb +0 -553
  29. data/test/ripper_ruby_parser/sexp_handlers/assignment_test.rb +0 -613
  30. data/test/ripper_ruby_parser/sexp_handlers/blocks_test.rb +0 -679
  31. data/test/ripper_ruby_parser/sexp_handlers/conditionals_test.rb +0 -536
  32. data/test/ripper_ruby_parser/sexp_handlers/literals_test.rb +0 -1106
  33. data/test/ripper_ruby_parser/sexp_handlers/loops_test.rb +0 -209
  34. data/test/ripper_ruby_parser/sexp_handlers/method_calls_test.rb +0 -267
  35. data/test/ripper_ruby_parser/sexp_handlers/methods_test.rb +0 -421
  36. data/test/ripper_ruby_parser/sexp_handlers/operators_test.rb +0 -399
  37. data/test/ripper_ruby_parser/sexp_processor_test.rb +0 -303
  38. data/test/ripper_ruby_parser/version_test.rb +0 -7
  39. data/test/samples/assignment.rb +0 -17
  40. data/test/samples/comments.rb +0 -13
  41. data/test/samples/conditionals.rb +0 -23
  42. data/test/samples/lambdas.rb +0 -5
  43. data/test/samples/loops.rb +0 -36
  44. data/test/samples/misc.rb +0 -281
  45. data/test/samples/number.rb +0 -7
  46. data/test/samples/operators.rb +0 -18
  47. data/test/samples/strings.rb +0 -147
  48. data/test/test_helper.rb +0 -107
@@ -1,613 +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
- let(:parser) { RipperRubyParser::Parser.new }
7
-
8
- describe "#parse" do
9
- describe "for single assignment" do
10
- it "works when assigning to a namespaced constant" do
11
- _("Foo::Bar = baz")
12
- .must_be_parsed_as s(:cdecl,
13
- s(:colon2, s(:const, :Foo), :Bar),
14
- s(:call, nil, :baz))
15
- end
16
-
17
- it "works when assigning to constant in the root namespace" do
18
- _("::Foo = bar")
19
- .must_be_parsed_as s(:cdecl,
20
- s(:colon3, :Foo),
21
- s(:call, nil, :bar))
22
- end
23
-
24
- it "works with blocks" do
25
- _("foo = begin; bar; end")
26
- .must_be_parsed_as s(:lasgn, :foo, s(:call, nil, :bar))
27
- end
28
-
29
- describe "with a right-hand splat" do
30
- it "works in the simple case" do
31
- _("foo = *bar")
32
- .must_be_parsed_as s(:lasgn, :foo,
33
- s(:svalue,
34
- s(:splat,
35
- s(:call, nil, :bar))))
36
- end
37
-
38
- it "works with blocks" do
39
- _("foo = *begin; bar; end")
40
- .must_be_parsed_as s(:lasgn, :foo,
41
- s(:svalue, s(:splat, s(:call, nil, :bar))))
42
- end
43
- end
44
-
45
- describe "with several items on the right hand side" do
46
- it "works in the simple case" do
47
- _("foo = bar, baz")
48
- .must_be_parsed_as s(:lasgn, :foo,
49
- s(:svalue,
50
- s(:array,
51
- s(:call, nil, :bar),
52
- s(:call, nil, :baz))))
53
- end
54
-
55
- it "works with a splat" do
56
- _("foo = bar, *baz")
57
- .must_be_parsed_as s(:lasgn, :foo,
58
- s(:svalue,
59
- s(:array,
60
- s(:call, nil, :bar),
61
- s(:splat,
62
- s(:call, nil, :baz)))))
63
- end
64
- end
65
-
66
- describe "with an array literal on the right hand side" do
67
- specify do
68
- _("foo = [bar, baz]")
69
- .must_be_parsed_as s(:lasgn, :foo,
70
- s(:array,
71
- s(:call, nil, :bar),
72
- s(:call, nil, :baz)))
73
- end
74
- end
75
-
76
- it "works when assigning to an instance variable" do
77
- _("@foo = bar")
78
- .must_be_parsed_as s(:iasgn,
79
- :@foo,
80
- s(:call, nil, :bar))
81
- end
82
-
83
- it "works when assigning to a constant" do
84
- _("FOO = bar")
85
- .must_be_parsed_as s(:cdecl,
86
- :FOO,
87
- s(:call, nil, :bar))
88
- end
89
-
90
- it "works when assigning to a collection element" do
91
- _("foo[bar] = baz")
92
- .must_be_parsed_as s(:attrasgn,
93
- s(:call, nil, :foo),
94
- :[]=,
95
- s(:call, nil, :bar),
96
- s(:call, nil, :baz))
97
- end
98
-
99
- it "works when assigning to an attribute" do
100
- _("foo.bar = baz")
101
- .must_be_parsed_as s(:attrasgn,
102
- s(:call, nil, :foo),
103
- :bar=,
104
- s(:call, nil, :baz))
105
- end
106
-
107
- describe "when assigning to a class variable" do
108
- it "works outside a method" do
109
- _("@@foo = bar")
110
- .must_be_parsed_as s(:cvdecl,
111
- :@@foo,
112
- s(:call, nil, :bar))
113
- end
114
-
115
- it "works inside a method" do
116
- _("def foo; @@bar = baz; end")
117
- .must_be_parsed_as s(:defn,
118
- :foo, s(:args),
119
- s(:cvasgn, :@@bar, s(:call, nil, :baz)))
120
- end
121
-
122
- it "works inside a method with a receiver" do
123
- _("def self.foo; @@bar = baz; end")
124
- .must_be_parsed_as s(:defs,
125
- s(:self),
126
- :foo, s(:args),
127
- s(:cvasgn, :@@bar, s(:call, nil, :baz)))
128
- end
129
-
130
- it "works inside method arguments" do
131
- _("def foo(bar = (@@baz = qux)); end")
132
- .must_be_parsed_as s(:defn,
133
- :foo,
134
- s(:args,
135
- s(:lasgn, :bar,
136
- s(:cvasgn, :@@baz, s(:call, nil, :qux)))),
137
- s(:nil))
138
- end
139
-
140
- it "works inside method arguments of a singleton method" do
141
- _("def self.foo(bar = (@@baz = qux)); end")
142
- .must_be_parsed_as s(:defs,
143
- s(:self),
144
- :foo,
145
- s(:args,
146
- s(:lasgn, :bar,
147
- s(:cvasgn, :@@baz, s(:call, nil, :qux)))),
148
- s(:nil))
149
- end
150
-
151
- it "works inside the receiver in a method definition" do
152
- _("def (bar = (@@baz = qux)).foo; end")
153
- .must_be_parsed_as s(:defs,
154
- s(:lasgn, :bar,
155
- s(:cvdecl, :@@baz,
156
- s(:call, nil, :qux))), :foo,
157
- s(:args), s(:nil))
158
- end
159
- end
160
-
161
- it "works when assigning to a global variable" do
162
- _("$foo = bar")
163
- .must_be_parsed_as s(:gasgn,
164
- :$foo,
165
- s(:call, nil, :bar))
166
- end
167
-
168
- describe "with a rescue modifier" do
169
- it "works with assigning a bare method call" do
170
- _("foo = bar rescue baz")
171
- .must_be_parsed_as s(:lasgn, :foo,
172
- s(:rescue,
173
- s(:call, nil, :bar),
174
- s(:resbody, s(:array), s(:call, nil, :baz))))
175
- end
176
-
177
- it "works with a method call with argument" do
178
- _("foo = bar(baz) rescue qux")
179
- .must_be_parsed_as s(:lasgn, :foo,
180
- s(:rescue,
181
- s(:call, nil, :bar, s(:call, nil, :baz)),
182
- s(:resbody, s(:array), s(:call, nil, :qux))))
183
- end
184
-
185
- it "works with a method call with argument without brackets" do
186
- expected = if RUBY_VERSION < "2.4.0"
187
- s(:rescue,
188
- s(:lasgn, :foo,
189
- s(:call, nil, :bar, s(:call, nil, :baz))),
190
- s(:resbody, s(:array), s(:call, nil, :qux)))
191
- else
192
- s(:lasgn, :foo,
193
- s(:rescue,
194
- s(:call, nil, :bar, s(:call, nil, :baz)),
195
- s(:resbody, s(:array), s(:call, nil, :qux))))
196
- end
197
- _("foo = bar baz rescue qux").must_be_parsed_as expected
198
- end
199
-
200
- it "works with a class method call with argument without brackets" do
201
- expected = if RUBY_VERSION < "2.4.0"
202
- s(:rescue,
203
- s(:lasgn, :foo,
204
- s(:call, s(:const, :Bar), :baz, s(:call, nil, :qux))),
205
- s(:resbody, s(:array), s(:call, nil, :quuz)))
206
- else
207
- s(:lasgn, :foo,
208
- s(:rescue,
209
- s(:call, s(:const, :Bar), :baz, s(:call, nil, :qux)),
210
- s(:resbody, s(:array), s(:call, nil, :quuz))))
211
- end
212
- _("foo = Bar.baz qux rescue quuz")
213
- .must_be_parsed_as expected
214
- end
215
-
216
- it "works with a method call with argument without brackets" do
217
- expected = if RUBY_VERSION < "2.4.0"
218
- s(:rescue,
219
- s(:lasgn, :foo,
220
- s(:call, nil, :bar, s(:call, nil, :baz))),
221
- s(:resbody, s(:array), s(:call, nil, :qux)))
222
- else
223
- s(:lasgn, :foo,
224
- s(:rescue,
225
- s(:call, nil, :bar, s(:call, nil, :baz)),
226
- s(:resbody, s(:array), s(:call, nil, :qux))))
227
- end
228
- _("foo = bar baz rescue qux").must_be_parsed_as expected
229
- end
230
-
231
- it "works with a class method call with argument without brackets" do
232
- expected = if RUBY_VERSION < "2.4.0"
233
- s(:rescue,
234
- s(:lasgn, :foo,
235
- s(:call, s(:const, :Bar), :baz, s(:call, nil, :qux))),
236
- s(:resbody, s(:array), s(:call, nil, :quuz)))
237
- else
238
- s(:lasgn, :foo,
239
- s(:rescue,
240
- s(:call, s(:const, :Bar), :baz, s(:call, nil, :qux)),
241
- s(:resbody, s(:array), s(:call, nil, :quuz))))
242
- end
243
- _("foo = Bar.baz qux rescue quuz")
244
- .must_be_parsed_as expected
245
- end
246
- end
247
-
248
- it "sets the correct line numbers" do
249
- result = parser.parse "foo = {}"
250
- _(result.line).must_equal 1
251
- end
252
- end
253
-
254
- describe "for multiple assignment" do
255
- specify do
256
- _("foo, * = bar")
257
- .must_be_parsed_as s(:masgn,
258
- s(:array, s(:lasgn, :foo), s(:splat)),
259
- s(:to_ary, s(:call, nil, :bar)))
260
- end
261
-
262
- specify do
263
- _("(foo, *bar) = baz")
264
- .must_be_parsed_as s(:masgn,
265
- s(:array,
266
- s(:lasgn, :foo),
267
- s(:splat, s(:lasgn, :bar))),
268
- s(:to_ary, s(:call, nil, :baz)))
269
- end
270
-
271
- specify do
272
- _("*foo, bar = baz")
273
- .must_be_parsed_as s(:masgn,
274
- s(:array,
275
- s(:splat, s(:lasgn, :foo)),
276
- s(:lasgn, :bar)),
277
- s(:to_ary, s(:call, nil, :baz)))
278
- end
279
-
280
- it "works with blocks" do
281
- _("foo, bar = begin; baz; end")
282
- .must_be_parsed_as s(:masgn,
283
- s(:array, s(:lasgn, :foo), s(:lasgn, :bar)),
284
- s(:to_ary, s(:call, nil, :baz)))
285
- end
286
-
287
- it "works with a rescue modifier" do
288
- _("foo, bar = baz rescue qux")
289
- .must_be_parsed_as s(:rescue,
290
- s(:masgn,
291
- s(:array, s(:lasgn, :foo), s(:lasgn, :bar)),
292
- s(:to_ary, s(:call, nil, :baz))),
293
- s(:resbody, s(:array), s(:call, nil, :qux)))
294
- end
295
-
296
- it "works the same number of items on each side" do
297
- _("foo, bar = baz, qux")
298
- .must_be_parsed_as s(:masgn,
299
- s(:array, s(:lasgn, :foo), s(:lasgn, :bar)),
300
- s(:array,
301
- s(:call, nil, :baz),
302
- s(:call, nil, :qux)))
303
- end
304
-
305
- it "works with a single item on the right-hand side" do
306
- _("foo, bar = baz")
307
- .must_be_parsed_as s(:masgn,
308
- s(:array, s(:lasgn, :foo), s(:lasgn, :bar)),
309
- s(:to_ary, s(:call, nil, :baz)))
310
- end
311
-
312
- it "works with left-hand splat" do
313
- _("foo, *bar = baz, qux")
314
- .must_be_parsed_as s(:masgn,
315
- s(:array, s(:lasgn, :foo), s(:splat, s(:lasgn, :bar))),
316
- s(:array,
317
- s(:call, nil, :baz),
318
- s(:call, nil, :qux)))
319
- end
320
-
321
- it "works with parentheses around the left-hand side" do
322
- _("(foo, bar) = baz")
323
- .must_be_parsed_as s(:masgn,
324
- s(:array, s(:lasgn, :foo), s(:lasgn, :bar)),
325
- s(:to_ary, s(:call, nil, :baz)))
326
- end
327
-
328
- it "works with complex destructuring" do
329
- _("foo, (bar, baz) = qux")
330
- .must_be_parsed_as s(:masgn,
331
- s(:array,
332
- s(:lasgn, :foo),
333
- s(:masgn,
334
- s(:array,
335
- s(:lasgn, :bar),
336
- s(:lasgn, :baz)))),
337
- s(:to_ary, s(:call, nil, :qux)))
338
- end
339
-
340
- it "works with complex destructuring of the value" do
341
- _("foo, (bar, baz) = [qux, [quz, quuz]]")
342
- .must_be_parsed_as s(:masgn,
343
- s(:array,
344
- s(:lasgn, :foo),
345
- s(:masgn,
346
- s(:array,
347
- s(:lasgn, :bar),
348
- s(:lasgn, :baz)))),
349
- s(:to_ary,
350
- s(:array,
351
- s(:call, nil, :qux),
352
- s(:array,
353
- s(:call, nil, :quz),
354
- s(:call, nil, :quuz)))))
355
- end
356
-
357
- it "works with destructuring with multiple levels" do
358
- _("((foo, bar)) = baz")
359
- .must_be_parsed_as s(:masgn,
360
- s(:array,
361
- s(:masgn,
362
- s(:array,
363
- s(:lasgn, :foo),
364
- s(:lasgn, :bar)))),
365
- s(:to_ary, s(:call, nil, :baz)))
366
- end
367
-
368
- it "works with instance variables" do
369
- _("@foo, @bar = baz")
370
- .must_be_parsed_as s(:masgn,
371
- s(:array, s(:iasgn, :@foo), s(:iasgn, :@bar)),
372
- s(:to_ary, s(:call, nil, :baz)))
373
- end
374
-
375
- it "works with class variables" do
376
- _("@@foo, @@bar = baz")
377
- .must_be_parsed_as s(:masgn,
378
- s(:array, s(:cvdecl, :@@foo), s(:cvdecl, :@@bar)),
379
- s(:to_ary, s(:call, nil, :baz)))
380
- end
381
-
382
- it "works with attributes" do
383
- _("foo.bar, foo.baz = qux")
384
- .must_be_parsed_as s(:masgn,
385
- s(:array,
386
- s(:attrasgn, s(:call, nil, :foo), :bar=),
387
- s(:attrasgn, s(:call, nil, :foo), :baz=)),
388
- s(:to_ary, s(:call, nil, :qux)))
389
- end
390
-
391
- it "works with collection elements" do
392
- _("foo[1], bar[2] = baz")
393
- .must_be_parsed_as s(:masgn,
394
- s(:array,
395
- s(:attrasgn,
396
- s(:call, nil, :foo), :[]=, s(:lit, 1)),
397
- s(:attrasgn,
398
- s(:call, nil, :bar), :[]=, s(:lit, 2))),
399
- s(:to_ary, s(:call, nil, :baz)))
400
- end
401
-
402
- it "works with constants" do
403
- _("Foo, Bar = baz")
404
- .must_be_parsed_as s(:masgn,
405
- s(:array, s(:cdecl, :Foo), s(:cdecl, :Bar)),
406
- s(:to_ary, s(:call, nil, :baz)))
407
- end
408
-
409
- it "works with instance variables and splat" do
410
- _("@foo, *@bar = baz")
411
- .must_be_parsed_as s(:masgn,
412
- s(:array,
413
- s(:iasgn, :@foo),
414
- s(:splat, s(:iasgn, :@bar))),
415
- s(:to_ary, s(:call, nil, :baz)))
416
- end
417
-
418
- it "works with a right-hand single splat" do
419
- _("foo, bar = *baz")
420
- .must_be_parsed_as s(:masgn,
421
- s(:array, s(:lasgn, :foo), s(:lasgn, :bar)),
422
- s(:splat, s(:call, nil, :baz)))
423
- end
424
-
425
- it "works with a splat in a list of values on the right hand" do
426
- _("foo, bar = baz, *qux")
427
- .must_be_parsed_as s(:masgn,
428
- s(:array, s(:lasgn, :foo), s(:lasgn, :bar)),
429
- s(:array,
430
- s(:call, nil, :baz),
431
- s(:splat, s(:call, nil, :qux))))
432
- end
433
-
434
- it "works with a right-hand single splat with begin..end block" do
435
- _("foo, bar = *begin; baz; end")
436
- .must_be_parsed_as s(:masgn,
437
- s(:array, s(:lasgn, :foo), s(:lasgn, :bar)),
438
- s(:splat,
439
- s(:call, nil, :baz)))
440
- end
441
-
442
- it "sets the correct line numbers" do
443
- result = parser.parse "foo, bar = {}, {}"
444
- _(result.line).must_equal 1
445
- end
446
- end
447
-
448
- describe "for assignment to a collection element" do
449
- it "handles multiple indices" do
450
- _("foo[bar, baz] = qux")
451
- .must_be_parsed_as s(:attrasgn,
452
- s(:call, nil, :foo),
453
- :[]=,
454
- s(:call, nil, :bar),
455
- s(:call, nil, :baz),
456
- s(:call, nil, :qux))
457
- end
458
- end
459
-
460
- describe "for operator assignment" do
461
- it "works with +=" do
462
- _("foo += bar")
463
- .must_be_parsed_as s(:lasgn, :foo,
464
- s(:call, s(:lvar, :foo),
465
- :+,
466
- s(:call, nil, :bar)))
467
- end
468
-
469
- it "works with -=" do
470
- _("foo -= bar")
471
- .must_be_parsed_as s(:lasgn, :foo,
472
- s(:call, s(:lvar, :foo),
473
- :-,
474
- s(:call, nil, :bar)))
475
- end
476
-
477
- it "works with *=" do
478
- _("foo *= bar")
479
- .must_be_parsed_as s(:lasgn, :foo,
480
- s(:call, s(:lvar, :foo),
481
- :*,
482
- s(:call, nil, :bar)))
483
- end
484
-
485
- it "works with /=" do
486
- _("foo /= bar")
487
- .must_be_parsed_as s(:lasgn, :foo,
488
- s(:call,
489
- s(:lvar, :foo), :/,
490
- s(:call, nil, :bar)))
491
- end
492
-
493
- it "works with ||=" do
494
- _("foo ||= bar")
495
- .must_be_parsed_as s(:op_asgn_or,
496
- s(:lvar, :foo),
497
- s(:lasgn, :foo,
498
- s(:call, nil, :bar)))
499
- end
500
-
501
- it "works when assigning to an instance variable" do
502
- _("@foo += bar")
503
- .must_be_parsed_as s(:iasgn, :@foo,
504
- s(:call,
505
- s(:ivar, :@foo), :+,
506
- s(:call, nil, :bar)))
507
- end
508
-
509
- it "works with boolean operators" do
510
- _("foo &&= bar")
511
- .must_be_parsed_as s(:op_asgn_and,
512
- s(:lvar, :foo), s(:lasgn, :foo, s(:call, nil, :bar)))
513
- end
514
-
515
- it "works with boolean operators and blocks" do
516
- _("foo &&= begin; bar; end")
517
- .must_be_parsed_as s(:op_asgn_and,
518
- s(:lvar, :foo), s(:lasgn, :foo, s(:call, nil, :bar)))
519
- end
520
-
521
- it "works with arithmetic operators and blocks" do
522
- _("foo += begin; bar; end")
523
- .must_be_parsed_as s(:lasgn, :foo,
524
- s(:call, s(:lvar, :foo), :+, s(:call, nil, :bar)))
525
- end
526
- end
527
-
528
- describe "for operator assignment to an attribute" do
529
- it "works with +=" do
530
- _("foo.bar += baz")
531
- .must_be_parsed_as s(:op_asgn2,
532
- s(:call, nil, :foo),
533
- :bar=, :+,
534
- s(:call, nil, :baz))
535
- end
536
-
537
- it "works with ||=" do
538
- _("foo.bar ||= baz")
539
- .must_be_parsed_as s(:op_asgn2,
540
- s(:call, nil, :foo),
541
- :bar=, :'||',
542
- s(:call, nil, :baz))
543
- end
544
- end
545
-
546
- describe "for operator assignment to a collection element" do
547
- it "works with +=" do
548
- _("foo[bar] += baz")
549
- .must_be_parsed_as s(:op_asgn1,
550
- s(:call, nil, :foo),
551
- s(:arglist, s(:call, nil, :bar)),
552
- :+,
553
- s(:call, nil, :baz))
554
- end
555
-
556
- it "works with ||=" do
557
- _("foo[bar] ||= baz")
558
- .must_be_parsed_as s(:op_asgn1,
559
- s(:call, nil, :foo),
560
- s(:arglist, s(:call, nil, :bar)),
561
- :"||",
562
- s(:call, nil, :baz))
563
- end
564
-
565
- it "handles multiple indices" do
566
- _("foo[bar, baz] += qux")
567
- .must_be_parsed_as s(:op_asgn1,
568
- s(:call, nil, :foo),
569
- s(:arglist,
570
- s(:call, nil, :bar),
571
- s(:call, nil, :baz)),
572
- :+,
573
- s(:call, nil, :qux))
574
- end
575
-
576
- it "works with a function call without parentheses" do
577
- _("foo[bar] += baz qux")
578
- .must_be_parsed_as s(:op_asgn1,
579
- s(:call, nil, :foo),
580
- s(:arglist, s(:call, nil, :bar)),
581
- :+,
582
- s(:call, nil, :baz, s(:call, nil, :qux)))
583
- end
584
-
585
- it "works with a function call with parentheses" do
586
- _("foo[bar] += baz(qux)")
587
- .must_be_parsed_as s(:op_asgn1,
588
- s(:call, nil, :foo),
589
- s(:arglist, s(:call, nil, :bar)),
590
- :+,
591
- s(:call, nil, :baz, s(:call, nil, :qux)))
592
- end
593
-
594
- it "works with a method call without parentheses" do
595
- _("foo[bar] += baz.qux quuz")
596
- .must_be_parsed_as s(:op_asgn1,
597
- s(:call, nil, :foo),
598
- s(:arglist, s(:call, nil, :bar)),
599
- :+,
600
- s(:call, s(:call, nil, :baz), :qux, s(:call, nil, :quuz)))
601
- end
602
-
603
- it "works with a method call with parentheses" do
604
- _("foo[bar] += baz.qux(quuz)")
605
- .must_be_parsed_as s(:op_asgn1,
606
- s(:call, nil, :foo),
607
- s(:arglist, s(:call, nil, :bar)),
608
- :+,
609
- s(:call, s(:call, nil, :baz), :qux, s(:call, nil, :quuz)))
610
- end
611
- end
612
- end
613
- end