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,5 +1,7 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
|
4
|
+
# Emitter for various access nodes
|
3
5
|
class Access < self
|
4
6
|
|
5
7
|
handle(Rubinius::AST::ConstantAccess)
|
@@ -11,6 +13,12 @@ module ToSource
|
|
11
13
|
|
12
14
|
private
|
13
15
|
|
16
|
+
# Perform dispatch
|
17
|
+
#
|
18
|
+
# @return [undefined]
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
#
|
14
22
|
def dispatch
|
15
23
|
emit(node.name)
|
16
24
|
end
|
@@ -1,40 +1,83 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for arguments node
|
3
4
|
class ActualArguments < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::ActualArguments)
|
6
7
|
|
8
|
+
# Test if any arguments are present
|
9
|
+
#
|
10
|
+
# @return [true]
|
11
|
+
# if any argument is present
|
12
|
+
#
|
13
|
+
# @return [false]
|
14
|
+
# otherwise
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
#
|
7
18
|
def any?
|
8
|
-
normal?
|
19
|
+
normal? || splat?
|
9
20
|
end
|
10
21
|
|
11
22
|
private
|
12
23
|
|
24
|
+
# Perform dispatch
|
25
|
+
#
|
26
|
+
# @return [self]
|
27
|
+
#
|
28
|
+
# @api private
|
29
|
+
#
|
13
30
|
def dispatch
|
14
31
|
emit_normal
|
15
32
|
emit_splat
|
16
33
|
end
|
17
34
|
|
18
|
-
|
19
|
-
node.array
|
20
|
-
end
|
35
|
+
delegate :array, :splat
|
21
36
|
|
37
|
+
# Test for splat argument
|
38
|
+
#
|
39
|
+
# @return [true]
|
40
|
+
# if splate argument is present
|
41
|
+
#
|
42
|
+
# @return [false]
|
43
|
+
# otherwise
|
44
|
+
#
|
45
|
+
# @api private
|
46
|
+
#
|
22
47
|
def splat?
|
23
48
|
!!splat
|
24
49
|
end
|
25
50
|
|
51
|
+
# Test if normal arguments are present
|
52
|
+
#
|
53
|
+
# @return [true]
|
54
|
+
# if normal arguments are present
|
55
|
+
#
|
56
|
+
# @return [false]
|
57
|
+
# otherwise
|
58
|
+
#
|
59
|
+
# @api private
|
60
|
+
#
|
26
61
|
def normal?
|
27
62
|
!array.empty?
|
28
63
|
end
|
29
64
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
65
|
+
# Emit normal arguments
|
66
|
+
#
|
67
|
+
# @return [undefined]
|
68
|
+
#
|
69
|
+
# @api private
|
70
|
+
#
|
34
71
|
def emit_normal
|
35
72
|
run(Util::DelimitedBody, array)
|
36
73
|
end
|
37
74
|
|
75
|
+
# Emit splat argument
|
76
|
+
#
|
77
|
+
# @return [undefined]
|
78
|
+
#
|
79
|
+
# @api private
|
80
|
+
#
|
38
81
|
def emit_splat
|
39
82
|
return unless splat?
|
40
83
|
emit(', ') if normal?
|
@@ -1,16 +1,25 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emiter for alias node
|
3
4
|
class Alias < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::Alias)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
delegate(:to, :from)
|
11
|
+
|
12
|
+
# Perform dispatch
|
13
|
+
#
|
14
|
+
# @return [undefined]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
#
|
9
18
|
def dispatch
|
10
19
|
emit('alias ')
|
11
|
-
emit(
|
20
|
+
emit(to.value)
|
12
21
|
space
|
13
|
-
emit(
|
22
|
+
emit(from.value)
|
14
23
|
end
|
15
24
|
|
16
25
|
end
|
@@ -1,11 +1,20 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Base class for various assignment nodes
|
3
4
|
class Assignment < self
|
4
5
|
|
5
6
|
private
|
6
7
|
|
8
|
+
delegate :value
|
9
|
+
|
10
|
+
# Perform dispatch
|
11
|
+
#
|
12
|
+
# @return [undefined]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
#
|
7
16
|
def dispatch
|
8
|
-
|
17
|
+
emit_target
|
9
18
|
val = value
|
10
19
|
|
11
20
|
if val
|
@@ -14,20 +23,26 @@ module ToSource
|
|
14
23
|
end
|
15
24
|
end
|
16
25
|
|
17
|
-
|
18
|
-
node.value
|
19
|
-
end
|
20
|
-
|
26
|
+
# Emitter for constant assignments
|
21
27
|
class Constant < self
|
22
28
|
|
23
29
|
handle(Rubinius::AST::ConstantAssignment)
|
24
30
|
|
25
|
-
|
31
|
+
private
|
32
|
+
|
33
|
+
# Emit name
|
34
|
+
#
|
35
|
+
# @return [undefined]
|
36
|
+
#
|
37
|
+
# @api private
|
38
|
+
#
|
39
|
+
def emit_target
|
26
40
|
visit(node.constant)
|
27
41
|
end
|
28
42
|
|
29
43
|
end
|
30
44
|
|
45
|
+
# Emitter for various variabe assignments
|
31
46
|
class Variable < self
|
32
47
|
|
33
48
|
handle(Rubinius::AST::LocalVariableAssignment)
|
@@ -35,42 +50,67 @@ module ToSource
|
|
35
50
|
handle(Rubinius::AST::GlobalVariableAssignment)
|
36
51
|
handle(Rubinius::AST::ClassVariableAssignment)
|
37
52
|
|
38
|
-
|
39
|
-
emit(node.name)
|
40
|
-
end
|
53
|
+
private
|
41
54
|
|
42
|
-
|
43
|
-
|
55
|
+
# Emit target
|
56
|
+
#
|
57
|
+
# @return [undefined]
|
58
|
+
#
|
59
|
+
# @api private
|
60
|
+
#
|
61
|
+
def emit_target
|
62
|
+
emit(node.name)
|
44
63
|
end
|
45
64
|
|
46
65
|
end
|
47
66
|
end
|
48
67
|
|
68
|
+
# Base class for assignment operators
|
49
69
|
class AssignmentOperator < self
|
50
70
|
|
71
|
+
private
|
72
|
+
|
73
|
+
delegate(:left, :right)
|
74
|
+
|
75
|
+
# Perform dispatch
|
76
|
+
#
|
77
|
+
# @return [undefined]
|
78
|
+
#
|
79
|
+
# @api private
|
80
|
+
#
|
51
81
|
def dispatch
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
82
|
+
parantheses do
|
83
|
+
visit(left)
|
84
|
+
emit(" #{self.class::SYMBOL} ")
|
85
|
+
emit_right
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# Emit right
|
90
|
+
#
|
91
|
+
# @return [undefined]
|
92
|
+
#
|
93
|
+
# @api private
|
94
|
+
#
|
95
|
+
def emit_right
|
96
|
+
parantheses do
|
97
|
+
visit(right.value)
|
98
|
+
end
|
61
99
|
end
|
62
100
|
|
101
|
+
# Emitter for or assigmnent operator
|
63
102
|
class Or < self
|
64
103
|
|
65
|
-
SYMBOL = :'||='
|
66
104
|
handle(Rubinius::AST::OpAssignOr19)
|
105
|
+
SYMBOL = :'||='
|
67
106
|
|
68
107
|
end
|
69
108
|
|
109
|
+
# Emitter for and assigmnent operator
|
70
110
|
class And < self
|
71
111
|
|
72
|
-
SYMBOL = :'&&='
|
73
112
|
handle(Rubinius::AST::OpAssignAnd)
|
113
|
+
SYMBOL = :'&&='
|
74
114
|
|
75
115
|
end
|
76
116
|
|
@@ -1,15 +1,24 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for attribute assignments
|
3
4
|
class AttributeAssignment < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::AttributeAssignment)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
delegate(:receiver, :name)
|
11
|
+
|
12
|
+
# Perform dispatch
|
13
|
+
#
|
14
|
+
# @return [undefined]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
#
|
9
18
|
def dispatch
|
10
|
-
visit(
|
19
|
+
visit(receiver)
|
11
20
|
emit('.')
|
12
|
-
emit(
|
21
|
+
emit(name)
|
13
22
|
space
|
14
23
|
visit(node.arguments.array.first)
|
15
24
|
end
|
@@ -1,45 +1,65 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for begin constructs
|
3
4
|
class Begin < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::Begin)
|
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('begin')
|
11
18
|
emit_body
|
12
19
|
emit_end
|
13
20
|
end
|
14
21
|
|
22
|
+
# Emit body
|
23
|
+
#
|
24
|
+
# @return [undefined]
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
#
|
15
28
|
def emit_body
|
16
29
|
indent
|
17
|
-
|
18
30
|
body = node.rescue
|
19
|
-
|
20
|
-
|
31
|
+
case body
|
32
|
+
when Rubinius::AST::Rescue
|
21
33
|
emit_rescue(body)
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
if body.kind_of?(Rubinius::AST::Ensure)
|
34
|
+
when Rubinius::AST::Ensure
|
26
35
|
emit_ensure(body)
|
27
|
-
|
36
|
+
else
|
37
|
+
visit(body)
|
38
|
+
unindent
|
28
39
|
end
|
29
|
-
|
30
|
-
visit(body)
|
31
|
-
unindent
|
32
40
|
end
|
33
41
|
|
42
|
+
# Emit ensure
|
43
|
+
#
|
44
|
+
# @return [undefined]
|
45
|
+
#
|
46
|
+
# @api private
|
47
|
+
#
|
34
48
|
def emit_ensure(node)
|
35
49
|
visit(node.body)
|
36
50
|
unindent
|
37
51
|
emit(:ensure)
|
38
|
-
|
39
|
-
|
40
|
-
|
52
|
+
indented do
|
53
|
+
visit(node.ensure)
|
54
|
+
end
|
41
55
|
end
|
42
56
|
|
57
|
+
# Emit rescue
|
58
|
+
#
|
59
|
+
# @return [undefined]
|
60
|
+
#
|
61
|
+
# @api private
|
62
|
+
#
|
43
63
|
def emit_rescue(node)
|
44
64
|
visit(node.body)
|
45
65
|
unindent
|
@@ -1,44 +1,61 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Base class for binary operator emitters
|
3
4
|
class BinaryOperator < 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
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
emit_right
|
14
|
-
emit(')')
|
15
|
+
parantheses do
|
16
|
+
emit_left
|
17
|
+
emit(" #{self.class::SYMBOL} ")
|
18
|
+
emit_right
|
19
|
+
end
|
15
20
|
end
|
16
21
|
|
22
|
+
# Emit left
|
23
|
+
#
|
24
|
+
# @return [undefined]
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
#
|
17
28
|
def emit_left
|
18
|
-
|
19
|
-
|
20
|
-
|
29
|
+
parantheses do
|
30
|
+
visit(node.left)
|
31
|
+
end
|
21
32
|
end
|
22
33
|
|
34
|
+
# Emit right
|
35
|
+
#
|
36
|
+
# @return [undefined]
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
#
|
23
40
|
def emit_right
|
24
|
-
|
25
|
-
|
26
|
-
|
41
|
+
parantheses do
|
42
|
+
visit(node.right)
|
43
|
+
end
|
27
44
|
end
|
28
45
|
|
46
|
+
# Emitter for binary or operator
|
29
47
|
class Or < self
|
30
48
|
|
31
|
-
SYMBOL = :'||'
|
32
|
-
|
33
49
|
handle(Rubinius::AST::Or)
|
50
|
+
SYMBOL = :'||'
|
34
51
|
|
35
52
|
end
|
36
53
|
|
54
|
+
# Emitter for binary and operator
|
37
55
|
class And < self
|
38
56
|
|
39
|
-
SYMBOL = :'&&'
|
40
|
-
|
41
57
|
handle(Rubinius::AST::And)
|
58
|
+
SYMBOL = :'&&'
|
42
59
|
|
43
60
|
end
|
44
61
|
end
|