clean_ripper 0.0.0 → 0.0.1

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.
data/lib/clean_ripper.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- require 'clean_sexp_builder'
2
+ require './clean_sexp_builder'
3
3
 
4
4
  CleanRipper = Ripper::CleanSexpBuilder
5
5
 
@@ -0,0 +1,51 @@
1
+
2
+ warn "Don't include this file! ('clean_ripper_doc.rb')"
3
+
4
+ # Show all sexp that CleanRipper can output.
5
+ class CleanRipperDocumentation
6
+
7
+ # A literal object.
8
+ # @example
9
+ # 1 #=> [:lit, 1]
10
+ # "aa" #=> [:lit, "aa"]
11
+ # @param [Opject] value The literal object.
12
+ def lit(value)
13
+
14
+ end
15
+
16
+ # A binary operation.
17
+ # @example
18
+ # 1+2 #=> [:binary, [:lit, 1], :+, [:lit, 2]]
19
+ # a and b #=> [:binary, [lvar, :a], :and, [:lvar, :a]]
20
+ # @param [Sexp] right The right side of the operation.
21
+ # @param [Sexp] left The left side of the operation.
22
+ # @param [Symbol] operator The operator.
23
+ def binary(right, operator, left)
24
+
25
+ end
26
+
27
+ # A unary operation.
28
+ # @example
29
+ # -a #=> [:unary, :-, [:lvar, :a]]
30
+ # !b #=> [:unary, :!, [:lvar, :b]]
31
+ # @param [Sexp] receiver The receiver of the operation.
32
+ # @param [Symbol] operator The operator.
33
+ def unary(operator, receiver)
34
+
35
+ end
36
+
37
+ # A method call.
38
+ # @example
39
+ # Array.new(5, nil)
40
+ # #=> [:call, [:const, :Array], :new, [[:lit, 5], [:nil]], nil]
41
+ # print var
42
+ # #=> [:call, nil, :print, [[:ident, :var]], nil]
43
+ # @param [Sexp, nil] receiver How calls the method.
44
+ # @param [Symbol] method The method name.
45
+ # @param [Array] arguments Array of arguments.
46
+ # @param [Sexp, nil] block Block passed to the method.
47
+ def call(receiver, method, arguments, block)
48
+
49
+ end
50
+
51
+ end
@@ -3,7 +3,7 @@ require 'ripper'
3
3
 
4
4
  class Ripper
5
5
  class CleanSexpBuilder < SexpBuilder
6
-
6
+
7
7
  def initialize(source)
8
8
  @source = source.split("\n")
9
9
  super
@@ -33,6 +33,42 @@ class Ripper
33
33
  [:splat, args.last]
34
34
  end
35
35
 
36
+ def on_mlhs_new(*args)
37
+ nil
38
+ end
39
+
40
+ def on_mlhs_add(*args)
41
+ args.first ? args.first + [args.last] : [args.last]
42
+ end
43
+
44
+ def on_regexp_new(*args)
45
+ nil
46
+ end
47
+
48
+ def on_regexp_add(*args)
49
+ args.first ? args.first + [args.last] : [args.last]
50
+ end
51
+
52
+ def on_xstring_new(*args)
53
+ nil
54
+ end
55
+
56
+ def on_xstring_add(*args)
57
+ args.first ? args.first + [args.last] : [args.last]
58
+ end
59
+
60
+ def on_mrhs_add(*args)
61
+ args.first ? args.first + [args.last] : [args.last]
62
+ end
63
+
64
+ def on_rescue_mod(*args)
65
+ [:begin, [:body, args[0]], [:rescue, nil, nil, args[1]], nil, nil]
66
+ end
67
+
68
+ def on_mrhs_new_from_args(*args)
69
+ args.first
70
+ end
71
+
36
72
  def on_args_add_star(*args)
37
73
  [:splat, args.last]
38
74
  end
@@ -72,7 +108,7 @@ class Ripper
72
108
  def on_ivar(*args)
73
109
  [:ivar, args.first.to_sym]
74
110
  end
75
-
111
+
76
112
  def on_ident(*args)
77
113
  [:ident, args.first.to_sym]
78
114
  end
@@ -82,17 +118,29 @@ class Ripper
82
118
  end
83
119
 
84
120
  def on_method_add_arg(*args)
85
- [:call, args.first[1][1], (args[1][1] if args[1]), nil]
121
+ [:call, *args.first, (args[1][1] if args[1]) || [], nil]
122
+ end
123
+
124
+ def on_call(*args)
125
+ [args[0], args[-1][1]]
126
+ end
127
+
128
+ def on_fcall(*args)
129
+ [nil, args[0][1]]
86
130
  end
87
131
 
88
132
  def on_args_add_block(*args)
89
- [:block] + args.first
133
+ args.first
90
134
  end
91
135
 
92
136
  def on_args_new(*args)
93
137
  nil
94
138
  end
95
139
 
140
+ def on_command(*args)
141
+ [:call, nil, args[0][1], args[1] || [], nil]
142
+ end
143
+
96
144
  def on_args_add(*args)
97
145
  args.first ? args.first + [args.last] : [args.last]
98
146
  end
@@ -101,7 +149,7 @@ class Ripper
101
149
  brace_block = args[1]
102
150
  brace_block[2].unshift(:block)
103
151
  brace_block[2] = nil if brace_block[2].compact.size == 1
104
- args.first[0..2] << brace_block
152
+ args.first[0, 4] << brace_block
105
153
  end
106
154
 
107
155
  def on_block_var(*args)
@@ -134,6 +182,7 @@ class Ripper
134
182
 
135
183
  def on_paren(*args)
136
184
  l = args.first
185
+ l = [l] if Symbol === l[0]
137
186
  l.size == 1 ? l.first : [:block] + l
138
187
  end
139
188
 
@@ -141,8 +190,42 @@ class Ripper
141
190
  [args.first.to_sym]
142
191
  end
143
192
 
193
+ def on_begin(*args)
194
+ body = args.first.shift
195
+ body.size > 1 ? body = [:block, *body] : body = body.first
196
+ [:begin, [:body, body], *args.first]
197
+ end
198
+
199
+ def on_else(*args)
200
+ block = args.first
201
+ block.size > 1 ? block = [:block, *block] : block = block.first
202
+ [:else, block]
203
+ end
204
+
205
+ def on_ensure(*args)
206
+ block = args.first
207
+ block.size > 1 ? block = [:block, *block] : block = block.first
208
+ [:ensure, block]
209
+ end
210
+
211
+ def on_rescue(*args)
212
+ err = args.shift
213
+ var = args.shift
214
+ block = args.first
215
+ block.size > 1 ? block = [:block, *block] : block = block.first
216
+ [:rescue, err, var, block]
217
+ end
218
+
219
+ def on_const(*args)
220
+ [:const, args.first.to_sym]
221
+ end
222
+
223
+ def on_bodystmt(*args)
224
+ args
225
+ end
226
+
144
227
  def on_do_block(*args)
145
- [:brace_block] + args
228
+ [:brace_block, args[0] ? args[0][1..-1] : [], args[1]]
146
229
  end
147
230
 
148
231
  def on_if_mod(*args)
@@ -177,19 +260,88 @@ class Ripper
177
260
  end
178
261
 
179
262
  def on_string_literal(*args)
180
- [:string, *(args.first || []).compact]
263
+ s = [:string, *(args.first || []).compact]
264
+ if s.size == 2 and s[1][0] == :lit
265
+ s[1]
266
+ elsif s.size == 1
267
+ [:lit, ""]
268
+ else
269
+ s
270
+ end
181
271
  end
182
272
 
183
273
  def on_tstring_content(*args)
184
274
  str = "\""+args.first+"\""
185
275
  if @source[lineno-1][column-1, 1] == "'"
186
276
  str[0] = str[-1] = "'"
277
+ elsif @source[lineno-1][column-1, 1] == "/"
278
+ str[0] = str[-1] = "/"
279
+ else
280
+ if @source[lineno-1][column-1-2, 2] =~ /%([qQ])/
281
+ case $1
282
+ when "q"
283
+ str[0] = str[-1] = "'"
284
+ when "Q"
285
+ end
286
+ end
187
287
  end
188
- [:str, eval(str)]
288
+ [:lit, eval(str)]
189
289
  end
190
290
 
191
291
  def on_string_embexpr(*args)
192
- [:block] + args.first if args.first.first
292
+ if args[0][0]
293
+ args[0].size == 1 ? args[0][0] : [:block] + args[0]
294
+ end
295
+ end
296
+
297
+ def on_qwords_new(*args)
298
+ args
299
+ end
300
+
301
+ def on_massign(*args)
302
+ if args[0][0] == :mlhs_add_star
303
+ [:massign_splat, args[0][1] << args[0][2], args[1]]
304
+ else
305
+ [:massign, *args]
306
+ end
307
+ end
308
+
309
+ def on_field(*args)
310
+ [:field, args[0], args[2][1], []]
311
+ end
312
+
313
+ def on_aref_field(*args)
314
+ [:field, args[0], :[], args[1]]
315
+ end
316
+
317
+ def on_mlhs_paren(*args)
318
+ [:group, *args[0]]
319
+ end
320
+
321
+ def on_regexp_literal(*args)
322
+ s = [:regex, *(args.first || []).compact]
323
+ if s.size == 2 and s[1][0] == :lit
324
+ s[1]
325
+ elsif s.size == 1
326
+ [:lit, //]
327
+ else
328
+ s
329
+ end
330
+ end
331
+
332
+ def on_dyna_symbol(*args)
333
+ s = [:symbol, *(args.first || []).compact]
334
+ if s.size == 2 and s[1][0] == :lit
335
+ [:lit, s[1][1].to_sym]
336
+ elsif s.size == 1
337
+ [:lit, "".to_sym]
338
+ else
339
+ s
340
+ end
341
+ end
342
+
343
+ def on_symbol_literal(*args)
344
+ [:lit, args[0][1][1]]
193
345
  end
194
346
 
195
347
  end
@@ -160,9 +160,11 @@ class CleanRipperTest < Test::Unit::TestCase
160
160
  clean_ripper = [:program,
161
161
  [:assign,
162
162
  [:lvar, :a],
163
- [:rescue_mod,
164
- [:ident, :oops],
165
- [:lit, 10]
163
+ [:begin,
164
+ [:body, [:ident, :oops]],
165
+ [:rescue, nil, nil, [:lit, 10]],
166
+ nil,
167
+ nil
166
168
  ]
167
169
  ]
168
170
  ]
@@ -414,5 +416,633 @@ class CleanRipperTest < Test::Unit::TestCase
414
416
  assert_equal(clean_ripper, CleanRipper.parse(code))
415
417
  assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
416
418
  end
419
+ def test_011
420
+ code = <<-END
421
+ a,b = 1,2
422
+ END
423
+
424
+ # CleanRipper output
425
+ clean_ripper = [:program,
426
+ [:massign,
427
+ [[:ident, :a], [:ident, :b]],
428
+ [[:lit, 1], [:lit, 2]]
429
+ ]
430
+ ]
431
+
432
+ # Ripper output
433
+ ripper = [:program,
434
+ [:stmts_add,
435
+ [:stmts_new],
436
+ [:massign,
437
+ [:mlhs_add,
438
+ [:mlhs_add,
439
+ [:mlhs_new],
440
+ [:@ident, "a", [1, 4]]
441
+ ],
442
+ [:@ident, "b", [1, 6]]
443
+ ],
444
+ [:mrhs_add,
445
+ [:mrhs_new_from_args,
446
+ [:args_add,
447
+ [:args_new],
448
+ [:@int, "1", [1, 10]]
449
+ ]
450
+ ],
451
+ [:@int, "2", [1, 12]]
452
+ ]
453
+ ]
454
+ ]
455
+ ]
456
+
457
+ assert_equal(clean_ripper, CleanRipper.parse(code))
458
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
459
+ end
460
+ def test_012
461
+ code = <<-END
462
+ begin
463
+ a
464
+ rescue
465
+ b
466
+ else
467
+ c
468
+ ensure
469
+ d
470
+ end
471
+ END
472
+
473
+ # CleanRipper output
474
+ clean_ripper = [:program,
475
+ [:begin,
476
+ [:body, [:ident, :a]],
477
+ [:rescue, nil, nil, [:ident, :b]],
478
+ [:else, [:ident, :c]],
479
+ [:ensure, [:ident, :d]]
480
+ ]
481
+ ]
482
+
483
+ # Ripper output
484
+ ripper = [:program,
485
+ [:stmts_add,
486
+ [:stmts_new],
487
+ [:begin,
488
+ [:bodystmt,
489
+ [:stmts_add,
490
+ [:stmts_new],
491
+ [:var_ref, [:@ident, "a", [2, 6]]]
492
+ ],
493
+ [:rescue, nil, nil,
494
+ [:stmts_add,
495
+ [:stmts_new],
496
+ [:var_ref, [:@ident, "b", [4, 6]]]
497
+ ],
498
+ nil
499
+ ],
500
+ [:else,
501
+ [:stmts_add,
502
+ [:stmts_new],
503
+ [:var_ref, [:@ident, "c", [6, 6]]]
504
+ ]
505
+ ],
506
+ [:ensure,
507
+ [:stmts_add,
508
+ [:stmts_new],
509
+ [:var_ref, [:@ident, "d", [8, 6]]]
510
+ ]
511
+ ]
512
+ ]
513
+ ]
514
+ ]
515
+ ]
516
+
517
+ assert_equal(clean_ripper, CleanRipper.parse(code))
518
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
519
+ end
520
+ def test_013
521
+ code = <<-END
522
+ print var
523
+ print(var)
524
+ print (var)
525
+ END
526
+
527
+ # CleanRipper output
528
+ clean_ripper = [:program,
529
+ [:call, nil, :print, [[:ident, :var]], nil],
530
+ [:call, nil, :print, [[:ident, :var]], nil],
531
+ [:call, nil, :print, [[:ident, :var]], nil]
532
+ ]
533
+
534
+ # Ripper output
535
+ ripper = [:program,
536
+ [:stmts_add,
537
+ [:stmts_add,
538
+ [:stmts_add,
539
+ [:stmts_new],
540
+ [:command,
541
+ [:@ident, "print", [1, 6]],
542
+ [:args_add_block,
543
+ [:args_add,
544
+ [:args_new],
545
+ [:var_ref, [:@ident, "var", [1, 12]]]
546
+ ],
547
+ false
548
+ ]
549
+ ]
550
+ ],
551
+ [:method_add_arg,
552
+ [:fcall, [:@ident, "print", [2, 6]]],
553
+ [:arg_paren,
554
+ [:args_add_block,
555
+ [:args_add,
556
+ [:args_new],
557
+ [:var_ref, [:@ident, "var", [2, 12]]]
558
+ ],
559
+ false
560
+ ]
561
+ ]
562
+ ]
563
+ ],
564
+ [:command,
565
+ [:@ident, "print", [3, 6]],
566
+ [:args_add_block,
567
+ [:args_add,
568
+ [:args_new],
569
+ [:paren,
570
+ [:var_ref, [:@ident, "var", [3, 13]]]
571
+ ]
572
+ ],
573
+ false
574
+ ]
575
+ ]
576
+ ]
577
+ ]
578
+
579
+ assert_equal(clean_ripper, CleanRipper.parse(code))
580
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
581
+ end
582
+ def test_014
583
+ code = <<-END
584
+ Array.new(5, nil)
585
+ END
586
+
587
+ # CleanRipper output
588
+ clean_ripper = [:program,
589
+ [:call, [:const, :Array], :new, [[:lit, 5], [:nil]], nil]
590
+ ]
591
+
592
+ # Ripper output
593
+ ripper = [:program,
594
+ [:stmts_add,
595
+ [:stmts_new],
596
+ [:method_add_arg,
597
+ [:call,
598
+ [:var_ref, [:@const, "Array", [1, 4]]],
599
+ :".",
600
+ [:@ident, "new", [1, 10]]
601
+ ],
602
+ [:arg_paren,
603
+ [:args_add_block,
604
+ [:args_add,
605
+ [:args_add,
606
+ [:args_new],
607
+ [:@int, "5", [1, 14]]
608
+ ],
609
+ [:var_ref, [:@kw, "nil", [1, 17]]]
610
+ ],
611
+ false
612
+ ]
613
+ ]
614
+ ]
615
+ ]
616
+ ]
617
+
618
+ assert_equal(clean_ripper, CleanRipper.parse(code))
619
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
620
+ end
621
+ def test_015
622
+ code = <<-END
623
+ eval do
624
+ print "Hello World!"
625
+ end
626
+ END
627
+
628
+ # CleanRipper output
629
+ clean_ripper = [:program,
630
+ [:call, nil, :eval, [],
631
+ [:brace_block,
632
+ [],
633
+ [:block,
634
+ [:call, nil, :print, [[:lit, "Hello World!"]], nil]
635
+ ]
636
+ ]
637
+ ]
638
+ ]
639
+
640
+ # Ripper output
641
+ ripper = [:program,
642
+ [:stmts_add,
643
+ [:stmts_new],
644
+ [:method_add_block,
645
+ [:method_add_arg,
646
+ [:fcall, [:@ident, "eval", [1, 4]]],
647
+ [:args_new]
648
+ ],
649
+ [:do_block, nil,
650
+ [:stmts_add,
651
+ [:stmts_new],
652
+ [:command,
653
+ [:@ident, "print", [2, 6]],
654
+ [:args_add_block,
655
+ [:args_add,
656
+ [:args_new],
657
+ [:string_literal,
658
+ [:string_add,
659
+ [:string_content],
660
+ [:@tstring_content, "Hello World!", [2, 13]]
661
+ ]
662
+ ]
663
+ ],
664
+ false
665
+ ]
666
+ ]
667
+ ]
668
+ ]
669
+ ]
670
+ ]
671
+ ]
672
+
673
+ assert_equal(clean_ripper, CleanRipper.parse(code))
674
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
675
+ end
676
+ def test_016
677
+ code = <<-'END'
678
+ a = "hello"
679
+ b = /world/
680
+ "a = #{a}" =~ /(.)\s=\s#{a}/
681
+ END
682
+
683
+ # CleanRipper output
684
+ clean_ripper = [:program,
685
+ [:assign, [:lvar, :a], [:lit, "hello"]],
686
+ [:assign, [:lvar, :b], [:lit, /world/]],
687
+ [:binary,
688
+ [:string, [:lit, "a = "], [:ident, :a]],
689
+ :=~,
690
+ [:regex, [:lit, /(.)\s=\s/], [:ident, :a]]
691
+ ]
692
+ ]
693
+
694
+ # Ripper output
695
+ ripper = [:program,
696
+ [:stmts_add,
697
+ [:stmts_add,
698
+ [:stmts_add,
699
+ [:stmts_new],
700
+ [:assign,
701
+ [:var_field, [:@ident, "a", [1, 4]]],
702
+ [:string_literal,
703
+ [:string_add,
704
+ [:string_content],
705
+ [:@tstring_content, "hello", [1, 9]]
706
+ ]
707
+ ]
708
+ ]
709
+ ],
710
+ [:assign,
711
+ [:var_field, [:@ident, "b", [2, 4]]],
712
+ [:regexp_literal,
713
+ [:regexp_add,
714
+ [:regexp_new],
715
+ [:@tstring_content, "world", [2, 9]]
716
+ ],
717
+ [:@regexp_end, "/", [2, 14]]
718
+ ]
719
+ ]
720
+ ],
721
+ [:binary,
722
+ [:string_literal,
723
+ [:string_add,
724
+ [:string_add,
725
+ [:string_content],
726
+ [:@tstring_content, "a = ", [3, 5]]
727
+ ],
728
+ [:string_embexpr,
729
+ [:stmts_add,
730
+ [:stmts_new],
731
+ [:var_ref, [:@ident, "a", [3, 11]]]
732
+ ]
733
+ ]
734
+ ]
735
+ ],
736
+ :=~,
737
+ [:regexp_literal,
738
+ [:regexp_add,
739
+ [:regexp_add,
740
+ [:regexp_new],
741
+ [:@tstring_content, "(.)\\s=\\s", [3, 19]]
742
+ ],
743
+ [:string_embexpr,
744
+ [:stmts_add,
745
+ [:stmts_new],
746
+ [:var_ref, [:@ident, "a", [3, 29]]]
747
+ ]
748
+ ]
749
+ ],
750
+ [:@regexp_end, "/", [3, 31]]
751
+ ]
752
+ ]
753
+ ]
754
+ ]
755
+
756
+ assert_equal(clean_ripper, CleanRipper.parse(code))
757
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
758
+ end
759
+ def test_017
760
+ code = <<-'END'
761
+ %q{Hello\sWorld}
762
+ %Q{Hello\sWorld}
763
+ %w{Hello World}
764
+ %s{Hello}
765
+ END
766
+
767
+ # CleanRipper output
768
+ clean_ripper = [:program,
769
+ [:lit, "Hello\\sWorld"],
770
+ [:lit, "Hello World"],
771
+ [:array, [:lit, "Hello"], [:lit, "World"]],
772
+ [:lit, :Hello]
773
+ ]
774
+
775
+ # Ripper output
776
+ ripper = [:program,
777
+ [:stmts_add,
778
+ [:stmts_add,
779
+ [:stmts_add,
780
+ [:stmts_add,
781
+ [:stmts_new],
782
+ [:string_literal,
783
+ [:string_add,
784
+ [:string_content],
785
+ [:@tstring_content, "Hello\\sWorld", [1, 7]]
786
+ ]
787
+ ]
788
+ ],
789
+ [:string_literal,
790
+ [:string_add,
791
+ [:string_content],
792
+ [:@tstring_content, "Hello\\sWorld", [2, 7]]
793
+ ]
794
+ ]
795
+ ],
796
+ [:array,
797
+ [:qwords_add,
798
+ [:qwords_add,
799
+ [:qwords_new],
800
+ [:@tstring_content, "Hello", [3, 7]]
801
+ ],
802
+ [:@tstring_content, "World", [3, 13]]
803
+ ]
804
+ ]
805
+ ],
806
+ [:dyna_symbol,
807
+ [:xstring_add,
808
+ [:xstring_new],
809
+ [:@tstring_content, "Hello", [4, 7]]
810
+ ]
811
+ ]
812
+ ]
813
+ ]
814
+
815
+ assert_equal(clean_ripper, CleanRipper.parse(code))
816
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
817
+ end
818
+ def test_018
819
+ code = <<-'END'
820
+ a, b, c = []
821
+ a, b, *c = []
822
+ a, b, c = *[]
823
+ END
824
+
825
+ # CleanRipper output
826
+ clean_ripper = [:program,
827
+ [:massign,
828
+ [[:ident, :a], [:ident, :b], [:ident, :c]],
829
+ [:array]
830
+ ],
831
+ [:massign_splat,
832
+ [[:ident, :a], [:ident, :b], [:ident, :c]],
833
+ [:array]
834
+ ],
835
+ [:massign,
836
+ [[:ident, :a], [:ident, :b], [:ident, :c]],
837
+ [:splat, [:array]]
838
+ ]
839
+ ]
840
+
841
+ # Ripper output
842
+ ripper = [:program,
843
+ [:stmts_add,
844
+ [:stmts_add,
845
+ [:stmts_add,
846
+ [:stmts_new],
847
+ [:massign,
848
+ [:mlhs_add,
849
+ [:mlhs_add,
850
+ [:mlhs_add,
851
+ [:mlhs_new],
852
+ [:@ident, "a", [1, 4]]
853
+ ],
854
+ [:@ident, "b", [1, 7]]
855
+ ],
856
+ [:@ident, "c", [1, 10]]
857
+ ],
858
+ [:array, nil]
859
+ ]
860
+ ],
861
+ [:massign,
862
+ [:mlhs_add_star,
863
+ [:mlhs_add,
864
+ [:mlhs_add,
865
+ [:mlhs_new],
866
+ [:@ident, "a", [2, 4]]
867
+ ],
868
+ [:@ident, "b", [2, 7]]
869
+ ],
870
+ [:@ident, "c", [2, 11]]
871
+ ],
872
+ [:array, nil]
873
+ ]
874
+ ],
875
+ [:massign,
876
+ [:mlhs_add,
877
+ [:mlhs_add,
878
+ [:mlhs_add,
879
+ [:mlhs_new],
880
+ [:@ident, "a", [3, 4]]
881
+ ],
882
+ [:@ident, "b", [3, 7]]
883
+ ],
884
+ [:@ident, "c", [3, 10]]
885
+ ],
886
+ [:mrhs_add_star,
887
+ [:mrhs_new],
888
+ [:array, nil]
889
+ ]
890
+ ]
891
+ ]
892
+ ]
893
+
894
+ assert_equal(clean_ripper, CleanRipper.parse(code))
895
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
896
+ end
897
+ def test_019
898
+ code = <<-'END'
899
+ a.x, b = 1, 2
900
+ a[2], b = 1, 2
901
+ END
902
+
903
+ # CleanRipper output
904
+ clean_ripper = [:program,
905
+ [:massign,
906
+ [[:field, [:ident, :a], :x, []], [:ident, :b]],
907
+ [[:lit, 1], [:lit, 2]]
908
+ ],
909
+ [:massign,
910
+ [[:field, [:ident, :a], :[], [[:lit, 2]]], [:ident, :b]],
911
+ [[:lit, 1], [:lit, 2]]
912
+ ]
913
+ ]
914
+
915
+ # Ripper output
916
+ ripper = [:program,
917
+ [:stmts_add,
918
+ [:stmts_add,
919
+ [:stmts_new],
920
+ [:massign,
921
+ [:mlhs_add,
922
+ [:mlhs_add,
923
+ [:mlhs_new],
924
+ [:field,
925
+ [:var_ref, [:@ident, "a", [1, 4]]],
926
+ :".",
927
+ [:@ident, "x", [1, 6]]
928
+ ]
929
+ ],
930
+ [:@ident, "b", [1, 9]]
931
+ ],
932
+ [:mrhs_add,
933
+ [:mrhs_new_from_args,
934
+ [:args_add,
935
+ [:args_new],
936
+ [:@int, "1", [1, 13]]
937
+ ]
938
+ ],
939
+ [:@int, "2", [1, 16]]
940
+ ]
941
+ ]
942
+ ],
943
+ [:massign,
944
+ [:mlhs_add,
945
+ [:mlhs_add,
946
+ [:mlhs_new],
947
+ [:aref_field,
948
+ [:var_ref, [:@ident, "a", [2, 4]]],
949
+ [:args_add_block,
950
+ [:args_add,
951
+ [:args_new],
952
+ [:@int, "2", [2, 6]]
953
+ ],
954
+ false
955
+ ]
956
+ ]
957
+ ],
958
+ [:@ident, "b", [2, 10]]
959
+ ],
960
+ [:mrhs_add,
961
+ [:mrhs_new_from_args,
962
+ [:args_add,
963
+ [:args_new],
964
+ [:@int, "1", [2, 14]]
965
+ ]
966
+ ],
967
+ [:@int, "2", [2, 17]]
968
+ ]
969
+ ]
970
+ ]
971
+ ]
972
+
973
+ assert_equal(clean_ripper, CleanRipper.parse(code))
974
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
975
+ end
976
+ def test_020
977
+ code = <<-'END'
978
+ a, (b, c), d = 1, [2, 3], 4
979
+ END
980
+
981
+ # CleanRipper output
982
+ clean_ripper = [:program,
983
+ [:massign,
984
+ [
985
+ [:ident, :a],
986
+ [:group, [:ident, :b], [:ident, :c]],
987
+ [:ident, :d]
988
+ ],
989
+ [
990
+ [:lit, 1],
991
+ [:array, [:lit, 2], [:lit, 3]],
992
+ [:lit, 4]
993
+ ]
994
+ ]
995
+ ]
996
+
997
+ # Ripper output
998
+ ripper = [:program,
999
+ [:stmts_add,
1000
+ [:stmts_new],
1001
+ [:massign,
1002
+ [:mlhs_add,
1003
+ [:mlhs_add,
1004
+ [:mlhs_add,
1005
+ [:mlhs_new],
1006
+ [:@ident, "a", [1, 4]]
1007
+ ],
1008
+ [:mlhs_paren,
1009
+ [:mlhs_add,
1010
+ [:mlhs_add,
1011
+ [:mlhs_new],
1012
+ [:@ident, "b", [1, 8]]
1013
+ ],
1014
+ [:@ident, "c", [1, 11]]
1015
+ ]
1016
+ ]
1017
+ ],
1018
+ [:@ident, "d", [1, 15]]
1019
+ ],
1020
+ [:mrhs_add,
1021
+ [:mrhs_new_from_args,
1022
+ [:args_add,
1023
+ [:args_add,
1024
+ [:args_new],
1025
+ [:@int, "1", [1, 19]]
1026
+ ],
1027
+ [:array,
1028
+ [:args_add,
1029
+ [:args_add,
1030
+ [:args_new],
1031
+ [:@int, "2", [1, 23]]
1032
+ ],
1033
+ [:@int, "3", [1, 26]]
1034
+ ]
1035
+ ]
1036
+ ]
1037
+ ],
1038
+ [:@int, "4", [1, 30]]
1039
+ ]
1040
+ ]
1041
+ ]
1042
+ ]
1043
+
1044
+ assert_equal(clean_ripper, CleanRipper.parse(code))
1045
+ assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
1046
+ end
417
1047
 
418
1048
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clean_ripper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ cert_chain: []
12
12
  date: 2011-09-10 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: Produces a clean output for Ripper, making the output tree usable and
15
- redable.
15
+ readable.
16
16
  email: lb-guilherme@live.com
17
17
  executables: []
18
18
  extensions: []
@@ -20,6 +20,7 @@ extra_rdoc_files: []
20
20
  files:
21
21
  - lib/clean_ripper.rb
22
22
  - lib/clean_sexp_builder.rb
23
+ - lib/clean_ripper_doc.rb
23
24
  - test/clean_ripper_test.rb
24
25
  homepage: https://github.com/LBg/CleanRipper
25
26
  licenses: []
@@ -41,9 +42,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
42
  version: '0'
42
43
  requirements: []
43
44
  rubyforge_project:
44
- rubygems_version: 1.8.10
45
+ rubygems_version: 1.7.2
45
46
  signing_key:
46
47
  specification_version: 3
47
48
  summary: Produces a clean output for Ripper.
48
49
  test_files:
49
50
  - test/clean_ripper_test.rb
51
+ has_rdoc: