# 自動生成されるものやテストデータはチェック対象から除外する AllCops: Exclude: - "vendor/**/*" # rubocop config/default.yml - "db/schema.rb" - "db/migrate/*" - "db/fixtures/**/*" - "test/factories/**/*" - "spec/factories/**/*" - "spec/test_app/db/*" DisplayCopNames: true TargetRubyVersion: 2.3 Rails: Enabled: true # rails >= 5 の設定のため Rails/HttpPositionalArguments: Enabled: false ##################### Style ################################## # 日本語のコメントを許可する Style/AsciiComments: Enabled: false # 複数行の場合は末尾にカンマを入れる Style/TrailingCommaInArrayLiteral: EnforcedStyleForMultiline: comma Style/TrailingCommaInHashLiteral: EnforcedStyleForMultiline: comma Style/TrailingCommaInArguments: EnforcedStyleForMultiline: comma # class先頭のコメントを省略する Style/Documentation: Enabled: false # selfは省略しない Style/RedundantSelf: Enabled: false # 以下の2つのあわせ技で、こういうのを許可 # xs.select { # f x # }.map { |x| # f x # f x # }.compact # Rubocopの意図としては、おそらく # * ブロックのあとにメソッドをチェインされると読みにくい(主観) # * ブロックの終わりを`}`ではなく`end`にすることで、defとかifとかと終了を揃える # だと思うけど、むしろ一旦変数に入れて改めてメソッド適用する方がかえって読みにくいと思うし(主観)、 # 返り値を使う場合はブロックの終わりをendにせず}にしないとメソッド結合順序の関係などでやばいので # Style/BlockDelimitersとStyle/MultilineBlockChainはよくないと判断。 # # 「返り値を目的とするブロック引数」には{}を、「副作用を目的とするブロック引数」にはdo/endを # 使うようにすると、可読性的にもメソッドの結合順序的にも実用上便利。 # これが正しく運用されてるかどうかはgrammerではなくsemanticの話なので、レビュワーの人間が # 見ることになり、それは直感的な気がする (再び主観) Style/BlockDelimiters: Enabled: false Style/MultilineBlockChain: Enabled: false Style/EmptyMethod: Enabled: false # 引数の書き方の多様性を許可 # foo(a, # b # ) # foo( # a, # b) # foo( # a, # b # ) # foo(a, # b) Layout/MultilineMethodCallBraceLayout: Enabled: false # メソッド指定の多様性を許可 # while a # .b # something # end # while a # .b # something # end # Thing.a # .b # .c # while a # .b # something # end Layout/MultilineMethodCallIndentation: Enabled: false # aaa(bbb( # ccc # )) # 的なのができないのは不便すぎるのでdisable Layout/FirstParameterIndentation: Enabled: false # 候補が多いときはcondみたいに使いたい Style/EmptyCaseCondition: Enabled: false Style/DoubleNegation: Enabled: false Style/ParallelAssignment: Enabled: false Style/BracesAroundHashParameters: Enabled: false Style/MethodCallWithoutArgsParentheses: Enabled: false Style/DefWithParentheses: Enabled: false # 以下の両方を許容 # aaa. # bb(). # cc() # aaa # .bb() # .cc() # 前者は途中にコメントをはさむことができて実用上圧倒的に便利. # 後者はデフォルトでrubocopがおすすめしてるやつ Layout/DotPosition: Enabled: false # classが入れ子になった場合、テストの順番によってはエラーになりうる Style/ClassAndModuleChildren: Exclude: - "test/**/*.rb" - "spec/**/*.rb" ##################### Layout ################################## # 引数前のスペースは複数許可 Layout/SpaceBeforeFirstArg: Enabled: false Layout/SpaceInLambdaLiteral: Enabled: false Layout/IndentHeredoc: Enabled: false Layout/MultilineMethodCallBraceLayout: Enabled: false Layout/MultilineMethodCallIndentation: Enabled: false ##################### Lint ################################## # 引数前のスペースを許容する Lint/ParenthesesAsGroupedExpression: Enabled: false ##################### Metrics ################################## # * 警告 120文字 # * 禁止 160文字 # のイメージ Metrics/LineLength: Max: 160 Exclude: - "db/migrate/*.rb" # 20 行超えるのは migration ファイル以外滅多に無い Metrics/MethodLength: Max: 20 Exclude: - "db/migrate/*.rb" # キーワード引数は引数の数に含めない ParameterLists: CountKeywordArgs: false Metrics/BlockLength: Max: 100 Exclude: - "spec/**/*.rb" - "test/**/*.rb" - "app/admin/*.rb" - "config/**/*.rb" # Explicitly set the default value 15 Metrics/AbcSize: Max: 15 Exclude: - "test/**/*.rb" # キーワード引数は引数の数に含めない ParameterLists: CountKeywordArgs: false Metrics/ClassLength: Exclude: - "test/**/*.rb" Rails/UnknownEnv: Environments: - production - staging - development - local - test