ruby2ruby 1.3.1 → 2.0.0.b1
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/History.txt +23 -0
- data/README.txt +12 -0
- data/Rakefile +43 -14
- data/bin/r2r_show +1 -1
- data/lib/ruby2ruby.rb +37 -30
- data/test/test_ruby2ruby.rb +59 -55
- data.tar.gz.sig +0 -0
- metadata +35 -28
- metadata.gz.sig +3 -1
data/History.txt
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
=== 2.0.0.b1 / 2012-07-27
|
2
|
+
|
3
|
+
* 4 major enhancements:
|
4
|
+
|
5
|
+
* Made it work without arglist in call.
|
6
|
+
* Made it work without scope/block in class/module/defn/defs.
|
7
|
+
* Removed block from resbody
|
8
|
+
* Removed block from when node
|
9
|
+
|
10
|
+
* 4 minor enhancements:
|
11
|
+
|
12
|
+
* Added debug task to help isolate an error
|
13
|
+
* Empty hash is now a proper {}
|
14
|
+
* Refactored and added finish method.
|
15
|
+
* Switched to new Ruby18Parser to avoid deprecation warnings
|
16
|
+
|
17
|
+
* 4 bug fixes:
|
18
|
+
|
19
|
+
* Fixed call with empty hash arg. (neilconway)
|
20
|
+
* OMG WTF... removed long decrepit ParseTree dependency
|
21
|
+
* Removed isolate/rake require to reduce minimum bootstrap to hoe + rake + rake install_plugins (*2)
|
22
|
+
* Skip 1.9 tests for now.
|
23
|
+
|
1
24
|
=== 1.3.1 / 2011-09-22
|
2
25
|
|
3
26
|
* 1 minor enhancement:
|
data/README.txt
CHANGED
@@ -48,6 +48,18 @@ processors in ruby easier than ever!
|
|
48
48
|
|
49
49
|
+ sudo gem install ruby2ruby
|
50
50
|
|
51
|
+
== How to Contribute:
|
52
|
+
|
53
|
+
To get started all you need is a checkout, rake, and hoe. The easiest
|
54
|
+
way is:
|
55
|
+
|
56
|
+
% git clone seattlerb/ruby2ruby # assumes you use the `hub` wrapper.
|
57
|
+
% gem i rake hoe
|
58
|
+
% rake install_plugins # installs hoe-seattlerb & isolate
|
59
|
+
% rake install_plugins # installs minitest (referenced from hoe-seattlerb)
|
60
|
+
|
61
|
+
From here you should be good to go. We accept pull requests on github.
|
62
|
+
|
51
63
|
== LICENSE:
|
52
64
|
|
53
65
|
(The MIT License)
|
data/Rakefile
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'hoe'
|
5
|
-
require 'isolate/rake'
|
6
5
|
|
7
6
|
Hoe.add_include_dirs("lib",
|
8
7
|
"../../ruby_parser/dev/lib",
|
@@ -16,36 +15,42 @@ Hoe.spec 'ruby2ruby' do
|
|
16
15
|
|
17
16
|
self.rubyforge_name = 'seattlerb'
|
18
17
|
|
19
|
-
dependency "sexp_processor", "~>
|
20
|
-
dependency "ruby_parser", "~>
|
21
|
-
|
18
|
+
dependency "sexp_processor", "~> 4.0"
|
19
|
+
dependency "ruby_parser", "~> 3.0.0.a4"
|
20
|
+
end
|
21
|
+
|
22
|
+
def process ruby, file="stdin"
|
23
|
+
require "ruby_parser"
|
24
|
+
require "ruby2ruby"
|
25
|
+
|
26
|
+
parser = RubyParser.new
|
27
|
+
ruby2ruby = Ruby2Ruby.new
|
28
|
+
|
29
|
+
begin
|
30
|
+
sexp = parser.process(ruby, file)
|
31
|
+
|
32
|
+
ruby2ruby.process(sexp)
|
33
|
+
rescue Interrupt => e
|
34
|
+
raise e
|
35
|
+
end
|
22
36
|
end
|
23
37
|
|
24
38
|
task :stress do
|
25
39
|
$: << "lib"
|
26
40
|
$: << "../../ruby_parser/dev/lib"
|
27
|
-
require "ruby_parser"
|
28
|
-
require "ruby2ruby"
|
29
41
|
require "pp"
|
30
42
|
|
31
43
|
files = Dir["../../*/dev/**/*.rb"]
|
32
44
|
|
33
45
|
warn "Stress testing against #{files.size} files"
|
34
|
-
parser = RubyParser.new
|
35
|
-
ruby2ruby = Ruby2Ruby.new
|
36
46
|
|
37
47
|
bad = {}
|
38
48
|
|
39
49
|
files.each do |file|
|
40
50
|
warn file
|
41
|
-
ruby = File.read(file)
|
42
51
|
|
43
52
|
begin
|
44
|
-
|
45
|
-
|
46
|
-
# $stderr.puts sexp.pretty_inspect
|
47
|
-
|
48
|
-
ruby2ruby.process(sexp)
|
53
|
+
process File.read(file), file
|
49
54
|
rescue Interrupt => e
|
50
55
|
raise e
|
51
56
|
rescue Exception => e
|
@@ -56,4 +61,28 @@ task :stress do
|
|
56
61
|
pp bad
|
57
62
|
end
|
58
63
|
|
64
|
+
task :debug => :isolate do
|
65
|
+
ENV["V"] ||= "18"
|
66
|
+
|
67
|
+
$: << "lib"
|
68
|
+
require 'ruby_parser'
|
69
|
+
|
70
|
+
parser = if ENV["V"] == "18" then
|
71
|
+
Ruby18Parser.new
|
72
|
+
else
|
73
|
+
Ruby19Parser.new
|
74
|
+
end
|
75
|
+
|
76
|
+
file = ENV["F"] || ENV["FILE"]
|
77
|
+
|
78
|
+
ruby = if file then
|
79
|
+
File.read(file)
|
80
|
+
else
|
81
|
+
file = "env"
|
82
|
+
ENV["R"] || ENV["RUBY"]
|
83
|
+
end
|
84
|
+
|
85
|
+
puts process(ruby, file)
|
86
|
+
end
|
87
|
+
|
59
88
|
# vim: syntax=ruby
|
data/bin/r2r_show
CHANGED
data/lib/ruby2ruby.rb
CHANGED
@@ -24,7 +24,7 @@ class Regexp
|
|
24
24
|
end
|
25
25
|
|
26
26
|
class Ruby2Ruby < SexpProcessor
|
27
|
-
VERSION = '
|
27
|
+
VERSION = '2.0.0.b1'
|
28
28
|
LINE_LENGTH = 78
|
29
29
|
|
30
30
|
BINARY = [:<=>, :==, :<, :>, :<=, :>=, :-, :+, :*, :/, :%, :<<, :>>, :**]
|
@@ -121,8 +121,8 @@ class Ruby2Ruby < SexpProcessor
|
|
121
121
|
|
122
122
|
case name
|
123
123
|
when :[]= then
|
124
|
-
rhs =
|
125
|
-
"#{receiver}[#{process
|
124
|
+
rhs = exp.empty? ? nil : exp.shift
|
125
|
+
"#{receiver}[#{process args}] = #{process rhs}"
|
126
126
|
else
|
127
127
|
name = name.to_s.sub(/=$/, '')
|
128
128
|
if args && args != s(:arglist) then
|
@@ -169,7 +169,7 @@ class Ruby2Ruby < SexpProcessor
|
|
169
169
|
|
170
170
|
def parenthesize exp
|
171
171
|
case self.context[1]
|
172
|
-
when nil, :
|
172
|
+
when nil, :defn, :defs, :class, :sclass, :if, :iter, :resbody, :when, :while then
|
173
173
|
exp
|
174
174
|
else
|
175
175
|
"(#{exp})"
|
@@ -208,12 +208,14 @@ class Ruby2Ruby < SexpProcessor
|
|
208
208
|
in_context :arglist do
|
209
209
|
until exp.empty? do
|
210
210
|
arg_type = exp.first.sexp_type
|
211
|
+
is_empty_hash = (exp.first == s(:hash))
|
211
212
|
arg = process exp.shift
|
212
213
|
|
213
214
|
next if arg.empty?
|
214
215
|
|
215
216
|
strip_hash = (arg_type == :hash and
|
216
217
|
not BINARY.include? name and
|
218
|
+
not is_empty_hash and
|
217
219
|
(exp.empty? or exp.first.sexp_type == :splat))
|
218
220
|
wrap_arg = Ruby2Ruby::ASSIGN_NODES.include? arg_type
|
219
221
|
|
@@ -332,20 +334,23 @@ class Ruby2Ruby < SexpProcessor
|
|
332
334
|
end
|
333
335
|
end
|
334
336
|
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
body
|
345
|
-
return "#{exp.comments}def #{name}#{args}\n#{body}\nend".gsub(/\n\s*\n+/, "\n")
|
346
|
-
else
|
347
|
-
raise "Unknown defn type: #{type1} for #{exp.inspect}"
|
337
|
+
comm = exp.comments
|
338
|
+
name = exp.shift
|
339
|
+
args = process(exp.shift)
|
340
|
+
args = "" if args == "()"
|
341
|
+
|
342
|
+
exp.shift if exp == s(s(:nil)) # empty it out of a default nil expression
|
343
|
+
|
344
|
+
body = []
|
345
|
+
until exp.empty? do
|
346
|
+
body << indent(process(exp.shift))
|
348
347
|
end
|
348
|
+
|
349
|
+
body << indent("# do nothing") if body.empty?
|
350
|
+
|
351
|
+
body = body.join("\n")
|
352
|
+
|
353
|
+
return "#{comm}def #{name}#{args}\n#{body}\nend".gsub(/\n\s*\n+/, "\n")
|
349
354
|
end
|
350
355
|
|
351
356
|
def process_defs(exp)
|
@@ -457,7 +462,7 @@ class Ruby2Ruby < SexpProcessor
|
|
457
462
|
result << "#{lhs} => #{rhs}"
|
458
463
|
end
|
459
464
|
|
460
|
-
return "{ #{result.join(', ')} }"
|
465
|
+
return result.empty? ? "{}" : "{ #{result.join(', ')} }"
|
461
466
|
end
|
462
467
|
|
463
468
|
def process_iasgn(exp)
|
@@ -706,7 +711,8 @@ class Ruby2Ruby < SexpProcessor
|
|
706
711
|
|
707
712
|
def process_resbody exp
|
708
713
|
args = exp.shift
|
709
|
-
body =
|
714
|
+
body = finish(exp)
|
715
|
+
body << "# do nothing" if body.empty?
|
710
716
|
|
711
717
|
name = args.lasgn true
|
712
718
|
name ||= args.iasgn true
|
@@ -714,7 +720,7 @@ class Ruby2Ruby < SexpProcessor
|
|
714
720
|
args = " #{args}" unless args.empty?
|
715
721
|
args += " => #{name[1]}" if name
|
716
722
|
|
717
|
-
"rescue#{args}\n#{indent body}"
|
723
|
+
"rescue#{args}\n#{indent body.join("\n")}"
|
718
724
|
end
|
719
725
|
|
720
726
|
def process_rescue exp
|
@@ -761,10 +767,6 @@ class Ruby2Ruby < SexpProcessor
|
|
761
767
|
"class << #{process(exp.shift)}\n#{indent(process(exp.shift))}\nend"
|
762
768
|
end
|
763
769
|
|
764
|
-
def process_scope(exp)
|
765
|
-
exp.empty? ? "" : process(exp.shift)
|
766
|
-
end
|
767
|
-
|
768
770
|
def process_self(exp)
|
769
771
|
"self"
|
770
772
|
end
|
@@ -782,10 +784,7 @@ class Ruby2Ruby < SexpProcessor
|
|
782
784
|
end
|
783
785
|
|
784
786
|
def process_super(exp)
|
785
|
-
args =
|
786
|
-
until exp.empty? do
|
787
|
-
args << process(exp.shift)
|
788
|
-
end
|
787
|
+
args = finish exp
|
789
788
|
|
790
789
|
"super(#{args.join(', ')})"
|
791
790
|
end
|
@@ -829,7 +828,7 @@ class Ruby2Ruby < SexpProcessor
|
|
829
828
|
|
830
829
|
until exp.empty?
|
831
830
|
cond = process(exp.shift).to_s[1..-2]
|
832
|
-
code = indent(
|
831
|
+
code = indent(finish(exp).join("\n"))
|
833
832
|
code = indent "# do nothing" if code =~ /\A\s*\Z/
|
834
833
|
src << "when #{cond} then\n#{code.chomp}"
|
835
834
|
end
|
@@ -935,6 +934,14 @@ class Ruby2Ruby < SexpProcessor
|
|
935
934
|
############################################################
|
936
935
|
# Utility Methods:
|
937
936
|
|
937
|
+
def finish exp # REFACTOR: work this out of the rest of the processors
|
938
|
+
body = []
|
939
|
+
until exp.empty? do
|
940
|
+
body << process(exp.shift)
|
941
|
+
end
|
942
|
+
body.compact
|
943
|
+
end
|
944
|
+
|
938
945
|
def dthing_escape type, lit
|
939
946
|
lit = lit.gsub(/\n/, '\n')
|
940
947
|
case type
|
@@ -992,7 +999,7 @@ class Ruby2Ruby < SexpProcessor
|
|
992
999
|
|
993
1000
|
body = []
|
994
1001
|
begin
|
995
|
-
code = process(exp.shift)
|
1002
|
+
code = process(exp.shift) unless exp.empty?
|
996
1003
|
body << code.chomp unless code.nil? or code.chomp.empty?
|
997
1004
|
end until exp.empty?
|
998
1005
|
|
data/test/test_ruby2ruby.rb
CHANGED
@@ -18,6 +18,8 @@ class R2RTestCase < ParseTreeTestCase
|
|
18
18
|
def self.generate_test klass, node, data, input_name, output_name
|
19
19
|
output_name = data.has_key?('Ruby2Ruby') ? 'Ruby2Ruby' : 'Ruby'
|
20
20
|
|
21
|
+
return if node.to_s =~ /19$/
|
22
|
+
|
21
23
|
klass.class_eval <<-EOM
|
22
24
|
def test_#{node}
|
23
25
|
pt = #{data[input_name].inspect}
|
@@ -101,19 +103,18 @@ class TestRuby2Ruby < R2RTestCase
|
|
101
103
|
end
|
102
104
|
|
103
105
|
def test_call_self_index
|
104
|
-
util_compare s(:call, nil, :[], s(:
|
106
|
+
util_compare s(:call, nil, :[], s(:lit, 42)), "self[42]"
|
105
107
|
end
|
106
108
|
|
107
109
|
def test_call_self_index_equals
|
108
|
-
util_compare(s(:call, nil, :[]=, s(:
|
110
|
+
util_compare(s(:call, nil, :[]=, s(:lit, 42), s(:lit, 24)),
|
109
111
|
"self[42] = 24")
|
110
112
|
end
|
111
113
|
|
112
114
|
def test_call_arglist_hash_first
|
113
115
|
inn = s(:call, nil, :method,
|
114
|
-
s(:
|
115
|
-
|
116
|
-
s(:call, nil, :b, s(:arglist))))
|
116
|
+
s(:hash, s(:lit, :a), s(:lit, 1)),
|
117
|
+
s(:call, nil, :b))
|
117
118
|
out = "method({ :a => 1 }, b)"
|
118
119
|
|
119
120
|
util_compare inn, out
|
@@ -121,10 +122,9 @@ class TestRuby2Ruby < R2RTestCase
|
|
121
122
|
|
122
123
|
def test_call_arglist_hash_first_last
|
123
124
|
inn = s(:call, nil, :method,
|
124
|
-
s(:
|
125
|
-
|
126
|
-
|
127
|
-
s(:hash, s(:lit, :c), s(:lit, 1))))
|
125
|
+
s(:hash, s(:lit, :a), s(:lit, 1)),
|
126
|
+
s(:call, nil, :b),
|
127
|
+
s(:hash, s(:lit, :c), s(:lit, 1)))
|
128
128
|
out = "method({ :a => 1 }, b, :c => 1)"
|
129
129
|
|
130
130
|
util_compare inn, out
|
@@ -132,9 +132,8 @@ class TestRuby2Ruby < R2RTestCase
|
|
132
132
|
|
133
133
|
def test_call_arglist_hash_last
|
134
134
|
inn = s(:call, nil, :method,
|
135
|
-
s(:
|
136
|
-
|
137
|
-
s(:hash, s(:lit, :a), s(:lit, 1))))
|
135
|
+
s(:call, nil, :b),
|
136
|
+
s(:hash, s(:lit, :a), s(:lit, 1)))
|
138
137
|
out = "method(b, :a => 1)"
|
139
138
|
|
140
139
|
util_compare inn, out
|
@@ -142,13 +141,12 @@ class TestRuby2Ruby < R2RTestCase
|
|
142
141
|
|
143
142
|
def test_call_arglist_if
|
144
143
|
inn = s(:call,
|
145
|
-
s(:call, nil, :a
|
144
|
+
s(:call, nil, :a),
|
146
145
|
:+,
|
147
|
-
s(:
|
148
|
-
s(:
|
149
|
-
|
150
|
-
|
151
|
-
s(:call, nil, :d, s(:arglist)))))
|
146
|
+
s(:if,
|
147
|
+
s(:call, nil, :b),
|
148
|
+
s(:call, nil, :c),
|
149
|
+
s(:call, nil, :d)))
|
152
150
|
|
153
151
|
out = "(a + (b ? (c) : (d)))"
|
154
152
|
util_compare inn, out
|
@@ -161,14 +159,14 @@ class TestRuby2Ruby < R2RTestCase
|
|
161
159
|
s(:array,
|
162
160
|
s(:splat,
|
163
161
|
s(:call,
|
164
|
-
s(:call, nil, :line
|
162
|
+
s(:call, nil, :line),
|
165
163
|
:split,
|
166
|
-
s(:
|
164
|
+
s(:lit, /\=/), s(:lit, 2))))),
|
167
165
|
s(:attrasgn,
|
168
166
|
s(:self),
|
169
167
|
:[]=,
|
170
|
-
s(:arglist, s(:lvar, :k),
|
171
|
-
|
168
|
+
s(:arglist, s(:lvar, :k)),
|
169
|
+
s(:call, s(:lvar, :v), :strip)))
|
172
170
|
|
173
171
|
out = "k, v = *line.split(/\\=/, 2)\nself[k] = v.strip\n"
|
174
172
|
|
@@ -181,15 +179,15 @@ class TestRuby2Ruby < R2RTestCase
|
|
181
179
|
s(:array,
|
182
180
|
s(:splat,
|
183
181
|
s(:call,
|
184
|
-
s(:call, nil, :line
|
182
|
+
s(:call, nil, :line),
|
185
183
|
:split,
|
186
|
-
s(:
|
184
|
+
s(:lit, /\=/), s(:lit, 2)))))
|
187
185
|
out = 'k, v = *line.split(/\\=/, 2)'
|
188
186
|
util_compare inn, out
|
189
187
|
end
|
190
188
|
|
191
189
|
def test_match3_asgn
|
192
|
-
inn = s(:match3, s(:lit, //), s(:lasgn, :y, s(:call, nil, :x
|
190
|
+
inn = s(:match3, s(:lit, //), s(:lasgn, :y, s(:call, nil, :x)))
|
193
191
|
out = "(y = x) =~ //"
|
194
192
|
# "y = x =~ //", which matches on x and assigns to y (not what sexp says).
|
195
193
|
util_compare inn, out
|
@@ -197,12 +195,11 @@ class TestRuby2Ruby < R2RTestCase
|
|
197
195
|
|
198
196
|
def test_splat_call
|
199
197
|
inn = s(:call, nil, :x,
|
200
|
-
s(:
|
201
|
-
s(:
|
202
|
-
s(:call,
|
203
|
-
|
204
|
-
|
205
|
-
s(:arglist, s(:lit, /\=/), s(:lit, 2))))))
|
198
|
+
s(:splat,
|
199
|
+
s(:call,
|
200
|
+
s(:call, nil, :line),
|
201
|
+
:split,
|
202
|
+
s(:lit, /\=/), s(:lit, 2))))
|
206
203
|
|
207
204
|
out = 'x(*line.split(/\=/, 2))'
|
208
205
|
util_compare inn, out
|
@@ -210,12 +207,12 @@ class TestRuby2Ruby < R2RTestCase
|
|
210
207
|
|
211
208
|
def test_resbody_block
|
212
209
|
inn = s(:rescue,
|
213
|
-
s(:call, nil, :x1
|
210
|
+
s(:call, nil, :x1),
|
214
211
|
s(:resbody,
|
215
212
|
s(:array),
|
216
213
|
s(:block,
|
217
|
-
s(:call, nil, :x2
|
218
|
-
s(:call, nil, :x3
|
214
|
+
s(:call, nil, :x2),
|
215
|
+
s(:call, nil, :x3))))
|
219
216
|
|
220
217
|
out = "begin\n x1\nrescue\n x2\n x3\nend"
|
221
218
|
util_compare inn, out
|
@@ -224,7 +221,7 @@ class TestRuby2Ruby < R2RTestCase
|
|
224
221
|
def test_resbody_short_with_begin_end
|
225
222
|
# "begin; blah; rescue; []; end"
|
226
223
|
inn = s(:rescue,
|
227
|
-
s(:call, nil, :blah
|
224
|
+
s(:call, nil, :blah),
|
228
225
|
s(:resbody, s(:array), s(:array)))
|
229
226
|
out = "blah rescue []"
|
230
227
|
util_compare inn, out
|
@@ -234,7 +231,7 @@ class TestRuby2Ruby < R2RTestCase
|
|
234
231
|
inn = s(:match3,
|
235
232
|
s(:dregx,
|
236
233
|
"abc",
|
237
|
-
s(:evstr, s(:call, nil, :x
|
234
|
+
s(:evstr, s(:call, nil, :x)),
|
238
235
|
s(:str, "def"),
|
239
236
|
4),
|
240
237
|
s(:str, "a"))
|
@@ -244,7 +241,7 @@ class TestRuby2Ruby < R2RTestCase
|
|
244
241
|
|
245
242
|
def test_resbody_short_with_rescue_args
|
246
243
|
inn = s(:rescue,
|
247
|
-
s(:call, nil, :blah
|
244
|
+
s(:call, nil, :blah),
|
248
245
|
s(:resbody, s(:array, s(:const, :A), s(:const, :B)), s(:array)))
|
249
246
|
out = "begin\n blah\nrescue A, B\n []\nend"
|
250
247
|
util_compare inn, out
|
@@ -256,9 +253,9 @@ class TestRuby2Ruby < R2RTestCase
|
|
256
253
|
# end
|
257
254
|
|
258
255
|
inn = s(:if, s(:lit, 42),
|
259
|
-
s(:call, s(:call, nil, :args
|
256
|
+
s(:call, s(:call, nil, :args),
|
260
257
|
:<<,
|
261
|
-
s(:
|
258
|
+
s(:hash, s(:lit, :key), s(:lit, 24))),
|
262
259
|
nil)
|
263
260
|
|
264
261
|
out = "(args << { :key => 24 }) if 42"
|
@@ -266,8 +263,14 @@ class TestRuby2Ruby < R2RTestCase
|
|
266
263
|
util_compare inn, out
|
267
264
|
end
|
268
265
|
|
266
|
+
def test_call_empty_hash
|
267
|
+
inn = s(:call, nil, :foo, s(:arglist, s(:hash)))
|
268
|
+
out = "foo({})"
|
269
|
+
util_compare inn, out
|
270
|
+
end
|
271
|
+
|
269
272
|
def test_if_empty
|
270
|
-
inn = s(:if, s(:call, nil, :x
|
273
|
+
inn = s(:if, s(:call, nil, :x), nil, nil)
|
271
274
|
out = "if x then\n # do nothing\nend"
|
272
275
|
util_compare inn, out
|
273
276
|
end
|
@@ -276,9 +279,9 @@ class TestRuby2Ruby < R2RTestCase
|
|
276
279
|
# log_entry = " \e[#{message_color}m#{message}\e[0m "
|
277
280
|
inn = s(:lasgn, :log_entry,
|
278
281
|
s(:dstr, " \e[",
|
279
|
-
s(:evstr, s(:call, nil, :message_color
|
282
|
+
s(:evstr, s(:call, nil, :message_color)),
|
280
283
|
s(:str, "m"),
|
281
|
-
s(:evstr, s(:call, nil, :message
|
284
|
+
s(:evstr, s(:call, nil, :message)),
|
282
285
|
s(:str, "\e[0m ")))
|
283
286
|
out = "log_entry = \" \e[#\{message_color}m#\{message}\e[0m \""
|
284
287
|
|
@@ -286,21 +289,21 @@ class TestRuby2Ruby < R2RTestCase
|
|
286
289
|
end
|
287
290
|
|
288
291
|
def test_class_comments
|
289
|
-
inn = s(:class, :Z, nil
|
292
|
+
inn = s(:class, :Z, nil)
|
290
293
|
inn.comments = "# x\n# y\n"
|
291
294
|
out = "# x\n# y\nclass Z\nend"
|
292
295
|
util_compare inn, out
|
293
296
|
end
|
294
297
|
|
295
298
|
def test_module_comments
|
296
|
-
inn = s(:module, :Z
|
299
|
+
inn = s(:module, :Z)
|
297
300
|
inn.comments = "# x\n# y\n"
|
298
301
|
out = "# x\n# y\nmodule Z\nend"
|
299
302
|
util_compare inn, out
|
300
303
|
end
|
301
304
|
|
302
305
|
def test_method_comments
|
303
|
-
inn = s(:defn, :z, s(:args), s(:
|
306
|
+
inn = s(:defn, :z, s(:args), s(:nil))
|
304
307
|
inn.comments = "# x\n# y\n"
|
305
308
|
out = "# x\n# y\ndef z\n # do nothing\nend"
|
306
309
|
util_compare inn, out
|
@@ -311,19 +314,19 @@ class TestRuby2Ruby < R2RTestCase
|
|
311
314
|
out = "begin\n 1\nensure\n 2\nend"
|
312
315
|
util_compare inn, out
|
313
316
|
end
|
314
|
-
|
317
|
+
|
315
318
|
def test_nested_ensure
|
316
319
|
inn = s(:ensure, s(:lit, 1), s(:ensure, s(:lit, 2), s(:lit, 3)))
|
317
320
|
out = "begin\n 1\nensure\n begin\n 2\n ensure\n 3\n end\nend"
|
318
321
|
util_compare inn, out
|
319
322
|
end
|
320
|
-
|
323
|
+
|
321
324
|
def test_nested_rescue
|
322
325
|
inn = s(:ensure, s(:lit, 1), s(:rescue, s(:lit, 2), s(:resbody, s(:array), s(:lit, 3))))
|
323
326
|
out = "begin\n 1\nensure\n 2 rescue 3\nend"
|
324
327
|
util_compare inn, out
|
325
328
|
end
|
326
|
-
|
329
|
+
|
327
330
|
def test_nested_rescue_exception
|
328
331
|
inn = s(:ensure, s(:lit, 1), s(:rescue, s(:lit, 2), s(:resbody, s(:array, s(:const, :Exception)), s(:lit, 3))))
|
329
332
|
out = "begin\n 1\nensure\n begin\n 2\n rescue Exception\n 3\n end\nend"
|
@@ -338,15 +341,15 @@ class TestRuby2Ruby < R2RTestCase
|
|
338
341
|
|
339
342
|
def test_rescue_block
|
340
343
|
inn = s(:rescue,
|
341
|
-
s(:call, nil, :alpha
|
342
|
-
s(:resbody, s(:array),
|
344
|
+
s(:call, nil, :alpha),
|
345
|
+
s(:resbody, s(:array),
|
343
346
|
s(:block,
|
344
|
-
s(:call, nil, :beta
|
345
|
-
s(:call, nil, :gamma
|
347
|
+
s(:call, nil, :beta),
|
348
|
+
s(:call, nil, :gamma))))
|
346
349
|
out = "begin\n alpha\nrescue\n beta\n gamma\nend"
|
347
350
|
util_compare inn, out
|
348
351
|
end
|
349
|
-
|
352
|
+
|
350
353
|
def util_compare sexp, expected_ruby, expected_eval = nil
|
351
354
|
assert_equal expected_ruby, @processor.process(sexp)
|
352
355
|
assert_equal expected_eval, eval(expected_ruby) if expected_eval
|
@@ -355,7 +358,7 @@ class TestRuby2Ruby < R2RTestCase
|
|
355
358
|
def util_thingy(type)
|
356
359
|
s(type,
|
357
360
|
'a"b',
|
358
|
-
s(:evstr, s(:call, s(:lit, 1), :+, s(:
|
361
|
+
s(:evstr, s(:call, s(:lit, 1), :+, s(:lit, 1))),
|
359
362
|
s(:str, 'c"d/e'))
|
360
363
|
end
|
361
364
|
end
|
@@ -381,7 +384,8 @@ def silent_eval ruby
|
|
381
384
|
end
|
382
385
|
|
383
386
|
def morph_and_eval src, from, to, processor
|
384
|
-
new_src = processor.new.process(
|
387
|
+
new_src = processor.new.process(Ruby18Parser.new.process(src.sub(from, to)))
|
388
|
+
|
385
389
|
silent_eval new_src
|
386
390
|
new_src
|
387
391
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby2ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: -533234434
|
5
|
+
prerelease: 6
|
6
6
|
segments:
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
- b
|
7
11
|
- 1
|
8
|
-
|
9
|
-
- 1
|
10
|
-
version: 1.3.1
|
12
|
+
version: 2.0.0.b1
|
11
13
|
platform: ruby
|
12
14
|
authors:
|
13
15
|
- Ryan Davis
|
@@ -36,7 +38,7 @@ cert_chain:
|
|
36
38
|
FBHgymkyj/AOSqKRIpXPhjC6
|
37
39
|
-----END CERTIFICATE-----
|
38
40
|
|
39
|
-
date:
|
41
|
+
date: 2012-07-28 00:00:00 Z
|
40
42
|
dependencies:
|
41
43
|
- !ruby/object:Gem::Dependency
|
42
44
|
name: sexp_processor
|
@@ -46,11 +48,11 @@ dependencies:
|
|
46
48
|
requirements:
|
47
49
|
- - ~>
|
48
50
|
- !ruby/object:Gem::Version
|
49
|
-
hash:
|
51
|
+
hash: 27
|
50
52
|
segments:
|
51
|
-
-
|
53
|
+
- 4
|
52
54
|
- 0
|
53
|
-
version: "
|
55
|
+
version: "4.0"
|
54
56
|
type: :runtime
|
55
57
|
version_requirements: *id001
|
56
58
|
- !ruby/object:Gem::Dependency
|
@@ -61,11 +63,14 @@ dependencies:
|
|
61
63
|
requirements:
|
62
64
|
- - ~>
|
63
65
|
- !ruby/object:Gem::Version
|
64
|
-
hash:
|
66
|
+
hash: -533251372
|
65
67
|
segments:
|
66
|
-
-
|
68
|
+
- 3
|
69
|
+
- 0
|
67
70
|
- 0
|
68
|
-
|
71
|
+
- a
|
72
|
+
- 4
|
73
|
+
version: 3.0.0.a4
|
69
74
|
type: :runtime
|
70
75
|
version_requirements: *id002
|
71
76
|
- !ruby/object:Gem::Dependency
|
@@ -76,26 +81,26 @@ dependencies:
|
|
76
81
|
requirements:
|
77
82
|
- - ~>
|
78
83
|
- !ruby/object:Gem::Version
|
79
|
-
hash:
|
84
|
+
hash: 3
|
80
85
|
segments:
|
86
|
+
- 3
|
81
87
|
- 2
|
82
|
-
|
83
|
-
version: "2.5"
|
88
|
+
version: "3.2"
|
84
89
|
type: :development
|
85
90
|
version_requirements: *id003
|
86
91
|
- !ruby/object:Gem::Dependency
|
87
|
-
name:
|
92
|
+
name: rdoc
|
88
93
|
prerelease: false
|
89
94
|
requirement: &id004 !ruby/object:Gem::Requirement
|
90
95
|
none: false
|
91
96
|
requirements:
|
92
97
|
- - ~>
|
93
98
|
- !ruby/object:Gem::Version
|
94
|
-
hash:
|
99
|
+
hash: 19
|
95
100
|
segments:
|
96
101
|
- 3
|
97
|
-
-
|
98
|
-
version: "3.
|
102
|
+
- 10
|
103
|
+
version: "3.10"
|
99
104
|
type: :development
|
100
105
|
version_requirements: *id004
|
101
106
|
- !ruby/object:Gem::Dependency
|
@@ -106,11 +111,11 @@ dependencies:
|
|
106
111
|
requirements:
|
107
112
|
- - ~>
|
108
113
|
- !ruby/object:Gem::Version
|
109
|
-
hash:
|
114
|
+
hash: 7
|
110
115
|
segments:
|
111
|
-
-
|
112
|
-
-
|
113
|
-
version: "
|
116
|
+
- 3
|
117
|
+
- 0
|
118
|
+
version: "3.0"
|
114
119
|
type: :development
|
115
120
|
version_requirements: *id005
|
116
121
|
description: |-
|
@@ -158,16 +163,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
164
|
none: false
|
160
165
|
requirements:
|
161
|
-
- - "
|
166
|
+
- - ">"
|
162
167
|
- !ruby/object:Gem::Version
|
163
|
-
hash:
|
168
|
+
hash: 25
|
164
169
|
segments:
|
165
|
-
-
|
166
|
-
|
170
|
+
- 1
|
171
|
+
- 3
|
172
|
+
- 1
|
173
|
+
version: 1.3.1
|
167
174
|
requirements: []
|
168
175
|
|
169
176
|
rubyforge_project: seattlerb
|
170
|
-
rubygems_version: 1.8.
|
177
|
+
rubygems_version: 1.8.24
|
171
178
|
signing_key:
|
172
179
|
specification_version: 3
|
173
180
|
summary: ruby2ruby provides a means of generating pure ruby code easily from RubyParser compatible Sexps
|
metadata.gz.sig
CHANGED