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