【问题标题】:Enforce first hash and array element to be on the same line in rubocop强制第一个哈希和数组元素在 rubocop 中位于同一行
【发布时间】:2017-03-25 00:23:09
【问题描述】:

我正在寻找一种方法来强制执行这种使用 rubocop 编写哈希和数组的方式:

a = { first: 'a',
      second: 'b' }

我找到了强制右括号和缩进的规则。但不能强制第一个元素与左大括号内联。有可能吗?

到目前为止,我找到了Style/FirstHashElementLineBreak,但结果恰恰相反。

为了强制右括号与最后一个键在同一行,我使用这个:

Style/MultilineHashBraceLayout:
  EnforcedStyle: same_line

但是如果不强制左大括号与第一个键在同一行上,这种设置就没有意义。

我在问曾经尝试过类似事情的人,或者对 rubocop 的配置有很好了解的人,是否可以这样做,如果可以,该怎么做?

【问题讨论】:

  • 通常我们将所有内容放在一行中作为短散列,或者分成多行,大括号在不同的行中。 Rubocop 采用特定的方式来匹配 Ruby 社区的编码指南。改变它会破坏这种兼容性。我建议您习惯于编写符合准则的代码,否则您会发现代码审查可能会很尴尬。
  • Rubocop 可配置为执行不同的可能规则集。不同的公司开发自己的风格,以更好地适应他们的环境。我在互联网上从 GitHub 和 ThoughtBot 等公司找到了许多不同的配置。我正在寻找一种方法来配置它以使用我公司接受的编码风格,这种风格不太可能改变。
  • 确实如此。公司是不同的,尽管即使在我们的公司中,我们也接受了常规形式,因为我们使用并创建了开源。 Stack Overflow 提出像您这样的问题的方法是展示您尝试过的内容,并解释为什么它不起作用。这有助于缩小问题范围并加快回答速度。请参阅“How to Ask”及其链接页面,以及“minimal reproducible example”。
  • 我认为问题很简单:是否可以强制执行我在示例中放置的样式。我还写了我尝试过的和找不到的。 Rubocop 文档非常庞大,并且缺少一些实际实现的功能。所以我想问那些曾经尝试过做类似事情的人,或者对 rubocop 的配置有很好了解的人,是否可以这样做,如果可以,该怎么做。
  • “Rubocop 采用特定的方式来匹配 Ruby 社区的编码准则。”虽然这曾经是正确的,但现在已经不是这样了。 RuboCop 现在渴望完成可配置性,以允许人们执行他们的公司准则。

标签: ruby rubocop


【解决方案1】:

首先,Style/MultilineHashBraceLayout 已重命名为 Layout/MultilineHashBraceLayout,其次,它的默认配置现在 symmetrical 完全符合您的要求。

From the docs:

当使用对称(默认)样式时:

如果哈希的左大括号与第一个元素在同一行 哈希,则右大括号应与 哈希的最后一个元素。

如果哈希的左大括号位于第一个元素上方的行上 哈希,那么右大括号应该在最后一行的下方 哈希元素。

因此在上面的代码上运行rubocop --only Layout/MultilineHashBraceLayout 现在会产生违规行为。

【讨论】:

    猜你喜欢
    • 2019-07-30
    • 1970-01-01
    • 2014-08-27
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多