ruby-next-core 0.13.1 → 0.14.1
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/CHANGELOG.md +40 -0
- data/README.md +31 -5
- data/bin/transform +5 -1
- data/lib/.rbnext/2.1/ruby-next/core.rb +7 -1
- data/lib/.rbnext/2.1/ruby-next/language.rb +41 -23
- data/lib/.rbnext/2.3/ruby-next/commands/nextify.rb +2 -2
- data/lib/.rbnext/2.3/ruby-next/language/eval.rb +1 -0
- data/lib/.rbnext/2.3/ruby-next/language/rewriters/{endless_range.rb → 2.6/endless_range.rb} +0 -0
- data/lib/.rbnext/2.3/ruby-next/language/rewriters/{pattern_matching.rb → 2.7/pattern_matching.rb} +121 -34
- data/lib/.rbnext/2.3/ruby-next/language/rewriters/3.1/anonymous_block.rb +68 -0
- data/lib/.rbnext/2.3/ruby-next/language/rewriters/base.rb +13 -1
- data/lib/.rbnext/2.7/ruby-next/core.rb +7 -1
- data/lib/.rbnext/2.7/ruby-next/language/rewriters/2.7/pattern_matching.rb +1061 -0
- data/lib/ruby-next/commands/nextify.rb +2 -2
- data/lib/ruby-next/config.rb +2 -2
- data/lib/ruby-next/core/enumerable/compact.rb +22 -0
- data/lib/ruby-next/core/integer/try_convert.rb +16 -0
- data/lib/ruby-next/core/matchdata/match.rb +9 -0
- data/lib/ruby-next/core/refinement/import.rb +60 -0
- data/lib/ruby-next/core.rb +7 -1
- data/lib/ruby-next/language/eval.rb +1 -0
- data/lib/ruby-next/language/rewriters/{numeric_literals.rb → 2.1/numeric_literals.rb} +0 -0
- data/lib/ruby-next/language/rewriters/{required_kwargs.rb → 2.1/required_kwargs.rb} +0 -0
- data/lib/ruby-next/language/rewriters/{safe_navigation.rb → 2.3/safe_navigation.rb} +0 -0
- data/lib/ruby-next/language/rewriters/{squiggly_heredoc.rb → 2.3/squiggly_heredoc.rb} +0 -0
- data/lib/ruby-next/language/rewriters/{runtime → 2.4}/dir.rb +0 -0
- data/lib/ruby-next/language/rewriters/{endless_range.rb → 2.6/endless_range.rb} +0 -0
- data/lib/ruby-next/language/rewriters/{args_forward.rb → 2.7/args_forward.rb} +0 -0
- data/lib/ruby-next/language/rewriters/{numbered_params.rb → 2.7/numbered_params.rb} +0 -0
- data/lib/ruby-next/language/rewriters/{pattern_matching.rb → 2.7/pattern_matching.rb} +121 -34
- data/lib/ruby-next/language/rewriters/{args_forward_leading.rb → 3.0/args_forward_leading.rb} +0 -0
- data/lib/ruby-next/language/rewriters/{endless_method.rb → 3.0/endless_method.rb} +15 -12
- data/lib/ruby-next/language/rewriters/{find_pattern.rb → 3.0/find_pattern.rb} +1 -3
- data/lib/ruby-next/language/rewriters/3.0/in_pattern.rb +22 -0
- data/lib/ruby-next/language/rewriters/3.1/anonymous_block.rb +68 -0
- data/lib/ruby-next/language/rewriters/3.1/endless_method_command.rb +46 -0
- data/lib/ruby-next/language/rewriters/3.1/oneline_pattern_parensless.rb +41 -0
- data/lib/ruby-next/language/rewriters/3.1/pin_vars_pattern.rb +50 -0
- data/lib/ruby-next/language/rewriters/3.1/refinement_import_methods.rb +60 -0
- data/lib/ruby-next/language/rewriters/{shorthand_hash.rb → 3.1/shorthand_hash.rb} +6 -4
- data/lib/ruby-next/language/rewriters/base.rb +13 -1
- data/lib/ruby-next/language/{edge.rb → rewriters/edge.rb} +0 -0
- data/lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb +50 -0
- data/lib/ruby-next/language/rewriters/{method_reference.rb → proposed/method_reference.rb} +0 -0
- data/lib/ruby-next/language/rewriters/proposed.rb +9 -0
- data/lib/ruby-next/language/rewriters/runtime.rb +1 -2
- data/lib/ruby-next/language.rb +41 -23
- data/lib/ruby-next/rubocop.rb +24 -4
- data/lib/ruby-next/version.rb +1 -1
- metadata +35 -23
- data/lib/ruby-next/language/proposed.rb +0 -9
- data/lib/ruby-next/language/rewriters/in_pattern.rb +0 -56
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyNext
|
4
|
+
module Language
|
5
|
+
module Rewriters
|
6
|
+
using RubyNext
|
7
|
+
|
8
|
+
# Allow omitting parentheses around patterns in `=>` and `in`
|
9
|
+
class OnelinePatternParensless < Base
|
10
|
+
NAME = "pattern-matching-oneline-parensless"
|
11
|
+
SYNTAX_PROBE = "[1, 2] => a, b"
|
12
|
+
MIN_SUPPORTED_VERSION = Gem::Version.new("3.1.0")
|
13
|
+
|
14
|
+
def on_match_pattern(node)
|
15
|
+
_, pattern = *node.children
|
16
|
+
|
17
|
+
# When no parens, children boundaries are the same as the whole pattern
|
18
|
+
if (
|
19
|
+
pattern.type == :array_pattern ||
|
20
|
+
pattern.type == :hash_pattern
|
21
|
+
) &&
|
22
|
+
pattern.children.any? &&
|
23
|
+
pattern.loc.column == pattern.children.first.loc.column &&
|
24
|
+
pattern.loc.last_column == pattern.children.last.loc.last_column
|
25
|
+
|
26
|
+
context.track! self
|
27
|
+
|
28
|
+
left_p, right_p = pattern.type == :array_pattern ? %w([ ]) : %w[{ }]
|
29
|
+
|
30
|
+
insert_before(pattern.loc.expression, left_p)
|
31
|
+
insert_after(pattern.loc.expression, right_p)
|
32
|
+
else
|
33
|
+
super(node)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
alias on_match_pattern_p on_match_pattern
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyNext
|
4
|
+
module Language
|
5
|
+
module Rewriters
|
6
|
+
using RubyNext
|
7
|
+
|
8
|
+
# Separate pattern matching rewriter for Ruby 2.7 and 3.0 to
|
9
|
+
# transpile only ^(ivar|cvar|gvar)
|
10
|
+
class PinVarsPattern < PatternMatching
|
11
|
+
NAME = "pattern-matching-pin-vars"
|
12
|
+
SYNTAX_PROBE = "@a = 0; case 0; in ^@a; true; end"
|
13
|
+
MIN_SUPPORTED_VERSION = Gem::Version.new("3.1.0")
|
14
|
+
|
15
|
+
def on_case_match(node)
|
16
|
+
@has_pin_vars = false
|
17
|
+
process_regular_node(node).then do |new_node|
|
18
|
+
return new_node unless has_pin_vars
|
19
|
+
super(node)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def on_match_pattern(node)
|
24
|
+
@has_pin_vars = false
|
25
|
+
process_regular_node(node).then do |new_node|
|
26
|
+
return new_node unless has_pin_vars
|
27
|
+
super(node)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def on_match_pattern_p(node)
|
32
|
+
@has_pin_vars = false
|
33
|
+
process_regular_node(node).then do |new_node|
|
34
|
+
return new_node unless has_pin_vars
|
35
|
+
super(node)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def on_pin(node)
|
40
|
+
@has_pin_vars = node.children.first.type != :lvar
|
41
|
+
super(node)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
attr_reader :has_pin_vars
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Add binding argument to all self-less eval's
|
4
|
+
module RubyNext
|
5
|
+
module Language
|
6
|
+
module Rewriters
|
7
|
+
class RefinementImportMethods < Language::Rewriters::Base
|
8
|
+
NAME = "refinement-import-methods"
|
9
|
+
SYNTAX_PROBE = "a = Module.new{}; Module.new do; refine String do; import_methods a end; end"
|
10
|
+
MIN_SUPPORTED_VERSION = Gem::Version.new("3.1.0")
|
11
|
+
|
12
|
+
def on_block(node)
|
13
|
+
sender, args, body = *node
|
14
|
+
receiver, mid, * = *sender
|
15
|
+
|
16
|
+
return super unless mid == :refine && receiver.nil?
|
17
|
+
|
18
|
+
return super unless body
|
19
|
+
|
20
|
+
@within_refinement = true
|
21
|
+
|
22
|
+
node.updated(
|
23
|
+
nil,
|
24
|
+
[
|
25
|
+
sender,
|
26
|
+
args,
|
27
|
+
process(body)
|
28
|
+
]
|
29
|
+
).tap do
|
30
|
+
@within_refinement = false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def on_send(node)
|
35
|
+
return super unless @within_refinement
|
36
|
+
|
37
|
+
_receiver, mid, *children = *node
|
38
|
+
|
39
|
+
return super unless mid == :import_methods
|
40
|
+
|
41
|
+
context.track! self
|
42
|
+
|
43
|
+
updated = node.updated(
|
44
|
+
nil,
|
45
|
+
[
|
46
|
+
s(:const, s(:const, s(:cbase), :RubyNext), :Core),
|
47
|
+
mid,
|
48
|
+
*children,
|
49
|
+
s(:send, nil, :binding)
|
50
|
+
]
|
51
|
+
)
|
52
|
+
|
53
|
+
replace(node.loc.expression, updated)
|
54
|
+
|
55
|
+
updated
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -5,13 +5,15 @@ module RubyNext
|
|
5
5
|
module Rewriters
|
6
6
|
class ShorthandHash < Base
|
7
7
|
NAME = "shorthand-hash"
|
8
|
-
SYNTAX_PROBE = "data = {x}"
|
9
|
-
MIN_SUPPORTED_VERSION = Gem::Version.new(
|
8
|
+
SYNTAX_PROBE = "data = {x:}"
|
9
|
+
MIN_SUPPORTED_VERSION = Gem::Version.new("3.1.0")
|
10
|
+
|
11
|
+
def on_pair(node)
|
12
|
+
return super(node) unless node.children[0].loc.last_column == node.children[1].loc.last_column
|
10
13
|
|
11
|
-
def on_ipair(node)
|
12
14
|
context.track! self
|
13
15
|
|
14
|
-
ident, = *node.children
|
16
|
+
_, ident, = *node.children
|
15
17
|
|
16
18
|
key = key_from_ident(ident)
|
17
19
|
|
@@ -15,6 +15,18 @@ module RubyNext
|
|
15
15
|
|
16
16
|
class Base < ::Parser::TreeRewriter
|
17
17
|
class LocalsTracker
|
18
|
+
using(Module.new do
|
19
|
+
refine ::Parser::AST::Node do
|
20
|
+
def to_index
|
21
|
+
children&.first || type
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
refine ::Object do
|
26
|
+
alias to_index itself
|
27
|
+
end
|
28
|
+
end)
|
29
|
+
|
18
30
|
attr_reader :stacks
|
19
31
|
|
20
32
|
def initialize
|
@@ -29,7 +41,7 @@ module RubyNext
|
|
29
41
|
def [](name, suffix = nil)
|
30
42
|
fetch(name).then do |name|
|
31
43
|
next name unless suffix
|
32
|
-
:"#{name}#{suffix}__"
|
44
|
+
:"#{name}#{suffix.to_index}__"
|
33
45
|
end
|
34
46
|
end
|
35
47
|
|
File without changes
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyNext
|
4
|
+
module Language
|
5
|
+
module Rewriters
|
6
|
+
using RubyNext
|
7
|
+
|
8
|
+
# Separate pattern matching rewriter for Ruby <3.2 to
|
9
|
+
# transpile patterns with variable (instance, class, global) binding
|
10
|
+
class BindVarsPattern < PatternMatching
|
11
|
+
NAME = "pattern-matching-find-pattern"
|
12
|
+
SYNTAX_PROBE = "case 0; in @a; true; else; 1; end"
|
13
|
+
MIN_SUPPORTED_VERSION = Gem::Version.new(RubyNext::NEXT_VERSION)
|
14
|
+
|
15
|
+
def on_case_match(node)
|
16
|
+
@has_vars_pattern = false
|
17
|
+
process_regular_node(node).then do |new_node|
|
18
|
+
return new_node unless has_vars_pattern
|
19
|
+
super(node)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def on_match_pattern(node)
|
24
|
+
@has_vars_pattern = false
|
25
|
+
process_regular_node(node).then do |new_node|
|
26
|
+
return new_node unless has_vars_pattern
|
27
|
+
super(node)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def on_match_pattern_p(node)
|
32
|
+
@has_vars_pattern = false
|
33
|
+
process_regular_node(node).then do |new_node|
|
34
|
+
return new_node unless has_vars_pattern
|
35
|
+
super(node)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def on_match_var(node)
|
40
|
+
@has_vars_pattern = true if node.children[0].is_a?(::Parser::AST::Node)
|
41
|
+
super(node)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
attr_reader :has_vars_pattern
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
File without changes
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Load experimental, proposed etc. Ruby features
|
4
|
+
|
5
|
+
require "ruby-next/language/rewriters/proposed/method_reference"
|
6
|
+
RubyNext::Language.rewriters << RubyNext::Language::Rewriters::MethodReference
|
7
|
+
|
8
|
+
require "ruby-next/language/rewriters/proposed/bind_vars_pattern"
|
9
|
+
RubyNext::Language.rewriters << RubyNext::Language::Rewriters::BindVarsPattern
|
data/lib/ruby-next/language.rb
CHANGED
@@ -174,54 +174,72 @@ module RubyNext
|
|
174
174
|
|
175
175
|
require "ruby-next/language/rewriters/base"
|
176
176
|
|
177
|
-
require "ruby-next/language/rewriters/
|
177
|
+
require "ruby-next/language/rewriters/2.1/numeric_literals"
|
178
|
+
rewriters << Rewriters::NumericLiterals
|
179
|
+
|
180
|
+
require "ruby-next/language/rewriters/2.1/required_kwargs"
|
181
|
+
rewriters << Rewriters::RequiredKwargs
|
182
|
+
|
183
|
+
require "ruby-next/language/rewriters/2.3/squiggly_heredoc"
|
178
184
|
rewriters << Rewriters::SquigglyHeredoc
|
179
185
|
|
180
|
-
require "ruby-next/language/rewriters/safe_navigation"
|
186
|
+
require "ruby-next/language/rewriters/2.3/safe_navigation"
|
181
187
|
rewriters << Rewriters::SafeNavigation
|
182
188
|
|
183
|
-
require "ruby-next/language/rewriters/
|
184
|
-
rewriters << Rewriters::
|
189
|
+
require "ruby-next/language/rewriters/2.7/args_forward"
|
190
|
+
rewriters << Rewriters::ArgsForward
|
185
191
|
|
186
|
-
require "ruby-next/language/rewriters/
|
187
|
-
rewriters << Rewriters::
|
192
|
+
require "ruby-next/language/rewriters/2.7/numbered_params"
|
193
|
+
rewriters << Rewriters::NumberedParams
|
188
194
|
|
189
|
-
require "ruby-next/language/rewriters/
|
190
|
-
rewriters << Rewriters::
|
195
|
+
require "ruby-next/language/rewriters/2.7/pattern_matching"
|
196
|
+
rewriters << Rewriters::PatternMatching
|
191
197
|
|
192
198
|
# Must be added after general args forward rewriter to become
|
193
199
|
# no-op in Ruby <2.7
|
194
|
-
require "ruby-next/language/rewriters/args_forward_leading"
|
200
|
+
require "ruby-next/language/rewriters/3.0/args_forward_leading"
|
195
201
|
rewriters << Rewriters::ArgsForwardLeading
|
196
202
|
|
197
|
-
require "ruby-next/language/rewriters/numbered_params"
|
198
|
-
rewriters << Rewriters::NumberedParams
|
199
|
-
|
200
|
-
require "ruby-next/language/rewriters/pattern_matching"
|
201
|
-
rewriters << Rewriters::PatternMatching
|
202
|
-
|
203
203
|
# Must be added after general pattern matching rewriter to become
|
204
204
|
# no-op in Ruby <2.7
|
205
|
-
require "ruby-next/language/rewriters/find_pattern"
|
205
|
+
require "ruby-next/language/rewriters/3.0/find_pattern"
|
206
206
|
rewriters << Rewriters::FindPattern
|
207
207
|
|
208
|
-
require "ruby-next/language/rewriters/in_pattern"
|
208
|
+
require "ruby-next/language/rewriters/3.0/in_pattern"
|
209
209
|
rewriters << Rewriters::InPattern
|
210
210
|
|
211
|
+
require "ruby-next/language/rewriters/3.0/endless_method"
|
212
|
+
RubyNext::Language.rewriters << RubyNext::Language::Rewriters::EndlessMethod
|
213
|
+
|
214
|
+
require "ruby-next/language/rewriters/3.1/oneline_pattern_parensless"
|
215
|
+
rewriters << Rewriters::OnelinePatternParensless
|
216
|
+
|
217
|
+
require "ruby-next/language/rewriters/3.1/pin_vars_pattern"
|
218
|
+
rewriters << Rewriters::PinVarsPattern
|
219
|
+
|
220
|
+
require "ruby-next/language/rewriters/3.1/anonymous_block"
|
221
|
+
rewriters << Rewriters::AnonymousBlock
|
222
|
+
|
223
|
+
require "ruby-next/language/rewriters/3.1/refinement_import_methods"
|
224
|
+
rewriters << Rewriters::RefinementImportMethods
|
225
|
+
|
226
|
+
require "ruby-next/language/rewriters/3.1/endless_method_command"
|
227
|
+
rewriters << Rewriters::EndlessMethodCommand
|
228
|
+
|
229
|
+
require "ruby-next/language/rewriters/3.1/shorthand_hash"
|
230
|
+
rewriters << RubyNext::Language::Rewriters::ShorthandHash
|
231
|
+
|
211
232
|
# Put endless range in the end, 'cause Parser fails to parse it in
|
212
233
|
# pattern matching
|
213
|
-
require "ruby-next/language/rewriters/endless_range"
|
234
|
+
require "ruby-next/language/rewriters/2.6/endless_range"
|
214
235
|
rewriters << Rewriters::EndlessRange
|
215
236
|
|
216
|
-
require "ruby-next/language/rewriters/endless_method"
|
217
|
-
RubyNext::Language.rewriters << RubyNext::Language::Rewriters::EndlessMethod
|
218
|
-
|
219
237
|
if ENV["RUBY_NEXT_EDGE"] == "1"
|
220
|
-
require "ruby-next/language/edge"
|
238
|
+
require "ruby-next/language/rewriters/edge"
|
221
239
|
end
|
222
240
|
|
223
241
|
if ENV["RUBY_NEXT_PROPOSED"] == "1"
|
224
|
-
require "ruby-next/language/proposed"
|
242
|
+
require "ruby-next/language/rewriters/proposed"
|
225
243
|
end
|
226
244
|
end
|
227
245
|
end
|
data/lib/ruby-next/rubocop.rb
CHANGED
@@ -79,10 +79,6 @@ module RuboCop
|
|
79
79
|
trigger_responding_cops(:on_meth_ref, node)
|
80
80
|
end
|
81
81
|
|
82
|
-
def on_ipair(node)
|
83
|
-
trigger_responding_cops(:on_ipair, node)
|
84
|
-
end
|
85
|
-
|
86
82
|
unless method_defined?(:on_numblock)
|
87
83
|
def on_numblock(node)
|
88
84
|
children = node.children
|
@@ -108,6 +104,21 @@ module RuboCop
|
|
108
104
|
end
|
109
105
|
end
|
110
106
|
|
107
|
+
Commissioner.prepend(Module.new do
|
108
|
+
# Ignore anonymous blocks
|
109
|
+
def on_block_pass(node)
|
110
|
+
return if node.children == [nil]
|
111
|
+
|
112
|
+
super
|
113
|
+
end
|
114
|
+
|
115
|
+
def on_blockarg(node)
|
116
|
+
return if node.children == [nil]
|
117
|
+
|
118
|
+
super
|
119
|
+
end
|
120
|
+
end)
|
121
|
+
|
111
122
|
module Layout
|
112
123
|
require "rubocop/cop/layout/assignment_indentation"
|
113
124
|
|
@@ -147,6 +158,15 @@ module RuboCop
|
|
147
158
|
node.loc.expression.line
|
148
159
|
end
|
149
160
|
end)
|
161
|
+
|
162
|
+
require "rubocop/cop/layout/space_after_colon"
|
163
|
+
SpaceAfterColon.prepend(Module.new do
|
164
|
+
def on_pair(node)
|
165
|
+
return if node.children[0].loc.last_column == node.children[1].loc.last_column
|
166
|
+
|
167
|
+
super(node)
|
168
|
+
end
|
169
|
+
end)
|
150
170
|
end
|
151
171
|
|
152
172
|
module Style
|
data/lib/ruby-next/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-next-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-next-parser
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.
|
19
|
+
version: 3.1.1.0
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.
|
26
|
+
version: 3.1.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: unparser
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -61,11 +61,13 @@ files:
|
|
61
61
|
- lib/.rbnext/2.3/ruby-next/commands/core_ext.rb
|
62
62
|
- lib/.rbnext/2.3/ruby-next/commands/nextify.rb
|
63
63
|
- lib/.rbnext/2.3/ruby-next/language/eval.rb
|
64
|
+
- lib/.rbnext/2.3/ruby-next/language/rewriters/2.6/endless_range.rb
|
65
|
+
- lib/.rbnext/2.3/ruby-next/language/rewriters/2.7/pattern_matching.rb
|
66
|
+
- lib/.rbnext/2.3/ruby-next/language/rewriters/3.1/anonymous_block.rb
|
64
67
|
- lib/.rbnext/2.3/ruby-next/language/rewriters/base.rb
|
65
|
-
- lib/.rbnext/2.3/ruby-next/language/rewriters/endless_range.rb
|
66
|
-
- lib/.rbnext/2.3/ruby-next/language/rewriters/pattern_matching.rb
|
67
68
|
- lib/.rbnext/2.3/ruby-next/utils.rb
|
68
69
|
- lib/.rbnext/2.7/ruby-next/core.rb
|
70
|
+
- lib/.rbnext/2.7/ruby-next/language/rewriters/2.7/pattern_matching.rb
|
69
71
|
- lib/ruby-next.rb
|
70
72
|
- lib/ruby-next/cli.rb
|
71
73
|
- lib/ruby-next/commands/base.rb
|
@@ -78,6 +80,7 @@ files:
|
|
78
80
|
- lib/ruby-next/core/array/intersect.rb
|
79
81
|
- lib/ruby-next/core/constants/frozen_error.rb
|
80
82
|
- lib/ruby-next/core/constants/no_matching_pattern_error.rb
|
83
|
+
- lib/ruby-next/core/enumerable/compact.rb
|
81
84
|
- lib/ruby-next/core/enumerable/filter.rb
|
82
85
|
- lib/ruby-next/core/enumerable/filter_map.rb
|
83
86
|
- lib/ruby-next/core/enumerable/tally.rb
|
@@ -85,8 +88,11 @@ files:
|
|
85
88
|
- lib/ruby-next/core/hash/deconstruct_keys.rb
|
86
89
|
- lib/ruby-next/core/hash/except.rb
|
87
90
|
- lib/ruby-next/core/hash/merge.rb
|
91
|
+
- lib/ruby-next/core/integer/try_convert.rb
|
88
92
|
- lib/ruby-next/core/kernel/then.rb
|
93
|
+
- lib/ruby-next/core/matchdata/match.rb
|
89
94
|
- lib/ruby-next/core/proc/compose.rb
|
95
|
+
- lib/ruby-next/core/refinement/import.rb
|
90
96
|
- lib/ruby-next/core/runtime.rb
|
91
97
|
- lib/ruby-next/core/string/split.rb
|
92
98
|
- lib/ruby-next/core/struct/deconstruct.rb
|
@@ -99,27 +105,33 @@ files:
|
|
99
105
|
- lib/ruby-next/core_ext.rb
|
100
106
|
- lib/ruby-next/language.rb
|
101
107
|
- lib/ruby-next/language/bootsnap.rb
|
102
|
-
- lib/ruby-next/language/edge.rb
|
103
108
|
- lib/ruby-next/language/eval.rb
|
104
109
|
- lib/ruby-next/language/parser.rb
|
105
|
-
- lib/ruby-next/language/
|
106
|
-
- lib/ruby-next/language/rewriters/
|
107
|
-
- lib/ruby-next/language/rewriters/
|
110
|
+
- lib/ruby-next/language/rewriters/2.1/numeric_literals.rb
|
111
|
+
- lib/ruby-next/language/rewriters/2.1/required_kwargs.rb
|
112
|
+
- lib/ruby-next/language/rewriters/2.3/safe_navigation.rb
|
113
|
+
- lib/ruby-next/language/rewriters/2.3/squiggly_heredoc.rb
|
114
|
+
- lib/ruby-next/language/rewriters/2.4/dir.rb
|
115
|
+
- lib/ruby-next/language/rewriters/2.6/endless_range.rb
|
116
|
+
- lib/ruby-next/language/rewriters/2.7/args_forward.rb
|
117
|
+
- lib/ruby-next/language/rewriters/2.7/numbered_params.rb
|
118
|
+
- lib/ruby-next/language/rewriters/2.7/pattern_matching.rb
|
119
|
+
- lib/ruby-next/language/rewriters/3.0/args_forward_leading.rb
|
120
|
+
- lib/ruby-next/language/rewriters/3.0/endless_method.rb
|
121
|
+
- lib/ruby-next/language/rewriters/3.0/find_pattern.rb
|
122
|
+
- lib/ruby-next/language/rewriters/3.0/in_pattern.rb
|
123
|
+
- lib/ruby-next/language/rewriters/3.1/anonymous_block.rb
|
124
|
+
- lib/ruby-next/language/rewriters/3.1/endless_method_command.rb
|
125
|
+
- lib/ruby-next/language/rewriters/3.1/oneline_pattern_parensless.rb
|
126
|
+
- lib/ruby-next/language/rewriters/3.1/pin_vars_pattern.rb
|
127
|
+
- lib/ruby-next/language/rewriters/3.1/refinement_import_methods.rb
|
128
|
+
- lib/ruby-next/language/rewriters/3.1/shorthand_hash.rb
|
108
129
|
- lib/ruby-next/language/rewriters/base.rb
|
109
|
-
- lib/ruby-next/language/rewriters/
|
110
|
-
- lib/ruby-next/language/rewriters/
|
111
|
-
- lib/ruby-next/language/rewriters/
|
112
|
-
- lib/ruby-next/language/rewriters/
|
113
|
-
- lib/ruby-next/language/rewriters/method_reference.rb
|
114
|
-
- lib/ruby-next/language/rewriters/numbered_params.rb
|
115
|
-
- lib/ruby-next/language/rewriters/numeric_literals.rb
|
116
|
-
- lib/ruby-next/language/rewriters/pattern_matching.rb
|
117
|
-
- lib/ruby-next/language/rewriters/required_kwargs.rb
|
130
|
+
- lib/ruby-next/language/rewriters/edge.rb
|
131
|
+
- lib/ruby-next/language/rewriters/proposed.rb
|
132
|
+
- lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb
|
133
|
+
- lib/ruby-next/language/rewriters/proposed/method_reference.rb
|
118
134
|
- lib/ruby-next/language/rewriters/runtime.rb
|
119
|
-
- lib/ruby-next/language/rewriters/runtime/dir.rb
|
120
|
-
- lib/ruby-next/language/rewriters/safe_navigation.rb
|
121
|
-
- lib/ruby-next/language/rewriters/shorthand_hash.rb
|
122
|
-
- lib/ruby-next/language/rewriters/squiggly_heredoc.rb
|
123
135
|
- lib/ruby-next/language/runtime.rb
|
124
136
|
- lib/ruby-next/language/setup.rb
|
125
137
|
- lib/ruby-next/language/unparser.rb
|
@@ -1,9 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Load experimental, proposed etc. Ruby features
|
4
|
-
|
5
|
-
require "ruby-next/language/rewriters/method_reference"
|
6
|
-
RubyNext::Language.rewriters << RubyNext::Language::Rewriters::MethodReference
|
7
|
-
|
8
|
-
require "ruby-next/language/rewriters/shorthand_hash"
|
9
|
-
RubyNext::Language.rewriters << RubyNext::Language::Rewriters::ShorthandHash
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "ruby-next/language/rewriters/pattern_matching"
|
4
|
-
|
5
|
-
module RubyNext
|
6
|
-
module Language
|
7
|
-
module Rewriters
|
8
|
-
using RubyNext
|
9
|
-
|
10
|
-
# Separate pattern matching rewriter for Ruby 2.7 to
|
11
|
-
# transpile only `in` patterns
|
12
|
-
class InPattern < PatternMatching
|
13
|
-
NAME = "pattern-matching-in"
|
14
|
-
SYNTAX_PROBE = "1 in 2"
|
15
|
-
MIN_SUPPORTED_VERSION = Gem::Version.new("3.0.0")
|
16
|
-
|
17
|
-
# Make case-match no-op
|
18
|
-
def on_case_match(node)
|
19
|
-
node
|
20
|
-
end
|
21
|
-
|
22
|
-
def on_match_pattern_p(node)
|
23
|
-
context.track! self
|
24
|
-
|
25
|
-
@deconstructed_keys = {}
|
26
|
-
@predicates = Predicates::Noop.new
|
27
|
-
|
28
|
-
matchee =
|
29
|
-
s(:begin, s(:lvasgn, MATCHEE, node.children[0]))
|
30
|
-
|
31
|
-
pattern =
|
32
|
-
locals.with(
|
33
|
-
matchee: MATCHEE,
|
34
|
-
arr: MATCHEE_ARR,
|
35
|
-
hash: MATCHEE_HASH
|
36
|
-
) do
|
37
|
-
send(
|
38
|
-
:"#{node.children[1].type}_clause",
|
39
|
-
node.children[1]
|
40
|
-
)
|
41
|
-
end
|
42
|
-
|
43
|
-
node.updated(
|
44
|
-
:and,
|
45
|
-
[
|
46
|
-
matchee,
|
47
|
-
pattern
|
48
|
-
]
|
49
|
-
).tap do |new_node|
|
50
|
-
replace(node.loc.expression, inline_blocks(unparse(new_node)))
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|