Skip to content

Commit

Permalink
[Fix #12632] Fix an infinite loop error for Style/ArgumentsForwarding
Browse files Browse the repository at this point in the history
Fixes #12632.

This PR fixes an infinite loop error when `EnforcedStyle: explicit` of
`Naming/BlockForwarding` with `Style/ArgumentsForwarding`.
  • Loading branch information
koic authored and bbatsov committed Jan 22, 2024
1 parent 60a9350 commit a6cf5a7
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
@@ -0,0 +1 @@
* [#12632](https://github.com/rubocop/rubocop/issues/12632): Fix an infinite loop error when `EnforcedStyle: explicit` of `Naming/BlockForwarding` with `Style/ArgumentsForwarding`. ([@koic][])
11 changes: 9 additions & 2 deletions lib/rubocop/cop/style/arguments_forwarding.rb
Expand Up @@ -104,7 +104,7 @@ module Style
# end
#
# @example RedundantBlockArgumentNames: ['blk', 'block', 'proc'] (default)
# # bad
# # bad - But it is good with `EnforcedStyle: explicit` set for `Naming/BlockForwarding`.
# def foo(&block)
# bar(&block)
# end
Expand Down Expand Up @@ -291,7 +291,7 @@ def register_forward_kwargs_offense(add_parens, def_arguments_or_send, kwrest_ar
end

def register_forward_block_arg_offense(add_parens, def_arguments_or_send, block_arg)
return if target_ruby_version <= 3.0 || block_arg.source == '&'
return if target_ruby_version <= 3.0 || block_arg.source == '&' || explicit_block_name?

add_offense(block_arg, message: BLOCK_MSG) do |corrector|
add_parens_if_missing(def_arguments_or_send, corrector) if add_parens
Expand Down Expand Up @@ -469,6 +469,13 @@ def missing_rest_arg_or_kwrest_arg?
(@kwrest_arg_name && !forwarded_kwrest_arg)
end
end

def explicit_block_name?
block_forwarding_config = config.for_cop('Naming/BlockForwarding')
return false unless block_forwarding_config['Enabled']

block_forwarding_config['EnforcedStyle'] == 'explicit'
end
end
end
end
Expand Down
24 changes: 24 additions & 0 deletions spec/rubocop/cli/autocorrect_spec.rb
Expand Up @@ -593,6 +593,30 @@ def some_method(form, **, &)
RUBY
end

it 'corrects `EnforcedStyle: explicit` of `Naming/BlockForwarding` with `Style/ArgumentsForwarding`' do
create_file('.rubocop.yml', <<~YAML)
AllCops:
TargetRubyVersion: 3.1
Naming/BlockForwarding:
EnforcedStyle: explicit
YAML
source = <<~RUBY
def some_method(&block)
render &block
end
RUBY
create_file('example.rb', source)
expect(cli.run([
'--autocorrect',
'--only', 'Naming/BlockForwarding,Style/ArgumentsForwarding'
])).to eq(0)
expect(File.read('example.rb')).to eq(<<~RUBY)
def some_method(&block)
render &block
end
RUBY
end

describe 'trailing comma cops' do
let(:source) do
<<~RUBY
Expand Down

0 comments on commit a6cf5a7

Please sign in to comment.