Skip to content

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

Open
@ydah

Description

@ydah

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions