clean_ripper 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: