【问题标题】: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 个空格。

    另一个(更好的)选择是修改源代码,但添加对配置变量的引用,这样您就不会使用硬编码值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      相关资源
      最近更新 更多