为什么 rubocop 的 Rails/FilePath 警察推荐 Rails.root.join
Why does rubocop's Rails/FilePath cop recommend Rails.root.join
我的代码中有以下行:
require "#{Rails.root}/config/environments/production.rb"
Rubocop 的 Rails/FilePath
警察建议我将其更改为:
require Rails.root.join('config', 'environments', 'production.rb')
为什么?前者更紧凑,显示速度更快,而且可以说更具可读性。
这是默认设置。您可以阅读更多关于选项 here
您可以使用 .rubocop.yml 文件更改它。这是一个例子,看看文件的结尾。
inherit_from: .rubocop_todo.yml
AllCops:
DisplayCopNames: true
Exclude:
- bin/**/*
- db/schema.rb
- node_modules/**/*
TargetRubyVersion: 2.3
Metrics/LineLength:
Max: 120
Metrics/MethodLength:
Exclude:
- test/**/*
Rails:
Enabled: true
Rails/FilePath:
Enabled: false
我认为这只是一种 "let's pick a style" 方法。当这个想法是 proposed 时,我没有看到任何有意义的讨论。
This cop is used to identify usages of file path joining process to use Rails.root.join clause. This is to avoid bugs on operating system that don't use '/' as the path separator.
正如其他人所提到的,RuboCop 建议这样做以避免不使用 /
作为路径分隔符的操作系统出现问题。在提出这个问题后,RuboCop 团队添加了一些说明(见 https://github.com/bbatsov/rubocop/pull/5571/files)。
话虽这么说,但我不确定是否需要这个警察。从其他 SO 线程,如 slash and backslash in Ruby,听起来 Ruby 在幕后自动转换路径方面做得很好(当代码在 Ruby 中执行时)。在将路径传递到外部系统的情况下,人们可能会对路径结构非常具体。
我的代码中有以下行:
require "#{Rails.root}/config/environments/production.rb"
Rubocop 的 Rails/FilePath
警察建议我将其更改为:
require Rails.root.join('config', 'environments', 'production.rb')
为什么?前者更紧凑,显示速度更快,而且可以说更具可读性。
这是默认设置。您可以阅读更多关于选项 here
您可以使用 .rubocop.yml 文件更改它。这是一个例子,看看文件的结尾。
inherit_from: .rubocop_todo.yml
AllCops:
DisplayCopNames: true
Exclude:
- bin/**/*
- db/schema.rb
- node_modules/**/*
TargetRubyVersion: 2.3
Metrics/LineLength:
Max: 120
Metrics/MethodLength:
Exclude:
- test/**/*
Rails:
Enabled: true
Rails/FilePath:
Enabled: false
我认为这只是一种 "let's pick a style" 方法。当这个想法是 proposed 时,我没有看到任何有意义的讨论。
This cop is used to identify usages of file path joining process to use Rails.root.join clause. This is to avoid bugs on operating system that don't use '/' as the path separator.
正如其他人所提到的,RuboCop 建议这样做以避免不使用 /
作为路径分隔符的操作系统出现问题。在提出这个问题后,RuboCop 团队添加了一些说明(见 https://github.com/bbatsov/rubocop/pull/5571/files)。
话虽这么说,但我不确定是否需要这个警察。从其他 SO 线程,如 slash and backslash in Ruby,听起来 Ruby 在幕后自动转换路径方面做得很好(当代码在 Ruby 中执行时)。在将路径传递到外部系统的情况下,人们可能会对路径结构非常具体。