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,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('] = ')