unparser 0.0.8 → 0.0.10

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: db2821186d187ad46f917f49cb11af9afc247fd8
4
- data.tar.gz: acafc7b50f6b70e7fc8d633fa3c2322c3d9a8657
3
+ metadata.gz: 5ccb8ec5ec53b06f423ec478b69175df8b6d23e7
4
+ data.tar.gz: 5c21e85a61a86b8a74b8e2f4765474d68e90cd57
5
5
  SHA512:
6
- metadata.gz: d4ddda74c96cbcf812df1ae84a01f9a48b0f889307c65d9d02c3d0ad0ab87189c171f3aafdb3d44f3d77b60721cddadf5c0977f6a8749e7506b29b81b3bdd0c6
7
- data.tar.gz: 7e3b9cf95b9596cbbb7507f01f024be51a0ad3d560a700d2f7732991c82674cf6b5de100f1e64084039d56d01a5b81465caf987a1dd55d34e7068acd8313b89e
6
+ metadata.gz: d460332fd79deb26a5f077e513774e4b7609f11ed313e4c09a70ba724789ff857de7a40d4d40afc8e571d9f8e7ca02c073ccc62b3c0a71b8d952ef5baf9f5cda
7
+ data.tar.gz: 050e67bb496b66d06ee75e266dd22b6539562589d63cebd6dce5ff57dcf88a688fa2250f5b9b4d99a9d71557d550f2c554067a88928e7d05556fe6437849091b
@@ -2,46 +2,45 @@
2
2
 
3
3
  group :development do
4
4
  gem 'rake', '~> 10.1.0'
5
- gem 'rspec', '~> 2.13.0'
6
- gem 'yard', '~> 0.8.6.1'
5
+ gem 'rspec', '~> 2.14.1'
6
+ gem 'yard', '~> 0.8.6.2'
7
7
  end
8
8
 
9
9
  group :yard do
10
- gem 'kramdown', '~> 1.0.1'
10
+ gem 'kramdown', '~> 1.1.0'
11
11
  end
12
12
 
13
13
  group :guard do
14
14
  gem 'guard', '~> 1.8.1'
15
15
  gem 'guard-bundler', '~> 1.0.0'
16
16
  gem 'guard-rspec', '~> 3.0.2'
17
+ gem 'guard-rubocop', '~> 0.2.0'
18
+ gem 'guard-mutant', '~> 0.0.1'
17
19
 
18
20
  # file system change event handling
19
21
  gem 'listen', '~> 1.2.2'
20
- gem 'rb-fchange', '~> 0.0.6', :require => false
21
- gem 'rb-fsevent', '~> 0.9.3', :require => false
22
- gem 'rb-inotify', '~> 0.9.0', :require => false
22
+ gem 'rb-fchange', '~> 0.0.6', require: false
23
+ gem 'rb-fsevent', '~> 0.9.3', require: false
24
+ gem 'rb-inotify', '~> 0.9.0', require: false
23
25
 
24
26
  # notification handling
25
- gem 'libnotify', '~> 0.8.0', :require => false
26
- gem 'rb-notifu', '~> 0.0.4', :require => false
27
- gem 'terminal-notifier-guard', '~> 1.5.3', :require => false
27
+ gem 'libnotify', '~> 0.8.0', require: false
28
+ gem 'rb-notifu', '~> 0.0.4', require: false
29
+ gem 'terminal-notifier-guard', '~> 1.5.3', require: false
28
30
  end
29
31
 
30
32
  group :metrics do
31
- gem 'backports', '~> 3.3', '>= 3.3.2'
32
33
  gem 'coveralls', '~> 0.6.7'
33
- gem 'flay', '~> 2.3.0'
34
- gem 'flog', '~> 4.1.0'
35
- gem 'reek', '~> 1.3.1', :git => 'https://github.com/troessner/reek.git'
34
+ gem 'flay', '~> 2.3.1'
35
+ gem 'flog', '~> 4.1.1'
36
+ gem 'reek', '~> 1.3.1', git: 'https://github.com/troessner/reek.git'
37
+ gem 'rubocop', '~> 0.10.0', git: 'https://github.com/bbatsov/rubocop.git'
36
38
  gem 'simplecov', '~> 0.7.1'
37
39
  gem 'yardstick', '~> 0.9.6'
38
40
 
39
- platforms :ruby_19 do
40
- gem 'yard-spellcheck', '~> 0.1.5'
41
- end
42
-
43
41
  platforms :ruby_19, :ruby_20 do
44
- gem 'mutant', '~> 0.3.beta4'
42
+ gem 'mutant', '~> 0.3.0.beta17'
43
+ gem 'yard-spellcheck', '~> 0.1.5'
45
44
  end
46
45
 
47
46
  platforms :rbx do
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
1
  require 'devtools'
2
2
  Devtools.init_rake_tasks
3
+
4
+ Rake.application.load_imports
5
+ task('metrics:mutant').clear
6
+
7
+ namespace :metrics do
8
+ task :mutant => :coverage do
9
+ $stderr.puts 'Mutant is disabled till flexible rspec strategy is implemented'
10
+ end
11
+ end
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  test:
3
- override:
3
+ override:
4
4
  - bundle exec rake ci
@@ -1,3 +1,3 @@
1
1
  ---
2
2
  threshold: 13
3
- total_score: 363
3
+ total_score: 365
@@ -1,2 +1,2 @@
1
1
  ---
2
- threshold: 9.8
2
+ threshold: 12.2
@@ -89,5 +89,8 @@ require 'unparser/emitter/root'
89
89
  require 'unparser/emitter/match'
90
90
  require 'unparser/emitter/empty'
91
91
  require 'unparser/emitter/flipflop'
92
+ require 'unparser/emitter/rescue'
93
+ require 'unparser/emitter/resbody'
94
+ require 'unparser/emitter/ensure'
92
95
  # make it easy for zombie
93
96
  require 'unparser/finalize'
@@ -1,39 +1,36 @@
1
1
  module Unparser
2
+ # All unparser constants maybe included in other libraries.
2
3
  module Constants
3
4
 
4
5
  UNARY_OPERATORS = %w(
5
- !
6
- ~
7
- -@
8
- +@
9
- ).map(&:to_sym).to_set.freeze
10
-
6
+ ! ~ -@ +@
7
+ ).map(&:to_sym).to_set
11
8
 
12
9
  BINARY_OPERATORS = %w(
13
10
  + - * / & | && || << >> ==
14
11
  === != <= < <=> > >= =~ !~ ^
15
12
  **
16
- ).map(&:to_sym).to_set.freeze
13
+ ).map(&:to_sym).to_set
17
14
 
18
- WS = ' '.freeze
19
- NL = "\n".freeze
20
- T_DOT = '.'.freeze
21
- T_LT = '<'.freeze
22
- T_DLT = '<<'.freeze
23
- T_AMP = '&'.freeze
24
- T_ASN = '='.freeze
25
- T_SPLAT = '*'.freeze
26
- T_DSPLAT = '**'.freeze
27
- T_ASR = '=>'.freeze
28
- T_PIPE = '|'.freeze
29
- T_DCL = '::'.freeze
30
- T_NEG = '!'.freeze
31
- T_OR = '||'.freeze
32
- T_AND = '&&'.freeze
33
- T_COLON = ':'.freeze
15
+ WS = ' '
16
+ NL = "\n"
17
+ T_DOT = '.'
18
+ T_LT = '<'
19
+ T_DLT = '<<'
20
+ T_AMP = '&'
21
+ T_ASN = '='
22
+ T_SPLAT = '*'
23
+ T_DSPLAT = '**'
24
+ T_ASR = '=>'
25
+ T_PIPE = '|'
26
+ T_DCL = '::'
27
+ T_NEG = '!'
28
+ T_OR = '||'
29
+ T_AND = '&&'
30
+ T_COLON = ':'
34
31
 
35
- M_PO = '('.freeze
36
- M_PC = ')'.freeze
32
+ M_PO = '('
33
+ M_PC = ')'
37
34
 
38
35
  K_DO = 'do'
39
36
  K_DEF = 'def'
@@ -78,12 +75,12 @@ module Unparser
78
75
  K_FILE = '__FILE__'
79
76
  K_THEN = 'then'
80
77
 
81
-
82
- KEYWORDS = constants.map do |name|
78
+ KEYWORDS = constants.each_with_object([]) do |name, keywords|
79
+ value = const_get(name).freeze
83
80
  if name.to_s.start_with?('K_')
84
- const_get(name).freeze.to_sym
81
+ keywords << value.to_sym
85
82
  end
86
- end.compact.freeze
83
+ end.to_set.freeze
87
84
 
88
85
  end # Constants
89
86
  end # Unparser
@@ -1,138 +1,6 @@
1
1
  module Unparser
2
2
  class Emitter
3
3
 
4
- # Emitter for rescue nodes
5
- class Rescue < self
6
-
7
- handle :rescue
8
-
9
- children :body
10
-
11
- private
12
-
13
- # Perform dispatch
14
- #
15
- # @return [undefined]
16
- #
17
- # @api private
18
- #
19
- def dispatch
20
- visit_indented(body)
21
- rescue_bodies.each do |child|
22
- visit(child)
23
- end
24
- emit_else
25
- end
26
-
27
- # Return rescue bodies
28
- #
29
- # @return [Enumerable<Parser::AST::Node>]
30
- #
31
- # @api private
32
- #
33
- def rescue_bodies
34
- children[1..-2]
35
- end
36
-
37
- # Emit else
38
- #
39
- # @return [undefined]
40
- #
41
- # @api private
42
- #
43
- def emit_else
44
- return unless else_branch
45
- write(K_ELSE)
46
- visit_indented(else_branch)
47
- end
48
-
49
- # Return else body
50
- #
51
- # @return [Parser::AST::Node]
52
- # if else body is present
53
- #
54
- # @return [nil]
55
- # otherwise
56
- #
57
- # @api private
58
- #
59
- def else_branch
60
- children.last
61
- end
62
-
63
- end # Rescue
64
-
65
- # Emitter for ensure nodes
66
- class Ensure < self
67
-
68
- handle :ensure
69
-
70
- children :body, :ensure_body
71
-
72
- private
73
-
74
- # Perform dispatch
75
- #
76
- # @return [undefined]
77
- #
78
- # @api private
79
- #
80
- def dispatch
81
- visit_indented(body)
82
- write(K_ENSURE)
83
- visit_indented(ensure_body)
84
- end
85
-
86
- end # Ensure
87
-
88
- # Emitter for rescue body nodes
89
- class Resbody < self
90
-
91
- handle :resbody
92
-
93
- children :exception, :assignment, :body
94
-
95
- private
96
-
97
- # Perform dispatch
98
- #
99
- # @return [undefined]
100
- #
101
- # @api private
102
- #
103
- def dispatch
104
- write(K_RESCUE)
105
- emit_exception
106
- emit_assignment
107
- emit_body
108
- end
109
-
110
- # Emit exception
111
- #
112
- # @return [undefined]
113
- #
114
- # @api private
115
- #
116
- def emit_exception
117
- return unless exception
118
- ws
119
- delimited(exception.children)
120
- end
121
-
122
- # Emit assignment
123
- #
124
- # @return [undefined]
125
- #
126
- # @api private
127
- #
128
- def emit_assignment
129
- return unless assignment
130
- write(WS, T_ASR, WS)
131
- visit(assignment)
132
- end
133
-
134
- end # Resbody
135
-
136
4
  # Emitter for begin nodes
137
5
  class Begin < self
138
6
 
@@ -169,7 +37,25 @@ module Unparser
169
37
  # @api private
170
38
  #
171
39
  def dispatch
172
- emit_inner
40
+ if parentheses?
41
+ parentheses { emit_inner }
42
+ else
43
+ emit_inner
44
+ end
45
+ end
46
+
47
+ # Test if begin node needs to be enclosed within parentheses
48
+ #
49
+ # @return [true]
50
+ # if parentheses are needed
51
+ #
52
+ # @return [false]
53
+ # otherwise
54
+ #
55
+ # @api private
56
+ #
57
+ def parentheses?
58
+ children.length == 1 && children.first.type == :send && BINARY_OPERATORS.include?(children.first.children[1])
173
59
  end
174
60
 
175
61
  end # Implicit
@@ -0,0 +1,27 @@
1
+ module Unparser
2
+ class Emitter
3
+
4
+ # Emitter for ensure nodes
5
+ class Ensure < self
6
+
7
+ handle :ensure
8
+
9
+ children :body, :ensure_body
10
+
11
+ private
12
+
13
+ # Perform dispatch
14
+ #
15
+ # @return [undefined]
16
+ #
17
+ # @api private
18
+ #
19
+ def dispatch
20
+ visit_indented(body)
21
+ write(K_ENSURE)
22
+ visit_indented(ensure_body)
23
+ end
24
+
25
+ end # Ensure
26
+ end # Emitter
27
+ end # Unparser
@@ -1,5 +1,6 @@
1
1
  module Unparser
2
2
  class Emitter
3
+ # Emitter for flip flops
3
4
  class FlipFlop < self
4
5
 
5
6
  MAP = IceNine.deep_freeze(
@@ -20,9 +21,9 @@ module Unparser
20
21
  # @api private
21
22
  #
22
23
  def dispatch
23
- parentheses { visit(left) }
24
+ visit(left)
24
25
  write(MAP.fetch(node.type))
25
- parentheses { visit(right) }
26
+ visit(right)
26
27
  end
27
28
  end # FlipFLop
28
29
  end # Emitter
@@ -12,7 +12,7 @@ module Unparser
12
12
  # Emitter for primitives based on Object#inspect
13
13
  class Inspect < self
14
14
 
15
- handle :int, :str, :float, :sym
15
+ handle :float, :sym, :int
16
16
 
17
17
  private
18
18
 
@@ -27,6 +27,65 @@ module Unparser
27
27
  end
28
28
 
29
29
  end # Inspect
30
+
31
+ # Literal emitter with macro regeneration base class
32
+ class MacroSafe < self
33
+
34
+ private
35
+
36
+ # Perform dispatch
37
+ #
38
+ # @return [undefined]
39
+ #
40
+ # @api private
41
+ #
42
+ def dispatch
43
+ if(source == macro)
44
+ write(macro)
45
+ return
46
+ end
47
+ write(value.inspect)
48
+ end
49
+
50
+ # Return source, if present
51
+ #
52
+ # @return [String]
53
+ # if present
54
+ #
55
+ # @return [nil]
56
+ # otherwise
57
+ #
58
+ # @api private
59
+ #
60
+ def source
61
+ location = node.location || return
62
+ expression = location.expression || return
63
+ expression.source
64
+ end
65
+
66
+ # Return marco
67
+ #
68
+ # @return [String]
69
+ #
70
+ # @api private
71
+ #
72
+ def macro
73
+ self.class::MACRO
74
+ end
75
+
76
+ # String macro safe emitter
77
+ class String < self
78
+ MACRO = '__FILE__'.freeze
79
+ handle :str
80
+ end # String
81
+
82
+ # Integer macro safe emitter
83
+ class Integer < self
84
+ MACRO = '__LINE__'.freeze
85
+ handle :int
86
+ end # Integer
87
+
88
+ end # MacroSave
30
89
  end # Primitive
31
90
  end # Literal
32
91
  end # Emitter
@@ -0,0 +1,51 @@
1
+ module Unparser
2
+ class Emitter
3
+ # Emitter for rescue body nodes
4
+ class Resbody < self
5
+
6
+ handle :resbody
7
+
8
+ children :exception, :assignment, :body
9
+
10
+ private
11
+
12
+ # Perform dispatch
13
+ #
14
+ # @return [undefined]
15
+ #
16
+ # @api private
17
+ #
18
+ def dispatch
19
+ write(K_RESCUE)
20
+ emit_exception
21
+ emit_assignment
22
+ emit_body
23
+ end
24
+
25
+ # Emit exception
26
+ #
27
+ # @return [undefined]
28
+ #
29
+ # @api private
30
+ #
31
+ def emit_exception
32
+ return unless exception
33
+ ws
34
+ delimited(exception.children)
35
+ end
36
+
37
+ # Emit assignment
38
+ #
39
+ # @return [undefined]
40
+ #
41
+ # @api private
42
+ #
43
+ def emit_assignment
44
+ return unless assignment
45
+ write(WS, T_ASR, WS)
46
+ visit(assignment)
47
+ end
48
+
49
+ end # Resbody
50
+ end # Emitter
51
+ end # Unparser
@@ -0,0 +1,64 @@
1
+ module Unparser
2
+ class Emitter
3
+ # Emitter for rescue nodes
4
+ class Rescue < self
5
+
6
+ handle :rescue
7
+
8
+ children :body
9
+
10
+ private
11
+
12
+ # Perform dispatch
13
+ #
14
+ # @return [undefined]
15
+ #
16
+ # @api private
17
+ #
18
+ def dispatch
19
+ visit_indented(body)
20
+ rescue_bodies.each do |child|
21
+ visit(child)
22
+ end
23
+ emit_else
24
+ end
25
+
26
+ # Return rescue bodies
27
+ #
28
+ # @return [Enumerable<Parser::AST::Node>]
29
+ #
30
+ # @api private
31
+ #
32
+ def rescue_bodies
33
+ children[1..-2]
34
+ end
35
+
36
+ # Emit else
37
+ #
38
+ # @return [undefined]
39
+ #
40
+ # @api private
41
+ #
42
+ def emit_else
43
+ return unless else_branch
44
+ write(K_ELSE)
45
+ visit_indented(else_branch)
46
+ end
47
+
48
+ # Return else body
49
+ #
50
+ # @return [Parser::AST::Node]
51
+ # if else body is present
52
+ #
53
+ # @return [nil]
54
+ # otherwise
55
+ #
56
+ # @api private
57
+ #
58
+ def else_branch
59
+ children.last
60
+ end
61
+
62
+ end # Rescue
63
+ end # Emitter
64
+ end # Unparser
@@ -8,12 +8,14 @@ module Unparser
8
8
  INDEX_PARENS = IceNine.deep_freeze(%w([ ]))
9
9
  NORMAL_PARENS = IceNine.deep_freeze(%w[( )])
10
10
 
11
- INDEX_REFERENCE = '[]'.freeze
12
- INDEX_ASSIGN = '[]='.freeze
11
+ INDEX_REFERENCE = :'[]'
12
+ INDEX_ASSIGN = :'[]='
13
13
  ASSIGN_SUFFIX = '='.freeze
14
14
 
15
15
  AMBIGOUS = [:irange, :erange].to_set.freeze
16
16
 
17
+ children :receiver, :selector
18
+
17
19
  private
18
20
 
19
21
  # Perform dispatch
@@ -33,6 +35,17 @@ module Unparser
33
35
  end
34
36
  end
35
37
 
38
+ # Return string selector
39
+ #
40
+ # @return [String]
41
+ #
42
+ # @api private
43
+ #
44
+ def string_selector
45
+ selector.to_s
46
+ end
47
+ memoize :string_selector
48
+
36
49
  # Emit unambiguous receiver
37
50
  #
38
51
  # @return [undefined]
@@ -150,7 +163,7 @@ module Unparser
150
163
  # @api private
151
164
  #
152
165
  def unary?
153
- UNARY_OPERATORS.include?(children[1])
166
+ UNARY_OPERATORS.include?(selector)
154
167
  end
155
168
 
156
169
  # Test for binary operator implemented as method
@@ -164,7 +177,7 @@ module Unparser
164
177
  # @api private
165
178
  #
166
179
  def binary?
167
- BINARY_OPERATORS.include?(children[1])
180
+ BINARY_OPERATORS.include?(selector) && arguments.length == 1 && arguments.first.type != :splat
168
181
  end
169
182
 
170
183
  # Emit selector
@@ -174,7 +187,7 @@ module Unparser
174
187
  # @api private
175
188
  #
176
189
  def emit_selector
177
- name = selector
190
+ name = string_selector
178
191
  if mlhs?
179
192
  name = name[0..-2]
180
193
  end
@@ -206,19 +219,8 @@ module Unparser
206
219
  # @api private
207
220
  #
208
221
  def assignment?
209
- selector[-1] == ASSIGN_SUFFIX
210
- end
211
-
212
- # Return selector
213
- #
214
- # @return [String]
215
- #
216
- # @api private
217
- #
218
- def selector
219
- children[1].to_s
222
+ string_selector[-1] == ASSIGN_SUFFIX
220
223
  end
221
- memoize :selector
222
224
 
223
225
  # Test for empty arguments
224
226
  #
@@ -26,7 +26,6 @@ module Unparser
26
26
  #
27
27
  def emit_receiver
28
28
  emit_unambiguous_receiver
29
- write(T_DOT) if parentheses?
30
29
  end
31
30
 
32
31
  # Emit operator
@@ -36,8 +35,7 @@ module Unparser
36
35
  # @api private
37
36
  #
38
37
  def emit_operator
39
- parens = parentheses? ? EMPTY_STRING : WS
40
- parentheses(parens, parens) { write(selector) }
38
+ write(WS, string_selector, WS)
41
39
  end
42
40
 
43
41
  # Return right node
@@ -50,35 +48,6 @@ module Unparser
50
48
  children[2]
51
49
  end
52
50
 
53
- # Test for splat argument
54
- #
55
- # @return [true]
56
- # if first argument is a splat
57
- #
58
- # @return [false]
59
- # otherwise
60
- #
61
- # @api private
62
- #
63
- def splat?
64
- right_node.type == :splat
65
- end
66
-
67
- # Test if parentheses are needed
68
- #
69
- # @return [true]
70
- # if parenthes are needed
71
- #
72
- # @return [false]
73
- # otherwise
74
- #
75
- # @api private
76
- #
77
- def parentheses?
78
- splat? || children.length >= 4
79
- end
80
- memoize :parentheses?
81
-
82
51
  # Emit right
83
52
  #
84
53
  # @return [undefined]
@@ -86,12 +55,7 @@ module Unparser
86
55
  # @api private
87
56
  #
88
57
  def emit_right
89
- node = right_node
90
- if parentheses?
91
- parentheses { delimited(children[2..-1]) }
92
- return
93
- end
94
- visit(node)
58
+ visit(right_node)
95
59
  end
96
60
 
97
61
  end # Binary
@@ -7,8 +7,8 @@ module Unparser
7
7
  private
8
8
 
9
9
  MAP = IceNine.deep_freeze(
10
- '-@' => '-',
11
- '+@' => '+'
10
+ :'-@' => '-',
11
+ :'+@' => '+'
12
12
  )
13
13
 
14
14
  # Perform dispatch
@@ -19,7 +19,7 @@ module Unparser
19
19
  #
20
20
  def dispatch
21
21
  name = selector
22
- write(MAP.fetch(name, name))
22
+ write(MAP.fetch(name, name).to_s)
23
23
  emit_unambiguous_receiver
24
24
  end
25
25
 
@@ -196,8 +196,8 @@ describe Unparser, 'spike' do
196
196
 
197
197
  context 'magic keywords' do
198
198
  assert_generates '__ENCODING__', 'Encoding::UTF_8', RUBIES - %w(1.8)
199
- assert_generates '__FILE__', '"(string)"'
200
- assert_generates '__LINE__', '1'
199
+ assert_source '__FILE__'
200
+ assert_source '__LINE__'
201
201
  end
202
202
 
203
203
  context 'assignment' do
@@ -730,13 +730,11 @@ describe Unparser, 'spike' do
730
730
  context 'class' do
731
731
  assert_source <<-RUBY
732
732
  class TestClass
733
-
734
733
  end
735
734
  RUBY
736
735
 
737
736
  assert_source <<-RUBY
738
737
  class << some_object
739
-
740
738
  end
741
739
  RUBY
742
740
 
@@ -748,25 +746,21 @@ describe Unparser, 'spike' do
748
746
 
749
747
  assert_source <<-RUBY
750
748
  class SomeNameSpace::TestClass
751
-
752
749
  end
753
750
  RUBY
754
751
 
755
752
  assert_source <<-RUBY
756
753
  class Some::Name::Space::TestClass
757
-
758
754
  end
759
755
  RUBY
760
756
 
761
757
  assert_source <<-RUBY
762
758
  class TestClass < Object
763
-
764
759
  end
765
760
  RUBY
766
761
 
767
762
  assert_source <<-RUBY
768
763
  class TestClass < SomeNameSpace::Object
769
-
770
764
  end
771
765
  RUBY
772
766
 
@@ -780,7 +774,6 @@ describe Unparser, 'spike' do
780
774
 
781
775
  assert_source <<-RUBY
782
776
  class ::TestClass
783
-
784
777
  end
785
778
  RUBY
786
779
  end
@@ -789,19 +782,16 @@ describe Unparser, 'spike' do
789
782
 
790
783
  assert_source <<-RUBY
791
784
  module TestModule
792
-
793
785
  end
794
786
  RUBY
795
787
 
796
788
  assert_source <<-RUBY
797
789
  module SomeNameSpace::TestModule
798
-
799
790
  end
800
791
  RUBY
801
792
 
802
793
  assert_source <<-RUBY
803
794
  module Some::Name::Space::TestModule
804
-
805
795
  end
806
796
  RUBY
807
797
 
@@ -880,6 +870,12 @@ describe Unparser, 'spike' do
880
870
  end
881
871
  end
882
872
 
873
+ context 'nested binary operators' do
874
+ assert_source '(a + b) / (c - d)'
875
+ assert_source '(a + b) / (c.-(e, f))'
876
+ assert_source '(a + b) / (c.-(*f))'
877
+ end
878
+
883
879
  context 'binary operator' do
884
880
  assert_source '((a) || (break(foo)))'
885
881
  assert_source '((break(foo)) || (a))'
@@ -1058,4 +1054,5 @@ describe Unparser, 'spike' do
1058
1054
  end
1059
1055
  RUBY
1060
1056
  end
1057
+
1061
1058
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Unparser, '.unparse' do
4
4
  subject { described_class.unparse(node) }
5
5
 
6
- let(:node) { mock('Node') }
6
+ let(:node) { double('Node') }
7
7
 
8
8
  before do
9
9
  described_class::Emitter.should_receive(:visit) do |node, buffer|
@@ -4,7 +4,7 @@ describe Unparser::Emitter, '.visit' do
4
4
  subject { object.visit(node, buffer) }
5
5
  let(:object) { described_class }
6
6
 
7
- let(:node) { mock('Node', :type => type, :source_map => nil) }
7
+ let(:node) { double('Node', :type => type, :source_map => nil) }
8
8
  let(:buffer) { Unparser::Buffer.new }
9
9
 
10
10
  before do
@@ -6,10 +6,10 @@ describe Unparser::Emitter::SourceMap, '.emit' do
6
6
  let(:buffer) { Unparser::Buffer.new }
7
7
 
8
8
  let(:node) do
9
- mock('Node',
9
+ double('Node',
10
10
  :type => :foo,
11
- :location => mock('SourceMap',
12
- :expression => mock('SourceRange', :source => 'foo')
11
+ :location => double('SourceMap',
12
+ :expression => double('SourceRange', :source => 'foo')
13
13
  )
14
14
  )
15
15
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'unparser'
5
- s.version = '0.0.8'
5
+ s.version = '0.0.10'
6
6
 
7
7
  s.authors = ['Markus Schirp']
8
8
  s.email = 'mbj@schir-dso.com'
@@ -17,9 +17,9 @@ Gem::Specification.new do |s|
17
17
  s.extra_rdoc_files = %w(README.md)
18
18
  s.executables = [ 'test-unparser' ]
19
19
 
20
- s.add_dependency('parser', '~> 2.0.0.pre1')
21
- s.add_dependency('concord', '~> 0.1.0')
22
- s.add_dependency('adamantium', '~> 0.0.7')
20
+ s.add_dependency('parser', '~> 2.0.0.pre3')
21
+ s.add_dependency('concord', '~> 0.1.1')
22
+ s.add_dependency('adamantium', '~> 0.0.10')
23
23
  s.add_dependency('equalizer', '~> 0.0.5')
24
24
  s.add_dependency('abstract_type', '~> 0.0.5')
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-04 00:00:00.000000000 Z
11
+ date: 2013-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.0.pre1
19
+ version: 2.0.0.pre3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.0.pre1
26
+ version: 2.0.0.pre3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: concord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.0
33
+ version: 0.1.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.0
40
+ version: 0.1.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: adamantium
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.7
47
+ version: 0.0.10
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.7
54
+ version: 0.0.10
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: equalizer
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -88,7 +88,6 @@ extensions: []
88
88
  extra_rdoc_files:
89
89
  - README.md
90
90
  files:
91
- - .circle.yml
92
91
  - .gitignore
93
92
  - .rspec
94
93
  - .travis.yml
@@ -101,6 +100,7 @@ files:
101
100
  - Rakefile
102
101
  - TODO
103
102
  - bin/test-unparser
103
+ - circle.yml
104
104
  - config/devtools.yml
105
105
  - config/flay.yml
106
106
  - config/flog.yml
@@ -124,6 +124,7 @@ files:
124
124
  - lib/unparser/emitter/def.rb
125
125
  - lib/unparser/emitter/defined.rb
126
126
  - lib/unparser/emitter/empty.rb
127
+ - lib/unparser/emitter/ensure.rb
127
128
  - lib/unparser/emitter/flipflop.rb
128
129
  - lib/unparser/emitter/for.rb
129
130
  - lib/unparser/emitter/hookexe.rb
@@ -144,6 +145,8 @@ files:
144
145
  - lib/unparser/emitter/op_assign.rb
145
146
  - lib/unparser/emitter/redo.rb
146
147
  - lib/unparser/emitter/repetition.rb
148
+ - lib/unparser/emitter/resbody.rb
149
+ - lib/unparser/emitter/rescue.rb
147
150
  - lib/unparser/emitter/retry.rb
148
151
  - lib/unparser/emitter/return.rb
149
152
  - lib/unparser/emitter/root.rb