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