ruby-next-core 0.13.1 → 0.14.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|