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,19 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class AttributeAssignment < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::AttributeAssignment)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
visit(node.receiver)
|
11
|
+
emit('.')
|
12
|
+
emit(node.name)
|
13
|
+
space
|
14
|
+
visit(node.arguments.array.first)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Begin < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::Begin)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
emit('begin')
|
11
|
+
emit_body
|
12
|
+
emit_end
|
13
|
+
end
|
14
|
+
|
15
|
+
def emit_body
|
16
|
+
indent
|
17
|
+
|
18
|
+
body = node.rescue
|
19
|
+
|
20
|
+
if body.kind_of?(Rubinius::AST::Rescue)
|
21
|
+
emit_rescue(body)
|
22
|
+
return
|
23
|
+
end
|
24
|
+
|
25
|
+
if body.kind_of?(Rubinius::AST::Ensure)
|
26
|
+
emit_ensure(body)
|
27
|
+
return
|
28
|
+
end
|
29
|
+
|
30
|
+
visit(body)
|
31
|
+
unindent
|
32
|
+
end
|
33
|
+
|
34
|
+
def emit_ensure(node)
|
35
|
+
visit(node.body)
|
36
|
+
unindent
|
37
|
+
emit(:ensure)
|
38
|
+
indent
|
39
|
+
visit(node.ensure)
|
40
|
+
unindent
|
41
|
+
end
|
42
|
+
|
43
|
+
def emit_rescue(node)
|
44
|
+
visit(node.body)
|
45
|
+
unindent
|
46
|
+
visit(node.rescue)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class BinaryOperator < self
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def dispatch
|
8
|
+
emit('(')
|
9
|
+
visit(node.left)
|
10
|
+
emit(')')
|
11
|
+
space
|
12
|
+
emit(self.class::SYMBOL)
|
13
|
+
space
|
14
|
+
emit('(')
|
15
|
+
visit(node.right)
|
16
|
+
emit(')')
|
17
|
+
end
|
18
|
+
|
19
|
+
class Or < self
|
20
|
+
|
21
|
+
SYMBOL = :'||'
|
22
|
+
|
23
|
+
handle(Rubinius::AST::Or)
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
class And < self
|
28
|
+
|
29
|
+
SYMBOL = :'&&'
|
30
|
+
|
31
|
+
handle(Rubinius::AST::And)
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class BinaryOperatorMethod < self
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def dispatch
|
8
|
+
emit('(')
|
9
|
+
visit(left)
|
10
|
+
emit(')')
|
11
|
+
space
|
12
|
+
emit(node.name)
|
13
|
+
space
|
14
|
+
emit('(')
|
15
|
+
visit(right)
|
16
|
+
emit(')')
|
17
|
+
end
|
18
|
+
|
19
|
+
def left
|
20
|
+
node.receiver
|
21
|
+
end
|
22
|
+
|
23
|
+
def right
|
24
|
+
node.arguments.array.first
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Block < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::Block)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
array = node.array
|
11
|
+
max = array.length-1
|
12
|
+
array.each_with_index do |node, index|
|
13
|
+
visit(node)
|
14
|
+
if index < max
|
15
|
+
new_line
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Class < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::Class)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
emit(:class)
|
11
|
+
space
|
12
|
+
visit(node.name)
|
13
|
+
superclass
|
14
|
+
indent
|
15
|
+
visit(node.body)
|
16
|
+
unindent
|
17
|
+
emit_end
|
18
|
+
end
|
19
|
+
|
20
|
+
def superclass
|
21
|
+
superclass = node.superclass
|
22
|
+
return if superclass.kind_of?(Rubinius::AST::NilLiteral)
|
23
|
+
emit(' < ')
|
24
|
+
visit(superclass)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class ConcatArguments < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::ConcatArgs)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
emit('[')
|
11
|
+
run(Util::DelimitedBody, node.array.body)
|
12
|
+
emit(', ')
|
13
|
+
emit('*')
|
14
|
+
visit(node.rest)
|
15
|
+
emit(']')
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
|
4
|
+
class DefineSingleton < self
|
5
|
+
|
6
|
+
handle(Rubinius::AST::DefineSingleton)
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def dispatch
|
11
|
+
emit('def ')
|
12
|
+
visit(node.receiver)
|
13
|
+
emit('.')
|
14
|
+
visit(node.body)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Define < self
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def shared_dispatch
|
23
|
+
emit(node.name)
|
24
|
+
emit_arguments
|
25
|
+
indent
|
26
|
+
visit(node.body)
|
27
|
+
unindent
|
28
|
+
emit_end
|
29
|
+
end
|
30
|
+
|
31
|
+
def emit_arguments
|
32
|
+
run(FormalArguments::Method)
|
33
|
+
end
|
34
|
+
|
35
|
+
class Singleton < self
|
36
|
+
|
37
|
+
handle(Rubinius::AST::DefineSingletonScope)
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def dispatch
|
42
|
+
shared_dispatch
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
class Instance < self
|
48
|
+
|
49
|
+
handle(Rubinius::AST::Define)
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def dispatch
|
54
|
+
emit('def ')
|
55
|
+
shared_dispatch
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class ElementAssignment < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::ElementAssignment)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
index, value = node.arguments.array
|
11
|
+
visit(node.receiver)
|
12
|
+
emit('[')
|
13
|
+
visit(index)
|
14
|
+
emit('] = ')
|
15
|
+
visit(value)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module ToSource
|
2
|
+
class Emitter
|
3
|
+
class Ensure < self
|
4
|
+
|
5
|
+
handle(Rubinius::AST::Ensure)
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def dispatch
|
10
|
+
emit('begin')
|
11
|
+
indent
|
12
|
+
visit(node.body)
|
13
|
+
unindent
|
14
|
+
emit(:ensure)
|
15
|
+
indent
|
16
|
+
visit(node.ensure)
|
17
|
+
unindent
|
18
|
+
emit_end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|