unparser 0.6.7 → 0.9.0

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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -10
  3. data/lib/unparser/adamantium.rb +3 -1
  4. data/lib/unparser/anima.rb +12 -3
  5. data/lib/unparser/ast/local_variable_scope.rb +29 -26
  6. data/lib/unparser/ast.rb +32 -49
  7. data/lib/unparser/buffer.rb +44 -2
  8. data/lib/unparser/cli.rb +48 -11
  9. data/lib/unparser/color.rb +9 -1
  10. data/lib/unparser/comments.rb +2 -2
  11. data/lib/unparser/diff.rb +8 -1
  12. data/lib/unparser/either.rb +13 -11
  13. data/lib/unparser/emitter/args.rb +5 -1
  14. data/lib/unparser/emitter/array.rb +0 -4
  15. data/lib/unparser/emitter/array_pattern.rb +1 -9
  16. data/lib/unparser/emitter/assignment.rb +17 -8
  17. data/lib/unparser/emitter/begin.rb +0 -6
  18. data/lib/unparser/emitter/binary.rb +1 -1
  19. data/lib/unparser/emitter/block.rb +18 -7
  20. data/lib/unparser/emitter/def.rb +1 -1
  21. data/lib/unparser/emitter/dstr.rb +6 -5
  22. data/lib/unparser/emitter/dsym.rb +1 -1
  23. data/lib/unparser/emitter/ensure.rb +16 -0
  24. data/lib/unparser/emitter/flipflop.rb +7 -2
  25. data/lib/unparser/emitter/flow_modifier.rb +1 -7
  26. data/lib/unparser/emitter/for.rb +1 -1
  27. data/lib/unparser/emitter/hash.rb +0 -8
  28. data/lib/unparser/emitter/hash_pattern.rb +1 -1
  29. data/lib/unparser/emitter/in_pattern.rb +9 -1
  30. data/lib/unparser/emitter/index.rb +0 -4
  31. data/lib/unparser/emitter/kwbegin.rb +1 -1
  32. data/lib/unparser/emitter/match_pattern.rb +7 -11
  33. data/lib/unparser/emitter/match_pattern_p.rb +6 -1
  34. data/lib/unparser/emitter/mlhs.rb +7 -1
  35. data/lib/unparser/emitter/op_assign.rb +0 -5
  36. data/lib/unparser/emitter/pair.rb +31 -5
  37. data/lib/unparser/emitter/primitive.rb +4 -6
  38. data/lib/unparser/emitter/range.rb +23 -2
  39. data/lib/unparser/emitter/regexp.rb +5 -17
  40. data/lib/unparser/emitter/rescue.rb +7 -1
  41. data/lib/unparser/emitter/root.rb +2 -9
  42. data/lib/unparser/emitter/send.rb +1 -5
  43. data/lib/unparser/emitter/string.rb +31 -0
  44. data/lib/unparser/emitter/xstr.rb +8 -1
  45. data/lib/unparser/emitter.rb +11 -11
  46. data/lib/unparser/equalizer.rb +105 -71
  47. data/lib/unparser/generation.rb +33 -29
  48. data/lib/unparser/node_details/send.rb +1 -0
  49. data/lib/unparser/node_details.rb +8 -1
  50. data/lib/unparser/node_helpers.rb +19 -9
  51. data/lib/unparser/util.rb +24 -0
  52. data/lib/unparser/validation.rb +70 -28
  53. data/lib/unparser/writer/array.rb +51 -0
  54. data/lib/unparser/writer/binary.rb +8 -4
  55. data/lib/unparser/writer/dynamic_string.rb +130 -138
  56. data/lib/unparser/writer/regexp.rb +101 -0
  57. data/lib/unparser/writer/resbody.rb +37 -3
  58. data/lib/unparser/writer/rescue.rb +3 -7
  59. data/lib/unparser/writer/send/unary.rb +9 -4
  60. data/lib/unparser/writer/send.rb +8 -14
  61. data/lib/unparser/writer.rb +31 -1
  62. data/lib/unparser.rb +157 -41
  63. metadata +82 -33
  64. data/lib/unparser/concord.rb +0 -114
metadata CHANGED
@@ -1,113 +1,158 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-01-08 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: diff-lcs
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '1.6'
19
+ - - "<"
18
20
  - !ruby/object:Gem::Version
19
- version: '1.3'
21
+ version: '3'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
- - - "~>"
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '1.6'
29
+ - - "<"
25
30
  - !ruby/object:Gem::Version
26
- version: '1.3'
31
+ version: '3'
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: parser
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
36
  - - ">="
32
37
  - !ruby/object:Gem::Version
33
- version: 3.2.0
38
+ version: 3.3.0
34
39
  type: :runtime
35
40
  prerelease: false
36
41
  version_requirements: !ruby/object:Gem::Requirement
37
42
  requirements:
38
43
  - - ">="
39
44
  - !ruby/object:Gem::Version
40
- version: 3.2.0
45
+ version: 3.3.0
41
46
  - !ruby/object:Gem::Dependency
42
- name: mutant
47
+ name: prism
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.5.1
53
+ type: :runtime
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.5.1
60
+ - !ruby/object:Gem::Dependency
61
+ name: benchmark
43
62
  requirement: !ruby/object:Gem::Requirement
44
63
  requirements:
45
64
  - - "~>"
46
65
  - !ruby/object:Gem::Version
47
- version: 0.11.18
66
+ version: 0.5.0
48
67
  type: :development
49
68
  prerelease: false
50
69
  version_requirements: !ruby/object:Gem::Requirement
51
70
  requirements:
52
71
  - - "~>"
53
72
  - !ruby/object:Gem::Version
54
- version: 0.11.18
73
+ version: 0.5.0
74
+ - !ruby/object:Gem::Dependency
75
+ name: mutant
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.14.2
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 0.14.2
55
88
  - !ruby/object:Gem::Dependency
56
89
  name: mutant-rspec
57
90
  requirement: !ruby/object:Gem::Requirement
58
91
  requirements:
59
- - - "~>"
92
+ - - ">="
60
93
  - !ruby/object:Gem::Version
61
- version: 0.11.18
94
+ version: 0.14.2
62
95
  type: :development
63
96
  prerelease: false
64
97
  version_requirements: !ruby/object:Gem::Requirement
65
98
  requirements:
66
- - - "~>"
99
+ - - ">="
67
100
  - !ruby/object:Gem::Version
68
- version: 0.11.18
101
+ version: 0.14.2
69
102
  - !ruby/object:Gem::Dependency
70
103
  name: rspec
71
104
  requirement: !ruby/object:Gem::Requirement
72
105
  requirements:
73
- - - "~>"
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '3.13'
109
+ - - "<"
74
110
  - !ruby/object:Gem::Version
75
- version: '3.9'
111
+ version: '5'
76
112
  type: :development
77
113
  prerelease: false
78
114
  version_requirements: !ruby/object:Gem::Requirement
79
115
  requirements:
80
- - - "~>"
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '3.13'
119
+ - - "<"
81
120
  - !ruby/object:Gem::Version
82
- version: '3.9'
121
+ version: '5'
83
122
  - !ruby/object:Gem::Dependency
84
123
  name: rspec-core
85
124
  requirement: !ruby/object:Gem::Requirement
86
125
  requirements:
87
- - - "~>"
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '3.13'
129
+ - - "<"
88
130
  - !ruby/object:Gem::Version
89
- version: '3.9'
131
+ version: '5'
90
132
  type: :development
91
133
  prerelease: false
92
134
  version_requirements: !ruby/object:Gem::Requirement
93
135
  requirements:
94
- - - "~>"
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '3.13'
139
+ - - "<"
95
140
  - !ruby/object:Gem::Version
96
- version: '3.9'
141
+ version: '5'
97
142
  - !ruby/object:Gem::Dependency
98
143
  name: rspec-its
99
144
  requirement: !ruby/object:Gem::Requirement
100
145
  requirements:
101
146
  - - "~>"
102
147
  - !ruby/object:Gem::Version
103
- version: 1.3.0
148
+ version: '2.0'
104
149
  type: :development
105
150
  prerelease: false
106
151
  version_requirements: !ruby/object:Gem::Requirement
107
152
  requirements:
108
153
  - - "~>"
109
154
  - !ruby/object:Gem::Version
110
- version: 1.3.0
155
+ version: '2.0'
111
156
  - !ruby/object:Gem::Dependency
112
157
  name: rubocop
113
158
  requirement: !ruby/object:Gem::Requirement
@@ -159,7 +204,6 @@ files:
159
204
  - lib/unparser/cli.rb
160
205
  - lib/unparser/color.rb
161
206
  - lib/unparser/comments.rb
162
- - lib/unparser/concord.rb
163
207
  - lib/unparser/constants.rb
164
208
  - lib/unparser/diff.rb
165
209
  - lib/unparser/dsl.rb
@@ -184,6 +228,7 @@ files:
184
228
  - lib/unparser/emitter/defined.rb
185
229
  - lib/unparser/emitter/dstr.rb
186
230
  - lib/unparser/emitter/dsym.rb
231
+ - lib/unparser/emitter/ensure.rb
187
232
  - lib/unparser/emitter/find_pattern.rb
188
233
  - lib/unparser/emitter/flipflop.rb
189
234
  - lib/unparser/emitter/float.rb
@@ -221,6 +266,7 @@ files:
221
266
  - lib/unparser/emitter/send.rb
222
267
  - lib/unparser/emitter/simple.rb
223
268
  - lib/unparser/emitter/splat.rb
269
+ - lib/unparser/emitter/string.rb
224
270
  - lib/unparser/emitter/super.rb
225
271
  - lib/unparser/emitter/undef.rb
226
272
  - lib/unparser/emitter/variable.rb
@@ -232,10 +278,13 @@ files:
232
278
  - lib/unparser/node_details.rb
233
279
  - lib/unparser/node_details/send.rb
234
280
  - lib/unparser/node_helpers.rb
281
+ - lib/unparser/util.rb
235
282
  - lib/unparser/validation.rb
236
283
  - lib/unparser/writer.rb
284
+ - lib/unparser/writer/array.rb
237
285
  - lib/unparser/writer/binary.rb
238
286
  - lib/unparser/writer/dynamic_string.rb
287
+ - lib/unparser/writer/regexp.rb
239
288
  - lib/unparser/writer/resbody.rb
240
289
  - lib/unparser/writer/rescue.rb
241
290
  - lib/unparser/writer/send.rb
@@ -244,15 +293,16 @@ files:
244
293
  - lib/unparser/writer/send/conditional.rb
245
294
  - lib/unparser/writer/send/regular.rb
246
295
  - lib/unparser/writer/send/unary.rb
247
- homepage: http://github.com/mbj/unparser
296
+ homepage: https://github.com/mbj/unparser
248
297
  licenses:
249
298
  - MIT
250
299
  metadata:
300
+ homepage_uri: https://github.com/mbj/unparser
251
301
  bug_tracker_uri: https://github.com/mbj/unparser/issues
252
- changelog_uri: https://github.com/mbj/unparser/blob/master/Changelog.md
302
+ changelog_uri: https://github.com/mbj/unparser/blob/main/Changelog.md
253
303
  funding_uri: https://github.com/sponsors/mbj
304
+ source_code_uri: https://github.com/mbj/unparser
254
305
  rubygems_mfa_required: 'true'
255
- post_install_message:
256
306
  rdoc_options: []
257
307
  require_paths:
258
308
  - lib
@@ -260,15 +310,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
260
310
  requirements:
261
311
  - - ">="
262
312
  - !ruby/object:Gem::Version
263
- version: '2.7'
313
+ version: '3.3'
264
314
  required_rubygems_version: !ruby/object:Gem::Requirement
265
315
  requirements:
266
316
  - - ">="
267
317
  - !ruby/object:Gem::Version
268
318
  version: '0'
269
319
  requirements: []
270
- rubygems_version: 3.3.26
271
- signing_key:
320
+ rubygems_version: 4.0.8
272
321
  specification_version: 4
273
322
  summary: Generate equivalent source for parser gem AST nodes
274
323
  test_files: []
@@ -1,114 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Unparser
4
- # A mixin to define a composition
5
- #
6
- # Original code before vendoring and reduction from: https://github.com/mbj/concord.
7
- class Concord < Module
8
- include Adamantium, Equalizer.new(:names)
9
-
10
- # The maximum number of objects the hosting class is composed of
11
- MAX_NR_OF_OBJECTS = 3
12
-
13
- # Return names
14
- #
15
- # @return [Enumerable<Symbol>]
16
- #
17
- # @api private
18
- #
19
- attr_reader :names
20
-
21
- private
22
-
23
- # Initialize object
24
- #
25
- # @return [undefined]
26
- #
27
- # @api private
28
- #
29
- # rubocop:disable Lint/MissingSuper
30
- def initialize(*names)
31
- if names.length > MAX_NR_OF_OBJECTS
32
- fail "Composition of more than #{MAX_NR_OF_OBJECTS} objects is not allowed"
33
- end
34
-
35
- @names = names
36
- define_initialize
37
- define_readers
38
- define_equalizer
39
- end
40
- # rubocop:enable Lint/MissingSuper
41
-
42
- # Define equalizer
43
- #
44
- # @return [undefined]
45
- #
46
- # @api private
47
- #
48
- def define_equalizer
49
- include(Equalizer.new(*names))
50
- end
51
-
52
- # Define readers
53
- #
54
- # @return [undefined]
55
- #
56
- # @api private
57
- #
58
- def define_readers
59
- attribute_names = names
60
- attr_reader(*attribute_names)
61
-
62
- protected(*attribute_names) if attribute_names.any?
63
- end
64
-
65
- # Define initialize method
66
- #
67
- # @return [undefined]
68
- #
69
- # @api private
70
- #
71
- #
72
- def define_initialize
73
- ivars = instance_variable_names
74
- size = names.size
75
-
76
- define_method :initialize do |*args|
77
- args_size = args.size
78
- unless args_size.equal?(size)
79
- fail ArgumentError, "wrong number of arguments (#{args_size} for #{size})"
80
- end
81
-
82
- ivars.zip(args) { |ivar, arg| instance_variable_set(ivar, arg) }
83
- end
84
- end
85
-
86
- # Return instance variable names
87
- #
88
- # @return [String]
89
- #
90
- # @api private
91
- #
92
- def instance_variable_names
93
- names.map { |name| "@#{name}" }
94
- end
95
-
96
- # Mixin for public attribute readers
97
- class Public < self
98
-
99
- # Hook called when module is included
100
- #
101
- # @param [Class,Module] descendant
102
- #
103
- # @return [undefined]
104
- #
105
- # @api private
106
- #
107
- def included(descendant)
108
- names.each do |name|
109
- descendant.__send__(:public, name)
110
- end
111
- end
112
- end # Public
113
- end # Concord
114
- end # Unparser