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.
Files changed (76) hide show
  1. data/.gitignore +6 -6
  2. data/Changelog.md +4 -0
  3. data/README.md +1 -1
  4. data/bin/to_source +1 -0
  5. data/config/flay.yml +1 -1
  6. data/config/flog.yml +1 -1
  7. data/config/roodi.yml +4 -4
  8. data/config/site.reek +5 -2
  9. data/config/yardstick.yml +1 -1
  10. data/lib/to_source.rb +1 -1
  11. data/lib/to_source/command.rb +63 -1
  12. data/lib/to_source/emitter.rb +221 -32
  13. data/lib/to_source/emitter/access.rb +8 -0
  14. data/lib/to_source/emitter/actual_arguments.rb +51 -8
  15. data/lib/to_source/emitter/alias.rb +11 -2
  16. data/lib/to_source/emitter/assignment.rb +62 -22
  17. data/lib/to_source/emitter/attribute_assignment.rb +11 -2
  18. data/lib/to_source/emitter/begin.rb +34 -14
  19. data/lib/to_source/emitter/binary_operator.rb +34 -17
  20. data/lib/to_source/emitter/binary_operator_method.rb +36 -17
  21. data/lib/to_source/emitter/block.rb +7 -0
  22. data/lib/to_source/emitter/block_argument.rb +7 -0
  23. data/lib/to_source/emitter/block_pass.rb +7 -0
  24. data/lib/to_source/emitter/case.rb +85 -0
  25. data/lib/to_source/emitter/class.rb +21 -6
  26. data/lib/to_source/emitter/concat_arguments.rb +11 -3
  27. data/lib/to_source/emitter/default_arguments.rb +7 -0
  28. data/lib/to_source/emitter/define.rb +46 -8
  29. data/lib/to_source/emitter/defined.rb +7 -0
  30. data/lib/to_source/emitter/element_assignment.rb +10 -1
  31. data/lib/to_source/emitter/element_reference.rb +10 -1
  32. data/lib/to_source/emitter/empty_body.rb +9 -0
  33. data/lib/to_source/emitter/ensure.rb +34 -7
  34. data/lib/to_source/emitter/ensure_body.rb +14 -5
  35. data/lib/to_source/emitter/execute_string.rb +9 -0
  36. data/lib/to_source/emitter/formal_arguments.rb +131 -39
  37. data/lib/to_source/emitter/if.rb +59 -14
  38. data/lib/to_source/emitter/iter.rb +10 -3
  39. data/lib/to_source/emitter/keyword_value.rb +28 -4
  40. data/lib/to_source/emitter/literal.rb +99 -14
  41. data/lib/to_source/emitter/literal/dynamic.rb +88 -13
  42. data/lib/to_source/emitter/loop.rb +14 -11
  43. data/lib/to_source/emitter/match3.rb +7 -0
  44. data/lib/to_source/emitter/module.rb +10 -3
  45. data/lib/to_source/emitter/multiple_assignment.rb +19 -0
  46. data/lib/to_source/emitter/nth_ref.rb +7 -0
  47. data/lib/to_source/emitter/op_assign1.rb +7 -0
  48. data/lib/to_source/emitter/op_assign2.rb +7 -0
  49. data/lib/to_source/emitter/pattern_arguments.rb +7 -0
  50. data/lib/to_source/emitter/rescue.rb +10 -4
  51. data/lib/to_source/emitter/rescue_condition.rb +40 -3
  52. data/lib/to_source/emitter/scope.rb +7 -0
  53. data/lib/to_source/emitter/scope_name.rb +7 -0
  54. data/lib/to_source/emitter/scoped_name.rb +7 -0
  55. data/lib/to_source/emitter/send.rb +71 -5
  56. data/lib/to_source/emitter/send_with_arguments.rb +53 -7
  57. data/lib/to_source/emitter/singleton_class.rb +17 -5
  58. data/lib/to_source/emitter/splat.rb +7 -0
  59. data/lib/to_source/emitter/splat_when.rb +7 -0
  60. data/lib/to_source/emitter/static.rb +19 -0
  61. data/lib/to_source/emitter/super.rb +49 -4
  62. data/lib/to_source/emitter/to_array.rb +7 -0
  63. data/lib/to_source/emitter/to_string.rb +7 -0
  64. data/lib/to_source/emitter/toplevel.rb +9 -0
  65. data/lib/to_source/emitter/unary_operator_method.rb +7 -0
  66. data/lib/to_source/emitter/unless.rb +23 -4
  67. data/lib/to_source/emitter/util.rb +8 -0
  68. data/lib/to_source/emitter/when.rb +28 -3
  69. data/lib/to_source/emitter/yield.rb +9 -0
  70. data/lib/to_source/emitter/z_super.rb +7 -0
  71. data/lib/to_source/state.rb +95 -11
  72. data/spec/unit/to_source/class_methods/run_spec.rb +13 -0
  73. data/to_source.gemspec +1 -1
  74. metadata +3 -4
  75. data/lib/to_source/buffer.rb +0 -40
  76. data/lib/to_source/emitter/receiver_case.rb +0 -35
@@ -1,32 +1,35 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Base class for loop node emittrs
3
4
  class Loop < 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
15
  emit(self.class::KEYWORD)
9
16
  space
10
17
  visit(condition)
11
- indent
12
- visit(body)
13
- unindent
18
+ indented do
19
+ visit(body)
20
+ end
14
21
  emit_end
15
22
  end
16
23
 
17
- def condition
18
- node.condition
19
- end
20
-
21
- def body
22
- node.body
23
- end
24
+ delegate :condition, :body
24
25
 
26
+ # Emitter for while nodes
25
27
  class While < self
26
28
  handle(Rubinius::AST::While)
27
29
  KEYWORD = :while
28
30
  end
29
31
 
32
+ # Emitter for until nodes
30
33
  class Until < self
31
34
  handle(Rubinius::AST::Until)
32
35
  KEYWORD = :until
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for match operator
3
4
  class Match3 < self
4
5
 
5
6
  handle(Rubinius::AST::Match3)
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
  util = node
11
18
  visit(util.value)
@@ -1,18 +1,25 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for module nodes
3
4
  class Module < self
4
5
 
5
6
  handle(Rubinius::AST::Module)
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
  util = node
11
18
  emit('module ')
12
19
  visit(util.name)
13
- indent
14
- visit(util.body)
15
- unindent
20
+ indented do
21
+ visit(util.body)
22
+ end
16
23
  emit_end
17
24
  end
18
25
 
@@ -1,21 +1,40 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for multiple assignment nodes
3
4
  class MultipleAssignment < self
4
5
 
5
6
  handle(Rubinius::AST::MultipleAssignment)
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_left
11
18
  emit(' = ')
12
19
  emit_right
13
20
  end
14
21
 
22
+ # Emit left
23
+ #
24
+ # @return [undefined]
25
+ #
26
+ # @api private
27
+ #
15
28
  def emit_left
16
29
  run(Util::DelimitedBody, node.left.body)
17
30
  end
18
31
 
32
+ # Emit left
33
+ #
34
+ # @return [undefined]
35
+ #
36
+ # @api private
37
+ #
19
38
  def emit_right
20
39
  right = node.right
21
40
  if right.kind_of?(Rubinius::AST::ArrayLiteral)
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for nth global variable reference
3
4
  class NthRef < self
4
5
 
5
6
  handle(Rubinius::AST::NthRef)
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("$#{node.which}")
11
18
  end
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for conditiona element assignment
3
4
  class OpAssign1 < self
4
5
 
5
6
  handle(Rubinius::AST::OpAssign1)
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
  util = node
11
18
  visit(util.receiver)
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for conditiona attribute assignment
3
4
  class OpAssign2 < self
4
5
 
5
6
  handle(Rubinius::AST::OpAssign2)
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
  util = node
11
18
  visit(util.receiver)
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for pattern argument node
3
4
  class PatternArguments < self
4
5
 
5
6
  handle(Rubinius::AST::PatternArguments)
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
  run(Util::DelimitedBody, node.arguments.body)
@@ -1,18 +1,24 @@
1
1
  module ToSource
2
2
  class Emitter
3
-
3
+ # Emitter for rescue nodes
4
4
  class Rescue < self
5
5
 
6
6
  handle(Rubinius::AST::Rescue)
7
7
 
8
8
  private
9
9
 
10
+ # Perform dispatch
11
+ #
12
+ # @return [undefined]
13
+ #
14
+ # @api private
15
+ #
10
16
  def dispatch
11
17
  util = node
12
18
  emit('begin')
13
- indent
14
- visit(util.body)
15
- unindent
19
+ indented do
20
+ visit(util.body)
21
+ end
16
22
  visit(util.rescue)
17
23
  emit_end
18
24
  end
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for rescue condition within rescue nodes
3
4
  class RescueCondition < self
4
5
 
5
6
  handle(Rubinius::AST::RescueCondition)
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('rescue')
11
18
  emit_conditions
@@ -15,12 +22,24 @@ module ToSource
15
22
  emit_next
16
23
  end
17
24
 
25
+ # Emit body
26
+ #
27
+ # @return [undefined]
28
+ #
29
+ # @api private
30
+ #
18
31
  def emit_body
19
- indent
20
- visit(node.body)
21
- unindent
32
+ indented do
33
+ visit(node.body)
34
+ end
22
35
  end
23
36
 
37
+ # Emit conditions
38
+ #
39
+ # @return [undefined]
40
+ #
41
+ # @api private
42
+ #
24
43
  def emit_conditions
25
44
  conditions = node.conditions || return
26
45
  body = conditions.body
@@ -32,6 +51,12 @@ module ToSource
32
51
  end
33
52
  end
34
53
 
54
+ # Emit splat
55
+ #
56
+ # @return [undefined]
57
+ #
58
+ # @api private
59
+ #
35
60
  def emit_splat
36
61
  util = node
37
62
  splat = util.splat || return
@@ -40,12 +65,24 @@ module ToSource
40
65
  visit(splat)
41
66
  end
42
67
 
68
+ # Emit assignment
69
+ #
70
+ # @return [undefined]
71
+ #
72
+ # @api private
73
+ #
43
74
  def emit_assignment
44
75
  assignment = node.assignment || return
45
76
  emit(' => ')
46
77
  emit(assignment.name)
47
78
  end
48
79
 
80
+ # Emit next
81
+ #
82
+ # @return [undefined]
83
+ #
84
+ # @api private
85
+ #
49
86
  def emit_next
50
87
  next_rescue = node.next || return
51
88
  visit(next_rescue)
@@ -1,5 +1,6 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for class module or singleton class scopes
3
4
  class Scope < self
4
5
 
5
6
  handle(Rubinius::AST::ClassScope)
@@ -8,6 +9,12 @@ module ToSource
8
9
 
9
10
  private
10
11
 
12
+ # Perform dispatch
13
+ #
14
+ # @return [undefined]
15
+ #
16
+ # @api private
17
+ #
11
18
  def dispatch
12
19
  visit(node.body)
13
20
  end
@@ -1,5 +1,6 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for class or modue scope names
3
4
  class ScopeName < self
4
5
 
5
6
  handle(Rubinius::AST::ClassName)
@@ -7,6 +8,12 @@ module ToSource
7
8
 
8
9
  private
9
10
 
11
+ # Perform dispatch
12
+ #
13
+ # @return [undefined]
14
+ #
15
+ # @api private
16
+ #
10
17
  def dispatch
11
18
  emit(node.name)
12
19
  end
@@ -1,5 +1,6 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for scoped cass module or constant names
3
4
  class ScopedName < self
4
5
 
5
6
  handle(Rubinius::AST::ScopedClassName)
@@ -10,6 +11,12 @@ module ToSource
10
11
 
11
12
  delegate(:parent, :name)
12
13
 
14
+ # Perform dispatch
15
+ #
16
+ # @return [undefined]
17
+ #
18
+ # @api private
19
+ #
13
20
  def dispatch
14
21
  visit(parent)
15
22
  emit('::')
@@ -10,10 +10,14 @@ module ToSource
10
10
 
11
11
  private
12
12
 
13
- def unary_operator_method?
14
- UNARY_OPERATORS.include?(node.name)
15
- end
13
+ delegate(:block, :name, :receiver)
16
14
 
15
+ # Perform dispatch
16
+ #
17
+ # @return [undefined]
18
+ #
19
+ # @api private
20
+ #
17
21
  def dispatch
18
22
  if unary_operator_method?
19
23
  run(UnaryOperatorMethod, node)
@@ -23,6 +27,26 @@ module ToSource
23
27
  normal_dispatch
24
28
  end
25
29
 
30
+ # Test for unary operator method
31
+ #
32
+ # @return [true]
33
+ # if node is an unary operator method
34
+ #
35
+ # @return [false]
36
+ # otherwise
37
+ #
38
+ # @api private
39
+ #
40
+ def unary_operator_method?
41
+ UNARY_OPERATORS.include?(name)
42
+ end
43
+
44
+ # Perform normal dispatch
45
+ #
46
+ # @return [undefined]
47
+ #
48
+ # @api private
49
+ #
26
50
  def normal_dispatch
27
51
  emit_receiver
28
52
  emit_name
@@ -30,31 +54,73 @@ module ToSource
30
54
  emit_block
31
55
  end
32
56
 
57
+ # Test for block
58
+ #
59
+ # @return [true]
60
+ # if block is present
61
+ #
62
+ # @return [false]
63
+ # otherwise
64
+ #
65
+ # @api private
66
+ #
33
67
  def block?
34
68
  !!block
35
69
  end
36
70
 
37
- delegate(:block, :name, :receiver)
38
-
71
+ # Test for block pass
72
+ #
73
+ # @return [true]
74
+ # if block pass is present
75
+ #
76
+ # @return [false]
77
+ # otherwise
78
+ #
79
+ # @api private
80
+ #
39
81
  def block_pass?
40
82
  block? && block.kind_of?(Rubinius::AST::BlockPass19)
41
83
  end
42
84
 
85
+ # Emit name
86
+ #
87
+ # @return [undefined]
88
+ #
89
+ # @api private
90
+ #
43
91
  def emit_name
44
92
  emit(name)
45
93
  end
46
94
 
95
+ # Emit receiver
96
+ #
97
+ # @return [undefined]
98
+ #
99
+ # @api private
100
+ #
47
101
  def emit_receiver
48
102
  return if node.privately
49
103
  visit(receiver)
50
104
  emit('.')
51
105
  end
52
106
 
107
+ # Emit block
108
+ #
109
+ # @return [undefined]
110
+ #
111
+ # @api private
112
+ #
53
113
  def emit_block
54
114
  return unless block? and !block_pass?
55
115
  visit(block)
56
116
  end
57
117
 
118
+ # Emit block pass
119
+ #
120
+ # @return [undefined]
121
+ #
122
+ # @api private
123
+ #
58
124
  def emit_block_pass
59
125
  return unless block_pass?
60
126
  emit('(')