首页 > 解决方案 > Rubocop 缩进配置

问题描述

我希望 rubocop 总是只缩进一次。另外, elsif 和 end 根本不应该缩进。所以是这样的:

@shop = api
        .shop('de')['storefronts']
        .find_all do |front|
          front['name'] == 'WeeklyStorefront' ||
            front['name'] == 'DailyStorefront'
        end
        .map { |front|  font['catalogEntries'] }
        .flatten
        .map { |item| item['devName'] }

应该是这样的:

@shop = api
  .shop('de')['storefronts']
  .find_all do |front|
    front['name'] == 'WeeklyStorefront' ||
      front['name'] == 'DailyStorefront'
  end
  .map { |front|  font['catalogEntries'] }
  .flatten
  .map { |item| item['devName'] }

和这个:

mode = if key.include? '_p2'
         'Solo'
       elsif key.include? '_p10'
         'Duo'
       else
         'Squad'
       end

应该是这样的:

mode = if key.include? '_p2'
  'Solo'
elsif key.include? '_p10'
  'Duo'
else
  'Squad'
end

我尝试了很多不同的配置选项,但我从来没有让它正常工作。

我试过了:

Layout/MultilineMethodCallIndentation:
  EnforcedStyle: indented

产生:

@shop = api
  .shop('de')['storefronts']
  .find_all do |front|
          front['name'] == 'WeeklyStorefront' ||
            front['name'] == 'DailyStorefront'
        end
  .map { |front| front['catalogEntries'] }
  .flatten
  .map { |item| item['devName'] }

mode = if key.include? '_p2'
             'Solo'
           elsif key.include? '_p10'
             'Duo'
           else
             'Squad'
end

这更好,但仍然不是我想要的。

标签: rubyrubocop

解决方案


您可以使用文件中的选项Layout/MultilineMethodCallIndentation.rubocop.yml第一个示例中为多行表达式强制执行不同的样式。

对于第二个示例,您可以配置Layout/MultilineAssignmentLayoutLayout/EndAlignment.

Layout/MultilineMethodCallIndentation:
  EnforcedStyle: indented

Layout/MultilineAssignmentLayout:
  EnforcedStyle: same_line

Layout/EndAlignment:
  EnforcedStyleAlignWith: variable

推荐阅读