unparser 0.0.2 → 0.0.3

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: 213c690e6dae589a2d99f816fcb7a663c2e5b557
4
- data.tar.gz: ff3c326def1c6da82fd4f7d85e8fd8cb8ae8b4f1
3
+ metadata.gz: 76fd3cadb7aa3c25e62d45e012c2377b6fecc0e9
4
+ data.tar.gz: 9a5b5833a38bffedb47db8c578c83a09607e2ce9
5
5
  SHA512:
6
- metadata.gz: 8fd4fd4dfb549045719c944e5c696f51678a475dac3ab80be179bf632884bde20c137948a822069788cc76ec7474d6e8e6548e6c7468e8e4c2b3549b3dc52a75
7
- data.tar.gz: 09ea9e85f869c3e9d9a829b05e52389204278116abf5417f98f223d311ce2e1b3e0bcb54a78ff942e4bd124d80abb0518c767776506ff35d3f983f78cc8d9d5f
6
+ metadata.gz: 091f158bbe82fb41ef74e0d5367672083a21b95df31ad7493423fc13267348b1fed8331c8b3058ee0e18fad31a28498ed90c791852074d94fba986ef4a65b957
7
+ data.tar.gz: a1b024cabf31dfceacdf8320d832859f6cf8ec2c4a3970373a90400e81a2d501fa2a6bd0d4fcd2bfc73a961a72f35d2386246f2884ea66c5315430768317b177
data/.travis.yml CHANGED
@@ -3,10 +3,12 @@ script: 'bundle exec rake spec'
3
3
  rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
- - ruby-head
7
6
  - jruby-19mode
8
7
  - jruby-head
9
8
  - rbx-19mode
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: ruby-head
10
12
  notifications:
11
13
  irc:
12
14
  channels:
data/Changelog.md CHANGED
@@ -1,3 +1,11 @@
1
+ # v0.0.3 2013-06-17
2
+
3
+ * Adjust to changes in parser 2.0.0.beta5 => beta6
4
+
5
+ # v0.0.2 2013-06-17
6
+
7
+ Crappy release
8
+
1
9
  # v0.0.1 2013-06-15
2
10
 
3
11
  Initial release
data/Guardfile CHANGED
@@ -4,7 +4,7 @@ guard :bundler do
4
4
  watch('Gemfile')
5
5
  end
6
6
 
7
- guard :rspec, :all_on_start => false, :all_after_pass => false, :cli => '--fail-fast' do
7
+ guard :rspec, :all_on_start => false, :all_after_pass => false, :cli => '--fail-fast --backtrace' do
8
8
  # run all specs if the spec_helper or supporting files files are modified
9
9
  watch('spec/spec_helper.rb') { 'spec/unit' }
10
10
  watch(%r{\Aspec/(?:lib|support|shared)/.+\.rb\z}) { 'spec/unit' }
data/README.md CHANGED
@@ -7,6 +7,8 @@ unparser
7
7
 
8
8
  Generate equivalent inputs for ASTs from whitequarks awesome [parser](https://github.com/whitequark/parser).
9
9
 
10
+ Only supports 1.9 syntax currently!
11
+
10
12
  Usage
11
13
  -----
12
14
 
data/config/flay.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  ---
2
2
  threshold: 14
3
- total_score: 342
3
+ total_score: 341
data/config/reek.yml CHANGED
@@ -15,7 +15,7 @@ TooManyInstanceVariables:
15
15
  max_instance_variables: 3
16
16
  TooManyMethods:
17
17
  exclude:
18
- - Unparser::Emitter # TODO: 13 methods, mostly helpers for deduplicate sublcasses
18
+ - Unparser::Emitter # TODO: 13 methods, mostly helpers for deduplicate sublcasses
19
19
  enabled: true
20
20
  max_methods: 10
21
21
  UncommunicativeMethodName:
@@ -28,7 +28,7 @@ UncommunicativeMethodName:
28
28
  - !ruby/regexp /[A-Z]/
29
29
  LongParameterList:
30
30
  max_params: 3
31
- exclude:
31
+ exclude:
32
32
  - Unparser#self.transquote
33
33
  enabled: true
34
34
  overrides: {}
@@ -62,7 +62,7 @@ NestedIterators:
62
62
  max_allowed_nesting: 1
63
63
  TooManyStatements:
64
64
  max_statements: 5
65
- exclude:
65
+ exclude:
66
66
  - Unparser::Emitter::Block#dispatch # 6 statements
67
67
  - Unparser::Emitter::Def#dispatch # 6 statements
68
68
  - Unparser::Emitter::Class#dispatch # 6 statements
@@ -88,7 +88,7 @@ UncommunicativeVariableName:
88
88
  - !ruby/regexp /[0-9]$/
89
89
  - !ruby/regexp /[A-Z]/
90
90
  RepeatedConditional:
91
- exclude:
91
+ exclude:
92
92
  - Unparser::Emitter::Send # TODO Fixme
93
93
  - Unparser::Emitter::If
94
94
  enabled: true
@@ -101,6 +101,8 @@ DataClump:
101
101
  ControlParameter:
102
102
  exclude: []
103
103
  enabled: true
104
+ NilCheck:
105
+ enabled: false
104
106
  LongYieldList:
105
107
  max_params: 1
106
108
  exclude: []
data/lib/unparser.rb CHANGED
@@ -9,13 +9,16 @@ module Unparser
9
9
 
10
10
  # Unparse ast into string
11
11
  #
12
- # @param [Parser::Node] node
12
+ # @param [Parser::Node, nil] node
13
13
  #
14
14
  # @return [String]
15
15
  #
16
16
  # @api private
17
17
  #
18
18
  def self.unparse(node)
19
+ if node.nil?
20
+ node = Parser::AST::Node.new(:empty)
21
+ end
19
22
  buffer = Buffer.new
20
23
  Emitter.visit(node, buffer)
21
24
  buffer.content
@@ -84,5 +87,6 @@ require 'unparser/emitter/for'
84
87
  require 'unparser/emitter/repetition'
85
88
  require 'unparser/emitter/root'
86
89
  require 'unparser/emitter/match'
90
+ require 'unparser/emitter/empty'
87
91
 
88
92
  Unparser::Emitter::REGISTRY.freeze
@@ -15,20 +15,22 @@ module Unparser
15
15
  **
16
16
  ).map(&:to_sym).to_set.freeze
17
17
 
18
- WS = ' '.freeze
19
- NL = "\n".freeze
20
- O_DOT = '.'.freeze
21
- O_LT = '<'.freeze
22
- O_DLT = '<<'.freeze
23
- O_AMP = '&'.freeze
24
- O_ASN = '='.freeze
25
- O_SPLAT = '*'.freeze
26
- O_ASR = '=>'.freeze
27
- O_PIPE = '|'.freeze
28
- O_DCL = '::'.freeze
29
- O_NEG = '!'.freeze
30
- O_OR = '||'.freeze
31
- O_AND = '&&'.freeze
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
32
34
 
33
35
  M_PO = '('.freeze
34
36
  M_PC = ')'.freeze
@@ -65,7 +65,7 @@ module Unparser
65
65
  # @api private
66
66
  #
67
67
  def dispatch
68
- write(O_AMP, name.to_s)
68
+ write(T_AMP, name.to_s)
69
69
  end
70
70
 
71
71
  end # Blockarg
@@ -86,15 +86,79 @@ module Unparser
86
86
  # @api private
87
87
  #
88
88
  def dispatch
89
- write(name.to_s, WS, O_ASN, WS)
89
+ write(name.to_s, WS, T_ASN, WS)
90
90
  visit(value)
91
91
  end
92
92
  end
93
93
 
94
+ # Keyword rest argument emitter
95
+ class KeywordRest < self
96
+
97
+ handle :kwrestarg
98
+
99
+ children :name
100
+
101
+ private
102
+
103
+ # Perform dispatch
104
+ #
105
+ # @return [undefined]
106
+ #
107
+ # @api private
108
+ #
109
+ def dispatch
110
+ write(T_DSPLAT, name.to_s)
111
+ end
112
+ end # KeywordRest
113
+
114
+ # Optional keyword argument emitter
115
+ class KeywordOptional < self
116
+ handle :kwoptarg
117
+
118
+ children :name, :value
119
+
120
+ private
121
+
122
+ # Perform dispatch
123
+ #
124
+ # @return [undefined]
125
+ #
126
+ # @api private
127
+ #
128
+ def dispatch
129
+ write(name.to_s, T_COLON, WS)
130
+ visit(value)
131
+ end
132
+
133
+ end # KeywordOptional
134
+
135
+ # Keyword argument emitter
136
+ class Kwarg < self
137
+ handle :kwarg
138
+
139
+ children :name
140
+
141
+ private
142
+
143
+ # Perform dispatch
144
+ #
145
+ # @return [undefined]
146
+ #
147
+ # @api private
148
+ #
149
+ def dispatch
150
+ write(name.to_s, T_COLON)
151
+ end
152
+
153
+ end # Restarg
154
+
94
155
  # Rest argument emitter
95
156
  class Restarg < self
157
+
96
158
  handle :restarg
97
159
 
160
+ children :name
161
+
98
162
  private
99
163
 
100
164
  # Perform dispatch
@@ -104,7 +168,7 @@ module Unparser
104
168
  # @api private
105
169
  #
106
170
  def dispatch
107
- write(O_SPLAT, first_child.to_s)
171
+ write(T_SPLAT, name.to_s)
108
172
  end
109
173
 
110
174
  end # Restarg
@@ -114,6 +178,8 @@ module Unparser
114
178
 
115
179
  handle :arg
116
180
 
181
+ children :name
182
+
117
183
  private
118
184
 
119
185
  # Perform dispatch
@@ -123,7 +189,7 @@ module Unparser
123
189
  # @api private
124
190
  #
125
191
  def dispatch
126
- write(first_child.to_s)
192
+ write(name.to_s)
127
193
  end
128
194
 
129
195
  end # Argument
@@ -144,7 +210,7 @@ module Unparser
144
210
  # @api private
145
211
  #
146
212
  def dispatch
147
- write(O_AMP)
213
+ write(T_AMP)
148
214
  visit(name)
149
215
  end
150
216
 
@@ -29,7 +29,7 @@ module Unparser
29
29
  def emit_right
30
30
  right = right_node
31
31
  if right
32
- write(WS, O_ASN, WS)
32
+ write(WS, T_ASN, WS)
33
33
  visit(right)
34
34
  end
35
35
  end
@@ -105,7 +105,7 @@ module Unparser
105
105
  # @api private
106
106
  #
107
107
  def emit_right
108
- write(WS, O_ASN, WS)
108
+ write(WS, T_ASN, WS)
109
109
  right = children.last
110
110
  case right.type
111
111
  when :array
@@ -113,7 +113,7 @@ module Unparser
113
113
  #
114
114
  def emit_assignment
115
115
  return unless assignment
116
- write(WS, O_ASR, WS)
116
+ write(WS, T_ASR, WS)
117
117
  visit(assignment)
118
118
  end
119
119
 
@@ -135,7 +135,6 @@ module Unparser
135
135
  def dispatch
136
136
  case children.length
137
137
  when 0
138
- write(K_NIL)
139
138
  when 1
140
139
  visit(first_child)
141
140
  else
@@ -7,8 +7,8 @@ module Unparser
7
7
  children :left, :right
8
8
 
9
9
  MAP = {
10
- :or => O_OR,
11
- :and => O_AND
10
+ :or => T_OR,
11
+ :and => T_AND
12
12
  }.freeze
13
13
 
14
14
  private
@@ -20,7 +20,7 @@ module Unparser
20
20
  visit(send)
21
21
  write(WS, K_DO)
22
22
  emit_block_arguments
23
- indented { emit_body }
23
+ emit_body
24
24
  k_end
25
25
  end
26
26
 
@@ -33,21 +33,11 @@ module Unparser
33
33
  def emit_block_arguments
34
34
  return if arguments.children.empty?
35
35
  ws
36
- parentheses(O_PIPE, O_PIPE) do
36
+ parentheses(T_PIPE, T_PIPE) do
37
37
  visit(arguments)
38
38
  end
39
39
  end
40
40
 
41
- # Emit body
42
- #
43
- # @return [undefined]
44
- #
45
- # @api private
46
- #
47
- def emit_body
48
- visit(body)
49
- end
50
-
51
41
  end # Block
52
42
  end # Emitter
53
43
  end # Unparser
@@ -14,7 +14,7 @@ module Unparser
14
14
  # @api private
15
15
  #
16
16
  def dispatch
17
- write(O_DCL)
17
+ write(T_DCL)
18
18
  end
19
19
 
20
20
  end # CBase
@@ -31,7 +31,7 @@ module Unparser
31
31
  #
32
32
  def emit_superclass
33
33
  return unless superclass
34
- write(WS, O_LT, WS)
34
+ write(WS, T_LT, WS)
35
35
  visit(superclass)
36
36
  end
37
37
 
@@ -51,7 +51,7 @@ module Unparser
51
51
  # @api private
52
52
  #
53
53
  def dispatch
54
- write(K_CLASS, WS, O_DLT, WS)
54
+ write(K_CLASS, WS, T_DLT, WS)
55
55
  visit(object)
56
56
  emit_body
57
57
  k_end
@@ -37,16 +37,6 @@ module Unparser
37
37
  k_end
38
38
  end
39
39
 
40
- # Emit body
41
- #
42
- # @return [undefined]
43
- #
44
- # @api private
45
- #
46
- def emit_body
47
- indented { visit(body) }
48
- end
49
-
50
40
  # Emit arguments
51
41
  #
52
42
  # @return [undefined]
@@ -98,7 +88,7 @@ module Unparser
98
88
  #
99
89
  def emit_name
100
90
  visit(subject)
101
- write(O_DOT, name.to_s)
91
+ write(T_DOT, name.to_s)
102
92
  end
103
93
 
104
94
  end # Singleton
@@ -0,0 +1,22 @@
1
+ module Unparser
2
+ class Emitter
3
+
4
+ # Emitter for artifical empty node
5
+ class Empty < self
6
+
7
+ handle :empty
8
+
9
+ private
10
+
11
+ # Perform dispatch
12
+ #
13
+ # @return [undefined]
14
+ #
15
+ # @api private
16
+ #
17
+ def dispatch
18
+ end
19
+
20
+ end
21
+ end
22
+ end # Unparser
@@ -16,7 +16,7 @@ module Unparser
16
16
  # @api private
17
17
  #
18
18
  def dispatch
19
- write(O_NEG)
19
+ write(T_NEG)
20
20
  visit(body)
21
21
  end
22
22
 
@@ -55,7 +55,7 @@ module Unparser
55
55
  # @api private
56
56
  #
57
57
  def emit_operator
58
- write(WS, children[1].to_s, O_ASN, WS)
58
+ write(WS, children[1].to_s, T_ASN, WS)
59
59
  end
60
60
 
61
61
  end # OpAssign
@@ -24,7 +24,7 @@ module Unparser
24
24
  def dispatch
25
25
  write(MAP.fetch(node.type), WS)
26
26
  visit(condition)
27
- indented { visit(body) }
27
+ emit_body
28
28
  k_end
29
29
  end
30
30
 
@@ -146,7 +146,7 @@ module Unparser
146
146
  def emit_receiver
147
147
  return unless first_child
148
148
  emit_unambiguous_receiver
149
- write(O_DOT)
149
+ write(T_DOT)
150
150
  end
151
151
 
152
152
  # Test for unary operator implemented as method
@@ -26,10 +26,10 @@ module Unparser
26
26
  #
27
27
  def emit_receiver
28
28
  emit_unambiguous_receiver
29
- write(O_DOT) if parentheses?
29
+ write(T_DOT) if parentheses?
30
30
  end
31
31
 
32
- # Emit operator
32
+ # Emit operator
33
33
  #
34
34
  # @return [undefined]
35
35
  #
@@ -70,7 +70,7 @@ module Unparser
70
70
  delimited([index])
71
71
  end
72
72
  return if assignment.empty? # mlhs
73
- write(WS, O_ASN, WS)
73
+ write(WS, T_ASN, WS)
74
74
  delimited(assignment)
75
75
  end
76
76
 
@@ -16,7 +16,7 @@ module Unparser
16
16
  # @api private
17
17
  #
18
18
  def dispatch
19
- write(O_SPLAT)
19
+ write(T_SPLAT)
20
20
  visit(subject) if subject
21
21
  end
22
22
  end
@@ -52,7 +52,7 @@ module Unparser
52
52
  return unless parent
53
53
  visit(parent)
54
54
  if parent.type != :cbase
55
- write(O_DCL)
55
+ write(T_DCL)
56
56
  end
57
57
  end
58
58
  end
@@ -6,7 +6,8 @@ describe Unparser, 'spike' do
6
6
  PARSERS = IceNine.deep_freeze(
7
7
  '1.8' => Parser::Ruby18,
8
8
  '1.9' => Parser::Ruby19,
9
- '2.0' => Parser::Ruby20
9
+ '2.0' => Parser::Ruby20,
10
+ '2.1' => Parser::Ruby21
10
11
  )
11
12
 
12
13
  RUBIES = PARSERS.keys.freeze
@@ -44,7 +45,7 @@ describe Unparser, 'spike' do
44
45
  def self.assert_generates(ast, expected, versions = RUBIES)
45
46
  with_versions(versions) do |version, parser|
46
47
  it "should generate #{ast.inspect} as #{expected} under #{version}" do
47
- unless ast.kind_of?(Parser::AST::Node)
48
+ if ast.kind_of?(String)
48
49
  ast = parser.parse(ast)
49
50
  end
50
51
  generated = Unparser.unparse(ast)
@@ -238,17 +239,50 @@ describe Unparser, 'spike' do
238
239
  assert_source 'a.foo'
239
240
  assert_source 'A.foo'
240
241
  assert_source 'foo[1]'
242
+ assert_source 'foo[*baz]'
241
243
  assert_source 'foo(1)'
242
244
  assert_source 'foo(bar)'
243
245
  assert_source 'foo(&block)'
244
246
  assert_source 'foo(*arguments)'
245
- assert_source "foo do\n nil\nend"
246
- assert_source "foo(1) do\n nil\nend"
247
- assert_source "foo do |a, b|\n nil\nend"
248
- assert_source "foo do |a, *b|\n nil\nend"
249
- assert_source "foo do |a, *|\n nil\nend"
250
- assert_source "foo do\n bar\nend"
251
- assert_source 'foo.bar(*args)'
247
+ assert_source 'foo(*arguments)'
248
+ assert_source <<-RUBY
249
+ foo do
250
+ end
251
+ RUBY
252
+
253
+ assert_source <<-RUBY
254
+ foo(1) do
255
+ nil
256
+ end
257
+ RUBY
258
+
259
+ assert_source <<-RUBY
260
+ foo do |a, b|
261
+ nil
262
+ end
263
+ RUBY
264
+
265
+ assert_source <<-RUBY
266
+ foo do |a, *b|
267
+ nil
268
+ end
269
+ RUBY
270
+
271
+ assert_source <<-RUBY
272
+ foo do |a, *|
273
+ nil
274
+ end
275
+ RUBY
276
+
277
+ assert_source <<-RUBY
278
+ foo do
279
+ bar
280
+ end
281
+ RUBY
282
+
283
+ assert_source <<-RUBY
284
+ foo.bar(*args)
285
+ RUBY
252
286
 
253
287
  assert_source <<-RUBY
254
288
  foo.bar do |(a, b), c|
@@ -285,7 +319,7 @@ describe Unparser, 'spike' do
285
319
  end
286
320
 
287
321
  context 'begin; end' do
288
- assert_generates s(:begin), 'nil'
322
+ assert_generates s(:begin), ''
289
323
 
290
324
  assert_source <<-RUBY
291
325
  foo
@@ -511,6 +545,11 @@ describe Unparser, 'spike' do
511
545
  context 'def' do
512
546
  context 'on instance' do
513
547
 
548
+ assert_source <<-RUBY
549
+ def foo
550
+ end
551
+ RUBY
552
+
514
553
  assert_source <<-RUBY
515
554
  def foo
516
555
  bar
@@ -547,6 +586,16 @@ describe Unparser, 'spike' do
547
586
  end
548
587
  RUBY
549
588
 
589
+ assert_source <<-RUBY, %w(2.1)
590
+ def foo(bar: 1)
591
+ end
592
+ RUBY
593
+
594
+ assert_source <<-RUBY, %w(2.0)
595
+ def foo(**bar)
596
+ end
597
+ RUBY
598
+
550
599
  assert_source <<-RUBY
551
600
  def foo(*)
552
601
  bar
@@ -601,16 +650,15 @@ describe Unparser, 'spike' do
601
650
  baz
602
651
  end
603
652
  RUBY
653
+ end
654
+
655
+ context 'on singleton' do
604
656
 
605
657
  assert_source <<-RUBY
606
658
  def self.foo
607
- bar
608
- baz
609
659
  end
610
660
  RUBY
611
- end
612
661
 
613
- context 'on singleton' do
614
662
 
615
663
  assert_source <<-RUBY
616
664
  def self.foo
@@ -618,6 +666,13 @@ describe Unparser, 'spike' do
618
666
  end
619
667
  RUBY
620
668
 
669
+ assert_source <<-RUBY
670
+ def self.foo
671
+ bar
672
+ baz
673
+ end
674
+ RUBY
675
+
621
676
  assert_source <<-RUBY
622
677
  def Foo.bar
623
678
  bar
@@ -745,6 +800,11 @@ describe Unparser, 'spike' do
745
800
  end
746
801
 
747
802
  context 'lambda' do
803
+ assert_source <<-RUBY
804
+ lambda do
805
+ end
806
+ RUBY
807
+
748
808
  assert_source <<-RUBY
749
809
  lambda do |a, b|
750
810
  a
@@ -897,6 +957,11 @@ describe Unparser, 'spike' do
897
957
  end
898
958
 
899
959
  context 'while' do
960
+ assert_source <<-RUBY
961
+ while false
962
+ end
963
+ RUBY
964
+
900
965
  assert_source <<-RUBY
901
966
  while false
902
967
  3
@@ -905,6 +970,11 @@ describe Unparser, 'spike' do
905
970
  end
906
971
 
907
972
  context 'until' do
973
+ assert_source <<-RUBY
974
+ until false
975
+ end
976
+ RUBY
977
+
908
978
  assert_source <<-RUBY
909
979
  until false
910
980
  3
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'unparser'
2
2
  require 'devtools/spec_helper'
3
3
 
4
+ require 'parser/ruby21'
5
+
4
6
  module SpecHelper
5
7
  def s(type, *children)
6
8
  Parser::AST::Node.new(type, children)
data/unparser.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'unparser'
5
- s.version = '0.0.2'
5
+ s.version = '0.0.3'
6
6
 
7
7
  s.authors = ['Markus Schirp']
8
8
  s.email = 'mbj@schir-dso.com'
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.2
4
+ version: 0.0.3
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-06-17 00:00:00.000000000 Z
11
+ date: 2013-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -120,6 +120,7 @@ files:
120
120
  - lib/unparser/emitter/class.rb
121
121
  - lib/unparser/emitter/def.rb
122
122
  - lib/unparser/emitter/defined.rb
123
+ - lib/unparser/emitter/empty.rb
123
124
  - lib/unparser/emitter/for.rb
124
125
  - lib/unparser/emitter/hookexe.rb
125
126
  - lib/unparser/emitter/if.rb