unparser 0.4.9 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/bin/unparser +1 -1
  3. data/lib/unparser.rb +98 -61
  4. data/lib/unparser/ast.rb +0 -1
  5. data/lib/unparser/ast/local_variable_scope.rb +6 -76
  6. data/lib/unparser/buffer.rb +19 -16
  7. data/lib/unparser/cli.rb +26 -39
  8. data/lib/unparser/color.rb +0 -3
  9. data/lib/unparser/comments.rb +0 -26
  10. data/lib/unparser/constants.rb +4 -53
  11. data/lib/unparser/diff.rb +0 -17
  12. data/lib/unparser/dsl.rb +0 -32
  13. data/lib/unparser/emitter.rb +23 -425
  14. data/lib/unparser/emitter/alias.rb +2 -8
  15. data/lib/unparser/emitter/args.rb +45 -0
  16. data/lib/unparser/emitter/argument.rb +8 -166
  17. data/lib/unparser/emitter/array.rb +27 -0
  18. data/lib/unparser/emitter/array_pattern.rb +29 -0
  19. data/lib/unparser/emitter/assignment.rb +36 -127
  20. data/lib/unparser/emitter/begin.rb +9 -84
  21. data/lib/unparser/emitter/binary.rb +7 -20
  22. data/lib/unparser/emitter/block.rb +57 -41
  23. data/lib/unparser/emitter/case.rb +6 -48
  24. data/lib/unparser/emitter/case_guard.rb +27 -0
  25. data/lib/unparser/emitter/case_match.rb +40 -0
  26. data/lib/unparser/emitter/cbase.rb +1 -3
  27. data/lib/unparser/emitter/class.rb +6 -26
  28. data/lib/unparser/emitter/const_pattern.rb +24 -0
  29. data/lib/unparser/emitter/def.rb +7 -51
  30. data/lib/unparser/emitter/defined.rb +2 -12
  31. data/lib/unparser/emitter/dstr.rb +22 -0
  32. data/lib/unparser/emitter/dsym.rb +41 -0
  33. data/lib/unparser/emitter/flipflop.rb +11 -10
  34. data/lib/unparser/emitter/float.rb +29 -0
  35. data/lib/unparser/emitter/flow_modifier.rb +8 -55
  36. data/lib/unparser/emitter/for.rb +5 -19
  37. data/lib/unparser/emitter/hash.rb +74 -0
  38. data/lib/unparser/emitter/hash_pattern.rb +67 -0
  39. data/lib/unparser/emitter/hookexe.rb +5 -11
  40. data/lib/unparser/emitter/if.rb +9 -73
  41. data/lib/unparser/emitter/in_match.rb +21 -0
  42. data/lib/unparser/emitter/in_pattern.rb +34 -0
  43. data/lib/unparser/emitter/index.rb +21 -88
  44. data/lib/unparser/emitter/kwbegin.rb +31 -0
  45. data/lib/unparser/emitter/lambda.rb +0 -8
  46. data/lib/unparser/emitter/masgn.rb +20 -0
  47. data/lib/unparser/emitter/match.rb +3 -17
  48. data/lib/unparser/emitter/match_alt.rb +23 -0
  49. data/lib/unparser/emitter/match_as.rb +21 -0
  50. data/lib/unparser/emitter/match_rest.rb +26 -0
  51. data/lib/unparser/emitter/match_var.rb +19 -0
  52. data/lib/unparser/emitter/mlhs.rb +40 -0
  53. data/lib/unparser/emitter/module.rb +3 -9
  54. data/lib/unparser/emitter/op_assign.rb +12 -27
  55. data/lib/unparser/emitter/pin.rb +19 -0
  56. data/lib/unparser/emitter/primitive.rb +93 -0
  57. data/lib/unparser/emitter/range.rb +35 -0
  58. data/lib/unparser/emitter/regexp.rb +35 -0
  59. data/lib/unparser/emitter/repetition.rb +17 -57
  60. data/lib/unparser/emitter/rescue.rb +1 -97
  61. data/lib/unparser/emitter/root.rb +17 -1
  62. data/lib/unparser/emitter/send.rb +10 -219
  63. data/lib/unparser/emitter/simple.rb +33 -0
  64. data/lib/unparser/emitter/splat.rb +2 -18
  65. data/lib/unparser/emitter/super.rb +1 -29
  66. data/lib/unparser/emitter/undef.rb +1 -9
  67. data/lib/unparser/emitter/variable.rb +1 -31
  68. data/lib/unparser/emitter/xstr.rb +72 -0
  69. data/lib/unparser/emitter/yield.rb +1 -9
  70. data/lib/unparser/generation.rb +250 -0
  71. data/lib/unparser/node_details.rb +21 -0
  72. data/lib/unparser/node_details/send.rb +62 -0
  73. data/lib/unparser/node_helpers.rb +45 -6
  74. data/lib/unparser/validation.rb +37 -35
  75. data/lib/unparser/writer.rb +15 -0
  76. data/lib/unparser/writer/binary.rb +99 -0
  77. data/lib/unparser/writer/dynamic_string.rb +229 -0
  78. data/lib/unparser/writer/resbody.rb +40 -0
  79. data/lib/unparser/writer/rescue.rb +39 -0
  80. data/lib/unparser/writer/send.rb +124 -0
  81. data/lib/unparser/{emitter → writer}/send/attribute_assignment.rb +11 -26
  82. data/lib/unparser/writer/send/binary.rb +27 -0
  83. data/lib/unparser/writer/send/conditional.rb +25 -0
  84. data/lib/unparser/writer/send/regular.rb +33 -0
  85. data/lib/unparser/{emitter → writer}/send/unary.rb +10 -17
  86. metadata +63 -31
  87. data/lib/unparser/emitter/empty.rb +0 -23
  88. data/lib/unparser/emitter/ensure.rb +0 -37
  89. data/lib/unparser/emitter/literal.rb +0 -10
  90. data/lib/unparser/emitter/literal/array.rb +0 -29
  91. data/lib/unparser/emitter/literal/dynamic.rb +0 -53
  92. data/lib/unparser/emitter/literal/dynamic_body.rb +0 -132
  93. data/lib/unparser/emitter/literal/execute_string.rb +0 -38
  94. data/lib/unparser/emitter/literal/hash.rb +0 -156
  95. data/lib/unparser/emitter/literal/primitive.rb +0 -145
  96. data/lib/unparser/emitter/literal/range.rb +0 -36
  97. data/lib/unparser/emitter/literal/regexp.rb +0 -114
  98. data/lib/unparser/emitter/literal/singleton.rb +0 -26
  99. data/lib/unparser/emitter/meta.rb +0 -16
  100. data/lib/unparser/emitter/redo.rb +0 -25
  101. data/lib/unparser/emitter/resbody.rb +0 -76
  102. data/lib/unparser/emitter/retry.rb +0 -25
  103. data/lib/unparser/emitter/send/binary.rb +0 -57
  104. data/lib/unparser/emitter/send/conditional.rb +0 -40
  105. data/lib/unparser/emitter/send/regular.rb +0 -40
  106. data/lib/unparser/preprocessor.rb +0 -159
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unparser
4
+ module Writer
5
+ # Writer for rescue bodies
6
+ class Resbody
7
+ include Writer
8
+
9
+ children :exception, :assignment, :body
10
+
11
+ def emit_postcontrol
12
+ write(' rescue ')
13
+ visit(body)
14
+ end
15
+
16
+ def emit_regular
17
+ write('rescue')
18
+ emit_exception
19
+ emit_assignment
20
+ emit_optional_body(body)
21
+ end
22
+
23
+ private
24
+
25
+ def emit_exception
26
+ return unless exception
27
+
28
+ ws
29
+ delimited(exception.children)
30
+ end
31
+
32
+ def emit_assignment
33
+ return unless assignment
34
+
35
+ write(' => ')
36
+ visit(assignment)
37
+ end
38
+ end # Resbody
39
+ end # Writer
40
+ end # Unparser
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unparser
4
+ module Writer
5
+ class Rescue
6
+ include Writer, Adamantium::Flat
7
+
8
+ children :body, :rescue_body
9
+
10
+ define_group :rescue_bodies, 1..-2
11
+
12
+ def emit_regular
13
+ emit_optional_body(body)
14
+
15
+ rescue_bodies.each(&method(:emit_rescue_body))
16
+
17
+ if else_node
18
+ write('else')
19
+ emit_body(else_node)
20
+ end
21
+ end
22
+
23
+ def emit_postcontrol
24
+ visit(body)
25
+ writer_with(Resbody, rescue_body).emit_postcontrol
26
+ end
27
+
28
+ private
29
+
30
+ def else_node
31
+ children.last
32
+ end
33
+
34
+ def emit_rescue_body(node)
35
+ writer_with(Resbody, node).emit_regular
36
+ end
37
+ end # Rescue
38
+ end # Writer
39
+ end # Unparser
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unparser
4
+ module Writer
5
+ # Writer for send
6
+ class Send
7
+ include Writer, Adamantium::Flat, Constants, Generation
8
+
9
+ INDEX_ASSIGN = :'[]='
10
+ INDEX_REFERENCE = :'[]'
11
+
12
+ OPERATORS = {
13
+ csend: '&.',
14
+ send: '.'
15
+ }.freeze
16
+
17
+ private_constant(*constants(false))
18
+
19
+ children :receiver, :selector
20
+
21
+ def dispatch
22
+ effective_writer.dispatch
23
+ end
24
+
25
+ def emit_mlhs
26
+ effective_writer.emit_send_mlhs
27
+ end
28
+
29
+ def emit_selector
30
+ write(details.string_selector)
31
+ end
32
+
33
+ def emit_heredoc_reminders
34
+ emitter(receiver).emit_heredoc_reminders if receiver
35
+ arguments.each(&method(:emit_heredoc_reminder))
36
+ end
37
+
38
+ private
39
+
40
+ def effective_writer
41
+ writer_with(effective_writer_class, node)
42
+ end
43
+ memoize :effective_writer
44
+
45
+ def effective_writer_class
46
+ if details.binary_syntax_allowed?
47
+ Binary
48
+ elsif details.selector_unary_operator?
49
+ Unary
50
+ elsif write_as_attribute_assignment?
51
+ AttributeAssignment
52
+ else
53
+ Regular
54
+ end
55
+ end
56
+
57
+ def write_as_attribute_assignment?
58
+ details.assignment_operator?
59
+ end
60
+
61
+ def emit_operator
62
+ write(OPERATORS.fetch(node.type))
63
+ end
64
+
65
+ def emit_arguments
66
+ if arguments.empty?
67
+ write('()') if receiver.nil? && avoid_clash?
68
+ else
69
+ emit_normal_arguments
70
+ end
71
+ end
72
+
73
+ def arguments
74
+ details.arguments
75
+ end
76
+
77
+ def emit_normal_arguments
78
+ parentheses do
79
+ arguments.each_with_index do |node, index|
80
+ write(', ') unless index.zero?
81
+ emit_argument(node, index.succ.equal?(arguments.length))
82
+ end
83
+ end
84
+ end
85
+
86
+ def emit_argument(argument, last)
87
+ if n_hash?(argument) && last
88
+ writer_with(Emitter::Hash, argument).emit_last_argument_hash
89
+ else
90
+ visit(argument)
91
+ end
92
+ end
93
+
94
+ def emit_heredoc_reminder(argument)
95
+ emitter(argument).emit_heredoc_reminders
96
+ end
97
+
98
+ def avoid_clash?
99
+ local_variable_clash? || parses_as_constant?
100
+ end
101
+
102
+ def local_variable_clash?
103
+ local_variable_scope.local_variable_defined_for_node?(node, selector)
104
+ end
105
+
106
+ def parses_as_constant?
107
+ n_const?(Unparser.parse(selector.to_s))
108
+ end
109
+
110
+ def details
111
+ NodeDetails::Send.new(node)
112
+ end
113
+ memoize :details
114
+
115
+ def emit_send_regular(node)
116
+ if n_send?(node)
117
+ writer_with(Regular, node).dispatch
118
+ else
119
+ visit(node)
120
+ end
121
+ end
122
+ end # Send
123
+ end # Writer
124
+ end # Unparser
@@ -1,24 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Unparser
4
- class Emitter
4
+ module Writer
5
5
  class Send
6
- # Emitter for send as attribute assignment
6
+ # Writer for send as attribute assignment
7
7
  class AttributeAssignment < self
8
- include Unterminated
9
-
10
8
  children :receiver, :selector, :first_argument
11
9
 
12
- # Perform regular dispatch
13
- #
14
- # @return [undefined]
15
- #
16
- # @api private
17
- #
18
10
  def dispatch
19
11
  emit_receiver
20
12
  emit_attribute
21
- write(T_ASN)
13
+ write('=')
22
14
 
23
15
  if arguments.one?
24
16
  visit(first_argument)
@@ -27,29 +19,22 @@ module Unparser
27
19
  end
28
20
  end
29
21
 
22
+ def emit_send_mlhs
23
+ emit_receiver
24
+ write(details.non_assignment_selector)
25
+ end
26
+
30
27
  private
31
28
 
32
- # Emit receiver
33
- #
34
- # @return [Parser::AST::Node]
35
- #
36
- # @api private
37
- #
38
29
  def emit_receiver
39
30
  visit(receiver)
40
- write(T_DOT)
31
+ emit_operator
41
32
  end
42
33
 
43
- # Emit attribute
44
- #
45
- # @return [undefined]
46
- #
47
- # @api private
48
- #
49
34
  def emit_attribute
50
- write(non_assignment_selector)
35
+ write(details.non_assignment_selector)
51
36
  end
52
37
  end # AttributeAssignment
53
38
  end # Send
54
- end # Emitter
39
+ end # Writer
55
40
  end # Unparser
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unparser
4
+ module Writer
5
+ class Send
6
+ # Writer for binary sends
7
+ class Binary < self
8
+ def dispatch
9
+ visit(receiver)
10
+ emit_operator
11
+ emit_right
12
+ end
13
+
14
+ private
15
+
16
+ def emit_operator
17
+ write(' ', details.string_selector, ' ')
18
+ end
19
+
20
+ def emit_right
21
+ emit_send_regular(children.fetch(2))
22
+ end
23
+
24
+ end # Binary
25
+ end # Send
26
+ end # Writer
27
+ end # Unparser
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unparser
4
+ module Writer
5
+ class Send
6
+ # Writer for "conditional" receiver&.selector(arguments...) case
7
+ class Conditional < self
8
+
9
+ private
10
+
11
+ def dispatch
12
+ emit_receiver
13
+ emit_selector
14
+ emit_arguments
15
+ end
16
+
17
+ def emit_receiver
18
+ visit(receiver)
19
+ write('&.')
20
+ end
21
+
22
+ end # Regular
23
+ end # Send
24
+ end # Writer
25
+ end # Unparser
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unparser
4
+ module Writer
5
+ class Send
6
+ # Writer for "regular" receiver.selector(arguments...) case
7
+ class Regular < self
8
+ def dispatch
9
+ emit_receiver
10
+ emit_selector
11
+ emit_arguments
12
+ end
13
+
14
+ def emit_send_mlhs
15
+ dispatch
16
+ end
17
+
18
+ def emit_arguments_without_heredoc_body
19
+ emit_normal_arguments if arguments.any?
20
+ end
21
+
22
+ def emit_receiver
23
+ return unless receiver
24
+
25
+ emit_send_regular(receiver)
26
+
27
+ emit_operator
28
+ end
29
+
30
+ end # Regular
31
+ end # Send
32
+ end # Writer
33
+ end # Unparser
@@ -1,36 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Unparser
4
- class Emitter
4
+ module Writer
5
5
  class Send
6
- # Emitter for unary sends
6
+ # Writer for unary sends
7
7
  class Unary < self
8
- include Unterminated
9
-
10
- private
11
-
12
- MAP = IceNine.deep_freeze(
8
+ MAP = {
13
9
  '-@': '-',
14
10
  '+@': '+'
15
- )
11
+ }.freeze
12
+
13
+ private_constant(*constants(false))
16
14
 
17
- # Perform dispatch
18
- #
19
- # @return [undefined]
20
- #
21
- # @api private
22
- #
23
15
  def dispatch
24
16
  name = selector
17
+
25
18
  write(MAP.fetch(name, name).to_s)
26
- if receiver.type.equal?(:int) && selector.equal?(:'+@')
19
+
20
+ if n_int?(receiver) && selector.equal?(:'+@')
27
21
  write('+')
28
22
  end
29
23
 
30
24
  visit(receiver)
31
25
  end
32
-
33
26
  end # Unary
34
27
  end # Send
35
- end # Emitter
28
+ end # Writer
36
29
  end # Unparser
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.4.9
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-10 00:00:00.000000000 Z
11
+ date: 2020-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: abstract_type
@@ -142,28 +142,28 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 0.9.9
145
+ version: 0.9.13
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 0.9.9
152
+ version: 0.9.13
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: mutant-rspec
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 0.9.9
159
+ version: 0.9.13
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 0.9.9
166
+ version: 0.9.13
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: rspec
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -212,14 +212,28 @@ dependencies:
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: 0.79.0
215
+ version: 0.92.0
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: 0.79.0
222
+ version: 0.92.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: rubocop-packaging
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: 0.5.0
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: 0.5.0
223
237
  description: Generate equivalent source for parser gem AST nodes
224
238
  email: mbj@schirp-dso.com
225
239
  executables:
@@ -242,60 +256,78 @@ files:
242
256
  - lib/unparser/dsl.rb
243
257
  - lib/unparser/emitter.rb
244
258
  - lib/unparser/emitter/alias.rb
259
+ - lib/unparser/emitter/args.rb
245
260
  - lib/unparser/emitter/argument.rb
261
+ - lib/unparser/emitter/array.rb
262
+ - lib/unparser/emitter/array_pattern.rb
246
263
  - lib/unparser/emitter/assignment.rb
247
264
  - lib/unparser/emitter/begin.rb
248
265
  - lib/unparser/emitter/binary.rb
249
266
  - lib/unparser/emitter/block.rb
250
267
  - lib/unparser/emitter/case.rb
268
+ - lib/unparser/emitter/case_guard.rb
269
+ - lib/unparser/emitter/case_match.rb
251
270
  - lib/unparser/emitter/cbase.rb
252
271
  - lib/unparser/emitter/class.rb
272
+ - lib/unparser/emitter/const_pattern.rb
253
273
  - lib/unparser/emitter/def.rb
254
274
  - lib/unparser/emitter/defined.rb
255
- - lib/unparser/emitter/empty.rb
256
- - lib/unparser/emitter/ensure.rb
275
+ - lib/unparser/emitter/dstr.rb
276
+ - lib/unparser/emitter/dsym.rb
257
277
  - lib/unparser/emitter/flipflop.rb
278
+ - lib/unparser/emitter/float.rb
258
279
  - lib/unparser/emitter/flow_modifier.rb
259
280
  - lib/unparser/emitter/for.rb
281
+ - lib/unparser/emitter/hash.rb
282
+ - lib/unparser/emitter/hash_pattern.rb
260
283
  - lib/unparser/emitter/hookexe.rb
261
284
  - lib/unparser/emitter/if.rb
285
+ - lib/unparser/emitter/in_match.rb
286
+ - lib/unparser/emitter/in_pattern.rb
262
287
  - lib/unparser/emitter/index.rb
288
+ - lib/unparser/emitter/kwbegin.rb
263
289
  - lib/unparser/emitter/lambda.rb
264
- - lib/unparser/emitter/literal.rb
265
- - lib/unparser/emitter/literal/array.rb
266
- - lib/unparser/emitter/literal/dynamic.rb
267
- - lib/unparser/emitter/literal/dynamic_body.rb
268
- - lib/unparser/emitter/literal/execute_string.rb
269
- - lib/unparser/emitter/literal/hash.rb
270
- - lib/unparser/emitter/literal/primitive.rb
271
- - lib/unparser/emitter/literal/range.rb
272
- - lib/unparser/emitter/literal/regexp.rb
273
- - lib/unparser/emitter/literal/singleton.rb
290
+ - lib/unparser/emitter/masgn.rb
274
291
  - lib/unparser/emitter/match.rb
275
- - lib/unparser/emitter/meta.rb
292
+ - lib/unparser/emitter/match_alt.rb
293
+ - lib/unparser/emitter/match_as.rb
294
+ - lib/unparser/emitter/match_rest.rb
295
+ - lib/unparser/emitter/match_var.rb
296
+ - lib/unparser/emitter/mlhs.rb
276
297
  - lib/unparser/emitter/module.rb
277
298
  - lib/unparser/emitter/op_assign.rb
278
- - lib/unparser/emitter/redo.rb
299
+ - lib/unparser/emitter/pin.rb
300
+ - lib/unparser/emitter/primitive.rb
301
+ - lib/unparser/emitter/range.rb
302
+ - lib/unparser/emitter/regexp.rb
279
303
  - lib/unparser/emitter/repetition.rb
280
- - lib/unparser/emitter/resbody.rb
281
304
  - lib/unparser/emitter/rescue.rb
282
- - lib/unparser/emitter/retry.rb
283
305
  - lib/unparser/emitter/root.rb
284
306
  - lib/unparser/emitter/send.rb
285
- - lib/unparser/emitter/send/attribute_assignment.rb
286
- - lib/unparser/emitter/send/binary.rb
287
- - lib/unparser/emitter/send/conditional.rb
288
- - lib/unparser/emitter/send/regular.rb
289
- - lib/unparser/emitter/send/unary.rb
307
+ - lib/unparser/emitter/simple.rb
290
308
  - lib/unparser/emitter/splat.rb
291
309
  - lib/unparser/emitter/super.rb
292
310
  - lib/unparser/emitter/undef.rb
293
311
  - lib/unparser/emitter/variable.rb
312
+ - lib/unparser/emitter/xstr.rb
294
313
  - lib/unparser/emitter/yield.rb
295
314
  - lib/unparser/finalize.rb
315
+ - lib/unparser/generation.rb
316
+ - lib/unparser/node_details.rb
317
+ - lib/unparser/node_details/send.rb
296
318
  - lib/unparser/node_helpers.rb
297
- - lib/unparser/preprocessor.rb
298
319
  - lib/unparser/validation.rb
320
+ - lib/unparser/writer.rb
321
+ - lib/unparser/writer/binary.rb
322
+ - lib/unparser/writer/dynamic_string.rb
323
+ - lib/unparser/writer/resbody.rb
324
+ - lib/unparser/writer/rescue.rb
325
+ - lib/unparser/writer/send.rb
326
+ - lib/unparser/writer/send/attribute_assignment.rb
327
+ - lib/unparser/writer/send/binary.rb
328
+ - lib/unparser/writer/send/conditional.rb
329
+ - lib/unparser/writer/send/regular.rb
330
+ - lib/unparser/writer/send/unary.rb
299
331
  homepage: http://github.com/mbj/unparser
300
332
  licenses:
301
333
  - MIT
@@ -315,7 +347,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
315
347
  - !ruby/object:Gem::Version
316
348
  version: '0'
317
349
  requirements: []
318
- rubygems_version: 3.0.3
350
+ rubygems_version: 3.2.0.rc.1
319
351
  signing_key:
320
352
  specification_version: 4
321
353
  summary: Generate equivalent source for parser gem AST nodes