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,5 +1,7 @@
1
1
  module ToSource
2
2
  class Emitter
3
+
4
+ # Emitter for various access nodes
3
5
  class Access < self
4
6
 
5
7
  handle(Rubinius::AST::ConstantAccess)
@@ -11,6 +13,12 @@ module ToSource
11
13
 
12
14
  private
13
15
 
16
+ # Perform dispatch
17
+ #
18
+ # @return [undefined]
19
+ #
20
+ # @api private
21
+ #
14
22
  def dispatch
15
23
  emit(node.name)
16
24
  end
@@ -1,40 +1,83 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for arguments node
3
4
  class ActualArguments < self
4
5
 
5
6
  handle(Rubinius::AST::ActualArguments)
6
7
 
8
+ # Test if any arguments are present
9
+ #
10
+ # @return [true]
11
+ # if any argument is present
12
+ #
13
+ # @return [false]
14
+ # otherwise
15
+ #
16
+ # @api private
17
+ #
7
18
  def any?
8
- normal? or splat?
19
+ normal? || splat?
9
20
  end
10
21
 
11
22
  private
12
23
 
24
+ # Perform dispatch
25
+ #
26
+ # @return [self]
27
+ #
28
+ # @api private
29
+ #
13
30
  def dispatch
14
31
  emit_normal
15
32
  emit_splat
16
33
  end
17
34
 
18
- def array
19
- node.array
20
- end
35
+ delegate :array, :splat
21
36
 
37
+ # Test for splat argument
38
+ #
39
+ # @return [true]
40
+ # if splate argument is present
41
+ #
42
+ # @return [false]
43
+ # otherwise
44
+ #
45
+ # @api private
46
+ #
22
47
  def splat?
23
48
  !!splat
24
49
  end
25
50
 
51
+ # Test if normal arguments are present
52
+ #
53
+ # @return [true]
54
+ # if normal arguments are present
55
+ #
56
+ # @return [false]
57
+ # otherwise
58
+ #
59
+ # @api private
60
+ #
26
61
  def normal?
27
62
  !array.empty?
28
63
  end
29
64
 
30
- def splat
31
- node.splat
32
- end
33
-
65
+ # Emit normal arguments
66
+ #
67
+ # @return [undefined]
68
+ #
69
+ # @api private
70
+ #
34
71
  def emit_normal
35
72
  run(Util::DelimitedBody, array)
36
73
  end
37
74
 
75
+ # Emit splat argument
76
+ #
77
+ # @return [undefined]
78
+ #
79
+ # @api private
80
+ #
38
81
  def emit_splat
39
82
  return unless splat?
40
83
  emit(', ') if normal?
@@ -1,16 +1,25 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emiter for alias node
3
4
  class Alias < self
4
5
 
5
6
  handle(Rubinius::AST::Alias)
6
7
 
7
8
  private
8
9
 
10
+ delegate(:to, :from)
11
+
12
+ # Perform dispatch
13
+ #
14
+ # @return [undefined]
15
+ #
16
+ # @api private
17
+ #
9
18
  def dispatch
10
19
  emit('alias ')
11
- emit(node.to.value)
20
+ emit(to.value)
12
21
  space
13
- emit(node.from.value)
22
+ emit(from.value)
14
23
  end
15
24
 
16
25
  end
@@ -1,11 +1,20 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Base class for various assignment nodes
3
4
  class Assignment < self
4
5
 
5
6
  private
6
7
 
8
+ delegate :value
9
+
10
+ # Perform dispatch
11
+ #
12
+ # @return [undefined]
13
+ #
14
+ # @api private
15
+ #
7
16
  def dispatch
8
- emit_name
17
+ emit_target
9
18
  val = value
10
19
 
11
20
  if val
@@ -14,20 +23,26 @@ module ToSource
14
23
  end
15
24
  end
16
25
 
17
- def value
18
- node.value
19
- end
20
-
26
+ # Emitter for constant assignments
21
27
  class Constant < self
22
28
 
23
29
  handle(Rubinius::AST::ConstantAssignment)
24
30
 
25
- def emit_name
31
+ private
32
+
33
+ # Emit name
34
+ #
35
+ # @return [undefined]
36
+ #
37
+ # @api private
38
+ #
39
+ def emit_target
26
40
  visit(node.constant)
27
41
  end
28
42
 
29
43
  end
30
44
 
45
+ # Emitter for various variabe assignments
31
46
  class Variable < self
32
47
 
33
48
  handle(Rubinius::AST::LocalVariableAssignment)
@@ -35,42 +50,67 @@ module ToSource
35
50
  handle(Rubinius::AST::GlobalVariableAssignment)
36
51
  handle(Rubinius::AST::ClassVariableAssignment)
37
52
 
38
- def emit_name
39
- emit(node.name)
40
- end
53
+ private
41
54
 
42
- def name
43
- node.name
55
+ # Emit target
56
+ #
57
+ # @return [undefined]
58
+ #
59
+ # @api private
60
+ #
61
+ def emit_target
62
+ emit(node.name)
44
63
  end
45
64
 
46
65
  end
47
66
  end
48
67
 
68
+ # Base class for assignment operators
49
69
  class AssignmentOperator < self
50
70
 
71
+ private
72
+
73
+ delegate(:left, :right)
74
+
75
+ # Perform dispatch
76
+ #
77
+ # @return [undefined]
78
+ #
79
+ # @api private
80
+ #
51
81
  def dispatch
52
- emit('(')
53
- visit(node.left)
54
- space
55
- emit(self.class::SYMBOL)
56
- space
57
- emit('(')
58
- visit(node.right.value)
59
- emit(')')
60
- emit(')')
82
+ parantheses do
83
+ visit(left)
84
+ emit(" #{self.class::SYMBOL} ")
85
+ emit_right
86
+ end
87
+ end
88
+
89
+ # Emit right
90
+ #
91
+ # @return [undefined]
92
+ #
93
+ # @api private
94
+ #
95
+ def emit_right
96
+ parantheses do
97
+ visit(right.value)
98
+ end
61
99
  end
62
100
 
101
+ # Emitter for or assigmnent operator
63
102
  class Or < self
64
103
 
65
- SYMBOL = :'||='
66
104
  handle(Rubinius::AST::OpAssignOr19)
105
+ SYMBOL = :'||='
67
106
 
68
107
  end
69
108
 
109
+ # Emitter for and assigmnent operator
70
110
  class And < self
71
111
 
72
- SYMBOL = :'&&='
73
112
  handle(Rubinius::AST::OpAssignAnd)
113
+ SYMBOL = :'&&='
74
114
 
75
115
  end
76
116
 
@@ -1,15 +1,24 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for attribute assignments
3
4
  class AttributeAssignment < self
4
5
 
5
6
  handle(Rubinius::AST::AttributeAssignment)
6
7
 
7
8
  private
8
9
 
10
+ delegate(:receiver, :name)
11
+
12
+ # Perform dispatch
13
+ #
14
+ # @return [undefined]
15
+ #
16
+ # @api private
17
+ #
9
18
  def dispatch
10
- visit(node.receiver)
19
+ visit(receiver)
11
20
  emit('.')
12
- emit(node.name)
21
+ emit(name)
13
22
  space
14
23
  visit(node.arguments.array.first)
15
24
  end
@@ -1,45 +1,65 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for begin constructs
3
4
  class Begin < self
4
5
 
5
6
  handle(Rubinius::AST::Begin)
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('begin')
11
18
  emit_body
12
19
  emit_end
13
20
  end
14
21
 
22
+ # Emit body
23
+ #
24
+ # @return [undefined]
25
+ #
26
+ # @api private
27
+ #
15
28
  def emit_body
16
29
  indent
17
-
18
30
  body = node.rescue
19
-
20
- if body.kind_of?(Rubinius::AST::Rescue)
31
+ case body
32
+ when Rubinius::AST::Rescue
21
33
  emit_rescue(body)
22
- return
23
- end
24
-
25
- if body.kind_of?(Rubinius::AST::Ensure)
34
+ when Rubinius::AST::Ensure
26
35
  emit_ensure(body)
27
- return
36
+ else
37
+ visit(body)
38
+ unindent
28
39
  end
29
-
30
- visit(body)
31
- unindent
32
40
  end
33
41
 
42
+ # Emit ensure
43
+ #
44
+ # @return [undefined]
45
+ #
46
+ # @api private
47
+ #
34
48
  def emit_ensure(node)
35
49
  visit(node.body)
36
50
  unindent
37
51
  emit(:ensure)
38
- indent
39
- visit(node.ensure)
40
- unindent
52
+ indented do
53
+ visit(node.ensure)
54
+ end
41
55
  end
42
56
 
57
+ # Emit rescue
58
+ #
59
+ # @return [undefined]
60
+ #
61
+ # @api private
62
+ #
43
63
  def emit_rescue(node)
44
64
  visit(node.body)
45
65
  unindent
@@ -1,44 +1,61 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Base class for binary operator emitters
3
4
  class BinaryOperator < 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
- emit('(')
9
- emit_left
10
- space
11
- emit(self.class::SYMBOL)
12
- space
13
- emit_right
14
- emit(')')
15
+ parantheses do
16
+ emit_left
17
+ emit(" #{self.class::SYMBOL} ")
18
+ emit_right
19
+ end
15
20
  end
16
21
 
22
+ # Emit left
23
+ #
24
+ # @return [undefined]
25
+ #
26
+ # @api private
27
+ #
17
28
  def emit_left
18
- emit('(')
19
- visit(node.left)
20
- emit(')')
29
+ parantheses do
30
+ visit(node.left)
31
+ end
21
32
  end
22
33
 
34
+ # Emit right
35
+ #
36
+ # @return [undefined]
37
+ #
38
+ # @api private
39
+ #
23
40
  def emit_right
24
- emit('(')
25
- visit(node.right)
26
- emit(')')
41
+ parantheses do
42
+ visit(node.right)
43
+ end
27
44
  end
28
45
 
46
+ # Emitter for binary or operator
29
47
  class Or < self
30
48
 
31
- SYMBOL = :'||'
32
-
33
49
  handle(Rubinius::AST::Or)
50
+ SYMBOL = :'||'
34
51
 
35
52
  end
36
53
 
54
+ # Emitter for binary and operator
37
55
  class And < self
38
56
 
39
- SYMBOL = :'&&'
40
-
41
57
  handle(Rubinius::AST::And)
58
+ SYMBOL = :'&&'
42
59
 
43
60
  end
44
61
  end