【问题标题】:Rubocop: end alignment for begin blocksRubocop:开始块的结束对齐
【发布时间】:2020-04-05 06:43:45
【问题描述】:

我可能遗漏了一些明显的东西,但似乎 Rubocop 在关闭 begin 块时跳过了 end 的对齐。

鉴于情况:

  begin
        # Foo
      end

我希望“结束”有一个布局错误:Layout/EndAlignment end is not aligned with begin 但是,Rubocop 似乎认为这是正确的。

我希望 Layout/DefEndAlignmentLayout/EndAlignmentLayout/BlockAlignment 之一管理此行为,但其中任何一个选项似乎都没有任何效果。

任何 Rubocop 专家都知道如何修复此配置,或者这是一个潜在的错误?

在没有rescue 的情况下使用begin 的用例是使用记忆来设置计算值

@ivar ||= begin
  # Do some stuff
  # Do more stuff
  # Then return the value
end

【问题讨论】:

  • 我已尝试更改 Layout/DefEndAlignment、Layout/EndAlignment、Layout/BlockAlignment 和其他一些设置发布您尝试过的内容以及尝试的结果。不要让每个人都复制你已经尝试过并确定不是解决方案的工作。
  • @anothermh - 抱歉我不清楚。我的意思是更改所有/任何这些设置对任何类型的布局都有 0 影响。为了清楚起见,我会更新帖子。
  • 您还没有说出您尝试过的内容。你本质上是在说“我知道一堆行不通的东西,但我不会告诉你它们是什么。我希望你花时间弄清楚我已经知道什么是行不通的。”想想你的听众。如果您尝试过 x 并得到结果 y 但想要结果 z,请解释 x、y 和 z 是什么。对您尝试过的每次迭代重复此操作。
  • 我仍然不确定您希望如何准确地表达这个问题? Rubocop 有数千名不同的警察,我没有为我尝试过的每一个警察保留一个运行标签。我列出了相关的,因为那些是应该重要的,其余的无关紧要。
  • 这就是我的观点:有 的东西可以配置。您已经花时间尝试了一些东西,但它们都没有奏效。 您应该在您的minimal reproducible example 中发布您尝试但不起作用的事情。相反,你决定最好说“有很多选择,我没有跟踪我的工作,所以请复制我已经完成的所有工作,直到你找到我的答案。”想象一下,通过分享您所做的工作,您可以节省多少时间!想象一下,以最小的努力帮助您寻求帮助的人是多么有礼貌!

标签: ruby-on-rails ruby rubocop linter


【解决方案1】:

更新:这是一个已知问题 (https://github.com/rubocop-hq/rubocop/pull/7286)

原答案:

鉴于 [输入] ..

begin
      # Foo
    end

使用最新的 rubocop (0.77.0) 进行测试..

  • 根据文档,BlockAlignment 仅与 do .. end 块有关。
  • BlockEndNewline 只关心end 在自己的行上,似乎并不关心缩进
  • DefEndAlignment 不适用,我认为,因为它不是方法定义(def
  • EndAlignment 似乎最相关,但似乎不支持 begin。它支持很多其他的东西(classmoduleifwhile 等)所以也许这是一个疏忽
  • IndentationConsistency 似乎只关心块的内容,而似乎忽略了end
  • IndentationWidth 被描述为 IndentationConsistency 的“伴侣”,因此似乎也只关心块的内容
  • RescueEnsureAlignment 与块相关,但似乎只与 rescueensure 关键字有关

总之,这似乎是在最新的 rubocop (0.77.0) 中实施 EndAlignment 的疏忽。我建议打开一个问题。

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2018-04-20
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多