Skip to content

Instantly share code, notes, and snippets.

@linyows
Forked from onk/.rubocop.yml
Created December 20, 2015 06:53
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save linyows/ace586b118f87291ed3e to your computer and use it in GitHub Desktop.
Save linyows/ace586b118f87291ed3e to your computer and use it in GitHub Desktop.
僕の使っている .rubocop.yml
# target_version:
# rubocop v0.34.2
# 自動生成されるものはチェック対象から除外する
AllCops:
Exclude:
- "vendor/**/*" # rubocop config/default.yml
- "db/schema.rb"
DisplayCopNames: true
##################### Style ##################################
# redirect_to xxx and return のイディオムを維持したい
Style/AndOr:
EnforcedStyle: conditionals
# 日本語のコメントを許可する
Style/AsciiComments:
Enabled: false
# do .. end から更にメソッドチェーンすると見づらいので
# auto-correct せず、自分で修正する
# spec 内は見た目が綺麗になるので許可
Style/BlockDelimiters:
AutoCorrect: false
Exclude:
- "spec/**/*"
# option 等、明示的にハッシュにした方が分かりやすい場合もある
Style/BracesAroundHashParameters:
Enabled: false
# Style/CollectionMethods 自体は無効になっているのだが、
# https://github.com/bbatsov/rubocop/issues/1084
# https://github.com/bbatsov/rubocop/issues/1334
# Performance/Detect がこの設定値を見るので PreferredMethods だけ変更しておく。
#
# デフォルト値から変えたのは
# find -> detect
# ActiveRecord の find と間違えやすいため
# reduce -> inject
# detect, reject, select と並べたときに韻を踏んでいるため。
# collect -> map を維持しているのは文字数が圧倒的に少ないため。
Style/CollectionMethods:
PreferredMethods:
detect: "detect"
find: "detect"
inject: "inject"
reduce: "inject"
# Hash#has_key? は許可したい
Style/DeprecatedHashMethods:
Enabled: false
# ドキュメントの無い public class を許可する
Style/Documentation:
Enabled: false
# !! のイディオムは積極的に使う
Style/DoubleNegation:
Enabled: false
# メソッドチェーンの改行は末尾に . を入れる
# REPL に貼り付けた際の暴発を防ぐため
Style/DotPosition:
EnforcedStyle: trailing
# 明示的に else で nil を返すのは分かりやすいので許可する
Style/EmptyElse:
EnforcedStyle: empty
# 桁揃えが綺麗にならないことが多いので migration は除外
Style/ExtraSpacing:
Exclude:
- "db/migrate/*.rb"
# いずれかに揃えるのならば `sprintf` や `format` より String#% が好きです
Style/FormatString:
EnforcedStyle: percent
# if 文の中に 3 行程度のブロックを書くぐらいは許容した方が現実的
Style/GuardClause:
MinBodyLength: 5
# rake タスクの順序の hash は rocket を許可する
Style/HashSyntax:
Exclude:
- "**/*.rake"
- "Rakefile"
# 条件式の方を意識させたい場合には後置の if/unless を使わない方が分かりやすい
Style/IfUnlessModifier:
Enabled: false
# ({ と hash を開始した場合に ( の位置にインデントさせる
# そもそも {} が必要ない可能性が高いが Style/BracesAroundHashParameters はチェックしないことにしたので
Style/IndentHash:
EnforcedStyle: consistent
# private/protected は一段深くインデントする
Style/IndentationConsistency:
EnforcedStyle: rails
# scope 等は複数行でも lambda ではなく ->{} で揃えた方が見た目が綺麗
Style/Lambda:
Enabled: false
# 1_000_000 と区切り文字が 2 個以上必要になる場合のみ _ 区切りを必須にする
Style/NumericLiterals:
MinDigits: 7
# 正規表現にマッチさせた時の特殊変数の置き換えは Regex.last_match ではなく
# 名前付きキャプチャを使って参照したいので auto-correct しない
Style/PerlBackrefs:
AutoCorrect: false
# has_ から始まるメソッドは許可する
Style/PredicateName:
NamePrefixBlacklist:
- "is_"
- "have_"
NamePrefix:
- "is_"
- "have_"
# 特に model 内において、ローカル変数とメソッド呼び出しの区別をつけた方が分かりやすい場合が多い
Style/RedundantSelf:
Enabled: false
# 受け取り側で multiple assignment しろというのを明示
Style/RedundantReturn:
AllowMultipleReturnValues: true
# spec 内は見た目が綺麗になるので許可
Style/Semicolon:
Exclude:
- "spec/**/*"
# fail と使い分ける必要ナシ
Style/SignalException:
EnforcedStyle: only_raise
# `||` も align に使うことがあるので追加する
Style/SpaceAroundOperators:
MultiSpaceAllowedForOperators:
- "="
- "=>"
- "||"
# * 式展開したい場合に書き換えるのが面倒
# * 文章ではダブルクォートよりもシングルクォートの方が頻出する
# ことから EnforcedStyle: double_quotes 推奨
Style/StringLiterals:
EnforcedStyle: double_quotes
# auto-correct 時に Style/StringLiterals とカニバって無限ループになる (v0.28.0)
Style/StringLiteralsInInterpolation:
Enabled: false
# いくらなんでも inject { |a, e| } は短すぎるので分かりやすい名前をつけたい
Style/SingleLineBlockParams:
Enabled: false
# * migrate
# * jbuilder
# * model の association
# * controller の callback
# 辺りの桁揃えで引っかかるので全体的にチェックしない
Style/SingleSpaceBeforeFirstArg:
Enabled: false
# 複数行の場合はケツカンマを入れる
Style/TrailingComma:
EnforcedStyleForMultiline: comma
##################### Lint ##################################
# * 同名のメソッドがある場合にローカル変数に `_` を付ける
# * 一時変数として `_` を付ける
# というテクニックは頻出する
Lint/UnderscorePrefixedVariableName:
Enabled: false
# 子クラスで実装させるつもりのメソッドで引っかかるので
Lint/UnusedMethodArgument:
Enabled: false
##################### Metrics ##################################
# 30 まではギリギリ許せる範囲だった
Metrics/AbcSize:
Max: 30
# 6 は強すぎるので緩める
Metrics/CyclomaticComplexity:
Max: 10
# * 警告 120文字
# * 禁止 160文字
# のイメージ
Metrics/LineLength:
Max: 160
Exclude:
- "db/migrate/*.rb"
# 20 行超えるのは migration ファイル以外滅多に無い
Metrics/MethodLength:
Max: 20
Exclude:
- "db/migrate/*.rb"
# 分岐の数。ガード句を多用しているとデフォルト 7 だと厳しい
Metrics/PerceivedComplexity:
Max: 8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment