【问题标题】:Rubocop rule to enforce double indent when assignment goes on next lineRubocop 规则在下一行分配时强制执行双重缩进
【发布时间】:2023-04-03 18:09:01
【问题描述】:
我们的编码风格表明,如果一个赋值不适合一行,但分配的值本身适合一行,我们应该将该行缩进四个空格而不是两个。示例:
my_var = Some.reasonable_method_call(param1)
my_var2 =
Some.crazy_long_ridiculous_method_that_doesnt_fit_on_same_line(param1)
我可以使用Rubocop 规则来执行此操作吗?我们在块内使用两格缩进,长赋值的四格缩进有助于在视觉上表明该行不是嵌套在块中,而是前一行的延续。
【问题讨论】:
标签:
ruby
coding-style
rubocop
【解决方案1】:
查看rubocop源码后,参数对齐的规则似乎在/lib/rubocop/cop/style/align_parameters.rb line 34:
def base_column(node, args)
if fixed_indentation?
lineno = target_method_lineno(node)
line = node.loc.expression.source_buffer.source_line(lineno)
indentation_of_line = /\S.*/.match(line).begin(0)
------> indentation_of_line + configured_indentation_width
else
args.first.loc.column
end
end
configured_indentation_width 定义在lib/rubocop/cop/mixin/autocorrect_alignment.rb line 10:
def configured_indentation_width
-> config.for_cop('IndentationWidth')['Width']
end
该变量存储在 /config/default.yml 中,这将要求您将所有代码设置为 4 个空格而不是 2 个(类似于 Python PEP8)。
否则,您可以只修改 rubocop 的源代码,在多行参数分配/方法调用中始终需要 4 个空格。
另一个(更好的)选择是修改源代码,但添加对配置变量的引用,这样您就不会使用硬编码值。