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,35 +1,54 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for binary operator methods
|
3
4
|
class BinaryOperatorMethod < 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(" #{node.name} ")
|
18
|
+
emit_right
|
19
|
+
end
|
15
20
|
end
|
16
21
|
|
22
|
+
# Emit right
|
23
|
+
#
|
24
|
+
# @return [undefined]
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
#
|
17
28
|
def emit_right
|
18
|
-
|
19
|
-
|
20
|
-
|
29
|
+
parantheses do
|
30
|
+
visit(right)
|
31
|
+
end
|
21
32
|
end
|
22
33
|
|
34
|
+
# Emit left
|
35
|
+
#
|
36
|
+
# @return [undefined]
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
#
|
23
40
|
def emit_left
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def left
|
30
|
-
node.receiver
|
41
|
+
parantheses do
|
42
|
+
visit(node.receiver)
|
43
|
+
end
|
31
44
|
end
|
32
45
|
|
46
|
+
# Return right
|
47
|
+
#
|
48
|
+
# @return [Rubinius::AST::Node]
|
49
|
+
#
|
50
|
+
# @api private
|
51
|
+
#
|
33
52
|
def right
|
34
53
|
node.arguments.array.first
|
35
54
|
end
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emiter for blocks
|
3
4
|
class Block < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::Block)
|
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
|
array = node.array
|
11
18
|
max = array.length-1
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for block argument
|
3
4
|
class BlockArgument < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::BlockArgument)
|
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
|
emit(node.name)
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for block pass
|
3
4
|
class BlockPass < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::BlockPass19)
|
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
|
visit(node.body)
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
|
4
|
+
# Emitter for case statment nodes
|
5
|
+
class Case < self
|
6
|
+
|
7
|
+
handle(Rubinius::AST::Case)
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
# Perform dispatch
|
12
|
+
#
|
13
|
+
# @return [undefined]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
#
|
17
|
+
def dispatch
|
18
|
+
emit('case ')
|
19
|
+
emit_receiver
|
20
|
+
emit_whens
|
21
|
+
emit_else
|
22
|
+
emit_end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Emit receiver
|
26
|
+
#
|
27
|
+
# @return [undefined]
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
#
|
31
|
+
def emit_receiver
|
32
|
+
end
|
33
|
+
|
34
|
+
# Emit else
|
35
|
+
#
|
36
|
+
# @return [undefined]
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
#
|
40
|
+
def emit_else
|
41
|
+
body = node.else
|
42
|
+
return if body.kind_of?(Rubinius::AST::NilLiteral)
|
43
|
+
emit('else')
|
44
|
+
indented do
|
45
|
+
visit(body)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Emit whens
|
50
|
+
#
|
51
|
+
# @return [undefined]
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
#
|
55
|
+
def emit_whens
|
56
|
+
first = true
|
57
|
+
node.whens.each do |member|
|
58
|
+
new_line if first
|
59
|
+
first = false
|
60
|
+
visit(member)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Emitter for receiver case nodes
|
65
|
+
class ReceiverCase < self
|
66
|
+
|
67
|
+
handle(Rubinius::AST::ReceiverCase)
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
# Emit receiver
|
72
|
+
#
|
73
|
+
# @return [undefined]
|
74
|
+
#
|
75
|
+
# @api private
|
76
|
+
#
|
77
|
+
def emit_receiver
|
78
|
+
visit(node.receiver)
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -1,23 +1,38 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for class nodes
|
3
4
|
class Class < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::Class)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
delegate(:name, :body)
|
11
|
+
|
12
|
+
# Perform dispatch
|
13
|
+
#
|
14
|
+
# @return [undefined]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
#
|
9
18
|
def dispatch
|
10
19
|
emit(:class)
|
11
20
|
space
|
12
|
-
visit(
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
21
|
+
visit(name)
|
22
|
+
emit_superclass
|
23
|
+
indented do
|
24
|
+
visit(body)
|
25
|
+
end
|
17
26
|
emit_end
|
18
27
|
end
|
19
28
|
|
20
|
-
|
29
|
+
# Emit superclass
|
30
|
+
#
|
31
|
+
# @return [undefined]
|
32
|
+
#
|
33
|
+
# @api private
|
34
|
+
#
|
35
|
+
def emit_superclass
|
21
36
|
superclass = node.superclass
|
22
37
|
return if superclass.kind_of?(Rubinius::AST::NilLiteral)
|
23
38
|
emit(' < ')
|
@@ -1,17 +1,25 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for concat arguments
|
3
4
|
class ConcatArguments < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::ConcatArgs)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
delegate(:rest)
|
11
|
+
|
12
|
+
# Perform dispatch
|
13
|
+
#
|
14
|
+
# @return [undefined]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
#
|
9
18
|
def dispatch
|
10
19
|
emit('[')
|
11
20
|
run(Util::DelimitedBody, node.array.body)
|
12
|
-
emit(', ')
|
13
|
-
|
14
|
-
visit(node.rest)
|
21
|
+
emit(', *')
|
22
|
+
visit(rest)
|
15
23
|
emit(']')
|
16
24
|
end
|
17
25
|
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for default arguments
|
3
4
|
class DefaultArguments < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::DefaultArguments)
|
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
|
run(Util::DelimitedBody, node.arguments)
|
11
18
|
end
|
@@ -1,55 +1,93 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
3
|
|
4
|
+
# Emitter for define singleton nodes
|
4
5
|
class DefineSingleton < self
|
5
6
|
|
6
7
|
handle(Rubinius::AST::DefineSingleton)
|
7
8
|
|
8
9
|
private
|
9
10
|
|
11
|
+
delegate(:receiver, :body)
|
12
|
+
|
13
|
+
# Perform dispatch
|
14
|
+
#
|
15
|
+
# @return [undefined]
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
#
|
10
19
|
def dispatch
|
11
20
|
emit('def ')
|
12
|
-
visit(
|
21
|
+
visit(receiver)
|
13
22
|
emit('.')
|
14
|
-
visit(
|
23
|
+
visit(body)
|
15
24
|
end
|
16
25
|
end
|
17
26
|
|
27
|
+
# Base class for define emitters
|
18
28
|
class Define < self
|
19
29
|
|
20
30
|
private
|
21
31
|
|
32
|
+
delegate(:name, :body)
|
33
|
+
|
34
|
+
# Perform dispatch
|
35
|
+
#
|
36
|
+
# @return [undefined]
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
#
|
22
40
|
def shared_dispatch
|
23
|
-
emit(
|
41
|
+
emit(name)
|
24
42
|
emit_arguments
|
25
|
-
|
26
|
-
|
27
|
-
|
43
|
+
indented do
|
44
|
+
visit(body)
|
45
|
+
end
|
28
46
|
emit_end
|
29
47
|
end
|
30
48
|
|
49
|
+
# Emit arguments
|
50
|
+
#
|
51
|
+
# @return [undefined]
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
#
|
31
55
|
def emit_arguments
|
32
56
|
run(FormalArguments::Method)
|
33
57
|
end
|
34
58
|
|
59
|
+
# Emitter for singeton level defines
|
35
60
|
class Singleton < self
|
36
61
|
|
37
62
|
handle(Rubinius::AST::DefineSingletonScope)
|
38
63
|
|
39
64
|
private
|
40
|
-
|
65
|
+
|
66
|
+
# Perform dispatch
|
67
|
+
#
|
68
|
+
# @return [undefined]
|
69
|
+
#
|
70
|
+
# @api private
|
71
|
+
#
|
41
72
|
def dispatch
|
42
73
|
shared_dispatch
|
43
74
|
end
|
44
75
|
|
45
76
|
end
|
46
77
|
|
78
|
+
# Emitter for instance level defines
|
47
79
|
class Instance < self
|
48
80
|
|
49
81
|
handle(Rubinius::AST::Define)
|
50
82
|
|
51
83
|
private
|
52
|
-
|
84
|
+
|
85
|
+
# Perform dispatch
|
86
|
+
#
|
87
|
+
# @return [undefined]
|
88
|
+
#
|
89
|
+
# @api private
|
90
|
+
#
|
53
91
|
def dispatch
|
54
92
|
emit('def ')
|
55
93
|
shared_dispatch
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for defined? node
|
3
4
|
class Defined < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::Defined)
|
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('defined?(')
|
11
18
|
visit(node.expression)
|
@@ -1,14 +1,23 @@
|
|
1
1
|
module ToSource
|
2
2
|
class Emitter
|
3
|
+
# Emitter for element assignment nodes
|
3
4
|
class ElementAssignment < self
|
4
5
|
|
5
6
|
handle(Rubinius::AST::ElementAssignment)
|
6
7
|
|
7
8
|
private
|
8
9
|
|
10
|
+
delegate(:receiver)
|
11
|
+
|
12
|
+
# Perform dispatch
|
13
|
+
#
|
14
|
+
# @return [undefined]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
#
|
9
18
|
def dispatch
|
10
19
|
index, value = node.arguments.array
|
11
|
-
visit(
|
20
|
+
visit(receiver)
|
12
21
|
emit('[')
|
13
22
|
visit(index)
|
14
23
|
emit('] = ')
|