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,32 +1,35 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Base class for loop node emittrs
|
3
4
|
class Loop < self
|
4
5
|
|
5
6
|
private
|
6
|
-
|
7
|
+
|
8
|
+
# Perform dispatch
|
9
|
+
#
|
10
|
+
# @return [undefined]
|
11
|
+
#
|
12
|
+
# @api private
|
13
|
+
#
|
7
14
|
def dispatch
|
8
15
|
emit(self.class::KEYWORD)
|
9
16
|
space
|
10
17
|
visit(condition)
|
11
|
-
|
12
|
-
|
13
|
-
|
18
|
+
indented do
|
19
|
+
visit(body)
|
20
|
+
end
|
14
21
|
emit_end
|
15
22
|
end
|
16
23
|
|
17
|
-
|
18
|
-
node.condition
|
19
|
-
end
|
20
|
-
|
21
|
-
def body
|
22
|
-
node.body
|
23
|
-
end
|
24
|
+
delegate :condition, :body
|
24
25
|
|
26
|
+
# Emitter for while nodes
|
25
27
|
class While < self
|
26
28
|
handle(Rubinius::AST::While)
|
27
29
|
KEYWORD = :while
|
28
30
|
end
|
29
31
|
|
32
|
+
# Emitter for until nodes
|
30
33
|
class Until < self
|
31
34
|
handle(Rubinius::AST::Until)
|
32
35
|
KEYWORD = :until
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for match operator
|
3
4
|
class Match3 < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::Match3)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
17
|
util = node
|
11
18
|
visit(util.value)
|
@@ -1,18 +1,25 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for module nodes
|
3
4
|
class Module < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::Module)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
17
|
util = node
|
11
18
|
emit('module ')
|
12
19
|
visit(util.name)
|
13
|
-
|
14
|
-
|
15
|
-
|
20
|
+
indented do
|
21
|
+
visit(util.body)
|
22
|
+
end
|
16
23
|
emit_end
|
17
24
|
end
|
18
25
|
|
@@ -1,21 +1,40 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for multiple assignment nodes
|
3
4
|
class MultipleAssignment < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::MultipleAssignment)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
17
|
emit_left
|
11
18
|
emit(' = ')
|
12
19
|
emit_right
|
13
20
|
end
|
14
21
|
|
22
|
+
# Emit left
|
23
|
+
#
|
24
|
+
# @return [undefined]
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
#
|
15
28
|
def emit_left
|
16
29
|
run(Util::DelimitedBody, node.left.body)
|
17
30
|
end
|
18
31
|
|
32
|
+
# Emit left
|
33
|
+
#
|
34
|
+
# @return [undefined]
|
35
|
+
#
|
36
|
+
# @api private
|
37
|
+
#
|
19
38
|
def emit_right
|
20
39
|
right = node.right
|
21
40
|
if right.kind_of?(Rubinius::AST::ArrayLiteral)
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for nth global variable reference
|
3
4
|
class NthRef < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::NthRef)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
17
|
emit("$#{node.which}")
|
11
18
|
end
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for conditiona element assignment
|
3
4
|
class OpAssign1 < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::OpAssign1)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
17
|
util = node
|
11
18
|
visit(util.receiver)
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for conditiona attribute assignment
|
3
4
|
class OpAssign2 < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::OpAssign2)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
17
|
util = node
|
11
18
|
visit(util.receiver)
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for pattern argument node
|
3
4
|
class PatternArguments < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::PatternArguments)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
17
|
emit('(')
|
11
18
|
run(Util::DelimitedBody, node.arguments.body)
|
@@ -1,18 +1,24 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
-
|
3
|
+
# Emitter for rescue nodes
|
4
4
|
class Rescue < self
|
5
5
|
|
6
6
|
handle(Rubinius::AST::Rescue)
|
7
7
|
|
8
8
|
private
|
9
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
10
16
|
def dispatch
|
11
17
|
util = node
|
12
18
|
emit('begin')
|
13
|
-
|
14
|
-
|
15
|
-
|
19
|
+
indented do
|
20
|
+
visit(util.body)
|
21
|
+
end
|
16
22
|
visit(util.rescue)
|
17
23
|
emit_end
|
18
24
|
end
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for rescue condition within rescue nodes
|
3
4
|
class RescueCondition < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::RescueCondition)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
9
16
|
def dispatch
|
10
17
|
emit('rescue')
|
11
18
|
emit_conditions
|
@@ -15,12 +22,24 @@ module ToSource
|
|
15
22
|
emit_next
|
16
23
|
end
|
17
24
|
|
25
|
+
# Emit body
|
26
|
+
#
|
27
|
+
# @return [undefined]
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
#
|
18
31
|
def emit_body
|
19
|
-
|
20
|
-
|
21
|
-
|
32
|
+
indented do
|
33
|
+
visit(node.body)
|
34
|
+
end
|
22
35
|
end
|
23
36
|
|
37
|
+
# Emit conditions
|
38
|
+
#
|
39
|
+
# @return [undefined]
|
40
|
+
#
|
41
|
+
# @api private
|
42
|
+
#
|
24
43
|
def emit_conditions
|
25
44
|
conditions = node.conditions || return
|
26
45
|
body = conditions.body
|
@@ -32,6 +51,12 @@ module ToSource
|
|
32
51
|
end
|
33
52
|
end
|
34
53
|
|
54
|
+
# Emit splat
|
55
|
+
#
|
56
|
+
# @return [undefined]
|
57
|
+
#
|
58
|
+
# @api private
|
59
|
+
#
|
35
60
|
def emit_splat
|
36
61
|
util = node
|
37
62
|
splat = util.splat || return
|
@@ -40,12 +65,24 @@ module ToSource
|
|
40
65
|
visit(splat)
|
41
66
|
end
|
42
67
|
|
68
|
+
# Emit assignment
|
69
|
+
#
|
70
|
+
# @return [undefined]
|
71
|
+
#
|
72
|
+
# @api private
|
73
|
+
#
|
43
74
|
def emit_assignment
|
44
75
|
assignment = node.assignment || return
|
45
76
|
emit(' => ')
|
46
77
|
emit(assignment.name)
|
47
78
|
end
|
48
79
|
|
80
|
+
# Emit next
|
81
|
+
#
|
82
|
+
# @return [undefined]
|
83
|
+
#
|
84
|
+
# @api private
|
85
|
+
#
|
49
86
|
def emit_next
|
50
87
|
next_rescue = node.next || return
|
51
88
|
visit(next_rescue)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for class module or singleton class scopes
|
3
4
|
class Scope < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::ClassScope)
|
@@ -8,6 +9,12 @@ module ToSource
|
|
8
9
|
|
9
10
|
private
|
10
11
|
|
12
|
+
# Perform dispatch
|
13
|
+
#
|
14
|
+
# @return [undefined]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
#
|
11
18
|
def dispatch
|
12
19
|
visit(node.body)
|
13
20
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for class or modue scope names
|
3
4
|
class ScopeName < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::ClassName)
|
@@ -7,6 +8,12 @@ module ToSource
|
|
7
8
|
|
8
9
|
private
|
9
10
|
|
11
|
+
# Perform dispatch
|
12
|
+
#
|
13
|
+
# @return [undefined]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
#
|
10
17
|
def dispatch
|
11
18
|
emit(node.name)
|
12
19
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for scoped cass module or constant names
|
3
4
|
class ScopedName < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::ScopedClassName)
|
@@ -10,6 +11,12 @@ module ToSource
|
|
10
11
|
|
11
12
|
delegate(:parent, :name)
|
12
13
|
|
14
|
+
# Perform dispatch
|
15
|
+
#
|
16
|
+
# @return [undefined]
|
17
|
+
#
|
18
|
+
# @api private
|
19
|
+
#
|
13
20
|
def dispatch
|
14
21
|
visit(parent)
|
15
22
|
emit('::')
|
@@ -10,10 +10,14 @@ module ToSource
|
|
10
10
|
|
11
11
|
private
|
12
12
|
|
13
|
-
|
14
|
-
UNARY_OPERATORS.include?(node.name)
|
15
|
-
end
|
13
|
+
delegate(:block, :name, :receiver)
|
16
14
|
|
15
|
+
# Perform dispatch
|
16
|
+
#
|
17
|
+
# @return [undefined]
|
18
|
+
#
|
19
|
+
# @api private
|
20
|
+
#
|
17
21
|
def dispatch
|
18
22
|
if unary_operator_method?
|
19
23
|
run(UnaryOperatorMethod, node)
|
@@ -23,6 +27,26 @@ module ToSource
|
|
23
27
|
normal_dispatch
|
24
28
|
end
|
25
29
|
|
30
|
+
# Test for unary operator method
|
31
|
+
#
|
32
|
+
# @return [true]
|
33
|
+
# if node is an unary operator method
|
34
|
+
#
|
35
|
+
# @return [false]
|
36
|
+
# otherwise
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
#
|
40
|
+
def unary_operator_method?
|
41
|
+
UNARY_OPERATORS.include?(name)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Perform normal dispatch
|
45
|
+
#
|
46
|
+
# @return [undefined]
|
47
|
+
#
|
48
|
+
# @api private
|
49
|
+
#
|
26
50
|
def normal_dispatch
|
27
51
|
emit_receiver
|
28
52
|
emit_name
|
@@ -30,31 +54,73 @@ module ToSource
|
|
30
54
|
emit_block
|
31
55
|
end
|
32
56
|
|
57
|
+
# Test for block
|
58
|
+
#
|
59
|
+
# @return [true]
|
60
|
+
# if block is present
|
61
|
+
#
|
62
|
+
# @return [false]
|
63
|
+
# otherwise
|
64
|
+
#
|
65
|
+
# @api private
|
66
|
+
#
|
33
67
|
def block?
|
34
68
|
!!block
|
35
69
|
end
|
36
70
|
|
37
|
-
|
38
|
-
|
71
|
+
# Test for block pass
|
72
|
+
#
|
73
|
+
# @return [true]
|
74
|
+
# if block pass is present
|
75
|
+
#
|
76
|
+
# @return [false]
|
77
|
+
# otherwise
|
78
|
+
#
|
79
|
+
# @api private
|
80
|
+
#
|
39
81
|
def block_pass?
|
40
82
|
block? && block.kind_of?(Rubinius::AST::BlockPass19)
|
41
83
|
end
|
42
84
|
|
85
|
+
# Emit name
|
86
|
+
#
|
87
|
+
# @return [undefined]
|
88
|
+
#
|
89
|
+
# @api private
|
90
|
+
#
|
43
91
|
def emit_name
|
44
92
|
emit(name)
|
45
93
|
end
|
46
94
|
|
95
|
+
# Emit receiver
|
96
|
+
#
|
97
|
+
# @return [undefined]
|
98
|
+
#
|
99
|
+
# @api private
|
100
|
+
#
|
47
101
|
def emit_receiver
|
48
102
|
return if node.privately
|
49
103
|
visit(receiver)
|
50
104
|
emit('.')
|
51
105
|
end
|
52
106
|
|
107
|
+
# Emit block
|
108
|
+
#
|
109
|
+
# @return [undefined]
|
110
|
+
#
|
111
|
+
# @api private
|
112
|
+
#
|
53
113
|
def emit_block
|
54
114
|
return unless block? and !block_pass?
|
55
115
|
visit(block)
|
56
116
|
end
|
57
117
|
|
118
|
+
# Emit block pass
|
119
|
+
#
|
120
|
+
# @return [undefined]
|
121
|
+
#
|
122
|
+
# @api private
|
123
|
+
#
|
58
124
|
def emit_block_pass
|
59
125
|
return unless block_pass?
|
60
126
|
emit('(')
|