【问题标题】:Rubocop autocorrect changed params to %i[ in rails 5.2Rubocop 自动更正将参数更改为 %i[ 在 rails 5.2
【发布时间】:2018-08-14 03:47:59
【问题描述】:

我正在从事一个相对较新的项目。我从 Rails 5.1.6 升级到 Rails 5.2。

当我第一次运行 Rubocop 时,我遇到了大约 1800 个“错误”。其中大部分是# frozen_string_literal: true 问题。然后我运行rubocop a,它将字符串插入到所有项目文件的顶部。我知道这是为 Ruby 3 做准备。

我注意到的一件事是,如果我有某些参数,它会删除 : 并在参数前面添加 %i。举个例子,

before_action :set_genre, only: [:show, :edit, :update, :destroy] 

改为

before_action :set_genre, only: %i[show edit update destroy]

我有一个哈希的控制器变成了

     :avatar,
                               social_id: [],
                               social_attributes: %i[site
                                                     link
                                                     active
                                                     facebook
                                                     youtube
                                                     twitter

我假设这是Rubocop a 产生的错误

问题 1.这是rubocop的异常行为吗? 2. 我是否正确假设我应该将受影响的代码格式化回 rubocop a 之前的位置 3. 我可以在 rubocop 配置中添加什么来避免这种情况,我应该再次运行 rubocop a 吗?

系统

  • Ubuntu 16.04 LTS
  • Apatana IDE
  • ruby 2.4.1p111(2017-03-22 修订版 58053)[x86_64-linux]
  • Rails 5.2.0
  • rubocop (0.55.0)

【问题讨论】:

  • 使用 -D 标志运行 Rubocop,它会打印出警察的名字。谷歌这个名字,你会找到警察的文件。这是了解进行了哪些更改以及查看警察可能具有的不同配置的好地方。在你的情况下,警察是Style/SymbolArray。此外,检查 RuboCop 所基于的 Ruby 指南可以帮助理解某些规则,例如collections 描述符号数组。

标签: ruby-on-rails-5 rubocop


【解决方案1】:

看起来 Robocop 没有犯错。我认为rubocop 之前的第二部分看起来像social_attributes: [:site, :link, :active, ...]

使用文字语法(%s[arg1 arg2] == ['arg1', 'arg2']%i[arg1 arg2] == [:arg1, :arg2])编写时,您使用的符号更少,从而优化了您的代码。可能这就是它出现在 Rubocop 样式指南中的原因。

你可以通过添加 rubocop.yml 让 rubocop 忽略它

Style/SymbolArray:
  Enabled: false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2021-08-06
    • 2016-04-12
    相关资源
    最近更新 更多