Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Infinite loop detected in Rails/LinkToBlank auto-correction #421

Closed
r7kamura opened this issue Jan 16, 2021 · 0 comments · Fixed by #423
Closed

Infinite loop detected in Rails/LinkToBlank auto-correction #421

r7kamura opened this issue Jan 16, 2021 · 0 comments · Fixed by #423
Labels
bug Something isn't working

Comments

@r7kamura
Copy link
Contributor

I encountered infinite loop when I run rubocop --auto-correct with the following code:

link_to(
  a,
  b,
  { target: '_blank' }
)

Expected behavior

Expected the code to be auto-corrected like this:

link_to(
  a,
  b,
  target: '_blank', rel: 'noopener'
)

Actual behavior

Encountered infinite loop:

Infinite loop detected in /tmp/rubocop-rails-link-to-blank-test/test.rb and caused by Layout/LineLength, Rails/LinkToBlank
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:290:in `block in iterate_until_no_changes'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:286:in `loop'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:286:in `iterate_until_no_changes'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:255:in `do_inspection_loop'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:132:in `block in file_offenses'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:157:in `file_offense_cache'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:131:in `file_offenses'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:122:in `process_file'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:101:in `block in each_inspected_file'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:100:in `each'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:100:in `reduce'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:100:in `each_inspected_file'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:86:in `inspect_files'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/runner.rb:47:in `run'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli/command/execute_runner.rb:26:in `block in execute_runner'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli/command/execute_runner.rb:52:in `with_redirect'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli/command/execute_runner.rb:25:in `execute_runner'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli/command/execute_runner.rb:17:in `run'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli/command.rb:11:in `run'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli/environment.rb:18:in `run'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli.rb:65:in `run_command'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli.rb:72:in `execute_runners'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/lib/rubocop/cli.rb:41:in `run'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/exe/rubocop:13:in `block in <top (required)>'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/benchmark.rb:308:in `realtime'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rubocop-1.8.1/exe/rubocop:12:in `<top (required)>'
/home/r7kamura/.rbenv/versions/2.7.2/bin/rubocop:23:in `load'
/home/r7kamura/.rbenv/versions/2.7.2/bin/rubocop:23:in `<top (required)>'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/cli/exec.rb:63:in `load'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/cli/exec.rb:63:in `kernel_load'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/cli/exec.rb:28:in `run'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/cli.rb:476:in `exec'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/cli.rb:30:in `dispatch'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/cli.rb:24:in `start'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bundler-2.1.4/libexec/bundle:46:in `block in <top (required)>'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/home/r7kamura/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bundler-2.1.4/libexec/bundle:34:in `<top (required)>'
/home/r7kamura/.rbenv/versions/2.7.2/bin/bundle:23:in `load'
/home/r7kamura/.rbenv/versions/2.7.2/bin/bundle:23:in `<main>'

And the code was corrected to:

link_to(
  a,
  b,
  { target: '_blank' }, rel: 'noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener noopener'
)

Steps to reproduce the problem

Run bundle exec rubocop --auto-correct with the example code above.

$ ls
Gemfile  Gemfile.lock  test.rb
/tmp/rubocop-rails-link-to-blank-test
$ cat Gemfile
# frozen_string_literal: true

source 'https://rubygems.org'

gem 'rubocop'
gem 'rubocop-rails'
$ cat test.rb
# frozen_string_literal: true

link_to(
  a,
  b,
  { target: '_blank' }
)

RuboCop version

$ bundle exec rubocop -V
1.8.1 (using Parser 3.0.0.0, rubocop-ast 1.4.0, running on ruby 2.7.2 x86_64-linux)
  - rubocop-rails 2.9.1
@koic koic added the bug Something isn't working label Jan 16, 2021
koic added a commit to koic/rubocop-rails that referenced this issue Jan 17, 2021
Fixes rubocop#421.

This PR fixes incorrect auto-correct for `Rails/LinkToBlank` when using
target_blank and hash brackets for option.
koic added a commit to koic/rubocop-rails that referenced this issue Jan 17, 2021
Fixes rubocop#421.

This PR fixes incorrect auto-correct for `Rails/LinkToBlank` when using
`target: '_blank'` and hash brackets for the option.
koic added a commit to koic/rubocop-rails that referenced this issue Jan 17, 2021
Fixes rubocop#421.

This PR fixes incorrect auto-correct for `Rails/LinkToBlank` when using
`target: '_blank'` with hash brackets for the option.
@koic koic closed this as completed in #423 Jan 17, 2021
koic added a commit that referenced this issue Jan 17, 2021
…_link_to_blank

[Fix #421] Fix incorrect auto-correct for `Rails/LinkToBlank`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants