rubocop incorrectly identifies and incorrectly autocorrects the following code:
# frozen_string_literal: true ############################################################################## # Good examples: rubocop v1.77.0 gets these right: foo { transform1 _1 } # rubocop correctly updates this block foo { transform2 _1, _2 } # rubocop correctly ignores this block foo { transform2 _1, _2 } # rubocop correctly ignores this block .bar { transform2 _1, _2 } # rubocop correctly ignores this block foo { transform1 _1 } # rubocop correctly updates this block .bar { transform2 _1, _2 } # rubocop correctly ignores this block foo { transform2 _1, _2 } # rubocop correctly ignores this block .intervening .methods(calls) { etc } .bar { transform2 _1, _2 } # rubocop correctly ignores this block ############################################################################## # Bad examples: rubocop v1.77.0 gets these wrong: foo { transform2 _1, _2 } # rubocop INCORRECTLY updates this block <-- BUG .bar { transform1 _1 } # rubocop correctly updates this block foo { transform1 _1 } # rubocop correctly updates this block .baz { transform2 _1, _2 } # rubocop INCORRECTLY updates this block <-- BUG .qux { transform1 _1 } # rubocop correctly updates this block foo { transform2 _1, _2 } # rubocop INCORRECTLY updates this block <-- BUG .intervening .methods(calls) { etc } .bar { transform1 _1 } # rubocop correctly updates this block
Use the following config to reproduce:
AllCops: NewCops: enable TargetRubyVersion: 3.4Expected behavior
In the example above, the lines commented <-- BUG
should not be identified as offences nor autocorrected.
The example lines will be identified as errors and autocorrected. This creates syntax errors on the lines which should not have been changed.
For example:
foo { transform2 it, _2 } # <-- SyntaxError .bar { transform1 it }Steps to reproduce the problem
Use the .rubocop.yml
and example.rb
files, provided above. Run rubocop example.rb
and rubocop -a example.rb
This happens with both RUBYOPT=--parser=parse.y
and RUBYOPT=--parser=prism
. (I don't know if that makes any difference elsewhere, but it also doesn't make any difference here.)
$ rubocop -V
1.77.0 (using Parser 3.3.8.0, Prism 1.4.0, rubocop-ast 1.45.1, analyzing as Ruby 3.4, running on ruby 3.4.4) [x86_64-linux
]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4