to_source 0.2.15 → 0.2.16
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/.gitignore +6 -6
- data/Changelog.md +4 -0
- data/README.md +1 -1
- data/bin/to_source +1 -0
- data/config/flay.yml +1 -1
- data/config/flog.yml +1 -1
- data/config/roodi.yml +4 -4
- data/config/site.reek +5 -2
- data/config/yardstick.yml +1 -1
- data/lib/to_source.rb +1 -1
- data/lib/to_source/command.rb +63 -1
- data/lib/to_source/emitter.rb +221 -32
- data/lib/to_source/emitter/access.rb +8 -0
- data/lib/to_source/emitter/actual_arguments.rb +51 -8
- data/lib/to_source/emitter/alias.rb +11 -2
- data/lib/to_source/emitter/assignment.rb +62 -22
- data/lib/to_source/emitter/attribute_assignment.rb +11 -2
- data/lib/to_source/emitter/begin.rb +34 -14
- data/lib/to_source/emitter/binary_operator.rb +34 -17
- data/lib/to_source/emitter/binary_operator_method.rb +36 -17
- data/lib/to_source/emitter/block.rb +7 -0
- data/lib/to_source/emitter/block_argument.rb +7 -0
- data/lib/to_source/emitter/block_pass.rb +7 -0
- data/lib/to_source/emitter/case.rb +85 -0
- data/lib/to_source/emitter/class.rb +21 -6
- data/lib/to_source/emitter/concat_arguments.rb +11 -3
- data/lib/to_source/emitter/default_arguments.rb +7 -0
- data/lib/to_source/emitter/define.rb +46 -8
- data/lib/to_source/emitter/defined.rb +7 -0
- data/lib/to_source/emitter/element_assignment.rb +10 -1
- data/lib/to_source/emitter/element_reference.rb +10 -1
- data/lib/to_source/emitter/empty_body.rb +9 -0
- data/lib/to_source/emitter/ensure.rb +34 -7
- data/lib/to_source/emitter/ensure_body.rb +14 -5
- data/lib/to_source/emitter/execute_string.rb +9 -0
- data/lib/to_source/emitter/formal_arguments.rb +131 -39
- data/lib/to_source/emitter/if.rb +59 -14
- data/lib/to_source/emitter/iter.rb +10 -3
- data/lib/to_source/emitter/keyword_value.rb +28 -4
- data/lib/to_source/emitter/literal.rb +99 -14
- data/lib/to_source/emitter/literal/dynamic.rb +88 -13
- data/lib/to_source/emitter/loop.rb +14 -11
- data/lib/to_source/emitter/match3.rb +7 -0
- data/lib/to_source/emitter/module.rb +10 -3
- data/lib/to_source/emitter/multiple_assignment.rb +19 -0
- data/lib/to_source/emitter/nth_ref.rb +7 -0
- data/lib/to_source/emitter/op_assign1.rb +7 -0
- data/lib/to_source/emitter/op_assign2.rb +7 -0
- data/lib/to_source/emitter/pattern_arguments.rb +7 -0
- data/lib/to_source/emitter/rescue.rb +10 -4
- data/lib/to_source/emitter/rescue_condition.rb +40 -3
- data/lib/to_source/emitter/scope.rb +7 -0
- data/lib/to_source/emitter/scope_name.rb +7 -0
- data/lib/to_source/emitter/scoped_name.rb +7 -0
- data/lib/to_source/emitter/send.rb +71 -5
- data/lib/to_source/emitter/send_with_arguments.rb +53 -7
- data/lib/to_source/emitter/singleton_class.rb +17 -5
- data/lib/to_source/emitter/splat.rb +7 -0
- data/lib/to_source/emitter/splat_when.rb +7 -0
- data/lib/to_source/emitter/static.rb +19 -0
- data/lib/to_source/emitter/super.rb +49 -4
- data/lib/to_source/emitter/to_array.rb +7 -0
- data/lib/to_source/emitter/to_string.rb +7 -0
- data/lib/to_source/emitter/toplevel.rb +9 -0
- data/lib/to_source/emitter/unary_operator_method.rb +7 -0
- data/lib/to_source/emitter/unless.rb +23 -4
- data/lib/to_source/emitter/util.rb +8 -0
- data/lib/to_source/emitter/when.rb +28 -3
- data/lib/to_source/emitter/yield.rb +9 -0
- data/lib/to_source/emitter/z_super.rb +7 -0
- data/lib/to_source/state.rb +95 -11
- data/spec/unit/to_source/class_methods/run_spec.rb +13 -0
- data/to_source.gemspec +1 -1
- metadata +3 -4
- data/lib/to_source/buffer.rb +0 -40
- data/lib/to_source/emitter/receiver_case.rb +0 -35
@@ -1,11 +1,20 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for element reference nodes
|
3
4
|
class ElementReference < self
|
4
5
|
|
5
6
|
private
|
6
7
|
|
8
|
+
delegate(:receiver)
|
9
|
+
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
7
16
|
def dispatch
|
8
|
-
visit(
|
17
|
+
visit(receiver)
|
9
18
|
emit('[')
|
10
19
|
visit(node.arguments.array.first)
|
11
20
|
emit(']')
|
@@ -1,20 +1,47 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for ensure nodes
|
3
4
|
class Ensure < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::Ensure)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
17
|
+
emit_begin
|
18
|
+
emit_enusure
|
19
|
+
end
|
20
|
+
|
21
|
+
# Emit begin
|
22
|
+
#
|
23
|
+
# @return [undefined]
|
24
|
+
#
|
25
|
+
# @api private
|
26
|
+
#
|
27
|
+
def emit_begin
|
28
|
+
emit(:begin)
|
29
|
+
indented do
|
30
|
+
visit(node.body)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Emit ensure
|
35
|
+
#
|
36
|
+
# @return [undefined]
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
#
|
40
|
+
def emit_enusure
|
14
41
|
emit(:ensure)
|
15
|
-
|
16
|
-
|
17
|
-
|
42
|
+
indented do
|
43
|
+
visit(node.ensure)
|
44
|
+
end
|
18
45
|
emit_end
|
19
46
|
end
|
20
47
|
|
@@ -1,16 +1,25 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for ensure body
|
3
4
|
class EnsureBody < self
|
4
5
|
|
5
6
|
private
|
6
7
|
|
8
|
+
delegate(:body)
|
9
|
+
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
7
16
|
def dispatch
|
8
|
-
visit(
|
9
|
-
unindent
|
10
|
-
emit('ensure')
|
11
|
-
indent
|
12
|
-
visit(node.ensure)
|
17
|
+
visit(body)
|
13
18
|
unindent
|
19
|
+
emit(:ensure)
|
20
|
+
indented do
|
21
|
+
visit(node.ensure)
|
22
|
+
end
|
14
23
|
end
|
15
24
|
|
16
25
|
end
|
@@ -1,9 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for execute string
|
3
4
|
class ExecuteString < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::ExecuteString)
|
6
7
|
|
8
|
+
private
|
9
|
+
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
7
16
|
def dispatch
|
8
17
|
emit("`#{node.string}`")
|
9
18
|
end
|
@@ -1,112 +1,205 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for formal arguments
|
3
4
|
class FormalArguments < self
|
4
5
|
|
5
6
|
private
|
6
7
|
|
8
|
+
delegate(:arguments)
|
9
|
+
predicate(:splat, :block_arg, :defaults)
|
10
|
+
|
11
|
+
# Perform dispatch
|
12
|
+
#
|
13
|
+
# @return [undefined]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
#
|
17
|
+
def dispatch
|
18
|
+
return unless any?
|
19
|
+
util = self.class
|
20
|
+
emit(util::OPEN)
|
21
|
+
emit_required
|
22
|
+
emit_defaults
|
23
|
+
emit_splat
|
24
|
+
emit_block_arg
|
25
|
+
emit(util::CLOSE)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Test if any argument is present
|
29
|
+
#
|
30
|
+
# @return [true]
|
31
|
+
# if any argument is present
|
32
|
+
#
|
33
|
+
# @return [false]
|
34
|
+
# otherwise
|
35
|
+
#
|
36
|
+
# @api private
|
37
|
+
#
|
7
38
|
def any?
|
8
|
-
required?
|
39
|
+
required? || defaults? || splat? || block_arg?
|
9
40
|
end
|
10
41
|
|
42
|
+
# Return required
|
43
|
+
#
|
44
|
+
# @return [Array]
|
45
|
+
#
|
46
|
+
# @api private
|
47
|
+
#
|
11
48
|
def required
|
12
49
|
arguments.required
|
13
50
|
end
|
14
51
|
|
52
|
+
# Test if any required arguments are present
|
53
|
+
#
|
54
|
+
# @return [true]
|
55
|
+
# if any required arguments are presnet
|
56
|
+
#
|
57
|
+
# @return [false]
|
58
|
+
# otherwise
|
59
|
+
#
|
60
|
+
# @api private
|
61
|
+
#
|
15
62
|
def required?
|
16
63
|
required.any?
|
17
64
|
end
|
18
65
|
|
66
|
+
# Return defaults
|
67
|
+
#
|
68
|
+
# @return [Rubinius::AST::Node]
|
69
|
+
#
|
70
|
+
# @api private
|
71
|
+
#
|
19
72
|
def defaults
|
20
73
|
arguments.defaults
|
21
74
|
end
|
22
75
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
76
|
+
# Return splat arguments
|
77
|
+
#
|
78
|
+
# @return [Rubinius::AST::Node]
|
79
|
+
#
|
80
|
+
# @api private
|
81
|
+
#
|
27
82
|
def splat
|
28
83
|
arguments.splat
|
29
84
|
end
|
30
85
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
86
|
+
# Return block argument
|
87
|
+
#
|
88
|
+
# @return [Rubinius::AST::Node]
|
89
|
+
#
|
90
|
+
# @api private
|
91
|
+
#
|
35
92
|
def block_arg
|
36
93
|
arguments.block_arg
|
37
94
|
end
|
38
95
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
96
|
+
# Emit required
|
97
|
+
#
|
98
|
+
# @return [undefined]
|
99
|
+
#
|
100
|
+
# @api private
|
101
|
+
#
|
43
102
|
def emit_required
|
44
103
|
array = required
|
45
104
|
max = array.length - 1
|
46
105
|
array.each_with_index do |member, index|
|
47
|
-
|
48
|
-
visit(member)
|
49
|
-
else
|
50
|
-
emit(member)
|
51
|
-
end
|
106
|
+
emit_member(member)
|
52
107
|
emit(', ') if index < max
|
53
108
|
end
|
54
109
|
end
|
55
110
|
|
111
|
+
# Emit member
|
112
|
+
#
|
113
|
+
# @param [Object, Rubinius::AST::Node] member
|
114
|
+
#
|
115
|
+
# @return [undefined]
|
116
|
+
#
|
117
|
+
# @api private
|
118
|
+
#
|
119
|
+
def emit_member(member)
|
120
|
+
if member.kind_of?(Rubinius::AST::Node)
|
121
|
+
visit(member)
|
122
|
+
else
|
123
|
+
emit(member)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# Emit defaults
|
128
|
+
#
|
129
|
+
# @return [undefined]
|
130
|
+
#
|
131
|
+
# @api private
|
132
|
+
#
|
56
133
|
def emit_defaults
|
57
134
|
return unless defaults?
|
58
135
|
emit(', ') if required?
|
59
136
|
visit(defaults)
|
60
137
|
end
|
61
138
|
|
139
|
+
# Emit splat
|
140
|
+
#
|
141
|
+
# @return [undefined]
|
142
|
+
#
|
143
|
+
# @api private
|
144
|
+
#
|
62
145
|
def emit_splat
|
63
146
|
return unless splat?
|
64
147
|
|
65
148
|
emit(', ') if required? or defaults?
|
66
149
|
emit('*')
|
67
|
-
|
150
|
+
emit_splat_value(splat)
|
151
|
+
end
|
152
|
+
|
153
|
+
# Emit splat value
|
154
|
+
#
|
155
|
+
# @param [Object] value
|
156
|
+
#
|
157
|
+
# @return [undefined]
|
158
|
+
#
|
159
|
+
# @api private
|
160
|
+
#
|
161
|
+
def emit_splat_value(value)
|
68
162
|
unless value == :@unnamed_splat
|
69
163
|
emit(value)
|
70
164
|
end
|
71
165
|
end
|
72
166
|
|
167
|
+
# Emit block arg
|
168
|
+
#
|
169
|
+
# @return [undefined]
|
170
|
+
#
|
171
|
+
# @api private
|
172
|
+
#
|
73
173
|
def emit_block_arg
|
74
174
|
return unless block_arg?
|
75
175
|
emit(', ') if required? or defaults? or splat?
|
76
176
|
visit(block_arg)
|
77
177
|
end
|
78
178
|
|
79
|
-
|
80
|
-
node.arguments
|
81
|
-
end
|
82
|
-
|
83
|
-
def dispatch
|
84
|
-
return unless any?
|
85
|
-
|
86
|
-
util = self.class
|
87
|
-
|
88
|
-
emit(util::OPEN)
|
89
|
-
|
90
|
-
emit_required
|
91
|
-
emit_defaults
|
92
|
-
emit_splat
|
93
|
-
emit_block_arg
|
94
|
-
|
95
|
-
emit(util::CLOSE)
|
96
|
-
end
|
97
|
-
|
179
|
+
# Emmiter for block arguments
|
98
180
|
class Block < self
|
99
181
|
OPEN = ' |'.freeze
|
100
182
|
CLOSE = '|'.freeze
|
101
183
|
end
|
102
184
|
|
185
|
+
# Emitter for method arguments
|
103
186
|
class Method < self
|
104
187
|
OPEN = '('.freeze
|
105
188
|
CLOSE = ')'.freeze
|
106
189
|
|
190
|
+
# Generic emitter for method arguments
|
107
191
|
class Generic < self
|
192
|
+
|
108
193
|
handle(Rubinius::AST::FormalArguments19)
|
109
194
|
|
195
|
+
private
|
196
|
+
|
197
|
+
# Return arguments
|
198
|
+
#
|
199
|
+
# @return [Rubnius::AST::Node]
|
200
|
+
#
|
201
|
+
# @api private
|
202
|
+
#
|
110
203
|
def arguments
|
111
204
|
node
|
112
205
|
end
|
@@ -114,7 +207,6 @@ module ToSource
|
|
114
207
|
end
|
115
208
|
|
116
209
|
end
|
117
|
-
|
118
210
|
end
|
119
211
|
end
|
120
212
|
end
|
data/lib/to_source/emitter/if.rb
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for if nodes
|
3
4
|
class If < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::If)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
17
16
|
def dispatch
|
18
17
|
if else_branch? and !if_branch?
|
19
18
|
run(Unless, node)
|
@@ -23,6 +22,40 @@ module ToSource
|
|
23
22
|
normal_dispatch
|
24
23
|
end
|
25
24
|
|
25
|
+
# Test if if branch is present
|
26
|
+
#
|
27
|
+
# @return [true]
|
28
|
+
# if if branch is present
|
29
|
+
#
|
30
|
+
# @return [false]
|
31
|
+
# otherwise
|
32
|
+
#
|
33
|
+
# @api private
|
34
|
+
#
|
35
|
+
def if_branch?
|
36
|
+
!node.body.kind_of?(Rubinius::AST::NilLiteral)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Test if else branch is present
|
40
|
+
#
|
41
|
+
# @return [true]
|
42
|
+
# if else branch is present
|
43
|
+
#
|
44
|
+
# @return [false]
|
45
|
+
# otherwise
|
46
|
+
#
|
47
|
+
# @api private
|
48
|
+
#
|
49
|
+
def else_branch?
|
50
|
+
!node.else.kind_of?(Rubinius::AST::NilLiteral)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Perform normal dispatch
|
54
|
+
#
|
55
|
+
# @return [undefined]
|
56
|
+
#
|
57
|
+
# @api private
|
58
|
+
#
|
26
59
|
def normal_dispatch
|
27
60
|
emit('if ')
|
28
61
|
visit(node.condition)
|
@@ -31,19 +64,31 @@ module ToSource
|
|
31
64
|
emit('end')
|
32
65
|
end
|
33
66
|
|
67
|
+
# Emit if brnach
|
68
|
+
#
|
69
|
+
# @return [undefined]
|
70
|
+
#
|
71
|
+
# @api private
|
72
|
+
#
|
34
73
|
def emit_if_branch
|
35
|
-
|
36
|
-
|
37
|
-
|
74
|
+
indented do
|
75
|
+
visit(node.body)
|
76
|
+
end
|
38
77
|
end
|
39
78
|
|
79
|
+
# Emit else branch
|
80
|
+
#
|
81
|
+
# @return [undefined]
|
82
|
+
#
|
83
|
+
# @api private
|
84
|
+
#
|
40
85
|
def emit_else_branch
|
41
86
|
body = node.else
|
42
87
|
return unless else_branch?
|
43
88
|
emit('else')
|
44
|
-
|
45
|
-
|
46
|
-
|
89
|
+
indented do
|
90
|
+
visit(body)
|
91
|
+
end
|
47
92
|
end
|
48
93
|
|
49
94
|
end
|