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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +40 -0
  3. data/README.md +31 -5
  4. data/bin/transform +5 -1
  5. data/lib/.rbnext/2.1/ruby-next/core.rb +7 -1
  6. data/lib/.rbnext/2.1/ruby-next/language.rb +41 -23
  7. data/lib/.rbnext/2.3/ruby-next/commands/nextify.rb +2 -2
  8. data/lib/.rbnext/2.3/ruby-next/language/eval.rb +1 -0
  9. data/lib/.rbnext/2.3/ruby-next/language/rewriters/{endless_range.rb → 2.6/endless_range.rb} +0 -0
  10. data/lib/.rbnext/2.3/ruby-next/language/rewriters/{pattern_matching.rb → 2.7/pattern_matching.rb} +121 -34
  11. data/lib/.rbnext/2.3/ruby-next/language/rewriters/3.1/anonymous_block.rb +68 -0
  12. data/lib/.rbnext/2.3/ruby-next/language/rewriters/base.rb +13 -1
  13. data/lib/.rbnext/2.7/ruby-next/core.rb +7 -1
  14. data/lib/.rbnext/2.7/ruby-next/language/rewriters/2.7/pattern_matching.rb +1061 -0
  15. data/lib/ruby-next/commands/nextify.rb +2 -2
  16. data/lib/ruby-next/config.rb +2 -2
  17. data/lib/ruby-next/core/enumerable/compact.rb +22 -0
  18. data/lib/ruby-next/core/integer/try_convert.rb +16 -0
  19. data/lib/ruby-next/core/matchdata/match.rb +9 -0
  20. data/lib/ruby-next/core/refinement/import.rb +60 -0
  21. data/lib/ruby-next/core.rb +7 -1
  22. data/lib/ruby-next/language/eval.rb +1 -0
  23. data/lib/ruby-next/language/rewriters/{numeric_literals.rb → 2.1/numeric_literals.rb} +0 -0
  24. data/lib/ruby-next/language/rewriters/{required_kwargs.rb → 2.1/required_kwargs.rb} +0 -0
  25. data/lib/ruby-next/language/rewriters/{safe_navigation.rb → 2.3/safe_navigation.rb} +0 -0
  26. data/lib/ruby-next/language/rewriters/{squiggly_heredoc.rb → 2.3/squiggly_heredoc.rb} +0 -0
  27. data/lib/ruby-next/language/rewriters/{runtime → 2.4}/dir.rb +0 -0
  28. data/lib/ruby-next/language/rewriters/{endless_range.rb → 2.6/endless_range.rb} +0 -0
  29. data/lib/ruby-next/language/rewriters/{args_forward.rb → 2.7/args_forward.rb} +0 -0
  30. data/lib/ruby-next/language/rewriters/{numbered_params.rb → 2.7/numbered_params.rb} +0 -0
  31. data/lib/ruby-next/language/rewriters/{pattern_matching.rb → 2.7/pattern_matching.rb} +121 -34
  32. data/lib/ruby-next/language/rewriters/{args_forward_leading.rb → 3.0/args_forward_leading.rb} +0 -0
  33. data/lib/ruby-next/language/rewriters/{endless_method.rb → 3.0/endless_method.rb} +15 -12
  34. data/lib/ruby-next/language/rewriters/{find_pattern.rb → 3.0/find_pattern.rb} +1 -3
  35. data/lib/ruby-next/language/rewriters/3.0/in_pattern.rb +22 -0
  36. data/lib/ruby-next/language/rewriters/3.1/anonymous_block.rb +68 -0
  37. data/lib/ruby-next/language/rewriters/3.1/endless_method_command.rb +46 -0
  38. data/lib/ruby-next/language/rewriters/3.1/oneline_pattern_parensless.rb +41 -0
  39. data/lib/ruby-next/language/rewriters/3.1/pin_vars_pattern.rb +50 -0
  40. data/lib/ruby-next/language/rewriters/3.1/refinement_import_methods.rb +60 -0
  41. data/lib/ruby-next/language/rewriters/{shorthand_hash.rb → 3.1/shorthand_hash.rb} +6 -4
  42. data/lib/ruby-next/language/rewriters/base.rb +13 -1
  43. data/lib/ruby-next/language/{edge.rb → rewriters/edge.rb} +0 -0
  44. data/lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb +50 -0
  45. data/lib/ruby-next/language/rewriters/{method_reference.rb → proposed/method_reference.rb} +0 -0
  46. data/lib/ruby-next/language/rewriters/proposed.rb +9 -0
  47. data/lib/ruby-next/language/rewriters/runtime.rb +1 -2
  48. data/lib/ruby-next/language.rb +41 -23
  49. data/lib/ruby-next/rubocop.rb +24 -4
  50. data/lib/ruby-next/version.rb +1 -1
  51. metadata +35 -23
  52. data/lib/ruby-next/language/proposed.rb +0 -9
  53. 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(RubyNext::NEXT_VERSION)
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
 
@@ -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
@@ -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
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Load rewriters only required for runtime transpiling
4
-
5
- require "ruby-next/language/rewriters/runtime/dir"
4
+ require "ruby-next/language/rewriters/2.4/dir"
6
5
  RubyNext::Language.rewriters << RubyNext::Language::Rewriters::Dir
@@ -174,54 +174,72 @@ module RubyNext
174
174
 
175
175
  require "ruby-next/language/rewriters/base"
176
176
 
177
- require "ruby-next/language/rewriters/squiggly_heredoc"
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/numeric_literals"
184
- rewriters << Rewriters::NumericLiterals
189
+ require "ruby-next/language/rewriters/2.7/args_forward"
190
+ rewriters << Rewriters::ArgsForward
185
191
 
186
- require "ruby-next/language/rewriters/required_kwargs"
187
- rewriters << Rewriters::RequiredKwargs
192
+ require "ruby-next/language/rewriters/2.7/numbered_params"
193
+ rewriters << Rewriters::NumberedParams
188
194
 
189
- require "ruby-next/language/rewriters/args_forward"
190
- rewriters << Rewriters::ArgsForward
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
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyNext
4
- VERSION = "0.13.1"
4
+ VERSION = "0.14.1"
5
5
  end
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.13.1
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: 2021-09-27 00:00:00.000000000 Z
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.0.0.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.0.0.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/proposed.rb
106
- - lib/ruby-next/language/rewriters/args_forward.rb
107
- - lib/ruby-next/language/rewriters/args_forward_leading.rb
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/endless_method.rb
110
- - lib/ruby-next/language/rewriters/endless_range.rb
111
- - lib/ruby-next/language/rewriters/find_pattern.rb
112
- - lib/ruby-next/language/rewriters/in_pattern.rb
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