KEMBAR78
Fix incorrect autocorrect for `Lint/RedundantTypeConversion` by koic · Pull Request #14319 · rubocop/rubocop · GitHub
Skip to content

Conversation

@koic
Copy link
Member

@koic koic commented Jun 20, 2025

This PR fixes the following incorrect autocorrect for Lint/RedundantTypeConversion when using parentheses with no arguments or any arguments.

Case 1: Parentheses with no arguments

First, this applies to parentheses with no arguments.

$ echo '{k => v}.to_h()' | bundle exec rubocop --stdin test.rb -a --only Lint/RedundantTypeConversion
Inspecting 1 file
F

Offenses:

test.rb:1:9: F: Lint/Syntax: unexpected token tLPAREN2
(Using Ruby 2.7 parser; configure using TargetRubyVersion parameter, under AllCops)
{k => v}()
        ^
test.rb:1:10: W: [Corrected] Lint/RedundantTypeConversion: Redundant to_h detected.
{k => v}.to_h()
         ^^^^

1 file inspected, 2 offenses detected, 1 offense corrected
====================
{k => v}()

It is currently autocorrected to an invalid syntax with unnecessary parentheses. Since this case is syntactically valid, it will be updated to the correct form {k => v} without parentheses.

Case 2: Parentheses with arguments

Next, the case with arguments.

$ echo '{k => v}.to_h(arg)' | bundle exec rubocop --stdin test.rb -a --only Lint/RedundantTypeConversion
Inspecting 1 file
F

Offenses:

test.rb:1:9: F: Lint/Syntax: unexpected token tLPAREN2
(Using Ruby 2.7 parser; configure using TargetRubyVersion parameter, under AllCops)
{k => v}(arg)
        ^
test.rb:1:10: W: [Corrected] Lint/RedundantTypeConversion: Redundant to_h detected.
{k => v}.to_h(arg)
         ^^^^

1 file inspected, 2 offenses detected, 1 offense corrected
====================
{k => v}(arg)

This case also results in an incorrect autocorrection. However, when arguments are present, the method should be assumed to be either overridden or still under programming, and thus ignored. In any case, it cannot be considered safely removable or redundant.


Before submitting the PR make sure the following are checked:

  • The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences.
  • Wrote good commit messages.
  • Commit message starts with [Fix #issue-number] (if the related issue exists).
  • Feature branch is up-to-date with master (if not - rebase it).
  • Squashed related commits together.
  • Added tests.
  • Ran bundle exec rake default. It executes all tests and runs RuboCop on its own code.
  • Added an entry (file) to the changelog folder named {change_type}_{change_description}.md if the new code introduces user-observable changes. See changelog entry format for details.

This PR fixes the following incorrect autocorrect for `Lint/RedundantTypeConversion`
when using parentheses with no arguments or any arguments.

## Case 1: Parentheses with no arguments

First, this applies to parentheses with no arguments.

```console
$ echo '{k => v}.to_h()' | bundle exec rubocop --stdin test.rb -a --only Lint/RedundantTypeConversion
Inspecting 1 file
F

Offenses:

test.rb:1:9: F: Lint/Syntax: unexpected token tLPAREN2
(Using Ruby 2.7 parser; configure using TargetRubyVersion parameter, under AllCops)
{k => v}()
        ^
test.rb:1:10: W: [Corrected] Lint/RedundantTypeConversion: Redundant to_h detected.
{k => v}.to_h()
         ^^^^

1 file inspected, 2 offenses detected, 1 offense corrected
====================
{k => v}()
```

It is currently autocorrected to an invalid syntax with unnecessary parentheses.
Since this case is syntactically valid, it will be updated to the correct form `{k => v}` without parentheses.

## Case 2: Parentheses with arguments

Next, the case with arguments.

```console
$ echo '{k => v}.to_h(arg)' | bundle exec rubocop --stdin test.rb -a --only Lint/RedundantTypeConversion
Inspecting 1 file
F

Offenses:

test.rb:1:9: F: Lint/Syntax: unexpected token tLPAREN2
(Using Ruby 2.7 parser; configure using TargetRubyVersion parameter, under AllCops)
{k => v}(arg)
        ^
test.rb:1:10: W: [Corrected] Lint/RedundantTypeConversion: Redundant to_h detected.
{k => v}.to_h(arg)
         ^^^^

1 file inspected, 2 offenses detected, 1 offense corrected
====================
{k => v}(arg)
```

This case also results in an incorrect autocorrection. However, when arguments are present,
the method should be assumed to be either overridden or still under programming, and thus ignored.
In any case, it cannot be considered safely removable or redundant.
@koic koic force-pushed the fix_incorrect_autocorrect_for_lint_redundant_type_conversion branch from e733037 to e9ba3ac Compare June 20, 2025 18:23
@koic koic merged commit 9bed515 into rubocop:master Jun 21, 2025
20 of 23 checks passed
@koic koic deleted the fix_incorrect_autocorrect_for_lint_redundant_type_conversion branch June 21, 2025 16:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant