.rubocop.yml
# Common configuration.
AllCops:
# Include gemspec and Rakefile
Include:
- '**/*.gemspec'
- '**/Rakefile'
Exclude:
- 'vendor/**/*'
- 'features/**/*'
- 'Gemfile'
- 'bin/**'
- 'tmp/**/*'
- 'db/**/*.rb'
# By default, the rails cops are not run. Override in project or home
# directory .rubocop.yml files, or by giving the -R/--rails option.
# Indent private/protected/public as deep as method definitions
Style/AccessModifierIndentation:
EnforcedStyle: indent
SupportedStyles:
- outdent
- indent
# Align the elements of a hash literal if they span more than one line.
Style/AlignHash:
# Alignment of entries using hash rocket as separator. Valid values are:
#
# key - left alignment of keys
# 'a' => 2
# 'bb' => 3
# separator - alignment of hash rockets, keys are right aligned
# 'a' => 2
# 'bb' => 3
# table - left alignment of keys, hash rockets, and values
# 'a' => 2
# 'bb' => 3
EnforcedHashRocketStyle: key
# Alignment of entries using colon as separator. Valid values are:
#
# key - left alignment of keys
# a: 0
# bb: 1
# separator - alignment of colons, keys are right aligned
# a: 0
# bb: 1
# table - left alignment of keys and values
# a: 0
# bb: 1
EnforcedColonStyle: key
# Select whether hashes that are the last argument in a method call should be
# inspected? Valid values are:
#
# always_inspect - Inspect both implicit and explicit hashes.
# Registers an offense for:
# function(a: 1,
# b: 2)
# Registers an offense for:
# function({a: 1,
# b: 2})
# always_ignore - Ignore both implicit and explicit hashes.
# Accepts:
# function(a: 1,
# b: 2)
# Accepts:
# function({a: 1,
# b: 2})
# ignore_implicit - Ignore only implicit hashes.
# Accepts:
# function(a: 1,
# b: 2)
# Registers an offense for:
# function({a: 1,
# b: 2})
# ignore_explicit - Ignore only explicit hashes.
# Accepts:
# function({a: 1,
# b: 2})
# Registers an offense for:
# function(a: 1,
# b: 2)
EnforcedLastArgumentHashStyle: always_inspect
SupportedLastArgumentHashStyles:
- always_inspect
- always_ignore
- ignore_implicit
- ignore_explicit
Style/AlignParameters:
# Alignment of parameters in multi-line method calls.
#
# The `with_first_parameter` style aligns the following lines along the same column
# as the first parameter.
#
# method_call(a,
# b)
#
# The `with_fixed_indentation` style aligns the following lines with one
# level of indentation relative to the start of the line with the method call.
#
# method_call(a,
# b)
EnforcedStyle: with_first_parameter
SupportedStyles:
- with_first_parameter
- with_fixed_indentation
Metrics/BlockNesting:
Max: 3
Style/BracesAroundHashParameters:
EnforcedStyle: no_braces
SupportedStyles:
- braces
- no_braces
# Indentation of `when`.
Style/CaseIndentation:
IndentWhenRelativeTo: case
SupportedStyles:
- case
- end
IndentOneStep: false
Style/ClassAndModuleChildren:
# Checks the style of children definitions at classes and modules.
#
# Basically there are two different styles:
#
# `nested` - have each child on a separate line
# class Foo
# class Bar
# end
# end
#
# `compact` - combine definitions as much as possible
# class Foo::Bar
# end
#
# The compact style is only forced, for classes / modules with one child.
Enabled: false
EnforcedStyle: compact
SupportedStyles:
- nested
- compact
Style/ClassCheck:
EnforcedStyle: is_a?
SupportedStyles:
- is_a?
- kind_of?
Metrics/ClassLength:
CountComments: false # count full line comments?
Max: 100
# Align with the style guide.
Style/CollectionMethods:
# Mapping from undesired method to desired_method
# e.g. to use `detect` over `find`:
#
# CollectionMethods:
# PreferredMethods:
# find: detect
PreferredMethods:
collect: 'map'
collect!: 'map!'
inject: 'reduce'
detect: 'find'
find_all: 'select'
# Checks formatting of special comments
Style/CommentAnnotation:
Keywords:
- TODO
- FIXME
- OPTIMIZE
- HACK
- REVIEW
# Avoid complex methods.
Metrics/CyclomaticComplexity:
Max: 7
# Multi-line method chaining should be done with leading dots.
Style/DotPosition:
EnforcedStyle: leading
SupportedStyles:
- leading
- trailing
# Use empty lines between defs.
Style/EmptyLineBetweenDefs:
# If true, this parameter means that single line method definitions don't
# need an empty line between them.
AllowAdjacentOneLineDefs: false
# Checks whether the source file has a utf-8 encoding comment or not
Style/Encoding:
EnforcedStyle: always
SupportedStyles:
- when_needed
- always
Style/FileName:
Exclude:
- '**/Rakefile'
- '**/Gemfile'
- '**/Capfile'
# Checks use of for or each in multiline loops.
Style/For:
EnforcedStyle: each
SupportedStyles:
- for
- each
# Enforce the method used for string formatting.
Style/FormatString:
EnforcedStyle: format
SupportedStyles:
- format
- sprintf
- percent
# Built-in global variables are allowed by default.
Style/GlobalVars:
AllowedVariables: []
# `MinBodyLength` defines the number of lines of the a body of an if / unless
# needs to have to trigger this cop
Style/GuardClause:
MinBodyLength: 1
Style/HashSyntax:
EnforcedStyle: ruby19
SupportedStyles:
- ruby19
- hash_rockets
Style/IfUnlessModifier:
MaxLineLength: 80
# Checks the indentation of the first key in a hash literal.
Style/IndentHash:
# The value `special_inside_parentheses` means that hash literals with braces
# that have their opening brace on the same line as a surrounding opening
# round parenthesis, shall have their first key indented relative to the
# first position inside the parenthesis.
# The value `consistent` means that the indentation of the first key shall
# always be relative to the first position of the line where the opening
# brace is.
EnforcedStyle: special_inside_parentheses
SupportedStyles:
- special_inside_parentheses
- consistent
Style/LambdaCall:
EnforcedStyle: call
SupportedStyles:
- call
- braces
Metrics/LineLength:
Max: 80
AllowURI: true
Style/Next:
# With `always` all conditions at the end of an iteration needs to be
# replace by next - with `skip_modifier_ifs` the modifier if like this one
# are ignored: [1, 2].each { |a| return 'yes' if a == 1 }
EnforcedStyle: skip_modifier_ifs
SupportedStyles:
- skip_modifier_ifs
- always
Style/NonNilCheck:
# With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
# `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
# **usually** OK, but might change behavior.
#
# With `IncludeSemanticChanges` set to `false`, this cop does not report
# offenses for `!x.nil?` and does no changes that might change behavior.
IncludeSemanticChanges: false
Style/MethodDefParentheses:
EnforcedStyle: require_parentheses
SupportedStyles:
- require_parentheses
- require_no_parentheses
Metrics/MethodLength:
CountComments: false # count full line comments?
Max: 10
Exclude:
- 'db/migrate/*.rb'
Style/MethodName:
EnforcedStyle: snake_case
SupportedStyles:
- snake_case
- camelCase
Style/NumericLiterals:
MinDigits: 5
Metrics/ParameterLists:
Max: 5
CountKeywordArgs: true
# Allow safe assignment in conditions.
Style/ParenthesesAroundCondition:
AllowSafeAssignment: true
Style/PercentLiteralDelimiters:
PreferredDelimiters:
'%': ()
'%i': ()
'%q': ()
'%Q': ()
'%r': '{}'
'%s': ()
'%w': ()
'%W': ()
'%x': ()
Style/PredicateName:
NamePrefixBlacklist:
- is_
- has_
- have_
Style/RaiseArgs:
EnforcedStyle: exploded
SupportedStyles:
- compact # raise Exception.new(msg)
- exploded # raise Exception, msg
Style/RedundantReturn:
# When true allows code like `return x, y`.
AllowMultipleReturnValues: false
Style/Semicolon:
# Allow ; to separate several expressions on the same line.
AllowAsExpressionSeparator: false
Style/SignalException:
EnforcedStyle: semantic
SupportedStyles:
- only_raise
- only_fail
- semantic
Style/SingleLineBlockParams:
Methods:
- reduce:
- a
- e
- inject:
- a
- e
Style/SingleLineMethods:
AllowIfMethodIsEmpty: true
Style/StringLiterals:
EnforcedStyle: single_quotes
SupportedStyles:
- single_quotes
- double_quotes
Style/SpaceAroundEqualsInParameterDefault:
EnforcedStyle: space
SupportedStyles:
- space
- no_space
Style/SpaceBeforeBlockBraces:
EnforcedStyle: space
SupportedStyles:
- space
- no_space
Style/SpaceInsideBlockBraces:
EnforcedStyle: space
SupportedStyles:
- space
- no_space
# Valid values are: space, no_space
EnforcedStyleForEmptyBraces: no_space
# Space between { and |. Overrides EnforcedStyle if there is a conflict.
SpaceBeforeBlockParameters: true
Style/SpaceInsideHashLiteralBraces:
EnforcedStyle: space
EnforcedStyleForEmptyBraces: no_space
SupportedStyles:
- space
- no_space
Style/TrailingBlankLines:
EnforcedStyle: final_newline
SupportedStyles:
- final_newline
- final_blank_line
# TrivialAccessors doesn't require exact name matches and doesn't allow
# predicated methods by default.
Style/TrivialAccessors:
ExactNameMatch: false
AllowPredicates: false
# Allows trivial writers that don't end in an equal sign. e.g.
#
# def on_exception(action)
# @on_exception=action
# end
# on_exception :restart
#
# Commonly used in DSLs
AllowDSLWriters: false
Whitelist:
- to_ary
- to_a
- to_c
- to_enum
- to_h
- to_hash
- to_i
- to_int
- to_io
- to_open
- to_path
- to_proc
- to_r
- to_regexp
- to_str
- to_s
- to_sym
Style/VariableName:
EnforcedStyle: snake_case
SupportedStyles:
- snake_case
- camelCase
Style/WhileUntilModifier:
MaxLineLength: 80
Style/WordArray:
MinSize: 0
##################### Lint ##################################
# Allow safe assignment in conditions.
Lint/AssignmentInCondition:
AllowSafeAssignment: true
# Align ends correctly.
Lint/EndAlignment:
# The value `keyword` means that `end` should be aligned with the matching
# keyword (if, while, etc.).
# The value `variable` means that in assignments, `end` should be aligned
# with the start of the variable on the left hand side of `=`. In all other
# situations, `end` should still be aligned with the keyword.
AlignWith: keyword
SupportedStyles:
- keyword
- variable
Lint/DefEndAlignment:
# The value `def` means that `end` should be aligned with the def keyword.
# The value `start_of_line` means that `end` should be aligned with method
# calls like `private`, `public`, etc, if present in front of the `def`
# keyword on the same line.
AlignWith: start_of_line
SupportedStyles:
- start_of_line
- def
LineLength:
Max: 150
Documentation:
Enabled: false
EndOfLine:
Enabled: false
Metrics/AbcSize:
Enabled: false