to_source 0.2.9 → 0.2.11
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/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
|