Rubocop 缩进配置

Rubocop indentation configuration

我希望 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

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

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

对于您的第二个示例,您可以配置 Layout/MultilineAssignmentLayout and Layout/EndAlignment

Layout/MultilineMethodCallIndentation:
  EnforcedStyle: indented

Layout/MultilineAssignmentLayout:
  EnforcedStyle: same_line

Layout/EndAlignment:
  EnforcedStyleAlignWith: variable