unparser 0.7.0 → 0.8.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.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/unparser/cli.rb +2 -0
- data/lib/unparser/color.rb +2 -2
- data/lib/unparser/emitter/args.rb +5 -1
- data/lib/unparser/emitter/assignment.rb +10 -0
- data/lib/unparser/emitter/block.rb +10 -2
- data/lib/unparser/emitter/dsym.rb +1 -1
- data/lib/unparser/emitter/ensure.rb +16 -0
- data/lib/unparser/emitter/flow_modifier.rb +1 -1
- data/lib/unparser/emitter/in_pattern.rb +9 -1
- data/lib/unparser/emitter/kwbegin.rb +1 -1
- data/lib/unparser/emitter/match_pattern.rb +6 -1
- data/lib/unparser/emitter/match_pattern_p.rb +6 -1
- data/lib/unparser/emitter/mlhs.rb +7 -1
- data/lib/unparser/emitter/range.rb +23 -2
- data/lib/unparser/emitter/xstr.rb +8 -1
- data/lib/unparser/generation.rb +6 -0
- data/lib/unparser/node_helpers.rb +18 -9
- data/lib/unparser/util.rb +23 -0
- data/lib/unparser/writer/array.rb +51 -0
- data/lib/unparser/writer/binary.rb +8 -4
- data/lib/unparser/writer/regexp.rb +3 -0
- data/lib/unparser/writer/resbody.rb +9 -4
- data/lib/unparser/writer/rescue.rb +1 -1
- data/lib/unparser/writer/send/unary.rb +9 -4
- data/lib/unparser/writer.rb +3 -4
- data/lib/unparser.rb +46 -8
- metadata +25 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0e776dd7b47efb62b8ad18d7262d247362944f28ea67edb7e518d8a94c74649
|
4
|
+
data.tar.gz: 759ec6fb240c4c62835bd8c789877fc26fc974563d2566687a63b2c0dec1072f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11fe99943d2575e00ca2fc150a78cad1f2f830b3249f3692f473da7e520775fc9423b254fb2f7613e4b6811f03dd3d2af0d4bba1d0f2f143e048ab65281771ff
|
7
|
+
data.tar.gz: f08db4117aa2ebba9c5ac7a9e057ca7ddc9fc0613170752ac10cc7515058f491fe756b880db73629e2e7a8328cc979872b4c682197c061de39da52a44796587f
|
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 >= 3.
|
13
|
+
* Only support for Ruby >= 3.2
|
14
14
|
|
15
15
|
Notable Users:
|
16
16
|
|
@@ -44,9 +44,9 @@ To preserve the comments from the source:
|
|
44
44
|
require 'parser/current'
|
45
45
|
require 'unparser'
|
46
46
|
|
47
|
-
ast, comments = Unparser.parse_with_comments('your(ruby(code)) # with comments')
|
47
|
+
ast, comments = Unparser.parser.parse_with_comments(Unparser.buffer('your(ruby(code)) # with comments'))
|
48
48
|
|
49
|
-
Unparser.unparse(ast, comments) # => 'your(ruby(code)) # with comments'
|
49
|
+
Unparser.unparse(ast, comments: comments) # => 'your(ruby(code)) # with comments'
|
50
50
|
```
|
51
51
|
|
52
52
|
Passing in manually constructed AST:
|
@@ -114,7 +114,7 @@ Unparser currently successfully round trips almost all ruby code around. Using R
|
|
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
|
|
117
|
-
On CI unparser is currently tested against rubyspec with minor [excludes](https://github.com/mbj/unparser/blob/
|
117
|
+
On CI unparser is currently tested against rubyspec with minor [excludes](https://github.com/mbj/unparser/blob/main/spec/integrations.yml).
|
118
118
|
|
119
119
|
Limitations:
|
120
120
|
------------
|
data/lib/unparser/cli.rb
CHANGED
data/lib/unparser/color.rb
CHANGED
@@ -30,10 +30,10 @@ module Unparser
|
|
30
30
|
|
31
31
|
# Well rubocop you are static so you do not have a clue here ;)
|
32
32
|
# rubocop:disable Style/RedundantInitialize
|
33
|
-
# rubocop:disable
|
33
|
+
# rubocop:disable Lint/MissingSuper
|
34
34
|
def initialize; end
|
35
35
|
# rubocop:enable Style/RedundantInitialize
|
36
|
-
# rubocop:enable
|
36
|
+
# rubocop:enable Lint/MissingSuper
|
37
37
|
|
38
38
|
end.new
|
39
39
|
|
@@ -13,7 +13,11 @@ module Unparser
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def emit_def_arguments
|
16
|
-
|
16
|
+
if children.one? && n_mlhs?(Util.one(children))
|
17
|
+
emitter(Util.one(children)).dispatch_def
|
18
|
+
else
|
19
|
+
delimited(normal_arguments)
|
20
|
+
end
|
17
21
|
end
|
18
22
|
|
19
23
|
def emit_lambda_arguments
|
@@ -25,6 +25,16 @@ module Unparser
|
|
25
25
|
|
26
26
|
if BINARY_OPERATOR.include?(right.type)
|
27
27
|
writer_with(Writer::Binary, node: right).emit_operator
|
28
|
+
elsif n_array?(right)
|
29
|
+
emit_array
|
30
|
+
else
|
31
|
+
right_emitter.write_to_buffer
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def emit_array
|
36
|
+
if right.children.size > 1
|
37
|
+
delimited(right.children)
|
28
38
|
else
|
29
39
|
right_emitter.write_to_buffer
|
30
40
|
end
|
@@ -5,7 +5,7 @@ module Unparser
|
|
5
5
|
|
6
6
|
# Block emitter
|
7
7
|
class Block < self
|
8
|
-
handle :block, :numblock
|
8
|
+
handle :block, :numblock, :itblock
|
9
9
|
|
10
10
|
children :target, :arguments, :body
|
11
11
|
|
@@ -71,8 +71,16 @@ module Unparser
|
|
71
71
|
node.type.equal?(:numblock)
|
72
72
|
end
|
73
73
|
|
74
|
+
# NOTE: mutant fails on Ruby < 3.4
|
75
|
+
# mutant:disable
|
76
|
+
def itblock?
|
77
|
+
node.type.equal?(:itblock)
|
78
|
+
end
|
79
|
+
|
80
|
+
# NOTE: mutant fails on Ruby < 3.4
|
81
|
+
# mutant:disable
|
74
82
|
def emit_block_arguments
|
75
|
-
return if numblock? || arguments.children.empty?
|
83
|
+
return if numblock? || itblock? || arguments.children.empty?
|
76
84
|
|
77
85
|
ws
|
78
86
|
|
@@ -16,7 +16,7 @@ module Unparser
|
|
16
16
|
|
17
17
|
ws
|
18
18
|
|
19
|
-
|
19
|
+
dispatch_target(target)
|
20
20
|
|
21
21
|
if unless_guard
|
22
22
|
ws
|
@@ -31,6 +31,14 @@ module Unparser
|
|
31
31
|
nl
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
def dispatch_target(target)
|
36
|
+
if n_array?(target)
|
37
|
+
writer_with(Writer::Array, node: target).emit_compact
|
38
|
+
else
|
39
|
+
visit(target)
|
40
|
+
end
|
41
|
+
end
|
34
42
|
end # InPattern
|
35
43
|
end # Emitter
|
36
44
|
end # Unparser
|
@@ -6,10 +6,16 @@ module Unparser
|
|
6
6
|
class MLHS < self
|
7
7
|
handle :mlhs
|
8
8
|
|
9
|
-
NO_COMMA = %i[arg splat
|
9
|
+
NO_COMMA = %i[arg splat restarg].freeze
|
10
10
|
|
11
11
|
private_constant(*constants(false))
|
12
12
|
|
13
|
+
def dispatch_def
|
14
|
+
parentheses do
|
15
|
+
delimited(children)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
13
19
|
private
|
14
20
|
|
15
21
|
def dispatch
|
@@ -25,9 +25,30 @@ module Unparser
|
|
25
25
|
private
|
26
26
|
|
27
27
|
def dispatch
|
28
|
-
|
28
|
+
visit_begin_node(begin_node)
|
29
29
|
write(TOKENS.fetch(node.type))
|
30
|
-
|
30
|
+
visit_end_node(end_node)
|
31
|
+
end
|
32
|
+
|
33
|
+
def visit_begin_node(node)
|
34
|
+
return unless node
|
35
|
+
|
36
|
+
if n_array?(begin_node)
|
37
|
+
writer_with(Writer::Array, node: begin_node).emit_compact
|
38
|
+
else
|
39
|
+
visit(begin_node)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def visit_end_node(node)
|
44
|
+
return unless node
|
45
|
+
|
46
|
+
write(' ') if n_range?(node)
|
47
|
+
if n_array?(node)
|
48
|
+
writer_with(Writer::Array, node: node).emit_compact
|
49
|
+
else
|
50
|
+
visit(node)
|
51
|
+
end
|
31
52
|
end
|
32
53
|
|
33
54
|
end # Range
|
@@ -41,6 +41,8 @@ module Unparser
|
|
41
41
|
children.each do |child|
|
42
42
|
if n_begin?(child)
|
43
43
|
emit_begin(child)
|
44
|
+
elsif n_gvar?(child)
|
45
|
+
emit_gvar(child)
|
44
46
|
else
|
45
47
|
emit_string(child)
|
46
48
|
end
|
@@ -64,9 +66,14 @@ module Unparser
|
|
64
66
|
|
65
67
|
def emit_begin(component)
|
66
68
|
write('#{')
|
67
|
-
visit(
|
69
|
+
visit(Util.one(component.children)) if component.children.any?
|
68
70
|
write('}')
|
69
71
|
end
|
72
|
+
|
73
|
+
def emit_gvar(component)
|
74
|
+
write('#')
|
75
|
+
write(Util.one(component.children).to_s)
|
76
|
+
end
|
70
77
|
end # XStr
|
71
78
|
end # Emitter
|
72
79
|
end # Unparser
|
data/lib/unparser/generation.rb
CHANGED
@@ -147,6 +147,7 @@ module Unparser
|
|
147
147
|
def emit_body_inner(node)
|
148
148
|
head, *tail = node.children
|
149
149
|
emit_body_member(head)
|
150
|
+
write(';') if requires_explicit_statement_terminator?(head, tail)
|
150
151
|
|
151
152
|
tail.each do |child|
|
152
153
|
buffer.ensure_nl
|
@@ -154,9 +155,14 @@ module Unparser
|
|
154
155
|
nl if EXTRA_NL.include?(child.type)
|
155
156
|
|
156
157
|
emit_body_member(child)
|
158
|
+
write(';') if requires_explicit_statement_terminator?(child, tail)
|
157
159
|
end
|
158
160
|
end
|
159
161
|
|
162
|
+
def requires_explicit_statement_terminator?(node, nodes_group)
|
163
|
+
n_range?(node) && node.children.fetch(1).nil? && !node.eql?(nodes_group.fetch(-1))
|
164
|
+
end
|
165
|
+
|
160
166
|
def emit_body_member(node)
|
161
167
|
if n_rescue?(node)
|
162
168
|
emit_rescue_postcontrol(node)
|
@@ -31,7 +31,16 @@ module Unparser
|
|
31
31
|
node.type.equal?(type)
|
32
32
|
end
|
33
33
|
|
34
|
+
def n_flipflop?(node)
|
35
|
+
n_iflipflop?(node) || n_eflipflop?(node)
|
36
|
+
end
|
37
|
+
|
38
|
+
def n_range?(node)
|
39
|
+
n_irange?(node) || n_erange?(node)
|
40
|
+
end
|
41
|
+
|
34
42
|
%i[
|
43
|
+
and
|
35
44
|
arg
|
36
45
|
args
|
37
46
|
array
|
@@ -41,19 +50,26 @@ module Unparser
|
|
41
50
|
cbase
|
42
51
|
const
|
43
52
|
dstr
|
53
|
+
eflipflop
|
44
54
|
empty_else
|
55
|
+
erange
|
45
56
|
ensure
|
57
|
+
gvar
|
46
58
|
hash
|
47
59
|
hash_pattern
|
48
60
|
if
|
61
|
+
iflipflop
|
49
62
|
in_pattern
|
50
63
|
int
|
64
|
+
irange
|
51
65
|
kwarg
|
52
66
|
kwargs
|
53
67
|
kwsplat
|
54
68
|
lambda
|
55
69
|
lvar
|
56
70
|
match_rest
|
71
|
+
mlhs
|
72
|
+
or
|
57
73
|
pair
|
58
74
|
rescue
|
59
75
|
send
|
@@ -61,20 +77,13 @@ module Unparser
|
|
61
77
|
splat
|
62
78
|
str
|
63
79
|
sym
|
64
|
-
|
80
|
+
xstr
|
81
|
+
].to_set.each do |type|
|
65
82
|
name = "n_#{type}?"
|
66
83
|
define_method(name) do |node|
|
67
84
|
n?(type, node)
|
68
85
|
end
|
69
86
|
private(name)
|
70
87
|
end
|
71
|
-
|
72
|
-
def unwrap_single_begin(node)
|
73
|
-
if n_begin?(node) && node.children.one?
|
74
|
-
node.children.first
|
75
|
-
else
|
76
|
-
node
|
77
|
-
end
|
78
|
-
end
|
79
88
|
end # NodeHelpers
|
80
89
|
end # Unparser
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unparser
|
4
|
+
# Original code before vendoring and reduction from: https://github.com/mbj/mutant/blob/main/lib/mutant/util.rb
|
5
|
+
module Util
|
6
|
+
# Error raised by `Util.one` if size is not exactly one
|
7
|
+
SizeError = Class.new(IndexError)
|
8
|
+
|
9
|
+
# Return only element in array if it contains exactly one member
|
10
|
+
#
|
11
|
+
# @param array [Array]
|
12
|
+
#
|
13
|
+
# @return [Object] first entry
|
14
|
+
def self.one(array)
|
15
|
+
case array
|
16
|
+
in [value]
|
17
|
+
value
|
18
|
+
else
|
19
|
+
fail SizeError, "expected size to be exactly 1 but size was #{array.size}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unparser
|
4
|
+
module Writer
|
5
|
+
class Array
|
6
|
+
include Writer, Adamantium
|
7
|
+
|
8
|
+
MAP = {
|
9
|
+
dsym: '%I',
|
10
|
+
sym: '%i',
|
11
|
+
dstr: '%W',
|
12
|
+
str: '%w'
|
13
|
+
}.freeze
|
14
|
+
private_constant(*constants(false))
|
15
|
+
|
16
|
+
def emit_compact # rubocop:disable Metrics/AbcSize
|
17
|
+
children_generic_type = array_elements_generic_type
|
18
|
+
|
19
|
+
write(MAP.fetch(children_generic_type))
|
20
|
+
|
21
|
+
parentheses('[', ']') do
|
22
|
+
delimited(children, ' ') do |child|
|
23
|
+
if n_sym?(child) || n_str?(child)
|
24
|
+
write(Util.one(child.children).to_s)
|
25
|
+
else
|
26
|
+
write('#{')
|
27
|
+
emitter(Util.one(Util.one(child.children).children)).write_to_buffer
|
28
|
+
write('}')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def array_elements_generic_type
|
37
|
+
children_types = children.to_set(&:type)
|
38
|
+
|
39
|
+
if children_types == Set[:sym, :dsym]
|
40
|
+
:dsym
|
41
|
+
elsif children_types == Set[:str, :dstr]
|
42
|
+
:dstr
|
43
|
+
elsif children_types == Set[]
|
44
|
+
:sym
|
45
|
+
else
|
46
|
+
Util.one(children_types.to_a)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end # Array
|
50
|
+
end # Writer
|
51
|
+
end # Unparser
|
@@ -39,7 +39,7 @@ module Unparser
|
|
39
39
|
tANDOP: '&&'
|
40
40
|
}.freeze
|
41
41
|
|
42
|
-
NEED_KEYWORD = %i[return break next].freeze
|
42
|
+
NEED_KEYWORD = %i[return break next match_pattern_p].freeze
|
43
43
|
|
44
44
|
private_constant(*constants(false))
|
45
45
|
|
@@ -52,9 +52,13 @@ module Unparser
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def dispatch
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
if node.type.eql?(:and) && left.type.equal?(:or)
|
56
|
+
emit_with(KEYWORD_TOKENS)
|
57
|
+
else
|
58
|
+
left_emitter.write_to_buffer
|
59
|
+
write(' ', MAP.fetch(effective_symbol), ' ')
|
60
|
+
visit(right)
|
61
|
+
end
|
58
62
|
end
|
59
63
|
|
60
64
|
private
|
@@ -14,8 +14,13 @@ module Unparser
|
|
14
14
|
children :exception, :assignment, :body
|
15
15
|
|
16
16
|
def emit_postcontrol
|
17
|
-
|
18
|
-
|
17
|
+
if body
|
18
|
+
write(' rescue ')
|
19
|
+
visit(body)
|
20
|
+
else
|
21
|
+
nl
|
22
|
+
write('rescue')
|
23
|
+
end
|
19
24
|
end
|
20
25
|
|
21
26
|
def emit_regular
|
@@ -58,10 +63,10 @@ module Unparser
|
|
58
63
|
end
|
59
64
|
|
60
65
|
def write_index_assignment
|
61
|
-
receiver,
|
66
|
+
receiver, *indexes = assignment.children
|
62
67
|
visit(receiver)
|
63
68
|
write('[')
|
64
|
-
|
69
|
+
delimited(indexes)
|
65
70
|
write(']')
|
66
71
|
end
|
67
72
|
end # Resbody
|
@@ -12,13 +12,18 @@ module Unparser
|
|
12
12
|
|
13
13
|
private_constant(*constants(false))
|
14
14
|
|
15
|
-
def dispatch
|
15
|
+
def dispatch # rubocop:disable Metrics/AbcSize
|
16
16
|
name = selector
|
17
|
+
first_child = children.fetch(0)
|
17
18
|
|
18
|
-
|
19
|
+
if n_flipflop?(first_child) || n_and?(first_child) || n_or?(first_child)
|
20
|
+
write 'not '
|
21
|
+
else
|
22
|
+
write(MAP.fetch(name, name).to_s)
|
19
23
|
|
20
|
-
|
21
|
-
|
24
|
+
if n_int?(receiver) && selector.equal?(:+@)
|
25
|
+
write('+')
|
26
|
+
end
|
22
27
|
end
|
23
28
|
|
24
29
|
visit(receiver)
|
data/lib/unparser/writer.rb
CHANGED
@@ -29,10 +29,9 @@ module Unparser
|
|
29
29
|
# mutant:disable
|
30
30
|
def round_trips?(source:)
|
31
31
|
parser = Unparser.parser
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
.each(&parser.static_env.public_method(:declare))
|
32
|
+
local_variable_scope.local_variables_for_node(node).each do |local_variable|
|
33
|
+
parser.declare_local_variable(local_variable)
|
34
|
+
end
|
36
35
|
|
37
36
|
buffer = Buffer.new
|
38
37
|
buffer.write_encoding(explicit_encoding) if explicit_encoding
|
data/lib/unparser.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
require 'diff/lcs'
|
4
4
|
require 'diff/lcs/hunk'
|
5
5
|
require 'optparse'
|
6
|
-
require 'parser/current'
|
7
6
|
require 'set'
|
8
7
|
|
9
8
|
require 'unparser/equalizer'
|
@@ -18,18 +17,53 @@ require 'unparser/anima/attribute'
|
|
18
17
|
require 'unparser/anima/error'
|
19
18
|
|
20
19
|
# Library namespace
|
21
|
-
module Unparser
|
20
|
+
module Unparser # rubocop:disable Metrics/ModuleLength
|
22
21
|
# Unparser specific AST builder defaulting to modern AST format
|
23
|
-
|
24
|
-
|
22
|
+
if Gem::Version.new(RUBY_VERSION) <= '3.4'
|
23
|
+
require 'parser/current'
|
24
|
+
class Builder < Parser::Builders::Default
|
25
|
+
modernize
|
25
26
|
|
26
|
-
|
27
|
-
|
27
|
+
# mutant:disable
|
28
|
+
def initialize
|
29
|
+
super
|
28
30
|
|
29
|
-
|
31
|
+
self.emit_file_line_as_literals = false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
else
|
35
|
+
require 'prism'
|
36
|
+
class Builder < Prism::Translation::Parser::Builder
|
37
|
+
modernize
|
38
|
+
|
39
|
+
# mutant:disable
|
40
|
+
def initialize
|
41
|
+
super
|
42
|
+
|
43
|
+
self.emit_file_line_as_literals = false
|
44
|
+
end
|
30
45
|
end
|
31
46
|
end
|
32
47
|
|
48
|
+
PARSER_CLASS =
|
49
|
+
if Gem::Version.new(RUBY_VERSION) <= '3.4'
|
50
|
+
Class.new(Parser::CurrentRuby) do
|
51
|
+
def declare_local_variable(local_variable)
|
52
|
+
static_env.declare(local_variable)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
else
|
56
|
+
Class.new(Prism::Translation::Parser34) do
|
57
|
+
def declare_local_variable(local_variable)
|
58
|
+
(@local_variables ||= Set.new) << local_variable
|
59
|
+
end
|
60
|
+
|
61
|
+
def prism_options
|
62
|
+
super.merge(scopes: [@local_variables.to_a])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
33
67
|
EMPTY_STRING = ''.freeze
|
34
68
|
EMPTY_ARRAY = [].freeze
|
35
69
|
|
@@ -202,8 +236,9 @@ module Unparser
|
|
202
236
|
# @return [Parser::Base]
|
203
237
|
#
|
204
238
|
# @api private
|
239
|
+
# mutant:disable
|
205
240
|
def self.parser
|
206
|
-
|
241
|
+
PARSER_CLASS.new(Builder.new).tap do |parser|
|
207
242
|
parser.diagnostics.tap do |diagnostics|
|
208
243
|
diagnostics.all_errors_are_fatal = true
|
209
244
|
end
|
@@ -250,6 +285,7 @@ require 'unparser/emitter/def'
|
|
250
285
|
require 'unparser/emitter/defined'
|
251
286
|
require 'unparser/emitter/dstr'
|
252
287
|
require 'unparser/emitter/dsym'
|
288
|
+
require 'unparser/emitter/ensure'
|
253
289
|
require 'unparser/emitter/flipflop'
|
254
290
|
require 'unparser/emitter/float'
|
255
291
|
require 'unparser/emitter/flow_modifier'
|
@@ -294,6 +330,7 @@ require 'unparser/emitter/find_pattern'
|
|
294
330
|
require 'unparser/emitter/match_pattern'
|
295
331
|
require 'unparser/emitter/match_pattern_p'
|
296
332
|
require 'unparser/writer'
|
333
|
+
require 'unparser/writer/array'
|
297
334
|
require 'unparser/writer/binary'
|
298
335
|
require 'unparser/writer/dynamic_string'
|
299
336
|
require 'unparser/writer/regexp'
|
@@ -307,6 +344,7 @@ require 'unparser/writer/send/unary'
|
|
307
344
|
require 'unparser/node_details'
|
308
345
|
require 'unparser/node_details/send'
|
309
346
|
require 'unparser/cli'
|
347
|
+
require 'unparser/util'
|
310
348
|
|
311
349
|
require 'unparser/validation'
|
312
350
|
# make it easy for zombie
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Markus Schirp
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: diff-lcs
|
@@ -38,34 +37,48 @@ dependencies:
|
|
38
37
|
- - ">="
|
39
38
|
- !ruby/object:Gem::Version
|
40
39
|
version: 3.3.0
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: prism
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.4'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.4'
|
41
54
|
- !ruby/object:Gem::Dependency
|
42
55
|
name: mutant
|
43
56
|
requirement: !ruby/object:Gem::Requirement
|
44
57
|
requirements:
|
45
58
|
- - "~>"
|
46
59
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
60
|
+
version: 0.13.0
|
48
61
|
type: :development
|
49
62
|
prerelease: false
|
50
63
|
version_requirements: !ruby/object:Gem::Requirement
|
51
64
|
requirements:
|
52
65
|
- - "~>"
|
53
66
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
67
|
+
version: 0.13.0
|
55
68
|
- !ruby/object:Gem::Dependency
|
56
69
|
name: mutant-rspec
|
57
70
|
requirement: !ruby/object:Gem::Requirement
|
58
71
|
requirements:
|
59
72
|
- - "~>"
|
60
73
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
74
|
+
version: 0.13.0
|
62
75
|
type: :development
|
63
76
|
prerelease: false
|
64
77
|
version_requirements: !ruby/object:Gem::Requirement
|
65
78
|
requirements:
|
66
79
|
- - "~>"
|
67
80
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
81
|
+
version: 0.13.0
|
69
82
|
- !ruby/object:Gem::Dependency
|
70
83
|
name: rspec
|
71
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,6 +197,7 @@ files:
|
|
184
197
|
- lib/unparser/emitter/defined.rb
|
185
198
|
- lib/unparser/emitter/dstr.rb
|
186
199
|
- lib/unparser/emitter/dsym.rb
|
200
|
+
- lib/unparser/emitter/ensure.rb
|
187
201
|
- lib/unparser/emitter/find_pattern.rb
|
188
202
|
- lib/unparser/emitter/flipflop.rb
|
189
203
|
- lib/unparser/emitter/float.rb
|
@@ -233,8 +247,10 @@ files:
|
|
233
247
|
- lib/unparser/node_details.rb
|
234
248
|
- lib/unparser/node_details/send.rb
|
235
249
|
- lib/unparser/node_helpers.rb
|
250
|
+
- lib/unparser/util.rb
|
236
251
|
- lib/unparser/validation.rb
|
237
252
|
- lib/unparser/writer.rb
|
253
|
+
- lib/unparser/writer/array.rb
|
238
254
|
- lib/unparser/writer/binary.rb
|
239
255
|
- lib/unparser/writer/dynamic_string.rb
|
240
256
|
- lib/unparser/writer/regexp.rb
|
@@ -251,11 +267,10 @@ licenses:
|
|
251
267
|
- MIT
|
252
268
|
metadata:
|
253
269
|
bug_tracker_uri: https://github.com/mbj/unparser/issues
|
254
|
-
changelog_uri: https://github.com/mbj/unparser/blob/
|
270
|
+
changelog_uri: https://github.com/mbj/unparser/blob/main/Changelog.md
|
255
271
|
funding_uri: https://github.com/sponsors/mbj
|
256
272
|
source_code_uri: https://github.com/mbj/unparser
|
257
273
|
rubygems_mfa_required: 'true'
|
258
|
-
post_install_message:
|
259
274
|
rdoc_options: []
|
260
275
|
require_paths:
|
261
276
|
- lib
|
@@ -270,8 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
285
|
- !ruby/object:Gem::Version
|
271
286
|
version: '0'
|
272
287
|
requirements: []
|
273
|
-
rubygems_version: 3.
|
274
|
-
signing_key:
|
288
|
+
rubygems_version: 3.6.7
|
275
289
|
specification_version: 4
|
276
290
|
summary: Generate equivalent source for parser gem AST nodes
|
277
291
|
test_files: []
|