unparser 0.6.0 → 0.6.7
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 +4 -4
- data/README.md +8 -3
- data/bin/unparser +1 -1
- data/lib/unparser/adamantium/method_builder.rb +2 -1
- data/lib/unparser/buffer.rb +0 -14
- data/lib/unparser/cli.rb +1 -0
- data/lib/unparser/color.rb +3 -0
- data/lib/unparser/emitter/argument.rb +7 -5
- data/lib/unparser/emitter/block.rb +1 -1
- data/lib/unparser/emitter/find_pattern.rb +18 -0
- data/lib/unparser/emitter/hash.rb +0 -8
- data/lib/unparser/emitter/hash_pattern.rb +1 -1
- data/lib/unparser/emitter/match_pattern.rb +11 -3
- data/lib/unparser/emitter/match_pattern_p.rb +20 -0
- data/lib/unparser/emitter/match_rest.rb +7 -0
- data/lib/unparser/node_details/send.rb +5 -2
- data/lib/unparser/node_helpers.rb +3 -1
- data/lib/unparser/writer/dynamic_string.rb +0 -12
- data/lib/unparser/writer/send/unary.rb +1 -1
- data/lib/unparser/writer/send.rb +3 -3
- data/lib/unparser.rb +2 -0
- metadata +13 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43c55e0072230fba02c24266555e1599559396739677e4371b6c9bca4b2a29b1
|
4
|
+
data.tar.gz: 4743b675c63ed3cf84ee3c784b70fd5078f8ed4e022e02bde27473a7bf44dbbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94bc33d333f3652cbdfa12169432d7a139b568cb72d4ae08994921760d2f7c8348a8d35f717053c059866ce7e640d08c9af6495a5e37132b2b667d1895b889da
|
7
|
+
data.tar.gz: ee2ee8e37250de111c419566c74d7b5954b02137f9e6fcb88cf9ff26820583698faf2533e6d01ae5738481bab91797060e2773781e9c93cb8da26efce602c1b0
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ The following constraints apply:
|
|
10
10
|
|
11
11
|
* No support for macruby extensions
|
12
12
|
* Only support for the [modern AST](https://github.com/whitequark/parser/#usage) format
|
13
|
-
* Only support for Ruby >= 2.
|
13
|
+
* Only support for Ruby >= 2.7
|
14
14
|
|
15
15
|
Notable Users:
|
16
16
|
|
@@ -110,7 +110,7 @@ If you need to generate Ruby Syntax outside of this band feel free to contact me
|
|
110
110
|
Testing:
|
111
111
|
--------
|
112
112
|
|
113
|
-
Unparser currently successfully round trips almost all ruby code around. Using
|
113
|
+
Unparser currently successfully round trips almost all ruby code around. Using Ruby >= 2.6.
|
114
114
|
If there is a non round trippable example that is NOT subjected to known [Limitations](#limitations).
|
115
115
|
please report a bug.
|
116
116
|
|
@@ -187,10 +187,15 @@ Contributing
|
|
187
187
|
* Make your feature addition or bug fix.
|
188
188
|
* Add tests for it. This is important so I don't break it in a
|
189
189
|
future version unintentionally.
|
190
|
-
* Commit, do not mess with
|
190
|
+
* Commit, do not mess with version
|
191
191
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
192
192
|
* Send me a pull request. Bonus points for topic branches.
|
193
193
|
|
194
|
+
Known Users
|
195
|
+
-------------
|
196
|
+
|
197
|
+
* [RailsRocket](https://www.railsrocket.app) - A no-code app builder that creates Rails apps
|
198
|
+
|
194
199
|
License
|
195
200
|
-------
|
196
201
|
|
data/bin/unparser
CHANGED
data/lib/unparser/buffer.rb
CHANGED
@@ -44,7 +44,6 @@ module Unparser
|
|
44
44
|
#
|
45
45
|
def append_without_prefix(string)
|
46
46
|
write(string)
|
47
|
-
self
|
48
47
|
end
|
49
48
|
|
50
49
|
# Increase indent
|
@@ -77,7 +76,6 @@ module Unparser
|
|
77
76
|
#
|
78
77
|
def nl
|
79
78
|
write(NL)
|
80
|
-
self
|
81
79
|
end
|
82
80
|
|
83
81
|
def root_indent
|
@@ -107,18 +105,6 @@ module Unparser
|
|
107
105
|
@content.dup.freeze
|
108
106
|
end
|
109
107
|
|
110
|
-
# Capture the content written to the buffer within the block
|
111
|
-
#
|
112
|
-
# @return [String]
|
113
|
-
#
|
114
|
-
# @api private
|
115
|
-
#
|
116
|
-
def capture_content
|
117
|
-
size_before = @content.size
|
118
|
-
yield
|
119
|
-
@content[size_before..-1]
|
120
|
-
end
|
121
|
-
|
122
108
|
# Write raw fragment to buffer
|
123
109
|
#
|
124
110
|
# Does not do indentation logic.
|
data/lib/unparser/cli.rb
CHANGED
data/lib/unparser/color.rb
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
|
3
3
|
module Unparser
|
4
4
|
class Emitter
|
5
|
-
# Emitter for
|
6
|
-
class
|
5
|
+
# Emitter for forwarding arguments
|
6
|
+
class ForwardArg < self
|
7
7
|
MAP = {
|
8
|
-
blockarg:
|
9
|
-
|
8
|
+
blockarg: '&',
|
9
|
+
forwarded_kwrestarg: '**',
|
10
|
+
forwarded_restarg: '*',
|
11
|
+
kwrestarg: '**'
|
10
12
|
}.freeze
|
11
13
|
|
12
14
|
handle(*MAP.keys)
|
@@ -127,7 +129,7 @@ module Unparser
|
|
127
129
|
|
128
130
|
def dispatch
|
129
131
|
write('&')
|
130
|
-
visit(name)
|
132
|
+
visit(name) if name
|
131
133
|
end
|
132
134
|
|
133
135
|
end # BlockPass
|
@@ -15,8 +15,8 @@ module Unparser
|
|
15
15
|
emit_target
|
16
16
|
ws
|
17
17
|
write_open
|
18
|
-
target_writer.emit_heredoc_reminders if n_send?(target)
|
19
18
|
emit_block_arguments unless n_lambda?(target)
|
19
|
+
target_writer.emit_heredoc_reminders if n_send?(target)
|
20
20
|
emit_optional_body_ensure_rescue(body)
|
21
21
|
write_close
|
22
22
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unparser
|
4
|
+
class Emitter
|
5
|
+
# Emitter for in pattern nodes
|
6
|
+
class FindPattern < self
|
7
|
+
handle :find_pattern
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def dispatch
|
12
|
+
write('[')
|
13
|
+
delimited(children)
|
14
|
+
write(']')
|
15
|
+
end
|
16
|
+
end # FindPattern
|
17
|
+
end # Emitter
|
18
|
+
end # Unparser
|
@@ -6,14 +6,6 @@ module Unparser
|
|
6
6
|
class Hash < self
|
7
7
|
handle :hash
|
8
8
|
|
9
|
-
def emit_last_argument_hash
|
10
|
-
if children.empty?
|
11
|
-
write('{}')
|
12
|
-
else
|
13
|
-
emit_hash_body
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
9
|
def emit_heredoc_reminders
|
18
10
|
children.each(&method(:emit_heredoc_reminder_member))
|
19
11
|
end
|
@@ -6,17 +6,25 @@ module Unparser
|
|
6
6
|
class MatchPattern < self
|
7
7
|
|
8
8
|
handle :match_pattern
|
9
|
-
handle :match_pattern_p
|
10
9
|
|
11
10
|
children :target, :pattern
|
12
11
|
|
12
|
+
# Modern ast format emits `match_pattern`
|
13
|
+
# node on single line pre 3.0, but 3.0+ uses `match_pattern_p`
|
14
|
+
SYMBOL =
|
15
|
+
if RUBY_VERSION < '3.0'
|
16
|
+
' in '
|
17
|
+
else
|
18
|
+
' => '
|
19
|
+
end
|
20
|
+
|
13
21
|
private
|
14
22
|
|
15
23
|
def dispatch
|
16
24
|
visit(target)
|
17
|
-
write(
|
25
|
+
write(SYMBOL)
|
18
26
|
visit(pattern)
|
19
27
|
end
|
20
|
-
end #
|
28
|
+
end # MatchPattern
|
21
29
|
end # Emitter
|
22
30
|
end # Unparser
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unparser
|
4
|
+
class Emitter
|
5
|
+
class MatchPatternP < self
|
6
|
+
|
7
|
+
handle :match_pattern_p
|
8
|
+
|
9
|
+
children :target, :pattern
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def dispatch
|
14
|
+
visit(target)
|
15
|
+
write(' in ')
|
16
|
+
visit(pattern)
|
17
|
+
end
|
18
|
+
end # MatchPatternP
|
19
|
+
end # Emitter
|
20
|
+
end # Unparser
|
@@ -4,8 +4,15 @@ module Unparser
|
|
4
4
|
class Emitter
|
5
5
|
# Emiter for match rest nodes
|
6
6
|
class MatchRest < self
|
7
|
+
handle :match_rest
|
8
|
+
|
7
9
|
children :match_var
|
8
10
|
|
11
|
+
def dispatch
|
12
|
+
write('*')
|
13
|
+
visit(match_var) if match_var
|
14
|
+
end
|
15
|
+
|
9
16
|
def emit_array_pattern
|
10
17
|
write('*')
|
11
18
|
emit_match_var
|
@@ -19,7 +19,10 @@ module Unparser
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def binary_syntax_allowed?
|
22
|
-
selector_binary_operator?
|
22
|
+
selector_binary_operator? \
|
23
|
+
&& arguments.one? \
|
24
|
+
&& !n_splat?(arguments.first) \
|
25
|
+
&& !n_kwargs?(arguments.first)
|
23
26
|
end
|
24
27
|
|
25
28
|
def selector_unary_operator?
|
@@ -48,7 +51,7 @@ module Unparser
|
|
48
51
|
memoize :assignment?
|
49
52
|
|
50
53
|
def arguments
|
51
|
-
children[2
|
54
|
+
children[2..]
|
52
55
|
end
|
53
56
|
memoize :arguments
|
54
57
|
|
@@ -36,18 +36,20 @@ module Unparser
|
|
36
36
|
args
|
37
37
|
array
|
38
38
|
array_pattern
|
39
|
-
empty_else
|
40
39
|
begin
|
41
40
|
block
|
42
41
|
cbase
|
43
42
|
const
|
44
43
|
dstr
|
44
|
+
empty_else
|
45
45
|
ensure
|
46
46
|
hash
|
47
47
|
hash_pattern
|
48
48
|
if
|
49
49
|
in_pattern
|
50
50
|
int
|
51
|
+
kwarg
|
52
|
+
kwargs
|
51
53
|
kwsplat
|
52
54
|
lambda
|
53
55
|
match_rest
|
@@ -113,18 +113,6 @@ module Unparser
|
|
113
113
|
n_str?(last) && last.children.first[-1].eql?("\n")
|
114
114
|
end
|
115
115
|
|
116
|
-
def emit_squiggly_heredoc_body
|
117
|
-
buffer.indent
|
118
|
-
children.each do |child|
|
119
|
-
if n_str?(child)
|
120
|
-
write(escape_dynamic(child.children.first))
|
121
|
-
else
|
122
|
-
emit_dynamic(child)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
buffer.unindent
|
126
|
-
end
|
127
|
-
|
128
116
|
def emit_normal_heredoc_body
|
129
117
|
buffer.root_indent do
|
130
118
|
children.each do |child|
|
data/lib/unparser/writer/send.rb
CHANGED
@@ -6,8 +6,8 @@ module Unparser
|
|
6
6
|
class Send
|
7
7
|
include Writer, Adamantium, Constants, Generation
|
8
8
|
|
9
|
-
INDEX_ASSIGN = :
|
10
|
-
INDEX_REFERENCE = :
|
9
|
+
INDEX_ASSIGN = :[]=
|
10
|
+
INDEX_REFERENCE = :[]
|
11
11
|
|
12
12
|
OPERATORS = {
|
13
13
|
csend: '&.',
|
@@ -45,7 +45,7 @@ module Unparser
|
|
45
45
|
def effective_writer_class
|
46
46
|
if details.binary_syntax_allowed?
|
47
47
|
Binary
|
48
|
-
elsif details.selector_unary_operator? && n_send?(node)
|
48
|
+
elsif details.selector_unary_operator? && n_send?(node) && arguments.empty?
|
49
49
|
Unary
|
50
50
|
elsif write_as_attribute_assignment?
|
51
51
|
AttributeAssignment
|
data/lib/unparser.rb
CHANGED
@@ -218,7 +218,9 @@ require 'unparser/emitter/xstr'
|
|
218
218
|
require 'unparser/emitter/yield'
|
219
219
|
require 'unparser/emitter/kwargs'
|
220
220
|
require 'unparser/emitter/pair'
|
221
|
+
require 'unparser/emitter/find_pattern'
|
221
222
|
require 'unparser/emitter/match_pattern'
|
223
|
+
require 'unparser/emitter/match_pattern_p'
|
222
224
|
require 'unparser/writer'
|
223
225
|
require 'unparser/writer/binary'
|
224
226
|
require 'unparser/writer/dynamic_string'
|
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.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Markus Schirp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: diff-lcs
|
@@ -30,42 +30,42 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.
|
33
|
+
version: 3.2.0
|
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: 3.
|
40
|
+
version: 3.2.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mutant
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.11.18
|
48
48
|
type: :development
|
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.
|
54
|
+
version: 0.11.18
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mutant-rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.11.18
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.11.18
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,6 +184,7 @@ files:
|
|
184
184
|
- lib/unparser/emitter/defined.rb
|
185
185
|
- lib/unparser/emitter/dstr.rb
|
186
186
|
- lib/unparser/emitter/dsym.rb
|
187
|
+
- lib/unparser/emitter/find_pattern.rb
|
187
188
|
- lib/unparser/emitter/flipflop.rb
|
188
189
|
- lib/unparser/emitter/float.rb
|
189
190
|
- lib/unparser/emitter/flow_modifier.rb
|
@@ -203,6 +204,7 @@ files:
|
|
203
204
|
- lib/unparser/emitter/match_alt.rb
|
204
205
|
- lib/unparser/emitter/match_as.rb
|
205
206
|
- lib/unparser/emitter/match_pattern.rb
|
207
|
+
- lib/unparser/emitter/match_pattern_p.rb
|
206
208
|
- lib/unparser/emitter/match_rest.rb
|
207
209
|
- lib/unparser/emitter/match_var.rb
|
208
210
|
- lib/unparser/emitter/mlhs.rb
|
@@ -249,6 +251,7 @@ metadata:
|
|
249
251
|
bug_tracker_uri: https://github.com/mbj/unparser/issues
|
250
252
|
changelog_uri: https://github.com/mbj/unparser/blob/master/Changelog.md
|
251
253
|
funding_uri: https://github.com/sponsors/mbj
|
254
|
+
rubygems_mfa_required: 'true'
|
252
255
|
post_install_message:
|
253
256
|
rdoc_options: []
|
254
257
|
require_paths:
|
@@ -257,15 +260,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
257
260
|
requirements:
|
258
261
|
- - ">="
|
259
262
|
- !ruby/object:Gem::Version
|
260
|
-
version: '2.
|
263
|
+
version: '2.7'
|
261
264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
262
265
|
requirements:
|
263
266
|
- - ">="
|
264
267
|
- !ruby/object:Gem::Version
|
265
268
|
version: '0'
|
266
269
|
requirements: []
|
267
|
-
|
268
|
-
rubygems_version: 2.7.6.2
|
270
|
+
rubygems_version: 3.3.26
|
269
271
|
signing_key:
|
270
272
|
specification_version: 4
|
271
273
|
summary: Generate equivalent source for parser gem AST nodes
|