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.
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