You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When rubocop detects a violation of of Rails/RootPathnameMethods and autocorrects it, I expect it to keep the behaviour of the code unchanged.
Actual behavior
The code breaks, so autocorrection for this cop is not safe in the current version.
Steps to reproduce the problem
I was able to reproduce the problem with the following simple file:
# foo.rbputsDir.glob(Rails.root.join("**/*.rb"))
When I run rails runner foo.rb it prints a list of files.
rubocop foo.rb reports the offense
foo.rb:2:6: C: [Correctable] Rails/RootPathnameMethods: Rails.root is a Pathname so you can just append #glob.
puts Dir.glob(Rails.root.join("**/*.rb"))
Now, using rubocop -a foo.rb changes the content of the file to
# foo.rb
puts Rails.root.join("**/*.rb").glob
which is not runnable code anymore and instead raises an error: foo.rb:2:in 'glob': wrong number of arguments (given 0, expected 1..2) (ArgumentError)
I think what is supposed to happen when autocorrecting is
# foo.rb
puts Rails.root.glob("**/*.rb")
because this actually seems to be equivalent to the original code and does not violate the Rails/RootPathnameMethods cop. But that's not what's happening.
Fixesrubocop#763.
This PR fix a false positive for `Rails/RootPathnameMethods` when using `Dir.glob`.
And marks unsafe for autocorrection because `Dir`'s methods return string element,
but `Pathname`'s methods return `Pathname` element.
Expected behavior
When rubocop detects a violation of of
Rails/RootPathnameMethods
and autocorrects it, I expect it to keep the behaviour of the code unchanged.Actual behavior
The code breaks, so autocorrection for this cop is not safe in the current version.
Steps to reproduce the problem
I was able to reproduce the problem with the following simple file:
When I run
rails runner foo.rb
it prints a list of files.rubocop foo.rb
reports the offenseNow, using
rubocop -a foo.rb
changes the content of the file towhich is not runnable code anymore and instead raises an error:
foo.rb:2:in 'glob': wrong number of arguments (given 0, expected 1..2) (ArgumentError)
I think what is supposed to happen when autocorrecting is
because this actually seems to be equivalent to the original code and does not violate the
Rails/RootPathnameMethods
cop. But that's not what's happening.RuboCop version
The text was updated successfully, but these errors were encountered: