to_source 0.2.15 → 0.2.16

Sign up to get free protection for your applications and to get access to all the features.
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('(')