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.
Files changed (71) hide show
  1. data/Changelog.md +13 -0
  2. data/LICENSE +21 -0
  3. data/README.md +6 -22
  4. data/TODO +3 -3
  5. data/lib/to_source.rb +68 -3
  6. data/lib/to_source/buffer.rb +40 -0
  7. data/lib/to_source/command.rb +44 -0
  8. data/lib/to_source/emitter.rb +76 -0
  9. data/lib/to_source/emitter/access.rb +20 -0
  10. data/lib/to_source/emitter/actual_arguments.rb +46 -0
  11. data/lib/to_source/emitter/alias.rb +18 -0
  12. data/lib/to_source/emitter/assignment.rb +77 -0
  13. data/lib/to_source/emitter/attribute_assignment.rb +19 -0
  14. data/lib/to_source/emitter/begin.rb +51 -0
  15. data/lib/to_source/emitter/binary_operator.rb +36 -0
  16. data/lib/to_source/emitter/binary_operator_method.rb +29 -0
  17. data/lib/to_source/emitter/block.rb +22 -0
  18. data/lib/to_source/emitter/block_argument.rb +16 -0
  19. data/lib/to_source/emitter/block_pass.rb +16 -0
  20. data/lib/to_source/emitter/class.rb +29 -0
  21. data/lib/to_source/emitter/concat_arguments.rb +20 -0
  22. data/lib/to_source/emitter/default_arguments.rb +15 -0
  23. data/lib/to_source/emitter/define.rb +61 -0
  24. data/lib/to_source/emitter/defined.rb +17 -0
  25. data/lib/to_source/emitter/element_assignment.rb +20 -0
  26. data/lib/to_source/emitter/element_reference.rb +16 -0
  27. data/lib/to_source/emitter/empty_body.rb +12 -0
  28. data/lib/to_source/emitter/ensure.rb +23 -0
  29. data/lib/to_source/emitter/ensure_body.rb +18 -0
  30. data/lib/to_source/emitter/execute_string.rb +13 -0
  31. data/lib/to_source/emitter/formal_arguments.rb +120 -0
  32. data/lib/to_source/emitter/if.rb +51 -0
  33. data/lib/to_source/emitter/iter.rb +20 -0
  34. data/lib/to_source/emitter/keyword_value.rb +43 -0
  35. data/lib/to_source/emitter/literal.rb +239 -0
  36. data/lib/to_source/emitter/match3.rb +17 -0
  37. data/lib/to_source/emitter/module.rb +21 -0
  38. data/lib/to_source/emitter/multiple_assignment.rb +23 -0
  39. data/lib/to_source/emitter/nth_ref.rb +15 -0
  40. data/lib/to_source/emitter/op_assign1.rb +19 -0
  41. data/lib/to_source/emitter/op_assign2.rb +19 -0
  42. data/lib/to_source/emitter/pattern_arguments.rb +17 -0
  43. data/lib/to_source/emitter/receiver_case.rb +35 -0
  44. data/lib/to_source/emitter/rescue.rb +21 -0
  45. data/lib/to_source/emitter/rescue_condition.rb +56 -0
  46. data/lib/to_source/emitter/scope.rb +17 -0
  47. data/lib/to_source/emitter/scope_name.rb +16 -0
  48. data/lib/to_source/emitter/scoped_name.rb +17 -0
  49. data/lib/to_source/emitter/send.rb +47 -0
  50. data/lib/to_source/emitter/send_with_arguments.rb +62 -0
  51. data/lib/to_source/emitter/singleton_class.rb +23 -0
  52. data/lib/to_source/emitter/splat.rb +17 -0
  53. data/lib/to_source/emitter/splat_when.rb +16 -0
  54. data/lib/to_source/emitter/static.rb +33 -0
  55. data/lib/to_source/emitter/super.rb +47 -0
  56. data/lib/to_source/emitter/to_array.rb +15 -0
  57. data/lib/to_source/emitter/to_string.rb +17 -0
  58. data/lib/to_source/emitter/toplevel.rb +15 -0
  59. data/lib/to_source/emitter/unary_operator_method.rb +20 -0
  60. data/lib/to_source/emitter/unless.rb +16 -0
  61. data/lib/to_source/emitter/until.rb +20 -0
  62. data/lib/to_source/emitter/util.rb +19 -0
  63. data/lib/to_source/emitter/when.rb +38 -0
  64. data/lib/to_source/emitter/while.rb +20 -0
  65. data/lib/to_source/emitter/yield.rb +19 -0
  66. data/lib/to_source/emitter/z_super.rb +17 -0
  67. data/lib/to_source/state.rb +60 -0
  68. data/spec/unit/to_source/{visitor/class_methods → class_methods}/run_spec.rb +84 -33
  69. data/to_source.gemspec +14 -12
  70. metadata +106 -11
  71. 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,16 @@
1
+ module ToSource
2
+ class Emitter
3
+ class BlockArgument < self
4
+
5
+ handle(Rubinius::AST::BlockArgument)
6
+
7
+ private
8
+
9
+ def dispatch
10
+ emit('&')
11
+ emit(node.name)
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module ToSource
2
+ class Emitter
3
+ class BlockPass < self
4
+
5
+ handle(Rubinius::AST::BlockPass19)
6
+
7
+ private
8
+
9
+ def dispatch
10
+ emit('&')
11
+ visit(node.body)
12
+ end
13
+
14
+ end
15
+ end
16
+ 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,15 @@
1
+ module ToSource
2
+ class Emitter
3
+ class DefaultArguments < self
4
+
5
+ handle(Rubinius::AST::DefaultArguments)
6
+
7
+ private
8
+
9
+ def dispatch
10
+ run(Util::DelimitedBody, node.arguments)
11
+ end
12
+
13
+ end
14
+ end
15
+ 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,17 @@
1
+ module ToSource
2
+ class Emitter
3
+ class Defined < self
4
+
5
+ handle(Rubinius::AST::Defined)
6
+
7
+ private
8
+
9
+ def dispatch
10
+ emit('defined?(')
11
+ visit(node.expression)
12
+ emit(')')
13
+ end
14
+
15
+ end
16
+ end
17
+ 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,16 @@
1
+ module ToSource
2
+ class Emitter
3
+ class ElementReference < self
4
+
5
+ private
6
+
7
+ def dispatch
8
+ visit(node.receiver)
9
+ emit('[')
10
+ visit(node.arguments.array.first)
11
+ emit(']')
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module ToSource
2
+ class Emitter
3
+ class EmptyBody < self
4
+
5
+ handle(Rubinius::AST::EmptyBody)
6
+
7
+ def dispatch
8
+ end
9
+
10
+ end
11
+ end
12
+ 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
@@ -0,0 +1,18 @@
1
+ module ToSource
2
+ class Emitter
3
+ class EnsureBody < self
4
+
5
+ private
6
+
7
+ def dispatch
8
+ visit(node.body)
9
+ unindent
10
+ emit('ensure')
11
+ indent
12
+ visit(node.ensure)
13
+ unindent
14
+ end
15
+
16
+ end
17
+ end
18
+ end