Rubocop 统计一行的长度:如何忽略带注释的行?

当检查一行是否太长时,我希望 Rubopolice 忽略带有注释的行(只是一个注释或一些带有行尾注释的代码)。有办法吗?

119628 次浏览

我认为这里的基本思想是,不管 n 个字符后面是什么,都要强制执行行长。默认为80个字符的是一些旧的终端窗口的货物邪教,只能容纳这个数目的字符。我看到的唯一选项 在密码里是一个允许 URL 可能超过字符限制的选项。

你可以 忽略整个文件,我想这不是你想要的。

有一种方法可以忽略警察每行的基础上。

还有一种方法可以通过配置文件实现。

运行 rubocop --auto-gen-config,它将生成一个文件,您可以使用该文件禁用违规行为。

该命令还提示如何加载这些选项。

在每行的基础上,你也可以启用和禁用警察。

# rubocop:disable RuleByName
This is a long line
# rubocop:enable RuleByName

您还可以在代码中一次执行多个规则。

# rubocop:disable BlockComments, AsciiComments

通过使用内联指令,该指令仅对该内联指令有效 它看起来像这样:

# Thanks to @jnt30 for the comment!
method(argument) # rubocop:disable SomeRule, SomeOtherRule

你可以在它的 官方手册中读到更多关于 RuboCop 的信息。

要查找所有规则名称,值得查看 配置文件中

Cyberwiz 说-“当我需要规则名称而不是查看文档时,运行 rubocop -D。”更新: 现在这是没有标志的默认行为。

-D现在是默认的,所以我们现在可以“免费”得到它。

可以定义 regex 模式来自动忽略 rubocop.yml中的某些行,所以您可以选择忽略以 #字符开头的所有行:

Layout/LineLength:
Max: 80
IgnoredPatterns: ['\A#']

这可以改进,以便“缩进的”注释行(即空格后跟一个 #字符)也被忽略,如果这是您想要的。

注意,这并没有考虑到带注释的 结束代码行:

some_code(that_does_something) # This line would NOT be ignored by Rubocop.

你可以使用下面的注释来忽略一个特定的规则:

# rubocop:disable Layout/LineLength
def this_could_be_a_very_long_line_that_extends_forever_into_infinity
end
# rubocop:enable Layout/LineLength

您也可以忽略整个文件,将它们添加到 .rubocop.yml:

AllCops:
Exclude:
- path/to/file.rb

以下配置适合我:

Layout/LineLength:
AllowedPatterns: ['^(\s*#)']

这个正则表达式只有在整行被注释掉时才有效。代码后面跟着同一行的长注释仍然会触发一个 Rubocopint 错误,这是设计好的。