ruby-next-core 1.2.0 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c2ad89ef94310a583c37c7499ba0821e47d6eff1011a1ae2b6fa8f069e55ca1
4
- data.tar.gz: 61e2bdceb9d6244f90ef6a4d12d1b567a4caa6cf7f88169c948d42b178fc616c
3
+ metadata.gz: 225718809b7794c42a4bfabdf5d8a942f38d4e80928aae28d869c0319548e0aa
4
+ data.tar.gz: b15f0597110048b50a9ec6f01513534bed2982916b3428537a752a23910c3d71
5
5
  SHA512:
6
- metadata.gz: 4845fc1acabf1ecacdac7ac50118225bb1429e3cd5ba792a6200bbad08cac740026bffa50e4db5749be26053844940356697e0488b975da831ea9ac3a88ff032
7
- data.tar.gz: 60851845387fe816df5ac182f118c3e8f521e30ee498d77b4ab464eae7d046132e1e5de9a185e9a59e82bc4fe4c692daa828f658b0d133ddd99708e6680ace91
6
+ metadata.gz: 07f683b7b44abdfa39edd48d3523f24c620a96bae2e525fb072163420fb66ff84834a196e9b868145328047ac0ae254eb0452cb44d48206b4e97b6b0ce30508f
7
+ data.tar.gz: f47fcd02ea37d94dbc79b142c29b9ae4742fb643d5a418bdd434fe6a0f57ed25ea0ce006c758406794a6b3f65e3f7fe3a94b2c13c1229086424a4902b85aa8b6
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.2.1 (2026-07-22)
6
+
7
+ - Fix RuboCop integration (enforce `:parser_whitequark` mode when using `next` version). ([@palkan][])
8
+
9
+ - Fix `it-param` rewriter to treat an explicit `it` parameter as a fixed point. ([@viralpraxis][])
10
+
5
11
  ## 1.2.0 (2026-01-13)
6
12
 
7
13
  - Add `String#strip` etc w/ selectors.
@@ -428,3 +434,4 @@ p a #=> 1
428
434
  [@skryukov]: https://github.com/skryukov
429
435
  [@prog-supdex]: https://github.com/prog-supdex
430
436
  [@saturnflyer]: https://github.com/saturnflyer
437
+ [@viralpraxis]: https://github.com/viralpraxis
data/README.md CHANGED
@@ -32,8 +32,8 @@ Read more about the motivation behind the Ruby Next in this post: [Ruby Next: Ma
32
32
  </a>
33
33
  </td>
34
34
  <td>
35
- <a href="http://www.digitalfukuoka.jp/topics/169">
36
- <img src="http://www.digitalfukuoka.jp/javascripts/kcfinder/upload/images/excellence.jpg" width="200">
35
+ <a href="https://web.archive.org/web/20220501094423/https://digitalfukuoka.jp/topics/169">
36
+ <img src="./assets/images/fukuoka_ruby_award_2022.png" width="200">
37
37
  </a>
38
38
  </td>
39
39
  </tr>
@@ -392,8 +392,10 @@ Runtime mode is backed by [require-hooks][require-hooks]—a standalone gem whic
392
392
  You can customize target files via the `include_patterns` and `exclude_patterns` configuration options:
393
393
 
394
394
  ```ruby
395
+ requre "ruby-next/language"
395
396
  RubyNext::Language.include_patterns << "path/to/other/dir/*.rb"
396
397
  RubyNext::Language.exclude_patterns << "path/to/other/dir/subdir/*"
398
+ requre "ruby-next/language/runtime"
397
399
  ```
398
400
 
399
401
  **NOTE:** Directories MUST be configured before requiring `ruby-next/language/runtime`.
data/bin/mspec CHANGED
@@ -3,6 +3,7 @@
3
3
  unless File.directory?('mspec/lib')
4
4
  $stdout.puts "Cloning mspec..."
5
5
  system("git clone https://github.com/ruby/mspec.git mspec")
6
+ system("git -C mspec checkout 9f83eeadf2311394d7809e60842f0026bd8e137d")
6
7
  end
7
8
 
8
9
  $:.unshift File.expand_path(File.join(__dir__, '..', 'mspec', 'lib'))
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Checking gem specs doesn't work in ruby.wasm
4
- unless RUBY_PLATFORM.match?(/wasm/)
4
+ unless RUBY_PLATFORM.include?("wasm")
5
5
  gem "ruby-next-parser", ">= 2.8.0.3"
6
6
  gem "unparser", ">= 0.4.7"
7
7
  end
@@ -70,9 +70,9 @@ module RubyNext
70
70
  .values
71
71
  .flatten
72
72
  .select do |patch|
73
- next if min_version && Gem::Version.new(patch.version) <= min_version
74
- next if filter && !filter.match?(patch.name)
75
- true
73
+ next if min_version && Gem::Version.new(patch.version) <= min_version
74
+ next if filter && !filter.match?(patch.name)
75
+ true
76
76
  end
77
77
  end
78
78
 
@@ -5,10 +5,11 @@ module RubyNext
5
5
  module KernelEval
6
6
  if Utils.refine_modules?
7
7
  refine Kernel do
8
- def eval(source, bind = nil, *args)
8
+ def eval(source, bind = nil, *args, **kwargs)
9
9
  new_source = ::RubyNext::Language::Runtime.transform(
10
10
  source,
11
- using: ((((__safe_lvar__ = bind) || true) && (!__safe_lvar__.nil? || nil)) && __safe_lvar__.receiver) == TOPLEVEL_BINDING.receiver || ((((__safe_lvar__ = ((((__safe_lvar__ = bind) || true) && (!__safe_lvar__.nil? || nil)) && __safe_lvar__.receiver)) || true) && (!__safe_lvar__.nil? || nil)) && __safe_lvar__.is_a?(Module))
11
+ using: ((((__safe_lvar__ = bind) || true) && (!__safe_lvar__.nil? || nil)) && __safe_lvar__.receiver) == TOPLEVEL_BINDING.receiver || ((((__safe_lvar__ = ((((__safe_lvar__ = bind) || true) && (!__safe_lvar__.nil? || nil)) && __safe_lvar__.receiver)) || true) && (!__safe_lvar__.nil? || nil)) && __safe_lvar__.is_a?(Module)),
12
+ **kwargs
12
13
  )
13
14
  RubyNext.debug_source(new_source, "(#{caller_locations(1, 1).first})")
14
15
  super(new_source, bind, *args)
@@ -32,7 +32,7 @@ module RubyNext
32
32
  end
33
33
  end
34
34
  .then do |new_source|
35
- restore(new_source)
35
+ restore(new_source)
36
36
  end
37
37
  end
38
38
 
@@ -51,6 +51,12 @@ module RuboCop
51
51
  require "parser/rubynext"
52
52
  Parser::RubyNext
53
53
  end
54
+
55
+ def default_parser_engine(version)
56
+ return super unless version == RUBY_NEXT_VERSION
57
+
58
+ :parser_whitequark
59
+ end
54
60
  end
55
61
 
56
62
  prepend ParserClassExt
@@ -70,9 +70,9 @@ module RubyNext
70
70
  .values
71
71
  .flatten
72
72
  .select do |patch|
73
- next if min_version && Gem::Version.new(patch.version) <= min_version
74
- next if filter && !filter.match?(patch.name)
75
- true
73
+ next if min_version && Gem::Version.new(patch.version) <= min_version
74
+ next if filter && !filter.match?(patch.name)
75
+ true
76
76
  end
77
77
  end
78
78
 
@@ -5,10 +5,11 @@ module RubyNext
5
5
  module KernelEval
6
6
  if Utils.refine_modules?
7
7
  refine Kernel do
8
- def eval(source, bind = nil, *args)
8
+ def eval(source, bind = nil, *args, **kwargs)
9
9
  new_source = ::RubyNext::Language::Runtime.transform(
10
10
  source,
11
- using: bind&.receiver == TOPLEVEL_BINDING.receiver || bind&.receiver&.is_a?(Module)
11
+ using: bind&.receiver == TOPLEVEL_BINDING.receiver || bind&.receiver&.is_a?(Module),
12
+ **kwargs
12
13
  )
13
14
  RubyNext.debug_source(new_source, "(#{caller_locations(1, 1).first})")
14
15
  super(new_source, bind, *args)
@@ -13,7 +13,8 @@ module RubyNext
13
13
  def on_block(node)
14
14
  _proc_or_lambda, _args, body = *node.children
15
15
 
16
- return super unless block_has_it?(body)
16
+ return super if block_has_it_argument?(node)
17
+ return super unless block_has_it_reference?(body)
17
18
 
18
19
  process_block(node)
19
20
  end
@@ -21,7 +22,7 @@ module RubyNext
21
22
  def on_itblock(node)
22
23
  _proc_or_lambda, _args, body = *node.children
23
24
 
24
- return super unless block_has_it?(body)
25
+ return super unless block_has_it_reference?(body)
25
26
 
26
27
  process_block(node)
27
28
  end
@@ -46,9 +47,13 @@ module RubyNext
46
47
  ])
47
48
  end
48
49
 
50
+ def block_has_it_argument?(node)
51
+ node.children[1] == s(:args, s(:procarg0, s(:arg, :it)))
52
+ end
53
+
49
54
  # It's important to check if the current block refers to `it` variable somewhere
50
55
  # (and not within a nested block), so we don't declare numbered params
51
- def block_has_it?(node)
56
+ def block_has_it_reference?(node)
52
57
  # traverse node children deeply
53
58
  tree = [node]
54
59
 
@@ -32,7 +32,7 @@ module RubyNext
32
32
  end
33
33
  end
34
34
  .then do |new_source|
35
- restore(new_source)
35
+ restore(new_source)
36
36
  end
37
37
  end
38
38
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Checking gem specs doesn't work in ruby.wasm
4
- unless RUBY_PLATFORM.match?(/wasm/)
4
+ unless RUBY_PLATFORM.include?("wasm")
5
5
  gem "ruby-next-parser", ">= 2.8.0.3"
6
6
  gem "unparser", ">= 0.4.7"
7
7
  end
@@ -51,6 +51,12 @@ module RuboCop
51
51
  require "parser/rubynext"
52
52
  Parser::RubyNext
53
53
  end
54
+
55
+ def default_parser_engine(version)
56
+ return super unless version == RUBY_NEXT_VERSION
57
+
58
+ :parser_whitequark
59
+ end
54
60
  end
55
61
 
56
62
  prepend ParserClassExt
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyNext
4
- VERSION = "1.2.0"
4
+ VERSION = "1.2.1"
5
5
  end
data/lib/uby-next.rb CHANGED
@@ -4,13 +4,14 @@
4
4
  ENV["RUBY_NEXT_EDGE"] = "1"
5
5
  ENV["RUBY_NEXT_PROPOSED"] = "1"
6
6
 
7
+ require "ruby-next/language"
8
+ RubyNext::Language.include_patterns << File.join(Dir.pwd, ".rb")
7
9
  require "ruby-next/language/runtime"
10
+
8
11
  require "ruby-next/core/runtime"
9
12
 
10
13
  using RubyNext
11
14
 
12
- RubyNext::Language.include_patterns << File.join(Dir.pwd, ".rb")
13
-
14
15
  require "stringio"
15
16
 
16
17
  # Hijack stderr to avoid printing exceptions while executing ruby files
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-next-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev