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

An error occurred for Rails/FilePath cop when nested File.join #1053

Open
ydah opened this issue Jul 24, 2023 · 1 comment · May be fixed by #1431
Open

An error occurred for Rails/FilePath cop when nested File.join #1053

ydah opened this issue Jul 24, 2023 · 1 comment · May be fixed by #1431
Labels
bug Something isn't working

Comments

@ydah
Copy link
Member

ydah commented Jul 24, 2023

We have the following code:

File.join(File.join(Rails.root, 'app', 'models'), 'user.rb')

Expected behavior

File.join(Rails.root.join('app', 'models').to_s, 'user.rb')
# or
Rails.root.join('app', 'models', 'user.rb').to_s

Actual behavior

Occurred Parser::Source::TreeRewriter detected clobbering

An error occurred while Rails/FilePath cop was inspecting /ydah/rubocop-rails/a.rb:3:10.
Parser::Source::TreeRewriter detected clobbering
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter.rb:427:in `trigger_policy'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter.rb:414:in `enforce_policy'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:233:in `call'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:233:in `swallow'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:97:in `with'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:124:in `place_in_hierarchy'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:106:in `do_combine'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:117:in `place_in_hierarchy'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:106:in `do_combine'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:117:in `place_in_hierarchy'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:131:in `block in combine_children'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:130:in `each'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:130:in `inject'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:130:in `combine_children'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:221:in `merge'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:104:in `do_combine'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter/action.rb:30:in `combine'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/parser-3.2.2.3/lib/parser/source/tree_rewriter.rb:143:in `merge!'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/base.rb:321:in `apply_correction'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/base.rb:410:in `attempt_correction'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/base.rb:391:in `use_corrector'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/base.rb:385:in `correct'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/base.rb:181:in `add_offense'
/ydah/rubocop-rails/lib/rubocop/cop/rails/file_path.rb:137:in `register_offense'
/ydah/rubocop-rails/lib/rubocop/cop/rails/file_path.rb:99:in `check_for_file_join_with_rails_root'
/ydah/rubocop-rails/lib/rubocop/cop/rails/file_path.rb:68:in `on_send'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:143:in `public_send'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:143:in `block (2 levels) in trigger_restricted_cops'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:171:in `with_cop_error_handling'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:142:in `block in trigger_restricted_cops'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:141:in `each'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:141:in `trigger_restricted_cops'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:70:in `on_send'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rubocop-ast-1.29.0/lib/rubocop/ast/traversal.rb:159:in `block in on_send'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rubocop-ast-1.29.0/lib/rubocop/ast/traversal.rb:156:in `each'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rubocop-ast-1.29.0/lib/rubocop/ast/traversal.rb:156:in `each_with_index'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rubocop-ast-1.29.0/lib/rubocop/ast/traversal.rb:156:in `on_send'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:71:in `on_send'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rubocop-ast-1.29.0/lib/rubocop/ast/traversal.rb:20:in `walk'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/commissioner.rb:87:in `investigate'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/team.rb:156:in `investigate_partial'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cop/team.rb:91:in `investigate'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:345:in `block in inspect_file'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:344:in `each'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:344:in `flat_map'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:344:in `inspect_file'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:287:in `block in do_inspection_loop'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:321:in `block in iterate_until_no_changes'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:314:in `loop'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:314:in `iterate_until_no_changes'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:283:in `do_inspection_loop'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:164:in `block in file_offenses'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:189:in `file_offense_cache'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:163:in `file_offenses'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:154:in `process_file'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:135:in `block in each_inspected_file'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:134:in `each'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:134:in `reduce'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:134:in `each_inspected_file'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:120:in `inspect_files'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/runner.rb:73:in `run'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli/command/execute_runner.rb:26:in `block in execute_runner'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli/command/execute_runner.rb:52:in `with_redirect'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli/command/execute_runner.rb:25:in `execute_runner'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli/command/execute_runner.rb:17:in `run'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli/command.rb:11:in `run'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli/environment.rb:18:in `run'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli.rb:118:in `run_command'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli.rb:125:in `execute_runners'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli.rb:51:in `block in run'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli.rb:77:in `profile_if_needed'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/lib/rubocop/cli.rb:43:in `run'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/exe/rubocop:19:in `block in <top (required)>'
/ydah/.rbenv/versions/3.2.2/lib/ruby/3.2.0/benchmark.rb:311:in `realtime'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/rubocop-fec9ed14eea3/exe/rubocop:19:in `<top (required)>'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bin/rubocop:25:in `load'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bin/rubocop:25:in `<top (required)>'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/cli/exec.rb:58:in `load'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/cli/exec.rb:58:in `kernel_load'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/cli/exec.rb:23:in `run'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/cli.rb:483:in `exec'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/cli.rb:31:in `dispatch'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/cli.rb:25:in `start'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/exe/bundle:48:in `block in <top (required)>'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/lib/bundler/friendly_errors.rb:103:in `with_friendly_errors'
/ydah/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.3.13/exe/bundle:36:in `<top (required)>'
/ydah/.rbenv/versions/3.2.2/bin/bundle:25:in `load'
/ydah/.rbenv/versions/3.2.2/bin/bundle:25:in `<main>'

Steps to reproduce the problem

Prepare the following code.

File.join(File.join(Rails.root, 'app', 'models'), 'user.rb')

Run bundle exec rubocop -A --only Rails/FilePath.

RuboCop version

rubocop-rails uses the master branch.

❯ bundle exec rubocop -V                                    
1.54.2 (using Parser 3.2.2.3, rubocop-ast 1.29.0, running on ruby 3.2.2) [x86_64-darwin21]
  - rubocop-performance 1.18.0
  - rubocop-rails 2.20.2
  - rubocop-rspec 2.22.0
@ydah
Copy link
Member Author

ydah commented Jul 24, 2023

In this connection, the following problems also exist

We have the following code:

File.join(Rails.root.join('app', 'models').to_s, 'user.rb')

Run bundle exec rubocop -A --only Rails/FilePath.

Expected behavior:

Rails.root.join('app', 'models', 'user.rb').to_s

Actual behavior:

Rails.root.join('user.rb').to_s

@ydah ydah changed the title An incorrect autocorrect for Rails/FilePath cop when nested File.join An error occurred for Rails/FilePath cop when nested File.join Jul 24, 2023
@koic koic added the bug Something isn't working label Sep 4, 2023
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Jan 25, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Jan 25, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Jan 25, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Jan 25, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Jan 26, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Jan 26, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Jan 26, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Feb 7, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Feb 7, 2025
ydakuka added a commit to ydakuka/rubocop-rails that referenced this issue Feb 7, 2025
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