【问题标题】:Why does rubocop's Rails/FilePath cop recommend Rails.root.join为什么 rubocop 的 Rails/FilePath cop 推荐 Rails.root.join
【发布时间】:2018-06-10 03:25:24
【问题描述】:

我的代码中有以下行:

require "#{Rails.root}/config/environments/production.rb"

Rubocop 的 Rails/FilePath 警察建议我将其更改为:

require Rails.root.join('config', 'environments', 'production.rb')

为什么?前者更紧凑,显示速度更快,并且可以说更具可读性。

【问题讨论】:

  • Rails.root.join 实际上在 Windows 上生成正斜杠或更通用的:File.join 不是特定于平台的,其中带有斜杠的字符串是。
  • 路径分隔符取决于平台。 AFAIK Windows 大多数时候会接受/,但它真的很想看到一个反斜杠(我似乎无法通过 Markdown)。大概Rails.root.join 将使用正确的分隔符。不确定 Rubocop,而且我已经几十年没有接触过 Windows,所以只是评论。
  • 这个问题已经过时了,新的默认是使用完整路径:github.com/rubocop-hq/rubocop-rails/issues/195

标签: ruby rubocop


【解决方案1】:

正如其他人所提到的,RuboCop 建议这样做以避免不使用 / 作为路径分隔符的操作系统出现问题。在提出这个问题后,RuboCop 团队添加了一些说明(见 https://github.com/bbatsov/rubocop/pull/5571/files)。

话虽如此,我不确定这个警察是否必要。从其他 SO 线程,如slash and backslash in Ruby,听起来 Ruby 在后台自动转换路径方面做得很好(当代码在 Ruby 中执行时)。在将路径传递给外部系统的情况下,人们可能会对路径结构非常具体。

【讨论】:

    【解决方案2】:

    来自Rubocop manual

    这个 cop 用于识别文件路径连接过程的用法,以使用 Rails.root.join 子句。这是为了避免不使用“/”作为路径分隔符的操作系统的错误。

    【讨论】:

    • 这实际上要么已经过时,要么一开始就被弄错了。正如 rubocop-rails 维护者所解释的,“Rails.root 是一个路径名实例。路径名解决了操作系统路径表达式中的差异。” (github.com/rubocop-hq/rubocop-rails/pull/…)。
    • 看来你是对的,手册现在写着:这个 cop 用于识别文件路径连接过程的用法,以使用 Rails.root.join 子句。它用于在加入路径时增加均匀性。
    【解决方案3】:

    我认为这只是一种“让我们选择一种风格”的方法。当想法是proposed 时,我没有看到任何有意义的讨论。

    【讨论】:

      【解决方案4】:

      这是默认设置。你可以阅读更多关于选项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
      

      【讨论】:

      • 我正在寻找 rubocop 选择此作为默认设置的原因。
      • 也许有些人(例如 Rubocop 的创建者)更喜欢这种风格,也许默认选项更容易在路径中使用变量,因为它可以帮助避免字符串插值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2010-10-03
      • 2012-04-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2020-05-18
      相关资源
      最近更新 更多