unparser 0.0.8 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
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