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,35 +1,54 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for binary operator methods
3
4
  class BinaryOperatorMethod < 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(node.name)
12
- space
13
- emit_right
14
- emit(')')
15
+ parantheses do
16
+ emit_left
17
+ emit(" #{node.name} ")
18
+ emit_right
19
+ end
15
20
  end
16
21
 
22
+ # Emit right
23
+ #
24
+ # @return [undefined]
25
+ #
26
+ # @api private
27
+ #
17
28
  def emit_right
18
- emit('(')
19
- visit(right)
20
- emit(')')
29
+ parantheses do
30
+ visit(right)
31
+ end
21
32
  end
22
33
 
34
+ # Emit left
35
+ #
36
+ # @return [undefined]
37
+ #
38
+ # @api private
39
+ #
23
40
  def emit_left
24
- emit('(')
25
- visit(left)
26
- emit(')')
27
- end
28
-
29
- def left
30
- node.receiver
41
+ parantheses do
42
+ visit(node.receiver)
43
+ end
31
44
  end
32
45
 
46
+ # Return right
47
+ #
48
+ # @return [Rubinius::AST::Node]
49
+ #
50
+ # @api private
51
+ #
33
52
  def right
34
53
  node.arguments.array.first
35
54
  end
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emiter for blocks
3
4
  class Block < self
4
5
 
5
6
  handle(Rubinius::AST::Block)
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
  array = node.array
11
18
  max = array.length-1
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for block argument
3
4
  class BlockArgument < self
4
5
 
5
6
  handle(Rubinius::AST::BlockArgument)
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
  emit(node.name)
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for block pass
3
4
  class BlockPass < self
4
5
 
5
6
  handle(Rubinius::AST::BlockPass19)
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
  visit(node.body)
@@ -0,0 +1,85 @@
1
+ module ToSource
2
+ class Emitter
3
+
4
+ # Emitter for case statment nodes
5
+ class Case < self
6
+
7
+ handle(Rubinius::AST::Case)
8
+
9
+ private
10
+
11
+ # Perform dispatch
12
+ #
13
+ # @return [undefined]
14
+ #
15
+ # @api private
16
+ #
17
+ def dispatch
18
+ emit('case ')
19
+ emit_receiver
20
+ emit_whens
21
+ emit_else
22
+ emit_end
23
+ end
24
+
25
+ # Emit receiver
26
+ #
27
+ # @return [undefined]
28
+ #
29
+ # @api private
30
+ #
31
+ def emit_receiver
32
+ end
33
+
34
+ # Emit else
35
+ #
36
+ # @return [undefined]
37
+ #
38
+ # @api private
39
+ #
40
+ def emit_else
41
+ body = node.else
42
+ return if body.kind_of?(Rubinius::AST::NilLiteral)
43
+ emit('else')
44
+ indented do
45
+ visit(body)
46
+ end
47
+ end
48
+
49
+ # Emit whens
50
+ #
51
+ # @return [undefined]
52
+ #
53
+ # @api private
54
+ #
55
+ def emit_whens
56
+ first = true
57
+ node.whens.each do |member|
58
+ new_line if first
59
+ first = false
60
+ visit(member)
61
+ end
62
+ end
63
+
64
+ # Emitter for receiver case nodes
65
+ class ReceiverCase < self
66
+
67
+ handle(Rubinius::AST::ReceiverCase)
68
+
69
+ private
70
+
71
+ # Emit receiver
72
+ #
73
+ # @return [undefined]
74
+ #
75
+ # @api private
76
+ #
77
+ def emit_receiver
78
+ visit(node.receiver)
79
+ end
80
+
81
+ end
82
+
83
+ end
84
+ end
85
+ end
@@ -1,23 +1,38 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for class nodes
3
4
  class Class < self
4
5
 
5
6
  handle(Rubinius::AST::Class)
6
7
 
7
8
  private
8
9
 
10
+ delegate(:name, :body)
11
+
12
+ # Perform dispatch
13
+ #
14
+ # @return [undefined]
15
+ #
16
+ # @api private
17
+ #
9
18
  def dispatch
10
19
  emit(:class)
11
20
  space
12
- visit(node.name)
13
- superclass
14
- indent
15
- visit(node.body)
16
- unindent
21
+ visit(name)
22
+ emit_superclass
23
+ indented do
24
+ visit(body)
25
+ end
17
26
  emit_end
18
27
  end
19
28
 
20
- def superclass
29
+ # Emit superclass
30
+ #
31
+ # @return [undefined]
32
+ #
33
+ # @api private
34
+ #
35
+ def emit_superclass
21
36
  superclass = node.superclass
22
37
  return if superclass.kind_of?(Rubinius::AST::NilLiteral)
23
38
  emit(' < ')
@@ -1,17 +1,25 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for concat arguments
3
4
  class ConcatArguments < self
4
5
 
5
6
  handle(Rubinius::AST::ConcatArgs)
6
7
 
7
8
  private
8
9
 
10
+ delegate(:rest)
11
+
12
+ # Perform dispatch
13
+ #
14
+ # @return [undefined]
15
+ #
16
+ # @api private
17
+ #
9
18
  def dispatch
10
19
  emit('[')
11
20
  run(Util::DelimitedBody, node.array.body)
12
- emit(', ')
13
- emit('*')
14
- visit(node.rest)
21
+ emit(', *')
22
+ visit(rest)
15
23
  emit(']')
16
24
  end
17
25
 
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for default arguments
3
4
  class DefaultArguments < self
4
5
 
5
6
  handle(Rubinius::AST::DefaultArguments)
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
  run(Util::DelimitedBody, node.arguments)
11
18
  end
@@ -1,55 +1,93 @@
1
1
  module ToSource
2
2
  class Emitter
3
3
 
4
+ # Emitter for define singleton nodes
4
5
  class DefineSingleton < self
5
6
 
6
7
  handle(Rubinius::AST::DefineSingleton)
7
8
 
8
9
  private
9
10
 
11
+ delegate(:receiver, :body)
12
+
13
+ # Perform dispatch
14
+ #
15
+ # @return [undefined]
16
+ #
17
+ # @api private
18
+ #
10
19
  def dispatch
11
20
  emit('def ')
12
- visit(node.receiver)
21
+ visit(receiver)
13
22
  emit('.')
14
- visit(node.body)
23
+ visit(body)
15
24
  end
16
25
  end
17
26
 
27
+ # Base class for define emitters
18
28
  class Define < self
19
29
 
20
30
  private
21
31
 
32
+ delegate(:name, :body)
33
+
34
+ # Perform dispatch
35
+ #
36
+ # @return [undefined]
37
+ #
38
+ # @api private
39
+ #
22
40
  def shared_dispatch
23
- emit(node.name)
41
+ emit(name)
24
42
  emit_arguments
25
- indent
26
- visit(node.body)
27
- unindent
43
+ indented do
44
+ visit(body)
45
+ end
28
46
  emit_end
29
47
  end
30
48
 
49
+ # Emit arguments
50
+ #
51
+ # @return [undefined]
52
+ #
53
+ # @api private
54
+ #
31
55
  def emit_arguments
32
56
  run(FormalArguments::Method)
33
57
  end
34
58
 
59
+ # Emitter for singeton level defines
35
60
  class Singleton < self
36
61
 
37
62
  handle(Rubinius::AST::DefineSingletonScope)
38
63
 
39
64
  private
40
-
65
+
66
+ # Perform dispatch
67
+ #
68
+ # @return [undefined]
69
+ #
70
+ # @api private
71
+ #
41
72
  def dispatch
42
73
  shared_dispatch
43
74
  end
44
75
 
45
76
  end
46
77
 
78
+ # Emitter for instance level defines
47
79
  class Instance < self
48
80
 
49
81
  handle(Rubinius::AST::Define)
50
82
 
51
83
  private
52
-
84
+
85
+ # Perform dispatch
86
+ #
87
+ # @return [undefined]
88
+ #
89
+ # @api private
90
+ #
53
91
  def dispatch
54
92
  emit('def ')
55
93
  shared_dispatch
@@ -1,11 +1,18 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for defined? node
3
4
  class Defined < self
4
5
 
5
6
  handle(Rubinius::AST::Defined)
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('defined?(')
11
18
  visit(node.expression)
@@ -1,14 +1,23 @@
1
1
  module ToSource
2
2
  class Emitter
3
+ # Emitter for element assignment nodes
3
4
  class ElementAssignment < self
4
5
 
5
6
  handle(Rubinius::AST::ElementAssignment)
6
7
 
7
8
  private
8
9
 
10
+ delegate(:receiver)
11
+
12
+ # Perform dispatch
13
+ #
14
+ # @return [undefined]
15
+ #
16
+ # @api private
17
+ #
9
18
  def dispatch
10
19
  index, value = node.arguments.array
11
- visit(node.receiver)
20
+ visit(receiver)
12
21
  emit('[')
13
22
  visit(index)
14
23
  emit('] = ')