to_source 0.2.9 → 0.2.11
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog.md +13 -0
- data/LICENSE +21 -0
- data/README.md +6 -22
- data/TODO +3 -3
- data/lib/to_source.rb +68 -3
- data/lib/to_source/buffer.rb +40 -0
- data/lib/to_source/command.rb +44 -0
- data/lib/to_source/emitter.rb +76 -0
- data/lib/to_source/emitter/access.rb +20 -0
- data/lib/to_source/emitter/actual_arguments.rb +46 -0
- data/lib/to_source/emitter/alias.rb +18 -0
- data/lib/to_source/emitter/assignment.rb +77 -0
- data/lib/to_source/emitter/attribute_assignment.rb +19 -0
- data/lib/to_source/emitter/begin.rb +51 -0
- data/lib/to_source/emitter/binary_operator.rb +36 -0
- data/lib/to_source/emitter/binary_operator_method.rb +29 -0
- data/lib/to_source/emitter/block.rb +22 -0
- data/lib/to_source/emitter/block_argument.rb +16 -0
- data/lib/to_source/emitter/block_pass.rb +16 -0
- data/lib/to_source/emitter/class.rb +29 -0
- data/lib/to_source/emitter/concat_arguments.rb +20 -0
- data/lib/to_source/emitter/default_arguments.rb +15 -0
- data/lib/to_source/emitter/define.rb +61 -0
- data/lib/to_source/emitter/defined.rb +17 -0
- data/lib/to_source/emitter/element_assignment.rb +20 -0
- data/lib/to_source/emitter/element_reference.rb +16 -0
- data/lib/to_source/emitter/empty_body.rb +12 -0
- data/lib/to_source/emitter/ensure.rb +23 -0
- data/lib/to_source/emitter/ensure_body.rb +18 -0
- data/lib/to_source/emitter/execute_string.rb +13 -0
- data/lib/to_source/emitter/formal_arguments.rb +120 -0
- data/lib/to_source/emitter/if.rb +51 -0
- data/lib/to_source/emitter/iter.rb +20 -0
- data/lib/to_source/emitter/keyword_value.rb +43 -0
- data/lib/to_source/emitter/literal.rb +239 -0
- data/lib/to_source/emitter/match3.rb +17 -0
- data/lib/to_source/emitter/module.rb +21 -0
- data/lib/to_source/emitter/multiple_assignment.rb +23 -0
- data/lib/to_source/emitter/nth_ref.rb +15 -0
- data/lib/to_source/emitter/op_assign1.rb +19 -0
- data/lib/to_source/emitter/op_assign2.rb +19 -0
- data/lib/to_source/emitter/pattern_arguments.rb +17 -0
- data/lib/to_source/emitter/receiver_case.rb +35 -0
- data/lib/to_source/emitter/rescue.rb +21 -0
- data/lib/to_source/emitter/rescue_condition.rb +56 -0
- data/lib/to_source/emitter/scope.rb +17 -0
- data/lib/to_source/emitter/scope_name.rb +16 -0
- data/lib/to_source/emitter/scoped_name.rb +17 -0
- data/lib/to_source/emitter/send.rb +47 -0
- data/lib/to_source/emitter/send_with_arguments.rb +62 -0
- data/lib/to_source/emitter/singleton_class.rb +23 -0
- data/lib/to_source/emitter/splat.rb +17 -0
- data/lib/to_source/emitter/splat_when.rb +16 -0
- data/lib/to_source/emitter/static.rb +33 -0
- data/lib/to_source/emitter/super.rb +47 -0
- data/lib/to_source/emitter/to_array.rb +15 -0
- data/lib/to_source/emitter/to_string.rb +17 -0
- data/lib/to_source/emitter/toplevel.rb +15 -0
- data/lib/to_source/emitter/unary_operator_method.rb +20 -0
- data/lib/to_source/emitter/unless.rb +16 -0
- data/lib/to_source/emitter/until.rb +20 -0
- data/lib/to_source/emitter/util.rb +19 -0
- data/lib/to_source/emitter/when.rb +38 -0
- data/lib/to_source/emitter/while.rb +20 -0
- data/lib/to_source/emitter/yield.rb +19 -0
- data/lib/to_source/emitter/z_super.rb +17 -0
- data/lib/to_source/state.rb +60 -0
- data/spec/unit/to_source/{visitor/class_methods → class_methods}/run_spec.rb +84 -33
- data/to_source.gemspec +14 -12
- metadata +106 -11
- data/lib/to_source/visitor.rb +0 -1890
@@ -0,0 +1,33 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Static < self
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def dispatch
|
8
|
+
emit(self.class::SYMBOL)
|
9
|
+
end
|
10
|
+
|
11
|
+
class Next < self
|
12
|
+
handle(Rubinius::AST::Next)
|
13
|
+
SYMBOL = :next
|
14
|
+
end
|
15
|
+
|
16
|
+
class CurrentException < self
|
17
|
+
handle(Rubinius::AST::CurrentException)
|
18
|
+
SYMBOL = :'$!'
|
19
|
+
end
|
20
|
+
|
21
|
+
class Self < self
|
22
|
+
handle(Rubinius::AST::Self)
|
23
|
+
SYMBOL = :self
|
24
|
+
end
|
25
|
+
|
26
|
+
class File < self
|
27
|
+
handle(Rubinius::AST::File)
|
28
|
+
SYMBOL = :__FILE__
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Super < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::Super)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
emit('super')
|
11
|
+
emit_arguments
|
12
|
+
emit_block
|
13
|
+
end
|
14
|
+
|
15
|
+
def emit_arguments
|
16
|
+
emit('(')
|
17
|
+
emitter = visit(node.arguments)
|
18
|
+
emit_block_pass(emitter)
|
19
|
+
emit(')')
|
20
|
+
end
|
21
|
+
|
22
|
+
def block
|
23
|
+
node.block
|
24
|
+
end
|
25
|
+
|
26
|
+
def block?
|
27
|
+
!!block
|
28
|
+
end
|
29
|
+
|
30
|
+
def block_pass?
|
31
|
+
block.kind_of?(Rubinius::AST::BlockPass19)
|
32
|
+
end
|
33
|
+
|
34
|
+
def emit_block_pass(emitter)
|
35
|
+
return unless block? and block_pass?
|
36
|
+
emit(', ') if emitter.any?
|
37
|
+
visit(block)
|
38
|
+
end
|
39
|
+
|
40
|
+
def emit_block
|
41
|
+
return unless block? and !block_pass?
|
42
|
+
visit(block)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class UnaryOperatorMethod < self
|
4
|
+
|
5
|
+
UNARY_MAPPING = {
|
6
|
+
:-@ => :-,
|
7
|
+
:+@ => :+,
|
8
|
+
}.freeze
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def dispatch
|
13
|
+
name = node.name
|
14
|
+
emit(UNARY_MAPPING.fetch(name, name))
|
15
|
+
visit(node.receiver)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Until < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::Until)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
emit('until ')
|
11
|
+
visit(node.condition)
|
12
|
+
indent
|
13
|
+
visit(node.body)
|
14
|
+
unindent
|
15
|
+
emit_end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Util < self
|
4
|
+
class DelimitedBody < self
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def dispatch
|
9
|
+
max = node.length - 1
|
10
|
+
node.each_with_index do |member, index|
|
11
|
+
visit(member)
|
12
|
+
emit(', ') if index < max
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class When < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::When)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
emit('when ')
|
11
|
+
emit_single
|
12
|
+
emit_conditions
|
13
|
+
emit_splat
|
14
|
+
indent
|
15
|
+
visit(node.body)
|
16
|
+
unindent
|
17
|
+
end
|
18
|
+
|
19
|
+
def emit_single
|
20
|
+
single = node.single
|
21
|
+
visit(single) if single
|
22
|
+
end
|
23
|
+
|
24
|
+
def emit_splat
|
25
|
+
splat = node.splat
|
26
|
+
return unless splat
|
27
|
+
visit(splat)
|
28
|
+
end
|
29
|
+
|
30
|
+
def emit_conditions
|
31
|
+
conditions = node.conditions
|
32
|
+
return unless conditions
|
33
|
+
run(Util::DelimitedBody, conditions.body)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class While < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::While)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
emit('while ')
|
11
|
+
visit(node.condition)
|
12
|
+
indent
|
13
|
+
visit(node.body)
|
14
|
+
unindent
|
15
|
+
emit_end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Yield < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::Yield)
|
6
|
+
|
7
|
+
def dispatch
|
8
|
+
emit('yield')
|
9
|
+
arguments = node.arguments
|
10
|
+
unless arguments.array.empty?
|
11
|
+
emit('(')
|
12
|
+
visit(node.arguments)
|
13
|
+
emit(')')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module ToSource
|
2
|
+
class State
|
3
|
+
|
4
|
+
attr_reader :last
|
5
|
+
attr_reader :identation
|
6
|
+
attr_reader :buffer
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@last = Command::NULL
|
10
|
+
@indentation = 0
|
11
|
+
@buffer = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute(command)
|
15
|
+
command.run(self)
|
16
|
+
@last = command
|
17
|
+
end
|
18
|
+
|
19
|
+
def last_keyword?
|
20
|
+
last.kind_of?(Command::Token::Keyword)
|
21
|
+
end
|
22
|
+
|
23
|
+
def write(string)
|
24
|
+
@buffer << string
|
25
|
+
end
|
26
|
+
|
27
|
+
def space
|
28
|
+
write(' ')
|
29
|
+
end
|
30
|
+
|
31
|
+
def push(command)
|
32
|
+
indent
|
33
|
+
write(command.content)
|
34
|
+
end
|
35
|
+
|
36
|
+
def indent
|
37
|
+
return unless blank?
|
38
|
+
write(' ' * @indentation)
|
39
|
+
end
|
40
|
+
|
41
|
+
def blank?
|
42
|
+
buffer.last == "\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
def new_line
|
46
|
+
write("\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
def source
|
50
|
+
buffer.join('')
|
51
|
+
end
|
52
|
+
|
53
|
+
def shift(width)
|
54
|
+
@indentation += width
|
55
|
+
@indentation = 0 if @indentation < 0
|
56
|
+
new_line
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe ToSource
|
4
|
-
subject { described_class.run(node) }
|
5
|
-
|
3
|
+
describe ToSource,'.to_source' do
|
6
4
|
def compress(code)
|
7
5
|
lines = code.split("\n")
|
8
6
|
match = /\A( *)/.match(lines.first)
|
@@ -13,16 +11,32 @@ describe ToSource::Visitor,'.run' do
|
|
13
11
|
joined = stripped.join("\n")
|
14
12
|
end
|
15
13
|
|
14
|
+
def assert_round_trip(code)
|
15
|
+
node = code.to_ast
|
16
|
+
generated = ToSource.to_source(node)
|
17
|
+
generated.should eql(code)
|
18
|
+
# This is nonsense but I had a case where it helps?
|
19
|
+
second_node = generated.to_ast
|
20
|
+
second = ToSource.to_source(second_node)
|
21
|
+
second.should eql(code)
|
22
|
+
end
|
23
|
+
|
24
|
+
def assert_entrypoints(node)
|
25
|
+
node.instance_variables.each do |ivar|
|
26
|
+
value = node.instance_variable_get(ivar)
|
27
|
+
next unless value.kind_of?(Rubinius::AST::Node)
|
28
|
+
ToSource.to_source(value)
|
29
|
+
assert_entrypoints(value)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
16
33
|
shared_examples_for 'a source generation method' do
|
17
34
|
it 'should create original source' do
|
18
|
-
|
35
|
+
assert_round_trip(compress(expected_source))
|
19
36
|
end
|
20
37
|
|
21
|
-
it 'should be able to
|
22
|
-
|
23
|
-
ast = subject.to_ast
|
24
|
-
second = described_class.run(ast)
|
25
|
-
generated.should eql(second)
|
38
|
+
it 'should be able to use all wrapped nodes as entrypoints' do
|
39
|
+
assert_entrypoints(expected_source.to_ast)
|
26
40
|
end
|
27
41
|
end
|
28
42
|
|
@@ -45,6 +59,7 @@ describe ToSource::Visitor,'.run' do
|
|
45
59
|
context 'simple' do
|
46
60
|
assert_source <<-RUBY
|
47
61
|
class TestClass
|
62
|
+
|
48
63
|
end
|
49
64
|
RUBY
|
50
65
|
end
|
@@ -60,6 +75,7 @@ describe ToSource::Visitor,'.run' do
|
|
60
75
|
context 'scoped' do
|
61
76
|
assert_source <<-RUBY
|
62
77
|
class SomeNameSpace::TestClass
|
78
|
+
|
63
79
|
end
|
64
80
|
RUBY
|
65
81
|
end
|
@@ -67,6 +83,7 @@ describe ToSource::Visitor,'.run' do
|
|
67
83
|
context 'deeply scoped' do
|
68
84
|
assert_source <<-RUBY
|
69
85
|
class Some::Name::Space::TestClass
|
86
|
+
|
70
87
|
end
|
71
88
|
RUBY
|
72
89
|
end
|
@@ -74,6 +91,7 @@ describe ToSource::Visitor,'.run' do
|
|
74
91
|
context 'with subclass' do
|
75
92
|
assert_source <<-RUBY
|
76
93
|
class TestClass < Object
|
94
|
+
|
77
95
|
end
|
78
96
|
RUBY
|
79
97
|
end
|
@@ -81,6 +99,7 @@ describe ToSource::Visitor,'.run' do
|
|
81
99
|
context 'with scoped superclass' do
|
82
100
|
assert_source <<-RUBY
|
83
101
|
class TestClass < SomeNameSpace::Object
|
102
|
+
|
84
103
|
end
|
85
104
|
RUBY
|
86
105
|
end
|
@@ -98,6 +117,7 @@ describe ToSource::Visitor,'.run' do
|
|
98
117
|
context 'toplevel' do
|
99
118
|
assert_source <<-RUBY
|
100
119
|
class ::TestClass
|
120
|
+
|
101
121
|
end
|
102
122
|
RUBY
|
103
123
|
end
|
@@ -107,6 +127,7 @@ describe ToSource::Visitor,'.run' do
|
|
107
127
|
context 'simple' do
|
108
128
|
assert_source <<-RUBY
|
109
129
|
module TestModule
|
130
|
+
|
110
131
|
end
|
111
132
|
RUBY
|
112
133
|
end
|
@@ -114,6 +135,7 @@ describe ToSource::Visitor,'.run' do
|
|
114
135
|
context 'scoped' do
|
115
136
|
assert_source <<-RUBY
|
116
137
|
module SomeNameSpace::TestModule
|
138
|
+
|
117
139
|
end
|
118
140
|
RUBY
|
119
141
|
end
|
@@ -121,6 +143,7 @@ describe ToSource::Visitor,'.run' do
|
|
121
143
|
context 'deeply scoped' do
|
122
144
|
assert_source <<-RUBY
|
123
145
|
module Some::Name::Space::TestModule
|
146
|
+
|
124
147
|
end
|
125
148
|
RUBY
|
126
149
|
end
|
@@ -594,56 +617,62 @@ describe ToSource::Visitor,'.run' do
|
|
594
617
|
context 'binary operators' do
|
595
618
|
%w(+ - * / & | && || << >> == === != <= < <=> > >= =~ !~ ^ **).each do |operator|
|
596
619
|
context "on literals #{operator}" do
|
597
|
-
assert_source "(
|
620
|
+
assert_source "(1) #{operator} (2)"
|
598
621
|
end
|
599
622
|
|
600
623
|
context "on self #{operator}" do
|
601
|
-
assert_source "(
|
624
|
+
assert_source "(self) #{operator} (b)"
|
602
625
|
end
|
603
626
|
|
604
627
|
context "on calls #{operator}" do
|
605
|
-
assert_source "(
|
628
|
+
assert_source "(a) #{operator} (b)"
|
606
629
|
end
|
607
630
|
end
|
608
631
|
|
609
632
|
context 'binary operator and keywords' do
|
610
|
-
assert_source '(
|
633
|
+
assert_source '(a) || (break(foo))'
|
611
634
|
end
|
612
635
|
|
613
636
|
context 'nested binary operators' do
|
614
|
-
assert_source '(
|
637
|
+
assert_source '(a) || ((b) || (c))'
|
638
|
+
end
|
639
|
+
end
|
640
|
+
|
641
|
+
{ :or => :'||', :and => :'&&' }.each do |word, symbol|
|
642
|
+
context "word form form equivalency of #{word} and #{symbol}" do
|
643
|
+
assert_converts "(a) #{symbol} (break(foo))", "a #{word} break foo"
|
615
644
|
end
|
616
645
|
end
|
617
646
|
|
618
647
|
context 'expansion of shortcuts' do
|
619
648
|
context 'on += operator' do
|
620
|
-
assert_converts 'a = (
|
649
|
+
assert_converts 'a = (a) + (2)', 'a += 2'
|
621
650
|
end
|
622
651
|
|
623
652
|
context 'on -= operator' do
|
624
|
-
assert_converts 'a = (
|
653
|
+
assert_converts 'a = (a) - (2)', 'a -= 2'
|
625
654
|
end
|
626
655
|
|
627
656
|
context 'on **= operator' do
|
628
|
-
assert_converts 'a = (
|
657
|
+
assert_converts 'a = (a) ** (2)', 'a **= 2'
|
629
658
|
end
|
630
659
|
|
631
660
|
context 'on *= operator' do
|
632
|
-
assert_converts 'a = (
|
661
|
+
assert_converts 'a = (a) * (2)', 'a *= 2'
|
633
662
|
end
|
634
663
|
|
635
664
|
context 'on /= operator' do
|
636
|
-
assert_converts 'a = (
|
665
|
+
assert_converts 'a = (a) / (2)', 'a /= 2'
|
637
666
|
end
|
638
667
|
end
|
639
668
|
|
640
669
|
context 'shortcuts' do
|
641
670
|
context 'on &&= operator' do
|
642
|
-
assert_source '
|
671
|
+
assert_source 'a &&= (b)'
|
643
672
|
end
|
644
673
|
|
645
674
|
context 'on ||= operator' do
|
646
|
-
assert_source '
|
675
|
+
assert_source 'a ||= (2)'
|
647
676
|
end
|
648
677
|
end
|
649
678
|
|
@@ -854,9 +883,19 @@ describe ToSource::Visitor,'.run' do
|
|
854
883
|
end
|
855
884
|
|
856
885
|
context 'rescue' do
|
886
|
+
context 'as block' do
|
887
|
+
assert_source <<-RUBY
|
888
|
+
begin
|
889
|
+
foo
|
890
|
+
foo
|
891
|
+
rescue
|
892
|
+
bar
|
893
|
+
end
|
894
|
+
RUBY
|
895
|
+
end
|
857
896
|
context 'without rescue condition' do
|
858
897
|
assert_source <<-RUBY
|
859
|
-
|
898
|
+
begin
|
860
899
|
bar
|
861
900
|
rescue
|
862
901
|
baz
|
@@ -864,10 +903,22 @@ describe ToSource::Visitor,'.run' do
|
|
864
903
|
RUBY
|
865
904
|
end
|
866
905
|
|
906
|
+
context 'within a block' do
|
907
|
+
assert_source <<-RUBY
|
908
|
+
foo do
|
909
|
+
begin
|
910
|
+
bar
|
911
|
+
rescue
|
912
|
+
baz
|
913
|
+
end
|
914
|
+
end
|
915
|
+
RUBY
|
916
|
+
end
|
917
|
+
|
867
918
|
context 'with rescue condition' do
|
868
919
|
context 'without assignment' do
|
869
920
|
assert_source <<-RUBY
|
870
|
-
|
921
|
+
begin
|
871
922
|
bar
|
872
923
|
rescue SomeError
|
873
924
|
baz
|
@@ -877,7 +928,7 @@ describe ToSource::Visitor,'.run' do
|
|
877
928
|
|
878
929
|
context 'with assignment' do
|
879
930
|
assert_source <<-RUBY
|
880
|
-
|
931
|
+
begin
|
881
932
|
bar
|
882
933
|
rescue SomeError => exception
|
883
934
|
baz
|
@@ -889,7 +940,7 @@ describe ToSource::Visitor,'.run' do
|
|
889
940
|
context 'with multivalued rescue condition' do
|
890
941
|
context 'without assignment' do
|
891
942
|
assert_source <<-RUBY
|
892
|
-
|
943
|
+
begin
|
893
944
|
bar
|
894
945
|
rescue SomeError, SomeOtherError
|
895
946
|
baz
|
@@ -899,7 +950,7 @@ describe ToSource::Visitor,'.run' do
|
|
899
950
|
|
900
951
|
context 'with assignment' do
|
901
952
|
assert_source <<-RUBY
|
902
|
-
|
953
|
+
begin
|
903
954
|
bar
|
904
955
|
rescue SomeError, SomeOther => exception
|
905
956
|
baz
|
@@ -910,7 +961,7 @@ describe ToSource::Visitor,'.run' do
|
|
910
961
|
|
911
962
|
context 'with multiple rescue conditions' do
|
912
963
|
assert_source <<-RUBY
|
913
|
-
|
964
|
+
begin
|
914
965
|
foo
|
915
966
|
rescue SomeError
|
916
967
|
bar
|
@@ -923,7 +974,7 @@ describe ToSource::Visitor,'.run' do
|
|
923
974
|
context 'with normal and splat condition' do
|
924
975
|
context 'without assignment' do
|
925
976
|
assert_source <<-RUBY
|
926
|
-
|
977
|
+
begin
|
927
978
|
bar
|
928
979
|
rescue SomeError, *bar
|
929
980
|
baz
|
@@ -933,7 +984,7 @@ describe ToSource::Visitor,'.run' do
|
|
933
984
|
|
934
985
|
context 'with assignment' do
|
935
986
|
assert_source <<-RUBY
|
936
|
-
|
987
|
+
begin
|
937
988
|
bar
|
938
989
|
rescue SomeError, *bar => exception
|
939
990
|
baz
|
@@ -945,7 +996,7 @@ describe ToSource::Visitor,'.run' do
|
|
945
996
|
context 'with splat condition' do
|
946
997
|
context 'without assignment' do
|
947
998
|
assert_source <<-RUBY
|
948
|
-
|
999
|
+
begin
|
949
1000
|
bar
|
950
1001
|
rescue *bar
|
951
1002
|
baz
|
@@ -955,7 +1006,7 @@ describe ToSource::Visitor,'.run' do
|
|
955
1006
|
|
956
1007
|
context 'with assignment' do
|
957
1008
|
assert_source <<-RUBY
|
958
|
-
|
1009
|
+
begin
|
959
1010
|
bar
|
960
1011
|
rescue *bar => exception
|
961
1012
|
baz
|
@@ -971,7 +1022,7 @@ describe ToSource::Visitor,'.run' do
|
|
971
1022
|
|
972
1023
|
context 'ensure' do
|
973
1024
|
assert_source <<-RUBY
|
974
|
-
|
1025
|
+
begin
|
975
1026
|
bar
|
976
1027
|
ensure
|
977
1028
|
baz
|
@@ -981,7 +1032,7 @@ describe ToSource::Visitor,'.run' do
|
|
981
1032
|
|
982
1033
|
context 'return' do
|
983
1034
|
context 'with expression' do
|
984
|
-
assert_source 'return
|
1035
|
+
assert_source 'return(9)'
|
985
1036
|
end
|
986
1037
|
|
987
1038
|
context 'without expression' do
|