ruby-next-core 0.11.0 → 0.13.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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -0
  3. data/README.md +17 -3
  4. data/lib/.rbnext/2.1/ruby-next/core.rb +206 -0
  5. data/lib/.rbnext/2.1/ruby-next/language.rb +227 -0
  6. data/lib/.rbnext/2.3/ruby-next/commands/nextify.rb +1 -1
  7. data/lib/.rbnext/2.3/ruby-next/language/eval.rb +1 -1
  8. data/lib/.rbnext/2.3/ruby-next/language/rewriters/base.rb +4 -4
  9. data/lib/.rbnext/2.3/ruby-next/language/rewriters/endless_range.rb +1 -1
  10. data/lib/.rbnext/2.3/ruby-next/language/rewriters/pattern_matching.rb +3 -3
  11. data/lib/.rbnext/2.3/ruby-next/utils.rb +1 -1
  12. data/lib/.rbnext/2.7/ruby-next/core.rb +3 -0
  13. data/lib/ruby-next/config.rb +6 -1
  14. data/lib/ruby-next/core/array/intersect.rb +9 -0
  15. data/lib/ruby-next/core/constants/frozen_error.rb +15 -0
  16. data/lib/ruby-next/core/enumerable/tally.rb +46 -7
  17. data/lib/ruby-next/core.rb +3 -0
  18. data/lib/ruby-next/core_ext.rb +1 -1
  19. data/lib/ruby-next/language/parser.rb +0 -3
  20. data/lib/ruby-next/language/rewriters/args_forward.rb +6 -2
  21. data/lib/ruby-next/language/rewriters/args_forward_leading.rb +1 -1
  22. data/lib/ruby-next/language/rewriters/method_reference.rb +1 -1
  23. data/lib/ruby-next/language/rewriters/numeric_literals.rb +41 -0
  24. data/lib/ruby-next/language/rewriters/pattern_matching.rb +1 -1
  25. data/lib/ruby-next/language/rewriters/required_kwargs.rb +39 -0
  26. data/lib/ruby-next/language/rewriters/safe_navigation.rb +42 -29
  27. data/lib/ruby-next/language/rewriters/shorthand_hash.rb +1 -1
  28. data/lib/ruby-next/language/setup.rb +3 -2
  29. data/lib/ruby-next/language/unparser.rb +3 -8
  30. data/lib/ruby-next/language.rb +50 -43
  31. data/lib/ruby-next/setup_self.rb +3 -1
  32. data/lib/ruby-next/version.rb +1 -1
  33. metadata +14 -14
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ RubyNext::Core.patch Object,
4
+ name: "FrozenError",
5
+ method: nil,
6
+ refineable: [],
7
+ version: "2.5",
8
+ # avoid defining the constant twice, 'causae it's already included in core
9
+ # we only use the contents in `ruby-next core_ext`.
10
+ supported: true,
11
+ location: [__FILE__, __LINE__ + 2] do
12
+ <<-RUBY
13
+ FrozenError ||= RuntimeError
14
+ RUBY
15
+ end
@@ -1,12 +1,51 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Refine Array seprately, 'cause refining modules is vulnerable to prepend:
4
- # - https://bugs.ruby-lang.org/issues/13446
5
- RubyNext::Core.patch Enumerable, method: :tally, version: "2.7", refineable: [Enumerable, Array] do
6
- <<-RUBY
7
- def tally
8
- each_with_object({}) do |v, acc|
9
- acc[v] ||= 0
3
+ # Ruby 3.1 adds an ability to pass a hash as accumulator.
4
+ #
5
+ # NOTE: We have separate patches for MRI 3.0+ and others due to the unsupported refinements vs modules behaviour.
6
+ if Enumerable.method_defined?(:tally) && ([].method(:tally).arity == 0) && !(defined?(JRUBY_VERSION) || defined?(TruffleRuby))
7
+ RubyNext::Core.patch name: "TallyWithHash", supported: false, native: nil, method: :tally, version: "3.1", refineable: [Enumerable] do
8
+ <<-'RUBY'
9
+ def tally(*attrs)
10
+ return super() if attrs.size.zero?
11
+
12
+ raise ArgumentError, "wrong number of arguments (given #{attrs.size}, expected 0..1)" if attrs.size > 1
13
+
14
+ hash = attrs.size.zero? ? {} : attrs[0].to_hash
15
+ raise FrozenError, "can't modify frozen #{hash.class}: #{hash}" if hash.frozen?
16
+
17
+ each_with_object(hash) do |v, acc|
18
+ acc[v] = 0 unless acc.key?(v)
19
+ acc[v] += 1
20
+ end
21
+ end
22
+ RUBY
23
+ end
24
+ else
25
+ RubyNext::Core.patch Enumerable, method: :tally, version: "3.1", refineable: [Enumerable, Array] do
26
+ <<-'RUBY'
27
+ def tally(acc = {})
28
+ hash = acc.to_hash
29
+ raise FrozenError, "can't modify frozen #{hash.class}: #{hash}" if hash.frozen?
30
+
31
+ each_with_object(hash) do |v, acc|
32
+ acc[v] = 0 unless acc.key?(v)
33
+ acc[v] += 1
34
+ end
35
+ end
36
+ RUBY
37
+ end
38
+ end
39
+
40
+ # This patch is intended for core extensions only (since we can not use prepend here)
41
+ RubyNext::Core.patch Enumerable, name: "TallyWithHashCoreExt", version: "3.1", supported: Enumerable.method_defined?(:tally) && ([].method(:tally).arity != 0), method: :tally, refineable: [] do
42
+ <<-'RUBY'
43
+ def tally(acc = {})
44
+ hash = acc.to_hash
45
+ raise FrozenError, "can't modify frozen #{hash.class}: #{hash}" if hash.frozen?
46
+
47
+ each_with_object(hash) do |v, acc|
48
+ acc[v] = 0 unless acc.key?(v)
10
49
  acc[v] += 1
11
50
  end
12
51
  end
@@ -181,6 +181,7 @@ unless defined?(NoMatchingPatternError)
181
181
  end
182
182
 
183
183
  require "ruby-next/core/constants/no_matching_pattern_error"
184
+ require "ruby-next/core/constants/frozen_error"
184
185
  require "ruby-next/core/array/deconstruct"
185
186
  require "ruby-next/core/hash/deconstruct_keys"
186
187
  require "ruby-next/core/struct/deconstruct"
@@ -188,6 +189,8 @@ require "ruby-next/core/struct/deconstruct_keys"
188
189
 
189
190
  require "ruby-next/core/hash/except"
190
191
 
192
+ require "ruby-next/core/array/intersect"
193
+
191
194
  # Generate refinements
192
195
  RubyNext.module_eval do
193
196
  RubyNext::Core.patches.refined.each do |mod, patches|
@@ -10,7 +10,7 @@ RubyNext::Core.patches.extensions.each do |mod, patches|
10
10
  next if patch.supported?
11
11
 
12
12
  if patch.prepend?
13
- mod.prepend(patch.to_module)
13
+ mod.send(:prepend, patch.to_module)
14
14
  else
15
15
  mod.module_eval(patch.body, *patch.location)
16
16
  end
@@ -19,9 +19,6 @@ module RubyNext
19
19
  class Builder < ::Parser::Builders::Default
20
20
  modernize
21
21
 
22
- # Unparser doesn't support kwargs node yet
23
- self.emit_kwargs = false if respond_to?(:emit_kwargs=)
24
-
25
22
  unless method_defined?(:match_pattern_p)
26
23
  include BuilderExt
27
24
  end
@@ -11,16 +11,20 @@ module RubyNext
11
11
  REST = :__rest__
12
12
  BLOCK = :__block__
13
13
 
14
- def on_forward_arg(node)
14
+ def on_args(node)
15
+ farg = node.children.find { |child| child.is_a?(::Parser::AST::Node) && child.type == :forward_arg }
16
+ return unless farg
17
+
15
18
  context.track! self
16
19
 
17
20
  node = super(node)
18
21
 
19
- replace(node.loc.expression, "*#{REST}, &#{BLOCK}")
22
+ replace(farg.loc.expression, "*#{REST}, &#{BLOCK}")
20
23
 
21
24
  node.updated(
22
25
  :args,
23
26
  [
27
+ *node.children.slice(0, node.children.index(farg)),
24
28
  s(:restarg, REST),
25
29
  s(:blockarg, BLOCK)
26
30
  ]
@@ -23,7 +23,7 @@ module RubyNext
23
23
  super
24
24
  end
25
25
 
26
- def on_forward_arg(node)
26
+ def on_args(node)
27
27
  return super if leading_farg?
28
28
 
29
29
  node
@@ -6,7 +6,7 @@ module RubyNext
6
6
  class MethodReference < Base
7
7
  NAME = "method-reference"
8
8
  SYNTAX_PROBE = "Language.:transform"
9
- MIN_SUPPORTED_VERSION = Gem::Version.new("3.0.0")
9
+ MIN_SUPPORTED_VERSION = Gem::Version.new(RubyNext::NEXT_VERSION)
10
10
 
11
11
  def on_meth_ref(node)
12
12
  context.track! self
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyNext
4
+ module Language
5
+ module Rewriters
6
+ class NumericLiterals < Base
7
+ using RubyNext
8
+
9
+ NAME = "numeric-literals"
10
+ SYNTAX_PROBE = "2i + 1/2r"
11
+ MIN_SUPPORTED_VERSION = Gem::Version.new("2.1.0")
12
+
13
+ def on_rational(node)
14
+ context.track! self
15
+
16
+ val = node.children.first
17
+
18
+ parts = [s(:int, val.numerator)]
19
+
20
+ parts << s(:int, val.denominator) unless val.denominator == 1
21
+
22
+ s(:send, nil, :Rational, *parts).tap do |new_node|
23
+ replace(node.loc.expression, new_node)
24
+ end
25
+ end
26
+
27
+ def on_complex(node)
28
+ context.track! self
29
+
30
+ val = node.children.first
31
+
32
+ s(:send, nil, :Complex,
33
+ s(:int, val.real),
34
+ s(:int, val.imaginary)).tap do |new_node|
35
+ replace(node.loc.expression, new_node)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -353,7 +353,7 @@ module RubyNext
353
353
 
354
354
  else_clause = (else_clause || no_matching_pattern).then do |node|
355
355
  next node unless node.type == :empty_else
356
- s(:empty)
356
+ nil
357
357
  end
358
358
 
359
359
  clauses << else_clause
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyNext
4
+ module Language
5
+ module Rewriters
6
+ class RequiredKwargs < Base
7
+ using RubyNext
8
+
9
+ NAME = "required-kwargs"
10
+ SYNTAX_PROBE = "obj = Object.new; def obj.foo(x:, y: 1); end"
11
+ MIN_SUPPORTED_VERSION = Gem::Version.new("2.1.0")
12
+
13
+ def on_kwarg(node)
14
+ context.track! self
15
+
16
+ name = node.children[0]
17
+
18
+ new_node = node.updated(
19
+ :kwoptarg,
20
+ [name, raise_missing_keyword(name)]
21
+ )
22
+
23
+ replace(node.loc.expression, "#{name}: ::Kernel.raise(::ArgumentError, \"missing keyword: #{name}\")")
24
+
25
+ new_node
26
+ end
27
+
28
+ private
29
+
30
+ def raise_missing_keyword(name)
31
+ s(:send,
32
+ s(:const, s(:cbase), :Kernel), :raise,
33
+ s(:const, s(:cbase), :ArgumentError),
34
+ s(:str, "missing keyword: #{name}"))
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -8,6 +8,8 @@ module RubyNext
8
8
  SYNTAX_PROBE = "nil&.x&.nil?"
9
9
  MIN_SUPPORTED_VERSION = Gem::Version.new("2.3.0")
10
10
 
11
+ SAFE_LVAR = :__safe_lvar__
12
+
11
13
  def on_csend(node)
12
14
  node = super(node)
13
15
 
@@ -20,7 +22,7 @@ module RubyNext
20
22
  :and,
21
23
  [
22
24
  process(safe_navigation(receiver)),
23
- s(:send, decsendize(receiver), *args)
25
+ s(:send, safe_lvar, *args)
24
26
  ]
25
27
  ))
26
28
 
@@ -34,18 +36,15 @@ module RubyNext
34
36
 
35
37
  context.track!(self)
36
38
 
37
- new_node = s(:begin,
38
- super(node.updated(
39
- :and,
40
- [
41
- process(safe_navigation(node.children[0].children[0])),
42
- process(node.updated(nil, node.children.map(&method(:decsendize))))
43
- ]
44
- )))
39
+ super(decsendize(node))
40
+ end
45
41
 
46
- replace(node.loc.expression, new_node)
42
+ def on_numblock(node)
43
+ return super(node) unless node.children[0].type == :csend
47
44
 
48
- new_node
45
+ context.track!(self)
46
+
47
+ super(decsendize(node))
49
48
  end
50
49
 
51
50
  def on_op_asgn(node)
@@ -53,37 +52,51 @@ module RubyNext
53
52
 
54
53
  context.track!(self)
55
54
 
55
+ super(decsendize(node))
56
+ end
57
+
58
+ private
59
+
60
+ def decsendize(node)
61
+ csend, *children = node.children
62
+
63
+ receiver, *other = csend.children
64
+
65
+ new_csend = csend.updated(:send, [safe_lvar, *other])
66
+
56
67
  new_node = s(:begin,
57
- super(node.updated(
68
+ node.updated(
58
69
  :and,
59
70
  [
60
- process(safe_navigation(node.children[0].children[0])),
61
- process(node.updated(nil, node.children.map(&method(:decsendize))))
71
+ process(safe_navigation(receiver)),
72
+ process(node.updated(nil, [new_csend, *children]))
62
73
  ]
63
- )))
74
+ ))
64
75
 
65
76
  replace(node.loc.expression, new_node)
66
77
 
67
78
  new_node
68
79
  end
69
80
 
70
- private
71
-
72
- def decsendize(node)
73
- return node unless node.is_a?(::Parser::AST::Node) && node.type == :csend
74
-
75
- node.updated(:send, node.children.map(&method(:decsendize)))
76
- end
77
-
78
- # Transform: x&.y -> (!x.nil? && x.y) || nil
81
+ # Transform: x&.y -> ((_tmp_ = x) || true) && (!_tmp_.nil? || nil) && _tmp_.y
79
82
  # This allows us to handle `false&.to_s == "false"`
80
83
  def safe_navigation(node)
81
84
  s(:begin,
82
- s(:or,
83
- s(:send,
84
- s(:send, node, :nil?),
85
- :!),
86
- s(:nil)))
85
+ s(:and,
86
+ s(:begin,
87
+ s(:or,
88
+ s(:begin, s(:lvasgn, SAFE_LVAR, node)),
89
+ s(:true))),
90
+ s(:begin,
91
+ s(:or,
92
+ s(:send,
93
+ s(:send, safe_lvar, :nil?),
94
+ :!),
95
+ s(:nil)))))
96
+ end
97
+
98
+ def safe_lvar
99
+ s(:lvar, SAFE_LVAR)
87
100
  end
88
101
  end
89
102
  end
@@ -6,7 +6,7 @@ module RubyNext
6
6
  class ShorthandHash < Base
7
7
  NAME = "shorthand-hash"
8
8
  SYNTAX_PROBE = "data = {x}"
9
- MIN_SUPPORTED_VERSION = Gem::Version.new("3.0.0")
9
+ MIN_SUPPORTED_VERSION = Gem::Version.new(RubyNext::NEXT_VERSION)
10
10
 
11
11
  def on_ipair(node)
12
12
  context.track! self
@@ -30,7 +30,7 @@ module RubyNext
30
30
 
31
31
  def setup_gem_load_path(lib_dir = "lib", rbnext_dir: RUBY_NEXT_DIR, transpile: false)
32
32
  called_from = caller_locations(1, 1).first.path
33
- dirname = File.dirname(called_from)
33
+ dirname = File.realpath(File.dirname(called_from))
34
34
 
35
35
  loop do
36
36
  basename = File.basename(dirname)
@@ -50,7 +50,8 @@ module RubyNext
50
50
  GemTranspiler.maybe_transpile(File.dirname(dirname), lib_dir, next_dirname) if transpile
51
51
 
52
52
  current_index = $LOAD_PATH.find_index do |load_path|
53
- Pathname.new(load_path).cleanpath.to_s == dirname
53
+ pn = Pathname.new(load_path)
54
+ pn.exist? && pn.realpath.to_s == dirname
54
55
  end
55
56
 
56
57
  raise "Gem's lib is not in the $LOAD_PATH: #{dirname}" if current_index.nil?
@@ -7,12 +7,7 @@ $VERBOSE = save_verbose
7
7
 
8
8
  require "unparser"
9
9
 
10
- # PR: https://github.com/mbj/unparser/pull/230
11
- if defined? Unparser::Emitter::InPattern
12
- Unparser::Emitter::InPattern.prepend(Module.new do
13
- def dispatch
14
- super
15
- nl unless branch
16
- end
17
- end)
10
+ # For backward compatibility with older Unparser
11
+ if RubyNext::Language::Builder.respond_to?(:emit_kwargs=) && !defined?(Unparser::Emitter::Kwargs)
12
+ RubyNext::Language::Builder.emit_kwargs = false
18
13
  end
@@ -94,53 +94,29 @@ module RubyNext
94
94
  @runtime
95
95
  end
96
96
 
97
- def transform(*args, **kwargs)
98
- if mode == :rewrite
99
- rewrite(*args, **kwargs)
100
- else
101
- regenerate(*args, **kwargs)
102
- end
103
- rescue Unparser::UnknownNodeError
104
- if Gem::Version.new(::RubyNext.current_ruby_version) >= Gem::Version.new("3.0.0")
105
- RubyNext.warn "Ruby Next fallbacks to \"rewrite\" transpiling mode since Unparser doesn't support 3.0+ AST yet.\n" \
106
- "See https://github.com/mbj/unparser/issues/168"
97
+ def transform(source, rewriters: self.rewriters, using: RubyNext::Core.refine?, context: TransformContext.new)
98
+ retried = 0
99
+ new_source = nil
100
+ begin
101
+ new_source =
102
+ if mode == :rewrite
103
+ rewrite(source, rewriters: rewriters, using: using, context: context)
104
+ else
105
+ regenerate(source, rewriters: rewriters, using: using, context: context)
106
+ end
107
+ rescue Unparser::UnknownNodeError => err
108
+ RubyNext.warn "Ruby Next fallbacks to \"rewrite\" transpiling mode since the version of Unparser you use doesn't support some syntax yet: #{err.message}.\n" \
109
+ "Try upgrading the Unparser or set transpiling mode to \"rewrite\" in case you use some edge or experimental syntax."
107
110
  self.mode = :rewrite
111
+ retried += 1
112
+ retry unless retried > 1
113
+ raise
108
114
  end
109
- rewrite(*args, **kwargs)
110
- end
111
-
112
- def regenerate(source, rewriters: self.rewriters, using: RubyNext::Core.refine?, context: TransformContext.new)
113
- parse_with_comments(source).then do |(ast, comments)|
114
- rewriters.inject(ast) do |tree, rewriter|
115
- rewriter.new(context).process(tree)
116
- end.then do |new_ast|
117
- next source unless context.dirty?
118
-
119
- Unparser.unparse(new_ast, comments)
120
- end.then do |source|
121
- next source unless RubyNext::Core.refine?
122
- next source unless using && context.use_ruby_next?
123
-
124
- Core.inject! source.dup
125
- end
126
- end
127
- end
128
-
129
- def rewrite(source, rewriters: self.rewriters, using: RubyNext::Core.refine?, context: TransformContext.new)
130
- rewriters.inject(source) do |src, rewriter|
131
- buffer = Parser::Source::Buffer.new("<dynamic>")
132
- buffer.source = src
133
115
 
134
- rewriter.new(context).rewrite(buffer, parse(src))
135
- end.then do |new_source|
136
- next source unless context.dirty?
137
- new_source
138
- end.then do |source|
139
- next source unless RubyNext::Core.refine?
140
- next source unless using && context.use_ruby_next?
116
+ return new_source unless RubyNext::Core.refine?
117
+ return new_source unless using && context.use_ruby_next?
141
118
 
142
- Core.inject! source.dup
143
- end
119
+ Core.inject! new_source.dup
144
120
  end
145
121
 
146
122
  def transformable?(path)
@@ -164,6 +140,31 @@ module RubyNext
164
140
 
165
141
  private
166
142
 
143
+ def regenerate(source, rewriters:, using:, context:)
144
+ parse_with_comments(source).then do |(ast, comments)|
145
+ rewriters.inject(ast) do |tree, rewriter|
146
+ rewriter.new(context).process(tree)
147
+ end.then do |new_ast|
148
+ next source unless context.dirty?
149
+
150
+ Unparser.unparse(new_ast, comments)
151
+ end
152
+ end
153
+ end
154
+
155
+ def rewrite(source, rewriters:, using:, context:)
156
+ rewriters.inject(source) do |src, rewriter|
157
+ buffer = Parser::Source::Buffer.new("<dynamic>")
158
+ buffer.source = src
159
+
160
+ rewriter.new(context).rewrite(buffer, parse(src))
161
+ end.then do |new_source|
162
+ next source unless context.dirty?
163
+
164
+ new_source
165
+ end
166
+ end
167
+
167
168
  attr_writer :watch_dirs
168
169
  end
169
170
 
@@ -179,6 +180,12 @@ module RubyNext
179
180
  require "ruby-next/language/rewriters/safe_navigation"
180
181
  rewriters << Rewriters::SafeNavigation
181
182
 
183
+ require "ruby-next/language/rewriters/numeric_literals"
184
+ rewriters << Rewriters::NumericLiterals
185
+
186
+ require "ruby-next/language/rewriters/required_kwargs"
187
+ rewriters << Rewriters::RequiredKwargs
188
+
182
189
  require "ruby-next/language/rewriters/args_forward"
183
190
  rewriters << Rewriters::ArgsForward
184
191
 
@@ -6,7 +6,9 @@
6
6
  version = RubyNext.next_ruby_version
7
7
  next_dirname = File.join(__dir__, "..", ".rbnext")
8
8
  lib_path = File.realpath(File.join(__dir__, ".."))
9
- current_index = $LOAD_PATH.index(lib_path)
9
+ current_index = $LOAD_PATH.find_index do |load_path|
10
+ File.exist?(load_path) && File.realpath(load_path) == lib_path
11
+ end
10
12
 
11
13
  loop do
12
14
  break unless version
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyNext
4
- VERSION = "0.11.0"
4
+ VERSION = "0.13.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.11.0
4
+ version: 0.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-24 00:00:00.000000000 Z
11
+ date: 2021-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-next-parser
@@ -28,20 +28,14 @@ dependencies:
28
28
  name: unparser
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 0.4.8
34
- - - "<"
31
+ - - "~>"
35
32
  - !ruby/object:Gem::Version
36
33
  version: 0.6.0
37
34
  type: :development
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: 0.4.8
44
- - - "<"
38
+ - - "~>"
45
39
  - !ruby/object:Gem::Version
46
40
  version: 0.6.0
47
41
  description: "\n Ruby Next Core is a zero deps version of Ruby Next meant to be
@@ -62,6 +56,8 @@ files:
62
56
  - bin/reparse
63
57
  - bin/ruby-next
64
58
  - bin/transform
59
+ - lib/.rbnext/2.1/ruby-next/core.rb
60
+ - lib/.rbnext/2.1/ruby-next/language.rb
65
61
  - lib/.rbnext/2.3/ruby-next/commands/core_ext.rb
66
62
  - lib/.rbnext/2.3/ruby-next/commands/nextify.rb
67
63
  - lib/.rbnext/2.3/ruby-next/language/eval.rb
@@ -79,6 +75,8 @@ files:
79
75
  - lib/ruby-next/core.rb
80
76
  - lib/ruby-next/core/array/deconstruct.rb
81
77
  - lib/ruby-next/core/array/difference_union_intersection.rb
78
+ - lib/ruby-next/core/array/intersect.rb
79
+ - lib/ruby-next/core/constants/frozen_error.rb
82
80
  - lib/ruby-next/core/constants/no_matching_pattern_error.rb
83
81
  - lib/ruby-next/core/enumerable/filter.rb
84
82
  - lib/ruby-next/core/enumerable/filter_map.rb
@@ -114,7 +112,9 @@ files:
114
112
  - lib/ruby-next/language/rewriters/in_pattern.rb
115
113
  - lib/ruby-next/language/rewriters/method_reference.rb
116
114
  - lib/ruby-next/language/rewriters/numbered_params.rb
115
+ - lib/ruby-next/language/rewriters/numeric_literals.rb
117
116
  - lib/ruby-next/language/rewriters/pattern_matching.rb
117
+ - lib/ruby-next/language/rewriters/required_kwargs.rb
118
118
  - lib/ruby-next/language/rewriters/runtime.rb
119
119
  - lib/ruby-next/language/rewriters/runtime/dir.rb
120
120
  - lib/ruby-next/language/rewriters/safe_navigation.rb
@@ -138,7 +138,7 @@ metadata:
138
138
  documentation_uri: http://github.com/ruby-next/ruby-next/blob/master/README.md
139
139
  homepage_uri: http://github.com/ruby-next/ruby-next
140
140
  source_code_uri: http://github.com/ruby-next/ruby-next
141
- post_install_message:
141
+ post_install_message:
142
142
  rdoc_options: []
143
143
  require_paths:
144
144
  - lib
@@ -153,8 +153,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0'
155
155
  requirements: []
156
- rubygems_version: 3.0.6
157
- signing_key:
156
+ rubygems_version: 3.2.22
157
+ signing_key:
158
158
  specification_version: 4
159
159
  summary: Ruby Next core functionality
160
160
  test_files: []