rubocop / rubocop-jp

A place for RuboCop discussions in Japanese
55 stars 2 forks source link

出る警告が Layout/AccessModifierIndentationで正しいのかわからない #42

Closed maisumakun closed 3 years ago

maisumakun commented 6 years ago

以下のようなコードをrubocop -Rで回してみました。

# Test
class Test

  private

    def some_method
    end

    private def another_method
    end
end

すると、private def another_methodの行にLayout/AccessModifierIndentationと警告が出ました。privateの二重指定になっているので、警告が出ること自体に問題があるわけでもないのですが、「インデント位置がおかしい」という問題ではないので、別な警告の形のほうが適切だと思います。

koic commented 6 years ago

2点の課題がありそうな気がしました。

1点目の課題です。たしかにアクセス修飾子の重複ということで、たとえば Style/RedundantAccessModifier cop という異なる新たな cop を用意して別の警告を用意するというのはひとつの案に思えます。

2点目は、この Layout/AccessModifierIndentation cop 自体はあくまでアクセス修飾子のインデントを見ているようで、以下のコードでだと警告は出ませんでした。

class Test

  private

    def some_method
    end

  private def another_method
  end
end

ただ、それが良いかどうかでいうと private def の使用に関するテストケースがなかったことから、private def に対する観点が入っていなかったという可能性があります。念のためそのあたり cop 導入の経緯を見て特に意思がなさそうであれば、Description に示されたとおり defprivate def が揃っているインデントを正としLayout/AccessModifierIndentation cop としては false positive の扱いで良い気がしました。

koic commented 3 years ago

こちら少なくとも最新の RuboCop (1.13.0) で、Layout/AccessModifierIndentation の警告は出なくなっており、auto-correct をすると最終的に Style/AccessModifierDeclarations の警告が private def に残るようになっています。「インデント位置がおかしい」という警告を出していたという問題は解決するためクローズします。フィードバックありがとうございました。