.rubocop.yml
# Common configuration.
AllCops:
RubyInterpreters:
- ruby
- rake
# Include common Ruby source files.
Include:
- '**/*.rb'
- '**/*.gemspec'
- '**/*.rake'
- '**/*.spec'
- '**/Gemfile'
- '**/Guardfile'
- '**/Rakefile'
Exclude:
- '.git/**/*'
- 'vendor/**/*'
# Default formatter will be used if no `-f/--format` option is given.
DefaultFormatter: progress
# Cop names are displayed in offense messages by default. Change behavior
# by overriding DisplayCopNames, or by giving the `--no-display-cop-names`
# option.
DisplayCopNames: true
# Style guide URLs are not displayed in offense messages by default. Change
# behavior by overriding `DisplayStyleGuide`, or by giving the
# `-S/--display-style-guide` option.
DisplayStyleGuide: false
# When specifying style guide URLs, any paths and/or fragments will be
# evaluated relative to the base URL.
StyleGuideBaseURL: https://github.com/rubocop-hq/ruby-style-guide
# Extra details are not displayed in offense messages by default. Change
# behavior by overriding ExtraDetails, or by giving the
# `-E/--extra-details` option.
ExtraDetails: false
# Additional cops that do not reference a style guide rule may be enabled by
# default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving
# the `--only-guide-cops` option.
StyleGuideCopsOnly: false
# All cops except the ones configured `Enabled: false` in this file are enabled by default.
# Change this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`.
# When `DisabledByDefault` is `true`, all cops in the default configuration
# are disabled, and only cops in user configuration are enabled. This makes
# cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`,
# cops in user configuration will be enabled even if they don't set the
# Enabled parameter.
# When `EnabledByDefault` is `true`, all cops, even those configured `Enabled: false`
# in this file are enabled by default. Cops can still be disabled in user configuration.
# Note that it is invalid to set both EnabledByDefault and DisabledByDefault
# to true in the same configuration.
EnabledByDefault: false
DisabledByDefault: false
# Enables the result cache if `true`. Can be overridden by the `--cache` command
# line option.
UseCache: true
# Threshold for how many files can be stored in the result cache before some
# of the files are automatically removed.
MaxFilesInCache: 20000
# The cache will be stored in "rubocop_cache" under this directory. If
# CacheRootDirectory is ~ (nil), which it is by default, the root will be
# taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if
# `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`.
CacheRootDirectory: ~
# It is possible for a malicious user to know the location of RuboCop's cache
# directory by looking at CacheRootDirectory, and create a symlink in its
# place that could cause RuboCop to overwrite unintended files, or read
# malicious input. If you are certain that your cache location is secure from
# this kind of attack, and wish to use a symlinked cache location, set this
# value to "true".
AllowSymlinksInCacheRootDirectory: false
# What MRI version of the Ruby interpreter is the inspected code intended to
# run on? (If there is more than one, set this to the lowest version.)
# If a value is specified for TargetRubyVersion then it is used. Acceptable
# values are specificed as a float (i.e. 2.5); the teeny version of Ruby
# should not be included. If the project specifies a Ruby version in the
# .ruby-version file, Gemfile or gems.rb file, RuboCop will try to determine
# the desired version of Ruby by inspecting the .ruby-version file first,
# followed by the Gemfile.lock or gems.locked file. (Although the Ruby version
# is specified in the Gemfile or gems.rb file, RuboCop reads the final value
# from the lock file.) If the Ruby version is still unresolved, RuboCop will
# use the oldest officially supported Ruby version (currently Ruby 2.2).
TargetRubyVersion: 2.3
#################### Bundler ###############################
Bundler/DuplicatedGem:
Description: 'Checks for duplicate gem entries in Gemfile.'
Enabled: true
VersionAdded: '0.46'
Include:
- '**/*.gemfile'
- '**/Gemfile'
- '**/gems.rb'
Bundler/GemComment:
Description: 'Add a comment describing each gem.'
Enabled: false
VersionAdded: '0.59'
Include:
- '**/*.gemfile'
- '**/Gemfile'
- '**/gems.rb'
Whitelist: []
Bundler/InsecureProtocolSource:
Description: >-
The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated
because HTTP requests are insecure. Please change your source to
'https://rubygems.org' if possible, or 'http://rubygems.org' if not.
Enabled: true
VersionAdded: '0.50'
Include:
- '**/*.gemfile'
- '**/Gemfile'
- '**/gems.rb'
Bundler/OrderedGems:
Description: >-
Gems within groups in the Gemfile should be alphabetically sorted.
Enabled: true
VersionAdded: '0.46'
VersionChanged: '0.47'
TreatCommentsAsGroupSeparators: true
Include:
- '**/*.gemfile'
- '**/Gemfile'
- '**/gems.rb'
#################### Gemspec ###############################
Gemspec/DuplicatedAssignment:
Description: 'An attribute assignment method calls should be listed only once in a gemspec.'
Enabled: true
VersionAdded: '0.52'
Include:
- '**/*.gemspec'
Gemspec/OrderedDependencies:
Description: >-
Dependencies in the gemspec should be alphabetically sorted.
Enabled: true
VersionAdded: '0.51'
TreatCommentsAsGroupSeparators: true
Include:
- '**/*.gemspec'
Gemspec/RequiredRubyVersion:
Description: 'Checks that `required_ruby_version` of gemspec and `TargetRubyVersion` of .rubocop.yml are equal.'
Enabled: true
VersionAdded: '0.52'
Include:
- '**/*.gemspec'
#################### Layout ###########################
Layout/AccessModifierIndentation:
Description: Check indentation of private/protected visibility modifiers.
StyleGuide: '#indent-public-private-protected'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: indent
SupportedStyles:
- outdent
- indent
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/AlignArray:
Description: >-
Align the elements of an array literal if they span more than
one line.
StyleGuide: '#align-multiline-arrays'
Enabled: true
VersionAdded: '0.49'
Layout/AlignHash:
Description: >-
Align the elements of a hash literal if they span more than
one line.
Enabled: true
VersionAdded: '0.49'
# 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
SupportedHashRocketStyles:
- key
- separator
- table
# 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
SupportedColonStyles:
- key
- separator
- table
# 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
Layout/AlignParameters:
Description: >-
Align the parameters of a method call if they span more
than one line.
StyleGuide: '#no-double-indent'
Enabled: true
VersionAdded: '0.49'
# 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
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/BlockAlignment:
Description: 'Align block ends correctly.'
Enabled: true
VersionAdded: '0.53'
# The value `start_of_block` means that the `end` should be aligned with line
# where the `do` keyword appears.
# The value `start_of_line` means it should be aligned with the whole
# expression's starting line.
# The value `either` means both are allowed.
EnforcedStyleAlignWith: either
SupportedStylesAlignWith:
- either
- start_of_block
- start_of_line
Layout/BlockEndNewline:
Description: 'Put end statement of multiline block on its own line.'
Enabled: true
VersionAdded: '0.49'
Layout/CaseIndentation:
Description: 'Indentation of when in a case/when/[else/]end.'
StyleGuide: '#indent-when-to-case'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: case
SupportedStyles:
- case
- end
IndentOneStep: false
# By default, the indentation width from `Layout/IndentationWidth` is used.
# But it can be overridden by setting this parameter.
# This only matters if `IndentOneStep` is `true`
IndentationWidth: ~
Layout/ClassStructure:
Description: 'Enforces a configured order of definitions within a class body.'
StyleGuide: 'https://github.com/rubocop-hq/ruby-style-guide#consistent-classes'
Enabled: false
VersionAdded: '0.52'
Categories:
module_inclusion:
- include
- prepend
- extend
ExpectedOrder:
- module_inclusion
- constants
- public_class_methods
- initializer
- public_methods
- protected_methods
- private_methods
Layout/ClosingHeredocIndentation:
Description: 'Checks the indentation of here document closings.'
Enabled: true
VersionAdded: '0.57'
Layout/ClosingParenthesisIndentation:
Description: 'Checks the indentation of hanging closing parentheses.'
Enabled: true
VersionAdded: '0.49'
Layout/CommentIndentation:
Description: 'Indentation of comments.'
Enabled: true
VersionAdded: '0.49'
Layout/ConditionPosition:
Description: >-
Checks for condition placed in a confusing position relative to
the keyword.
StyleGuide: '#same-line-condition'
Enabled: true
VersionAdded: '0.53'
Layout/DefEndAlignment:
Description: 'Align ends corresponding to defs correctly.'
Enabled: true
VersionAdded: '0.53'
# 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.
EnforcedStyleAlignWith: start_of_line
SupportedStylesAlignWith:
- start_of_line
- def
AutoCorrect: false
Severity: warning
Layout/DotPosition:
Description: 'Checks the position of the dot in multi-line method calls.'
StyleGuide: '#consistent-multi-line-chains'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: leading
SupportedStyles:
- leading
- trailing
Layout/ElseAlignment:
Description: 'Align elses and elsifs correctly.'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyComment:
Description: 'Checks empty comment.'
Enabled: true
VersionAdded: '0.53'
AllowBorderComment: true
AllowMarginComment: true
Layout/EmptyLineAfterGuardClause:
Description: 'Add empty line after guard clause.'
Enabled: true
VersionAdded: '0.56'
VersionChanged: '0.59'
Layout/EmptyLineAfterMagicComment:
Description: 'Add an empty line after magic comments to separate them from code.'
StyleGuide: '#separate-magic-comments-from-code'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLineBetweenDefs:
Description: 'Use empty lines between defs.'
StyleGuide: '#empty-lines-between-methods'
Enabled: true
VersionAdded: '0.49'
# If `true`, this parameter means that single line method definitions don't
# need an empty line between them.
AllowAdjacentOneLineDefs: false
# Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2]
NumberOfEmptyLines: 1
Layout/EmptyLines:
Description: "Don't use several empty lines in a row."
StyleGuide: '#two-or-more-empty-lines'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLinesAroundAccessModifier:
Description: "Keep blank lines around access modifiers."
StyleGuide: '#empty-lines-around-access-modifier'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLinesAroundArguments:
Description: "Keeps track of empty lines around method arguments."
Enabled: true
VersionAdded: '0.52'
Layout/EmptyLinesAroundBeginBody:
Description: "Keeps track of empty lines around begin-end bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLinesAroundBlockBody:
Description: "Keeps track of empty lines around block bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: no_empty_lines
SupportedStyles:
- empty_lines
- no_empty_lines
Layout/EmptyLinesAroundClassBody:
Description: "Keeps track of empty lines around class bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.53'
EnforcedStyle: no_empty_lines
SupportedStyles:
- empty_lines
- empty_lines_except_namespace
- empty_lines_special
- no_empty_lines
- beginning_only
- ending_only
Layout/EmptyLinesAroundExceptionHandlingKeywords:
Description: "Keeps track of empty lines around exception handling keywords."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLinesAroundMethodBody:
Description: "Keeps track of empty lines around method bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLinesAroundModuleBody:
Description: "Keeps track of empty lines around module bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: no_empty_lines
SupportedStyles:
- empty_lines
- empty_lines_except_namespace
- empty_lines_special
- no_empty_lines
Layout/EndAlignment:
Description: 'Align ends correctly.'
Enabled: true
VersionAdded: '0.53'
# 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.
# The value `start_of_line` means that `end` should be aligned with the start
# of the line which the matching keyword appears on.
EnforcedStyleAlignWith: keyword
SupportedStylesAlignWith:
- keyword
- variable
- start_of_line
AutoCorrect: false
Severity: warning
Layout/EndOfLine:
Description: 'Use Unix-style line endings.'
StyleGuide: '#crlf'
Enabled: true
VersionAdded: '0.49'
# The `native` style means that CR+LF (Carriage Return + Line Feed) is
# enforced on Windows, and LF is enforced on other platforms. The other styles
# mean LF and CR+LF, respectively.
EnforcedStyle: native
SupportedStyles:
- native
- lf
- crlf
Layout/ExtraSpacing:
Description: 'Do not use unnecessary spacing.'
Enabled: true
VersionAdded: '0.49'
# When true, allows most uses of extra spacing if the intent is to align
# things with the previous or next line, not counting empty lines or comment
# lines.
AllowForAlignment: true
# When true, forces the alignment of `=` in assignments on consecutive lines.
ForceEqualSignAlignment: false
Layout/FirstArrayElementLineBreak:
Description: >-
Checks for a line break before the first element in a
multi-line array.
Enabled: false
VersionAdded: '0.49'
Layout/FirstHashElementLineBreak:
Description: >-
Checks for a line break before the first element in a
multi-line hash.
Enabled: false
VersionAdded: '0.49'
Layout/FirstMethodArgumentLineBreak:
Description: >-
Checks for a line break before the first argument in a
multi-line method call.
Enabled: false
VersionAdded: '0.49'
Layout/FirstMethodParameterLineBreak:
Description: >-
Checks for a line break before the first parameter in a
multi-line method parameter definition.
Enabled: false
VersionAdded: '0.49'
Layout/FirstParameterIndentation:
Description: 'Checks the indentation of the first parameter in a method call.'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.56'
EnforcedStyle: special_for_inner_method_call_in_parentheses
SupportedStyles:
# The first parameter should always be indented one step more than the
# preceding line.
- consistent
# The first parameter should always be indented one level relative to the
# parent that is receiving the parameter
- consistent_relative_to_receiver
# The first parameter should normally be indented one step more than the
# preceding line, but if it's a parameter for a method call that is itself
# a parameter in a method call, then the inner parameter should be indented
# relative to the inner method.
- special_for_inner_method_call
# Same as `special_for_inner_method_call` except that the special rule only
# applies if the outer method call encloses its arguments in parentheses.
- special_for_inner_method_call_in_parentheses
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/IndentArray:
Description: >-
Checks the indentation of the first element in an array
literal.
Enabled: true
VersionAdded: '0.49'
# The value `special_inside_parentheses` means that array literals with
# brackets that have their opening bracket on the same line as a surrounding
# opening round parenthesis, shall have their first element indented relative
# to the first position inside the parenthesis.
#
# The value `consistent` means that the indentation of the first element shall
# always be relative to the first position of the line where the opening
# bracket is.
#
# The value `align_brackets` means that the indentation of the first element
# shall always be relative to the position of the opening bracket.
EnforcedStyle: special_inside_parentheses
SupportedStyles:
- special_inside_parentheses
- consistent
- align_brackets
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/IndentAssignment:
Description: >-
Checks the indentation of the first line of the
right-hand-side of a multi-line assignment.
Enabled: true
VersionAdded: '0.49'
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/IndentHash:
Description: 'Checks the indentation of the first key in a hash literal.'
Enabled: true
VersionAdded: '0.49'
# 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.
#
# The value `align_braces` means that the indentation of the first key shall
# always be relative to the position of the opening brace.
EnforcedStyle: special_inside_parentheses
SupportedStyles:
- special_inside_parentheses
- consistent
- align_braces
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/IndentHeredoc:
Description: 'This cop checks the indentation of the here document bodies.'
StyleGuide: '#squiggly-heredocs'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: auto_detection
SupportedStyles:
- auto_detection
- squiggly
- active_support
- powerpack
- unindent
Layout/IndentationConsistency:
Description: 'Keep indentation straight.'
StyleGuide: '#spaces-indentation'
Enabled: true
VersionAdded: '0.49'
# The difference between `rails` and `normal` is that the `rails` style
# prescribes that in classes and modules the `protected` and `private`
# modifier keywords shall be indented the same as public methods and that
# protected and private members shall be indented one step more than the
# modifiers. Other than that, both styles mean that entities on the same
# logical depth shall have the same indentation.
EnforcedStyle: normal
SupportedStyles:
- normal
- rails
Layout/IndentationWidth:
Description: 'Use 2 spaces for indentation.'
StyleGuide: '#spaces-indentation'
Enabled: true
VersionAdded: '0.49'
# Number of spaces for each indentation level.
Width: 2
IgnoredPatterns: []
Layout/InitialIndentation:
Description: >-
Checks the indentation of the first non-blank non-comment line in a file.
Enabled: true
VersionAdded: '0.49'
Layout/LeadingBlankLines:
Description: Check for unnecessary blank lines at the beginning of a file.
Enabled: true
VersionAdded: '0.57'
Layout/LeadingCommentSpace:
Description: 'Comments should start with a space.'
StyleGuide: '#hash-space'
Enabled: true
VersionAdded: '0.49'
Layout/MultilineArrayBraceLayout:
Description: >-
Checks that the closing brace in an array literal is
either on the same line as the last array element, or
a new line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on the same line as last element
- symmetrical
- new_line
- same_line
Layout/MultilineAssignmentLayout:
Description: 'Check for a newline after the assignment operator in multi-line assignments.'
StyleGuide: '#indent-conditional-assignment'
Enabled: false
VersionAdded: '0.49'
# The types of assignments which are subject to this rule.
SupportedTypes:
- block
- case
- class
- if
- kwbegin
- module
EnforcedStyle: new_line
SupportedStyles:
# Ensures that the assignment operator and the rhs are on the same line for
# the set of supported types.
- same_line
# Ensures that the assignment operator and the rhs are on separate lines
# for the set of supported types.
- new_line
Layout/MultilineBlockLayout:
Description: 'Ensures newlines after multiline block do statements.'
Enabled: true
VersionAdded: '0.49'
Layout/MultilineHashBraceLayout:
Description: >-
Checks that the closing brace in a hash literal is
either on the same line as the last hash element, or
a new line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on same line as last element
- symmetrical
- new_line
- same_line
Layout/MultilineMethodCallBraceLayout:
Description: >-
Checks that the closing brace in a method call is
either on the same line as the last method argument, or
a new line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on the same line as last argument
- symmetrical
- new_line
- same_line
Layout/MultilineMethodCallIndentation:
Description: >-
Checks indentation of method calls with the dot operator
that span more than one line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: aligned
SupportedStyles:
- aligned
- indented
- indented_relative_to_receiver
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/MultilineMethodDefinitionBraceLayout:
Description: >-
Checks that the closing brace in a method definition is
either on the same line as the last method parameter, or
a new line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on the same line as last parameter
- symmetrical
- new_line
- same_line
Layout/MultilineOperationIndentation:
Description: >-
Checks indentation of binary operations that span more than
one line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: aligned
SupportedStyles:
- aligned
- indented
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
Layout/RescueEnsureAlignment:
Description: 'Align rescues and ensures correctly.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceAfterColon:
Description: 'Use spaces after colons.'
StyleGuide: '#spaces-operators'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceAfterComma:
Description: 'Use spaces after commas.'
StyleGuide: '#spaces-operators'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceAfterMethodName:
Description: >-
Do not put a space between a method name and the opening
parenthesis in a method definition.
StyleGuide: '#parens-no-spaces'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceAfterNot:
Description: Tracks redundant space after the ! operator.
StyleGuide: '#no-space-bang'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceAfterSemicolon:
Description: 'Use spaces after semicolons.'
StyleGuide: '#spaces-operators'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceAroundBlockParameters:
Description: 'Checks the spacing inside and after block parameters pipes.'
Enabled: true
VersionAdded: '0.49'
EnforcedStyleInsidePipes: no_space
SupportedStylesInsidePipes:
- space
- no_space
Layout/SpaceAroundEqualsInParameterDefault:
Description: >-
Checks that the equals signs in parameter default assignments
have or don't have surrounding space depending on
configuration.
StyleGuide: '#spaces-around-equals'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: space
SupportedStyles:
- space
- no_space
Layout/SpaceAroundKeyword:
Description: 'Use a space around keywords if appropriate.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceAroundOperators:
Description: 'Use a single space around operators.'
StyleGuide: '#spaces-operators'
Enabled: true
VersionAdded: '0.49'
# When `true`, allows most uses of extra spacing if the intent is to align
# with an operator on the previous or next line, not counting empty lines
# or comment lines.
AllowForAlignment: true
Layout/SpaceBeforeBlockBraces:
Description: >-
Checks that the left block brace has or doesn't have space
before it.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: space
SupportedStyles:
- space
- no_space
EnforcedStyleForEmptyBraces: space
SupportedStylesForEmptyBraces:
- space
- no_space
VersionChanged: '0.52.1'
Layout/SpaceBeforeComma:
Description: 'No spaces before commas.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceBeforeComment:
Description: >-
Checks for missing space between code and a comment on the
same line.
Enabled: true
VersionAdded: '0.49'
Layout/SpaceBeforeFirstArg:
Description: >-
Checks that exactly one space is used between a method name
and the first argument for method calls without parentheses.
Enabled: true
VersionAdded: '0.49'
# When `true`, allows most uses of extra spacing if the intent is to align
# things with the previous or next line, not counting empty lines or comment
# lines.
AllowForAlignment: true
Layout/SpaceBeforeSemicolon:
Description: 'No spaces before semicolons.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceInLambdaLiteral:
Description: 'Checks for spaces in lambda literals.'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: require_no_space
SupportedStyles:
- require_no_space
- require_space
Layout/SpaceInsideArrayLiteralBrackets:
Description: 'Checks the spacing inside array literal brackets.'
Enabled: true
VersionAdded: '0.52'
EnforcedStyle: no_space
SupportedStyles:
- space
- no_space
# 'compact' normally requires a space inside the brackets, with the exception
# that successive left brackets or right brackets are collapsed together
- compact
EnforcedStyleForEmptyBrackets: no_space
SupportedStylesForEmptyBrackets:
- space
- no_space
Layout/SpaceInsideArrayPercentLiteral:
Description: 'No unnecessary additional spaces between elements in %i/%w literals.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceInsideBlockBraces:
Description: >-
Checks that block braces have or don't have surrounding space.
For blocks taking parameters, checks that the left brace has
or doesn't have trailing space.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: space
SupportedStyles:
- space
- no_space
EnforcedStyleForEmptyBraces: no_space
SupportedStylesForEmptyBraces:
- space
- no_space
# Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict.
SpaceBeforeBlockParameters: true
Layout/SpaceInsideHashLiteralBraces:
Description: "Use spaces inside hash literal braces - or don't."
StyleGuide: '#spaces-operators'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: space
SupportedStyles:
- space
- no_space
# 'compact' normally requires a space inside hash braces, with the exception
# that successive left braces or right braces are collapsed together
- compact
EnforcedStyleForEmptyBraces: no_space
SupportedStylesForEmptyBraces:
- space
- no_space
Layout/SpaceInsideParens:
Description: 'No spaces after ( or before ).'
StyleGuide: '#spaces-braces'
Enabled: false
VersionAdded: '0.49'
VersionChanged: '0.55'
EnforcedStyle: no_space
SupportedStyles:
- space
- no_space
Layout/SpaceInsidePercentLiteralDelimiters:
Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceInsideRangeLiteral:
Description: 'No spaces inside range literals.'
StyleGuide: '#no-space-inside-range-literals'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceInsideReferenceBrackets:
Description: 'Checks the spacing inside referential brackets.'
Enabled: true
VersionAdded: '0.52'
VersionChanged: '0.53'
EnforcedStyle: no_space
SupportedStyles:
- space
- no_space
EnforcedStyleForEmptyBrackets: no_space
SupportedStylesForEmptyBrackets:
- space
- no_space
Layout/SpaceInsideStringInterpolation:
Description: 'Checks for padding/surrounding spaces inside string interpolation.'
StyleGuide: '#string-interpolation'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: no_space
SupportedStyles:
- space
- no_space
Layout/Tab:
Description: 'No hard tabs.'
StyleGuide: '#spaces-indentation'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.51'
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
# It is used during auto-correction to determine how many spaces should
# replace each tab.
IndentationWidth: ~
Layout/TrailingBlankLines:
Description: 'Checks trailing blank lines and final newline.'
StyleGuide: '#newline-eof'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: final_newline
SupportedStyles:
- final_newline
- final_blank_line
Layout/TrailingWhitespace:
Description: 'Avoid trailing whitespace.'
StyleGuide: '#no-trailing-whitespace'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.55'
AllowInHeredoc: false
#################### Lint ##################################
### Warnings
Lint/AmbiguousBlockAssociation:
Description: >-
Checks for ambiguous block association with method when param passed without
parentheses.
StyleGuide: '#syntax'
Enabled: true
VersionAdded: '0.48'
Lint/AmbiguousOperator:
Description: >-
Checks for ambiguous operators in the first argument of a
method invocation without parentheses.
StyleGuide: '#method-invocation-parens'
Enabled: true
VersionAdded: '0.17'
Lint/AmbiguousRegexpLiteral:
Description: >-
Checks for ambiguous regexp literals in the first argument of
a method invocation without parentheses.
Enabled: true
VersionAdded: '0.17'
Lint/AssignmentInCondition:
Description: "Don't use assignment in conditions."
StyleGuide: '#safe-assignment-in-condition'
Enabled: true
VersionAdded: '0.9'
AllowSafeAssignment: true
Lint/BigDecimalNew:
Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.'
Enabled: true
VersionAdded: '0.53'
Lint/BooleanSymbol:
Description: 'Check for `:true` and `:false` symbols.'
Enabled: true
VersionAdded: '0.50'
Lint/CircularArgumentReference:
Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument."
Enabled: true
VersionAdded: '0.33'
Lint/Debugger:
Description: 'Check for debugger calls.'
Enabled: true
VersionAdded: '0.14'
VersionChanged: '0.49'
Lint/DeprecatedClassMethods:
Description: 'Check for deprecated class method calls.'
Enabled: true
VersionAdded: '0.19'
Lint/DuplicateCaseCondition:
Description: 'Do not repeat values in case conditionals.'
Enabled: true
VersionAdded: '0.45'
Lint/DuplicateMethods:
Description: 'Check for duplicate method definitions.'
Enabled: true
VersionAdded: '0.29'
Lint/DuplicatedKey:
Description: 'Check for duplicate keys in hash literals.'
Enabled: true
VersionAdded: '0.34'
Lint/EachWithObjectArgument:
Description: 'Check for immutable argument given to each_with_object.'
Enabled: true
VersionAdded: '0.31'
Lint/ElseLayout:
Description: 'Check for odd code arrangement in an else block.'
Enabled: true
VersionAdded: '0.17'
Lint/EmptyEnsure:
Description: 'Checks for empty ensure block.'
Enabled: true
VersionAdded: '0.10'
VersionChanged: '0.48'
AutoCorrect: false
Lint/EmptyExpression:
Description: 'Checks for empty expressions.'
Enabled: true
VersionAdded: '0.45'
Lint/EmptyInterpolation:
Description: 'Checks for empty string interpolation.'
Enabled: true
VersionAdded: '0.20'
VersionChanged: '0.45'
Lint/EmptyWhen:
Description: 'Checks for `when` branches with empty bodies.'
Enabled: true
VersionAdded: '0.45'
Lint/EndInMethod:
Description: 'END blocks should not be placed inside method definitions.'
Enabled: true
VersionAdded: '0.9'
Lint/EnsureReturn:
Description: 'Do not use return in an ensure block.'
StyleGuide: '#no-return-ensure'
Enabled: true
VersionAdded: '0.9'
Lint/ErbNewArguments:
Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.'
Enabled: true
VersionAdded: '0.56'
Lint/FloatOutOfRange:
Description: >-
Catches floating-point literals too large or small for Ruby to
represent.
Enabled: true
VersionAdded: '0.36'
Lint/FormatParameterMismatch:
Description: 'The number of parameters to format/sprint must match the fields.'
Enabled: true
VersionAdded: '0.33'
Lint/HandleExceptions:
Description: "Don't suppress exception."
StyleGuide: '#dont-hide-exceptions'
Enabled: true
VersionAdded: '0.9'
Lint/ImplicitStringConcatenation:
Description: >-
Checks for adjacent string literals on the same line, which
could better be represented as a single string literal.
Enabled: true
VersionAdded: '0.36'
Lint/IneffectiveAccessModifier:
Description: >-
Checks for attempts to use `private` or `protected` to set
the visibility of a class method, which does not work.
Enabled: true
VersionAdded: '0.36'
Lint/InheritException:
Description: 'Avoid inheriting from the `Exception` class.'
Enabled: true
VersionAdded: '0.41'
# The default base class in favour of `Exception`.
EnforcedStyle: runtime_error
SupportedStyles:
- runtime_error
- standard_error
Lint/InterpolationCheck:
Description: 'Raise warning for interpolation in single q strs'
Enabled: true
VersionAdded: '0.50'
Lint/LiteralAsCondition:
Description: 'Checks of literals used in conditions.'
Enabled: true
VersionAdded: '0.51'
Lint/LiteralInInterpolation:
Description: 'Checks for literals used in interpolation.'
Enabled: true
VersionAdded: '0.19'
VersionChanged: '0.32'
Lint/Loop:
Description: >-
Use Kernel#loop with break rather than begin/end/until or
begin/end/while for post-loop tests.
StyleGuide: '#loop-with-break'
Enabled: true
VersionAdded: '0.9'
Lint/MissingCopEnableDirective:
Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`'
Enabled: true
VersionAdded: '0.52'
# Maximum number of consecutive lines the cop can be disabled for.
# 0 allows only single-line disables
# 1 would mean the maximum allowed is the following:
# # rubocop:disable SomeCop
# a = 1
# # rubocop:enable SomeCop
# .inf for any size
MaximumRangeSize: .inf
Lint/MultipleCompare:
Description: "Use `&&` operator to compare multiple value."
Enabled: true
VersionAdded: '0.47'
Lint/NestedMethodDefinition:
Description: 'Do not use nested method definitions.'
StyleGuide: '#no-nested-methods'
Enabled: true
VersionAdded: '0.32'
Lint/NestedPercentLiteral:
Description: 'Checks for nested percent literals.'
Enabled: true
VersionAdded: '0.52'
Lint/NextWithoutAccumulator:
Description: >-
Do not omit the accumulator when calling `next`
in a `reduce`/`inject` block.
Enabled: true
VersionAdded: '0.36'
Lint/NonLocalExitFromIterator:
Description: 'Do not use return in iterator to cause non-local exit.'
Enabled: true
VersionAdded: '0.30'
Lint/NumberConversion:
Description: 'Checks unsafe usage of number conversion methods.'
Enabled: false
VersionAdded: '0.53'
Lint/OrderedMagicComments:
Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
Enabled: true
VersionAdded: '0.53'
Lint/ParenthesesAsGroupedExpression:
Description: >-
Checks for method calls with a space before the opening
parenthesis.
StyleGuide: '#parens-no-spaces'
Enabled: true
VersionAdded: '0.12'
Lint/PercentStringArray:
Description: >-
Checks for unwanted commas and quotes in %w/%W literals.
Enabled: true
VersionAdded: '0.41'
Lint/PercentSymbolArray:
Description: >-
Checks for unwanted commas and colons in %i/%I literals.
Enabled: true
VersionAdded: '0.41'
Lint/RandOne:
Description: >-
Checks for `rand(1)` calls. Such calls always return `0`
and most likely a mistake.
Enabled: true
VersionAdded: '0.36'
Lint/RedundantWithIndex:
Description: 'Checks for redundant `with_index`.'
Enabled: true
VersionAdded: '0.50'
Lint/RedundantWithObject:
Description: 'Checks for redundant `with_object`.'
Enabled: true
VersionAdded: '0.51'
Lint/RegexpAsCondition:
Description: >-
Do not use regexp literal as a condition.
The regexp literal matches `$_` implicitly.
Enabled: true
VersionAdded: '0.51'
Lint/RequireParentheses:
Description: >-
Use parentheses in the method call to avoid confusion
about precedence.
Enabled: true
VersionAdded: '0.18'
Lint/RescueException:
Description: 'Avoid rescuing the Exception class.'
StyleGuide: '#no-blind-rescues'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.27.1'
Lint/RescueType:
Description: 'Avoid rescuing from non constants that could result in a `TypeError`.'
Enabled: true
VersionAdded: '0.49'
Lint/ReturnInVoidContext:
Description: 'Checks for return in void context.'
Enabled: true
VersionAdded: '0.50'
Lint/SafeNavigationChain:
Description: 'Do not chain ordinary method call after safe navigation operator.'
Enabled: true
VersionAdded: '0.47'
VersionChanged: '0.56'
Whitelist:
- present?
- blank?
- presence
- try
- try!
Lint/SafeNavigationConsistency:
Description: >-
Check to make sure that if safe navigation is used for a method
call in an `&&` or `||` condition that safe navigation is used
for all method calls on that same object.
Enabled: true
VersionAdded: '0.55'
Whitelist:
- present?
- blank?
- presence
- try
- try!
Lint/ScriptPermission:
Description: 'Grant script file execute permission.'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.50'
Lint/ShadowedArgument:
Description: 'Avoid reassigning arguments before they were used.'
Enabled: true
VersionAdded: '0.52'
IgnoreImplicitReferences: false
Lint/ShadowedException:
Description: >-
Avoid rescuing a higher level exception
before a lower level exception.
Enabled: true
VersionAdded: '0.41'
Lint/ShadowingOuterLocalVariable:
Description: >-
Do not use the same name as outer local variable
for block arguments or block local variables.
Enabled: true
VersionAdded: '0.9'
Lint/StringConversionInInterpolation:
Description: 'Checks for Object#to_s usage in string interpolation.'
StyleGuide: '#no-to-s'
Enabled: true
VersionAdded: '0.19'
VersionChanged: '0.20'
Lint/Syntax:
Description: 'Checks syntax error'
Enabled: true
VersionAdded: '0.9'
Lint/UnderscorePrefixedVariableName:
Description: 'Do not use prefix `_` for a variable that is used.'
Enabled: true
VersionAdded: '0.21'
Lint/UnifiedInteger:
Description: 'Use Integer instead of Fixnum or Bignum'
Enabled: true
VersionAdded: '0.43'
Lint/UnneededCopDisableDirective:
Description: >-
Checks for rubocop:disable comments that can be removed.
Note: this cop is not disabled when disabling all cops.
It must be explicitly disabled.
Enabled: true
VersionAdded: '0.53'
Lint/UnneededCopEnableDirective:
Description: Checks for rubocop:enable comments that can be removed.
Enabled: true
VersionAdded: '0.53'
Lint/UnneededRequireStatement:
Description: 'Checks for unnecessary `require` statement.'
Enabled: true
VersionAdded: '0.51'
Lint/UnneededSplatExpansion:
Description: 'Checks for splat unnecessarily being called on literals'
Enabled: true
VersionAdded: '0.43'
Lint/UnreachableCode:
Description: 'Unreachable code.'
Enabled: true
VersionAdded: '0.9'
Lint/UnusedBlockArgument:
Description: 'Checks for unused block arguments.'
StyleGuide: '#underscore-unused-vars'
Enabled: true
VersionAdded: '0.21'
VersionChanged: '0.22'
IgnoreEmptyBlocks: true
AllowUnusedKeywordArguments: false
Lint/UnusedMethodArgument:
Description: 'Checks for unused method arguments.'
StyleGuide: '#underscore-unused-vars'
Enabled: true
VersionAdded: '0.21'
VersionChanged: '0.35'
AllowUnusedKeywordArguments: false
IgnoreEmptyMethods: true
Lint/UriEscapeUnescape:
Description: >-
`URI.escape` method is obsolete and should not be used. Instead, use
`CGI.escape`, `URI.encode_www_form` or `URI.encode_www_form_component`
depending on your specific use case.
Also `URI.unescape` method is obsolete and should not be used. Instead, use
`CGI.unescape`, `URI.decode_www_form` or `URI.decode_www_form_component`
depending on your specific use case.
Enabled: true
VersionAdded: '0.50'
Lint/UriRegexp:
Description: 'Use `URI::DEFAULT_PARSER.make_regexp` instead of `URI.regexp`.'
Enabled: true
VersionAdded: '0.50'
Lint/UselessAccessModifier:
Description: 'Checks for useless access modifiers.'
Enabled: true
VersionAdded: '0.20'
VersionChanged: '0.47'
ContextCreatingMethods: []
MethodCreatingMethods: []
Lint/UselessAssignment:
Description: 'Checks for useless assignment to a local variable.'
StyleGuide: '#underscore-unused-vars'
Enabled: true
VersionAdded: '0.11'
Lint/UselessComparison:
Description: 'Checks for comparison of something with itself.'
Enabled: true
VersionAdded: '0.11'
Lint/UselessElseWithoutRescue:
Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
Enabled: true
VersionAdded: '0.17'
Lint/UselessSetterCall:
Description: 'Checks for useless setter call to a local variable.'
Enabled: true
VersionAdded: '0.13'
Lint/Void:
Description: 'Possible use of operator/literal/variable in void context.'
Enabled: true
VersionAdded: '0.9'
CheckForMethodsWithNoSideEffects: false
#################### Metrics ###############################
Metrics/AbcSize:
Description: >-
A calculated magnitude based on number of assignments,
branches, and conditions.
Reference: 'http://c2.com/cgi/wiki?AbcMetric'
Enabled: true
VersionAdded: '0.27'
# The ABC size is a calculated magnitude, so this number can be an Integer or
# a Float.
Max: 21
Metrics/BlockLength:
Description: 'Avoid long blocks with many lines.'
Enabled: false
VersionAdded: '0.44'
VersionChanged: '0.58'
CountComments: false # count full line comments?
Max: 25
ExcludedMethods:
# By default, exclude the `#refine` method, as it tends to have larger
# associated blocks.
- refine
Metrics/BlockNesting:
Description: 'Avoid excessive block nesting'
StyleGuide: '#three-is-the-number-thou-shalt-count'
Enabled: true
VersionAdded: '0.25'
VersionChanged: '0.47'
CountBlocks: false
Max: 3
Metrics/ClassLength:
Description: 'Avoid classes longer than 100 lines of code.'
Enabled: true
VersionAdded: '0.25'
CountComments: false # count full line comments?
Max: 100
# Avoid complex methods.
Metrics/CyclomaticComplexity:
Description: >-
A complexity metric that is strongly correlated to the number
of test cases needed to validate a method.
Enabled: true
VersionAdded: '0.25'
Max: 6
Metrics/LineLength:
# Don't use length as documentation imported from TravisCI takes more space
Description: 'Limit lines to 80 characters.'
StyleGuide: '#80-character-limits'
Enabled: false
VersionAdded: '0.25'
VersionChanged: '0.46'
Max: 80
# To make it possible to copy or click on URIs in the code, we allow lines
# containing a URI to be longer than Max.
AllowHeredoc: true
AllowURI: true
URISchemes:
- http
- https
# The IgnoreCopDirectives option causes the LineLength rule to ignore cop
# directives like '# rubocop: enable ...' when calculating a line's length.
IgnoreCopDirectives: false
# The IgnoredPatterns option is a list of !ruby/regexp and/or string
# elements. Strings will be converted to Regexp objects. A line that matches
# any regular expression listed in this option will be ignored by LineLength.
IgnoredPatterns: []
Metrics/MethodLength:
Description: 'Avoid methods longer than 10 lines of code.'
StyleGuide: '#short-methods'
Enabled: true
VersionAdded: '0.25'
VersionChanged: '0.59.2'
CountComments: false # count full line comments?
Max: 10
ExcludedMethods: []
Metrics/ModuleLength:
Description: 'Avoid modules longer than 100 lines of code.'
Enabled: true
VersionAdded: '0.31'
CountComments: false # count full line comments?
Max: 100
Metrics/ParameterLists:
Description: 'Avoid parameter lists longer than three or four parameters.'
StyleGuide: '#too-many-params'
Enabled: true
VersionAdded: '0.25'
Max: 5
CountKeywordArgs: true
Metrics/PerceivedComplexity:
Description: >-
A complexity metric geared towards measuring complexity for a
human reader.
Enabled: true
VersionAdded: '0.25'
Max: 7
#################### Naming ##############################
Naming/AccessorMethodName:
Description: Check the naming of accessor methods for get_/set_.
StyleGuide: '#accessor_mutator_method_names'
Enabled: true
VersionAdded: '0.50'
Naming/AsciiIdentifiers:
Description: 'Use only ascii symbols in identifiers.'
StyleGuide: '#english-identifiers'
Enabled: true
VersionAdded: '0.50'
Naming/BinaryOperatorParameterName:
Description: 'When defining binary operators, name the argument other.'
StyleGuide: '#other-arg'
Enabled: true
VersionAdded: '0.50'
Naming/ClassAndModuleCamelCase:
Description: 'Use CamelCase for classes and modules.'
StyleGuide: '#camelcase-classes'
Enabled: true
VersionAdded: '0.50'
Naming/ConstantName:
Description: 'Constants should use SCREAMING_SNAKE_CASE.'
StyleGuide: '#screaming-snake-case'
Enabled: true
VersionAdded: '0.50'
Naming/FileName:
Description: 'Use snake_case for source file names.'
StyleGuide: '#snake-case-files'
Enabled: true
VersionAdded: '0.50'
# Camel case file names listed in `AllCops:Include` and all file names listed
# in `AllCops:Exclude` are excluded by default. Add extra excludes here.
Exclude: []
# When `true`, requires that each source file should define a class or module
# with a name which matches the file name (converted to ... case).
# It further expects it to be nested inside modules which match the names
# of subdirectories in its path.
ExpectMatchingDefinition: false
# If non-`nil`, expect all source file names to match the following regex.
# Only the file name itself is matched, not the entire file path.
# Use anchors as necessary if you want to match the entire name rather than
# just a part of it.
Regex: ~
# With `IgnoreExecutableScripts` set to `true`, this cop does not
# report offending filenames for executable scripts (i.e. source
# files with a shebang in the first line).
IgnoreExecutableScripts: true
AllowedAcronyms:
- CLI
- DSL
- ACL
- API
- ASCII
- CPU
- CSS
- DNS
- EOF
- GUID
- HTML
- HTTP
- HTTPS
- ID
- IP
- JSON
- LHS
- QPS
- RAM
- RHS
- RPC
- SLA
- SMTP
- SQL
- SSH
- TCP
- TLS
- TTL
- UDP
- UI
- UID
- UUID
- URI
- URL
- UTF8
- VM
- XML
- XMPP
- XSRF
- XSS
Naming/HeredocDelimiterCase:
Description: 'Use configured case for heredoc delimiters.'
StyleGuide: '#heredoc-delimiters'
Enabled: true
VersionAdded: '0.50'
EnforcedStyle: uppercase
SupportedStyles:
- lowercase
- uppercase
Naming/HeredocDelimiterNaming:
Description: 'Use descriptive heredoc delimiters.'
StyleGuide: '#heredoc-delimiters'
Enabled: true
VersionAdded: '0.50'
Blacklist:
- !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/'
Naming/MemoizedInstanceVariableName:
Description: >-
Memoized method name should match memo instance variable name.
Enabled: true
VersionAdded: '0.53'
VersionChanged: '0.58'
EnforcedStyleForLeadingUnderscores: disallowed
SupportedStylesForLeadingUnderscores:
- disallowed
- required
- optional
Naming/MethodName:
Description: 'Use the configured style when naming methods.'
StyleGuide: '#snake-case-symbols-methods-vars'
Enabled: true
VersionAdded: '0.50'
EnforcedStyle: snake_case
SupportedStyles:
- snake_case
- camelCase
Naming/PredicateName:
Description: 'Check the names of predicate methods.'
StyleGuide: '#bool-methods-qmark'
Enabled: true
VersionAdded: '0.50'
VersionChanged: '0.51'
# Predicate name prefixes.
NamePrefix:
- is_
- has_
- have_
# Predicate name prefixes that should be removed.
NamePrefixBlacklist:
- is_
- has_
- have_
# Predicate names which, despite having a blacklisted prefix, or no `?`,
# should still be accepted
NameWhitelist:
- is_a?
# Method definition macros for dynamically generated methods.
MethodDefinitionMacros:
- define_method
- define_singleton_method
# Exclude Rspec specs because there is a strong convention to write spec
# helpers in the form of `have_something` or `be_something`.
Exclude:
- 'spec/**/*'
Naming/UncommunicativeBlockParamName:
Description: >-
Checks for block parameter names that contain capital letters,
end in numbers, or do not meet a minimal length.
Enabled: true
VersionAdded: '0.53'
# Parameter names may be equal to or greater than this value
MinNameLength: 1
AllowNamesEndingInNumbers: true
# Whitelisted names that will not register an offense
AllowedNames: []
# Blacklisted names that will register an offense
ForbiddenNames: []
Naming/UncommunicativeMethodParamName:
Description: >-
Checks for method parameter names that contain capital letters,
end in numbers, or do not meet a minimal length.
Enabled: true
VersionAdded: '0.53'
VersionChanged: '0.59'
# Parameter names may be equal to or greater than this value
MinNameLength: 3
AllowNamesEndingInNumbers: true
# Whitelisted names that will not register an offense
AllowedNames:
- io
- id
- to
- by
- 'on'
- in
- at
- ip
- db
# Blacklisted names that will register an offense
ForbiddenNames: []
Naming/VariableName:
Description: 'Use the configured style when naming variables.'
StyleGuide: '#snake-case-symbols-methods-vars'
Enabled: true
VersionAdded: '0.50'
EnforcedStyle: snake_case
SupportedStyles:
- snake_case
- camelCase
Naming/VariableNumber:
Description: 'Use the configured style when numbering variables.'
Enabled: true
VersionAdded: '0.50'
EnforcedStyle: normalcase
SupportedStyles:
- snake_case
- normalcase
- non_integer
#################### Performance ###########################
Performance/Caller:
Description: >-
Use `caller(n..n)` instead of `caller`.
Enabled: true
VersionAdded: '0.49'
Performance/CaseWhenSplat:
Description: >-
Reordering `when` conditions with a splat to the end
of the `when` branches can improve performance.
Enabled: false
AutoCorrect: false
SafeAutoCorrect: false
VersionAdded: '0.34'
VersionChanged: '0.59'
Performance/Casecmp:
Description: >-
Use `casecmp` rather than `downcase ==`, `upcase ==`, `== downcase`, or `== upcase`..
Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringcasecmp-vs-stringdowncase---code'
Enabled: true
VersionAdded: '0.36'
Performance/ChainArrayAllocation:
Description: >-
Instead of chaining array methods that allocate new arrays, mutate an
existing array.
Reference: 'https://twitter.com/schneems/status/1034123879978029057'
Enabled: false
VersionAdded: '0.59'
Performance/CompareWithBlock:
Description: 'Use `sort_by(&:foo)` instead of `sort { |a, b| a.foo <=> b.foo }`.'
Enabled: true
VersionAdded: '0.46'
Performance/Count:
Description: >-
Use `count` instead of `select...size`, `reject...size`,
`select...count`, `reject...count`, `select...length`,
and `reject...length`.
# This cop has known compatibility issues with `ActiveRecord` and other
# frameworks. ActiveRecord's `count` ignores the block that is passed to it.
# For more information, see the documentation in the cop itself.
# If you understand the known risk, you can disable `SafeMode`.
SafeMode: true
Enabled: true
VersionAdded: '0.31'
VersionChanged: '0.39'
Performance/Detect:
Description: >-
Use `detect` instead of `select.first`, `find_all.first`,
`select.last`, and `find_all.last`.
Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code'
# This cop has known compatibility issues with `ActiveRecord` and other
# frameworks. `ActiveRecord` does not implement a `detect` method and `find`
# has its own meaning. Correcting `ActiveRecord` methods with this cop
# should be considered unsafe.
SafeMode: true
Enabled: true
VersionAdded: '0.30'
VersionChanged: '0.39'
Performance/DoubleStartEndWith:
Description: >-
Use `str.{start,end}_with?(x, ..., y, ...)`
instead of `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`.
Enabled: true
VersionAdded: '0.36'
VersionChanged: '0.48'
# Used to check for `starts_with?` and `ends_with?`.
# These methods are defined by `ActiveSupport`.
IncludeActiveSupportAliases: false
Performance/EndWith:
Description: 'Use `end_with?` instead of a regex match anchored to the end of a string.'
Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end'
# This will change to a new method call which isn't guaranteed to be on the
# object. Switching these methods has to be done with knowledge of the types
# of the variables which rubocop doesn't have.
SafeAutoCorrect: false
AutoCorrect: false
Enabled: true
VersionAdded: '0.36'
VersionChanged: '0.44'
Performance/FixedSize:
Description: 'Do not compute the size of statically sized objects except in constants'
Enabled: true
VersionAdded: '0.35'
Performance/FlatMap:
Description: >-
Use `Enumerable#flat_map`
instead of `Enumerable#map...Array#flatten(1)`
or `Enumberable#collect..Array#flatten(1)`
Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code'
Enabled: true
VersionAdded: '0.30'
EnabledForFlattenWithoutParams: false
# If enabled, this cop will warn about usages of
# `flatten` being called without any parameters.
# This can be dangerous since `flat_map` will only flatten 1 level, and
# `flatten` without any parameters can flatten multiple levels.
Performance/InefficientHashSearch:
Description: 'Use `key?` or `value?` instead of `keys.include?` or `values.include?`'
Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashkey-instead-of-hashkeysinclude-code'
Enabled: true
VersionAdded: '0.56'
Safe: false
Performance/LstripRstrip:
Description: 'Use `strip` instead of `lstrip.rstrip`.'
Enabled: true
VersionAdded: '0.36'
Performance/OpenStruct:
Description: 'Use `Struct` instead of `OpenStruct`.'
Enabled: false
VersionAdded: '0.61'
Safe: false
Performance/RangeInclude:
Description: 'Use `Range#cover?` instead of `Range#include?`.'
Reference: 'https://github.com/JuanitoFatas/fast-ruby#cover-vs-include-code'
Enabled: true
VersionAdded: '0.36'
Performance/RedundantBlockCall:
Description: 'Use `yield` instead of `block.call`.'
Reference: 'https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode'
Enabled: true
VersionAdded: '0.36'
Performance/RedundantMatch:
Description: >-
Use `=~` instead of `String#match` or `Regexp#match` in a context where the
returned `MatchData` is not needed.
Enabled: true
VersionAdded: '0.36'
Performance/RedundantMerge:
Description: 'Use Hash#[]=, rather than Hash#merge! with a single key-value pair.'
Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashmerge-vs-hash-code'
Enabled: true
VersionAdded: '0.36'
# Max number of key-value pairs to consider an offense
MaxKeyValuePairs: 2
Performance/RedundantSortBy:
Description: 'Use `sort` instead of `sort_by { |x| x }`.'
Enabled: true
VersionAdded: '0.36'
Performance/RegexpMatch:
Description: >-
Use `match?` instead of `Regexp#match`, `String#match`, `Symbol#match`,
`Regexp#===`, or `=~` when `MatchData` is not used.
Reference: 'https://github.com/JuanitoFatas/fast-ruby#regexp-vs-stringmatch-vs-string-vs-stringmatch-code-'
Enabled: true
VersionAdded: '0.47'
Performance/ReverseEach:
Description: 'Use `reverse_each` instead of `reverse.each`.'
Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code'
Enabled: true
VersionAdded: '0.30'
Performance/Sample:
Description: >-
Use `sample` instead of `shuffle.first`,
`shuffle.last`, and `shuffle[Integer]`.
Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
Enabled: true
VersionAdded: '0.30'
Performance/Size:
Description: >-
Use `size` instead of `count` for counting
the number of elements in `Array` and `Hash`.
Reference: 'https://github.com/JuanitoFatas/fast-ruby#arraylength-vs-arraysize-vs-arraycount-code'
Enabled: true
VersionAdded: '0.30'
Performance/StartWith:
Description: 'Use `start_with?` instead of a regex match anchored to the beginning of a string.'
Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end'
# This will change to a new method call which isn't guaranteed to be on the
# object. Switching these methods has to be done with knowledge of the types
# of the variables which rubocop doesn't have.
SafeAutoCorrect: false
AutoCorrect: false
Enabled: true
VersionAdded: '0.36'
VersionChanged: '0.44'
Performance/StringReplacement:
Description: >-
Use `tr` instead of `gsub` when you are replacing the same
number of characters. Use `delete` instead of `gsub` when
you are deleting characters.
Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringgsub-vs-stringtr-code'
Enabled: true
VersionAdded: '0.33'
Performance/TimesMap:
Description: 'Checks for .times.map calls.'
AutoCorrect: false
Enabled: true
VersionAdded: '0.36'
VersionChanged: '0.50'
SafeAutoCorrect: false # see https://github.com/rubocop-hq/rubocop/issues/4658
Performance/UnfreezeString:
Description: 'Use unary plus to get an unfrozen string literal.'
Enabled: true
VersionAdded: '0.50'
Performance/UnneededSort:
Description: >-
Use `min` instead of `sort.first`,
`max_by` instead of `sort_by...last`, etc.
Enabled: true
VersionAdded: '0.55'
Performance/UriDefaultParser:
Description: 'Use `URI::DEFAULT_PARSER` instead of `URI::Parser.new`.'
Enabled: true
VersionAdded: '0.50'
#################### Style ###############################
Style/AccessModifierDeclarations:
Description: 'Checks style of how access modifiers are used.'
Enabled: false
VersionAdded: '0.57'
EnforcedStyle: group
SupportedStyles:
- inline
- group
Style/Alias:
Description: 'Use alias instead of alias_method.'
StyleGuide: '#alias-method'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.36'
EnforcedStyle: prefer_alias
SupportedStyles:
- prefer_alias
- prefer_alias_method
Style/AndOr:
Description: 'Use &&/|| instead of and/or.'
StyleGuide: '#no-and-or-or'
Enabled: false
VersionAdded: '0.9'
VersionChanged: '0.25'
# Whether `and` and `or` are banned only in conditionals (conditionals)
# or completely (always).
EnforcedStyle: always
SupportedStyles:
- always
- conditionals
Style/ArrayJoin:
Description: 'Use Array#join instead of Array#*.'
StyleGuide: '#array-join'
Enabled: true
VersionAdded: '0.20'
VersionChanged: '0.31'
Style/AsciiComments:
Description: 'Use only ascii symbols in comments.'
StyleGuide: '#english-comments'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.52'
AllowedChars: []
Style/Attr:
Description: 'Checks for uses of Module#attr.'
StyleGuide: '#attr'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.12'
Style/AutoResourceCleanup:
Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
Enabled: false
VersionAdded: '0.30'
Style/BarePercentLiterals:
Description: 'Checks if usage of %() or %Q() matches configuration.'
StyleGuide: '#percent-q-shorthand'
Enabled: true
VersionAdded: '0.25'
EnforcedStyle: bare_percent
SupportedStyles:
- percent_q
- bare_percent
Style/BeginBlock:
Description: 'Avoid the use of BEGIN blocks.'
StyleGuide: '#no-BEGIN-blocks'
Enabled: true
VersionAdded: '0.9'
Style/BlockComments:
Description: 'Do not use block comments.'
StyleGuide: '#no-block-comments'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.23'
Style/BlockDelimiters:
Description: >-
Avoid using {...} for multi-line blocks (multiline chaining is
always ugly).
Prefer {...} over do...end for single-line blocks.
StyleGuide: '#single-line-blocks'
Enabled: true
VersionAdded: '0.30'
VersionChanged: '0.35'
EnforcedStyle: line_count_based
SupportedStyles:
# The `line_count_based` style enforces braces around single line blocks and
# do..end around multi-line blocks.
- line_count_based
# The `semantic` style enforces braces around functional blocks, where the
# primary purpose of the block is to return a value and do..end for
# procedural blocks, where the primary purpose of the block is its
# side-effects.
#
# This looks at the usage of a block's method to determine its type (e.g. is
# the result of a `map` assigned to a variable or passed to another
# method) but exceptions are permitted in the `ProceduralMethods`,
# `FunctionalMethods` and `IgnoredMethods` sections below.
- semantic
# The `braces_for_chaining` style enforces braces around single line blocks
# and do..end around multi-line blocks, except for multi-line blocks whose
# return value is being chained with another method (in which case braces
# are enforced).
- braces_for_chaining
ProceduralMethods:
# Methods that are known to be procedural in nature but look functional from
# their usage, e.g.
#
# time = Benchmark.realtime do
# foo.bar
# end
#
# Here, the return value of the block is discarded but the return value of
# `Benchmark.realtime` is used.
- benchmark
- bm
- bmbm
- create
- each_with_object
- measure
- new
- realtime
- tap
- with_object
FunctionalMethods:
# Methods that are known to be functional in nature but look procedural from
# their usage, e.g.
#
# let(:foo) { Foo.new }
#
# Here, the return value of `Foo.new` is used to define a `foo` helper but
# doesn't appear to be used from the return value of `let`.
- let
- let!
- subject
- watch
IgnoredMethods:
# Methods that can be either procedural or functional and cannot be
# categorised from their usage alone, e.g.
#
# foo = lambda do |x|
# puts "Hello, #{x}"
# end
#
# foo = lambda do |x|
# x * 100
# end
#
# Here, it is impossible to tell from the return value of `lambda` whether
# the inner block's return value is significant.
- lambda
- proc
- it
Style/BracesAroundHashParameters:
Description: 'Enforce braces style around hash parameters.'
Enabled: true
VersionAdded: '0.14.1'
VersionChanged: '0.28'
EnforcedStyle: no_braces
SupportedStyles:
# The `braces` style enforces braces around all method parameters that are
# hashes.
- braces
# The `no_braces` style checks that the last parameter doesn't have braces
# around it.
- no_braces
# The `context_dependent` style checks that the last parameter doesn't have
# braces around it, but requires braces if the second to last parameter is
# also a hash literal.
- context_dependent
Style/CaseEquality:
Description: 'Avoid explicit use of the case equality operator(===).'
StyleGuide: '#no-case-equality'
Enabled: true
VersionAdded: '0.9'
Style/CharacterLiteral:
Description: 'Checks for uses of character literals.'
StyleGuide: '#no-character-literals'
Enabled: true
VersionAdded: '0.9'
Style/ClassAndModuleChildren:
Description: 'Checks style of children classes and modules.'
StyleGuide: '#namespace-definition'
# Moving from compact to nested children requires knowledge of whether the
# outer parent is a module or a class. Moving from nested to compact requires
# verification that the outer parent is defined elsewhere. Rubocop does not
# have the knowledge to perform either operation safely and thus requires
# manual oversight.
SafeAutoCorrect: false
AutoCorrect: false
Enabled: true
VersionAdded: '0.19'
#
# 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 or modules with one child.
EnforcedStyle: nested
SupportedStyles:
- nested
- compact
Style/ClassCheck:
Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.'
Enabled: true
VersionAdded: '0.24'
EnforcedStyle: is_a?
SupportedStyles:
- is_a?
- kind_of?
Style/ClassMethods:
Description: 'Use self when defining module/class methods.'
StyleGuide: '#def-self-class-methods'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.20'
Style/ClassVars:
Description: 'Avoid the use of class variables.'
StyleGuide: '#no-class-vars'
Enabled: true
VersionAdded: '0.13'
# Align with the style guide.
Style/CollectionMethods:
Description: 'Preferred collection methods.'
StyleGuide: '#map-find-select-reduce-size'
Enabled: false
VersionAdded: '0.9'
VersionChanged: '0.27'
Safe: false
# Mapping from undesired method to desired method
# e.g. to use `detect` over `find`:
#
# Style/CollectionMethods:
# PreferredMethods:
# find: detect
PreferredMethods:
collect: 'map'
collect!: 'map!'
inject: 'reduce'
detect: 'find'
find_all: 'select'
Style/ColonMethodCall:
Description: 'Do not use :: for method call.'
StyleGuide: '#double-colons'
Enabled: true
VersionAdded: '0.9'
Style/ColonMethodDefinition:
Description: 'Do not use :: for defining class methods.'
StyleGuide: '#colon-method-definition'
Enabled: true
VersionAdded: '0.52'
Style/CommandLiteral:
Description: 'Use `` or %x around command literals.'
StyleGuide: '#percent-x'
Enabled: true
VersionAdded: '0.30'
EnforcedStyle: backticks
# backticks: Always use backticks.
# percent_x: Always use `%x`.
# mixed: Use backticks on single-line commands, and `%x` on multi-line commands.
SupportedStyles:
- backticks
- percent_x
- mixed
# If `false`, the cop will always recommend using `%x` if one or more backticks
# are found in the command string.
AllowInnerBackticks: false
# Checks formatting of special comments
Style/CommentAnnotation:
Description: >-
Checks formatting of special comments
(TODO, FIXME, OPTIMIZE, HACK, REVIEW).
StyleGuide: '#annotate-keywords'
Enabled: true
VersionAdded: '0.10'
VersionChanged: '0.31'
Keywords:
- TODO
- FIXME
- OPTIMIZE
- HACK
- REVIEW
Style/CommentedKeyword:
Description: 'Do not place comments on the same line as certain keywords.'
Enabled: true
VersionAdded: '0.51'
Style/ConditionalAssignment:
Description: >-
Use the return value of `if` and `case` statements for
assignment to a variable and variable comparison instead
of assigning that variable inside of each branch.
Enabled: true
VersionAdded: '0.36'
VersionChanged: '0.47'
EnforcedStyle: assign_to_condition
SupportedStyles:
- assign_to_condition
- assign_inside_condition
# When configured to `assign_to_condition`, `SingleLineConditionsOnly`
# will only register an offense when all branches of a condition are
# a single line.
# When configured to `assign_inside_condition`, `SingleLineConditionsOnly`
# will only register an offense for assignment to a condition that has
# at least one multiline branch.
SingleLineConditionsOnly: true
IncludeTernaryExpressions: true
# Checks that you have put a copyright in a comment before any code.
#
# You can override the default Notice in your .rubocop.yml file.
#
# In order to use autocorrect, you must supply a value for the
# `AutocorrectNotice` key that matches the regexp Notice. A blank
# `AutocorrectNotice` will cause an error during autocorrect.
#
# Autocorrect will add a copyright notice in a comment at the top
# of the file immediately after any shebang or encoding comments.
#
# Example rubocop.yml:
#
# Style/Copyright:
# Enabled: true
# Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc'
# AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.'
#
Style/Copyright:
Description: 'Include a copyright notice in each file before any code.'
Enabled: false
VersionAdded: '0.30'
Notice: '^Copyright (\(c\) )?2[0-9]{3} .+'
AutocorrectNotice: ''
Style/DateTime:
Description: 'Use Time over DateTime.'
StyleGuide: '#date--time'
Enabled: false
VersionAdded: '0.51'
VersionChanged: '0.59'
AllowCoercion: false
Style/DefWithParentheses:
Description: 'Use def with parentheses when there are arguments.'
StyleGuide: '#method-parens'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.12'
Style/Dir:
Description: >-
Use the `__dir__` method to retrieve the canonicalized
absolute path to the current file.
Enabled: true
VersionAdded: '0.50'
Style/Documentation:
Description: 'Document classes and non-namespace modules.'
Enabled: false
VersionAdded: '0.9'
Exclude:
- 'spec/**/*'
- 'test/**/*'
Style/DocumentationMethod:
Description: 'Checks for missing documentation comment for public methods.'
Enabled: false
VersionAdded: '0.43'
Exclude:
- 'spec/**/*'
- 'test/**/*'
RequireForNonPublicMethods: false
Style/DoubleNegation:
Description: 'Checks for uses of double negation (!!).'
StyleGuide: '#no-bang-bang'
Enabled: true
VersionAdded: '0.19'
Style/EachForSimpleLoop:
Description: >-
Use `Integer#times` for a simple loop which iterates a fixed
number of times.
Enabled: true
VersionAdded: '0.41'
Style/EachWithObject:
Description: 'Prefer `each_with_object` over `inject` or `reduce`.'
Enabled: true
VersionAdded: '0.22'
VersionChanged: '0.42'
Style/EmptyBlockParameter:
Description: 'Omit pipes for empty block parameters.'
Enabled: true
VersionAdded: '0.52'
Style/EmptyCaseCondition:
Description: 'Avoid empty condition in case statements.'
Enabled: true
VersionAdded: '0.40'
Style/EmptyElse:
Description: 'Avoid empty else-clauses.'
Enabled: true
VersionAdded: '0.28'
VersionChanged: '0.32'
EnforcedStyle: both
# empty - warn only on empty `else`
# nil - warn on `else` with nil in it
# both - warn on empty `else` and `else` with `nil` in it
SupportedStyles:
- empty
- nil
- both
Style/EmptyLambdaParameter:
Description: 'Omit parens for empty lambda parameters.'
Enabled: true
VersionAdded: '0.52'
Style/EmptyLiteral:
Description: 'Prefer literals to Array.new/Hash.new/String.new.'
StyleGuide: '#literal-array-hash'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.12'
Style/EmptyMethod:
Description: 'Checks the formatting of empty method definitions.'
StyleGuide: '#no-single-line-methods'
Enabled: true
VersionAdded: '0.46'
EnforcedStyle: compact
SupportedStyles:
- compact
- expanded
Style/Encoding:
Description: 'Use UTF-8 as the source file encoding.'
StyleGuide: '#utf-8'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.50'
Style/EndBlock:
Description: 'Avoid the use of END blocks.'
StyleGuide: '#no-END-blocks'
Enabled: true
VersionAdded: '0.9'
Style/EvalWithLocation:
Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.'
Enabled: true
VersionAdded: '0.52'
Style/EvenOdd:
Description: 'Favor the use of Integer#even? && Integer#odd?'
StyleGuide: '#predicate-methods'
Enabled: true
VersionAdded: '0.12'
VersionChanged: '0.29'
Style/ExpandPathArguments:
Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`."
Enabled: true
VersionAdded: '0.53'
Lint/FlipFlop:
Description: 'Checks for flip-flops'
StyleGuide: '#no-flip-flops'
Enabled: true
VersionAdded: '0.16'
Style/For:
Description: 'Checks use of for or each in multiline loops.'
StyleGuide: '#no-for-loops'
Enabled: true
VersionAdded: '0.13'
VersionChanged: '0.59'
EnforcedStyle: each
SupportedStyles:
- each
- for
Style/FormatString:
Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.'
StyleGuide: '#sprintf'
Enabled: true
VersionAdded: '0.19'
VersionChanged: '0.49'
EnforcedStyle: format
SupportedStyles:
- format
- sprintf
- percent
Style/FormatStringToken:
Description: 'Use a consistent style for format string tokens.'
Enabled: true
EnforcedStyle: annotated
SupportedStyles:
# Prefer tokens which contain a sprintf like type annotation like
# `%<name>s`, `%<age>d`, `%<score>f`
- annotated
# Prefer simple looking "template" style tokens like `%{name}`, `%{age}`
- template
- unannotated
VersionAdded: '0.49'
VersionChanged: '0.52'
Style/FrozenStringLiteralComment:
Description: >-
Add the frozen_string_literal comment to the top of files
to help transition from Ruby 2.3.0 to Ruby 3.0.
Enabled: true
VersionAdded: '0.36'
VersionChanged: '0.47'
EnforcedStyle: when_needed
SupportedStyles:
# `when_needed` will add the frozen string literal comment to files
# only when the `TargetRubyVersion` is set to 2.3+.
- when_needed
# `always` will always add the frozen string literal comment to a file
# regardless of the Ruby version or if `freeze` or `<<` are called on a
# string literal. If you run code against multiple versions of Ruby, it is
# possible that this will create errors in Ruby 2.3.0+.
- always
# `never` will enforce that the frozen string literal comment does not
# exist in a file.
- never
Style/GlobalVars:
Description: 'Do not introduce global variables.'
StyleGuide: '#instance-vars'
Reference: 'https://www.zenspider.com/ruby/quickref.html'
Enabled: true
VersionAdded: '0.13'
# Built-in global variables are allowed by default.
AllowedVariables: []
Style/GuardClause:
Description: 'Check for conditionals that can be replaced with guard clauses'
StyleGuide: '#no-nested-conditionals'
Enabled: true
VersionAdded: '0.20'
VersionChanged: '0.22'
# `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
# needs to have to trigger this cop
MinBodyLength: 1
Style/HashSyntax:
Description: >-
Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
{ :a => 1, :b => 2 }.
StyleGuide: '#hash-literals'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.43'
EnforcedStyle: ruby19
SupportedStyles:
# checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys
- ruby19
# checks for hash rocket syntax for all hashes
- hash_rockets
# forbids mixed key syntaxes (e.g. {a: 1, :b => 2})
- no_mixed_keys
# enforces both ruby19 and no_mixed_keys styles
- ruby19_no_mixed_keys
# Force hashes that have a symbol value to use hash rockets
UseHashRocketsWithSymbolValues: false
# Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
PreferHashRocketsForNonAlnumEndingSymbols: false
Style/IdenticalConditionalBranches:
Description: >-
Checks that conditional statements do not have an identical
line at the end of each branch, which can validly be moved
out of the conditional.
Enabled: true
VersionAdded: '0.36'
Style/IfInsideElse:
Description: 'Finds if nodes inside else, which can be converted to elsif.'
Enabled: true
VersionAdded: '0.36'
Style/IfUnlessModifier:
Description: >-
Favor modifier if/unless usage when you have a
single-line body.
StyleGuide: '#if-as-a-modifier'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.30'
Style/IfUnlessModifierOfIfUnless:
Description: >-
Avoid modifier if/unless usage on conditionals.
Enabled: true
VersionAdded: '0.39'
Style/IfWithSemicolon:
Description: 'Do not use if x; .... Use the ternary operator instead.'
StyleGuide: '#no-semicolon-ifs'
Enabled: true
VersionAdded: '0.9'
Style/ImplicitRuntimeError:
Description: >-
Use `raise` or `fail` with an explicit exception class and
message, rather than just a message.
Enabled: false
VersionAdded: '0.41'
Style/InfiniteLoop:
Description: 'Use Kernel#loop for infinite loops.'
StyleGuide: '#infinite-loop'
Enabled: true
VersionAdded: '0.26'
VersionChanged: '0.61'
SafeAutoCorrect: true
Style/InlineComment:
Description: 'Avoid trailing inline comments.'
Enabled: false
VersionAdded: '0.23'
Style/InverseMethods:
Description: >-
Use the inverse method instead of `!.method`
if an inverse method is defined.
Enabled: true
Safe: false
VersionAdded: '0.48'
# `InverseMethods` are methods that can be inverted by a not (`not` or `!`)
# The relationship of inverse methods only needs to be defined in one direction.
# Keys and values both need to be defined as symbols.
InverseMethods:
:any?: :none?
:even?: :odd?
:==: :!=
:=~: :!~
:<: :>=
:>: :<=
# `ActiveSupport` defines some common inverse methods. They are listed below,
# and not enabled by default.
#:present?: :blank?,
#:include?: :exclude?
# `InverseBlocks` are methods that are inverted by inverting the return
# of the block that is passed to the method
InverseBlocks:
:select: :reject
:select!: :reject!
Style/IpAddresses:
Description: "Don't include literal IP addresses in code."
Enabled: false
VersionAdded: '0.58'
# Allow strings to be whitelisted
Whitelist:
- "::"
# :: is a valid IPv6 address, but could potentially be legitimately in code
Style/Lambda:
Description: 'Use the new lambda literal syntax for single-line blocks.'
StyleGuide: '#lambda-multi-line'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.40'
EnforcedStyle: line_count_dependent
SupportedStyles:
- line_count_dependent
- lambda
- literal
Style/LambdaCall:
Description: 'Use lambda.call(...) instead of lambda.(...).'
StyleGuide: '#proc-call'
Enabled: true
VersionAdded: '0.13.1'
VersionChanged: '0.14'
EnforcedStyle: call
SupportedStyles:
- call
- braces
Style/LineEndConcatenation:
Description: >-
Use \ instead of + or << to concatenate two string literals at
line end.
Enabled: true
VersionAdded: '0.18'
Style/MethodCallWithArgsParentheses:
Description: 'Use parentheses for method calls with arguments.'
StyleGuide: '#method-invocation-parens'
Enabled: false
VersionAdded: '0.47'
VersionChanged: '0.61'
IgnoreMacros: true
IgnoredMethods: []
AllowParenthesesInMultilineCall: false
AllowParenthesesInChaining: false
EnforcedStyle: require_parentheses
SupportedStyles:
- require_parentheses
- omit_parentheses
Style/MethodCallWithoutArgsParentheses:
Description: 'Do not use parentheses for method calls with no arguments.'
StyleGuide: '#method-invocation-parens'
Enabled: true
IgnoredMethods: []
VersionAdded: '0.47'
VersionChanged: '0.55'
Style/MethodCalledOnDoEndBlock:
Description: 'Avoid chaining a method call on a do...end block.'
StyleGuide: '#single-line-blocks'
Enabled: false
VersionAdded: '0.14'
Style/MethodDefParentheses:
Description: >-
Checks if the method definitions have or don't have
parentheses.
StyleGuide: '#method-parens'
Enabled: true
VersionAdded: '0.16'
VersionChanged: '0.35'
EnforcedStyle: require_parentheses
SupportedStyles:
- require_parentheses
- require_no_parentheses
- require_no_parentheses_except_multiline
Style/MethodMissingSuper:
Description: Checks for `method_missing` to call `super`.
StyleGuide: '#no-method-missing'
Enabled: true
VersionAdded: '0.56'
Style/MinMax:
Description: >-
Use `Enumerable#minmax` instead of `Enumerable#min`
and `Enumerable#max` in conjunction.'
Enabled: true
VersionAdded: '0.50'
Style/MissingElse:
Description: >-
Require if/case expressions to have an else branches.
If enabled, it is recommended that
Style/UnlessElse and Style/EmptyElse be enabled.
This will conflict with Style/EmptyElse if
Style/EmptyElse is configured to style "both"
Enabled: false
VersionAdded: '0.30'
VersionChanged: '0.38'
EnforcedStyle: both
SupportedStyles:
# if - warn when an if expression is missing an else branch
# case - warn when a case expression is missing an else branch
# both - warn when an if or case expression is missing an else branch
- if
- case
- both
Style/MissingRespondToMissing:
Description: >-
Checks if `method_missing` is implemented
without implementing `respond_to_missing`.
StyleGuide: '#no-method-missing'
Enabled: true
VersionAdded: '0.56'
Style/MixinGrouping:
Description: 'Checks for grouping of mixins in `class` and `module` bodies.'
StyleGuide: '#mixin-grouping'
Enabled: true
VersionAdded: '0.48'
VersionChanged: '0.49'
EnforcedStyle: separated
SupportedStyles:
# separated: each mixed in module goes in a separate statement.
# grouped: mixed in modules are grouped into a single statement.
- separated
- grouped
Style/MixinUsage:
Description: 'Checks that `include`, `extend` and `prepend` exists at the top level.'
Enabled: true
VersionAdded: '0.51'
Style/ModuleFunction:
Description: 'Checks for usage of `extend self` in modules.'
StyleGuide: '#module-function'
Enabled: true
VersionAdded: '0.11'
VersionChanged: '0.53'
EnforcedStyle: module_function
SupportedStyles:
- module_function
- extend_self
Style/MultilineBlockChain:
Description: 'Avoid multi-line chains of blocks.'
StyleGuide: '#single-line-blocks'
Enabled: true
VersionAdded: '0.13'
Style/MultilineIfModifier:
Description: 'Only use if/unless modifiers on single line statements.'
StyleGuide: '#no-multiline-if-modifiers'
Enabled: true
VersionAdded: '0.45'
Style/MultilineIfThen:
Description: 'Do not use then for multi-line if/unless.'
StyleGuide: '#no-then'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.26'
Style/MultilineMemoization:
Description: 'Wrap multiline memoizations in a `begin` and `end` block.'
Enabled: true
VersionAdded: '0.44'
VersionChanged: '0.48'
EnforcedStyle: keyword
SupportedStyles:
- keyword
- braces
Style/MultilineMethodSignature:
Description: 'Avoid multi-line method signatures.'
Enabled: false
VersionAdded: '0.59'
Style/MultilineTernaryOperator:
Description: >-
Avoid multi-line ?: (the ternary operator);
use if/unless instead.
StyleGuide: '#no-multiline-ternary'
Enabled: true
VersionAdded: '0.9'
Style/MultipleComparison:
Description: >-
Avoid comparing a variable with multiple items in a conditional,
use Array#include? instead.
Enabled: true
VersionAdded: '0.49'
Style/MutableConstant:
Description: 'Do not assign mutable objects to constants.'
Enabled: true
VersionAdded: '0.34'
Style/NegatedIf:
Description: >-
Favor unless over if for negative conditions
(or control flow or).
StyleGuide: '#unless-for-negatives'
Enabled: true
VersionAdded: '0.20'
VersionChanged: '0.48'
EnforcedStyle: both
SupportedStyles:
# both: prefix and postfix negated `if` should both use `unless`
# prefix: only use `unless` for negated `if` statements positioned before the body of the statement
# postfix: only use `unless` for negated `if` statements positioned after the body of the statement
- both
- prefix
- postfix
Style/NegatedWhile:
Description: 'Favor until over while for negative conditions.'
StyleGuide: '#until-for-negatives'
Enabled: true
VersionAdded: '0.20'
Style/NestedModifier:
Description: 'Avoid using nested modifiers.'
StyleGuide: '#no-nested-modifiers'
Enabled: true
VersionAdded: '0.35'
Style/NestedParenthesizedCalls:
Description: >-
Parenthesize method calls which are nested inside the
argument list of another parenthesized method call.
Enabled: true
VersionAdded: '0.36'
VersionChanged: '0.50'
Whitelist:
- be
- be_a
- be_an
- be_between
- be_falsey
- be_kind_of
- be_instance_of
- be_truthy
- be_within
- eq
- eql
- end_with
- include
- match
- raise_error
- respond_to
- start_with
Style/NestedTernaryOperator:
Description: 'Use one expression per branch in a ternary operator.'
StyleGuide: '#no-nested-ternary'
Enabled: true
VersionAdded: '0.9'
Style/Next:
Description: 'Use `next` to skip iteration instead of a condition at the end.'
StyleGuide: '#no-nested-conditionals'
Enabled: true
VersionAdded: '0.22'
VersionChanged: '0.35'
# With `always` all conditions at the end of an iteration needs to be
# replaced 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
# `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
# needs to have to trigger this cop
MinBodyLength: 3
SupportedStyles:
- skip_modifier_ifs
- always
Style/NilComparison:
Description: 'Prefer x.nil? to x == nil.'
StyleGuide: '#predicate-methods'
Enabled: true
VersionAdded: '0.12'
VersionChanged: '0.59'
EnforcedStyle: predicate
SupportedStyles:
- predicate
- comparison
Style/NonNilCheck:
Description: 'Checks for redundant nil checks.'
StyleGuide: '#no-non-nil-checks'
Enabled: true
VersionAdded: '0.20'
VersionChanged: '0.22'
# 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/Not:
Description: 'Use ! instead of not.'
StyleGuide: '#bang-not-not'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.20'
Style/NumericLiteralPrefix:
Description: 'Use smallcase prefixes for numeric literals.'
StyleGuide: '#numeric-literal-prefixes'
Enabled: true
VersionAdded: '0.41'
EnforcedOctalStyle: zero_with_o
SupportedOctalStyles:
- zero_with_o
- zero_only
Style/NumericLiterals:
Description: >-
Add underscores to large numeric literals to improve their
readability.
StyleGuide: '#underscores-in-numerics'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.48'
MinDigits: 5
Strict: false
Style/NumericPredicate:
Description: >-
Checks for the use of predicate- or comparison methods for
numeric comparisons.
StyleGuide: '#predicate-methods'
Safe: false
# This will change to a new method call which isn't guaranteed to be on the
# object. Switching these methods has to be done with knowledge of the types
# of the variables which rubocop doesn't have.
SafeAutoCorrect: false
AutoCorrect: false
Enabled: true
VersionAdded: '0.42'
VersionChanged: '0.59'
EnforcedStyle: predicate
SupportedStyles:
- predicate
- comparison
IgnoredMethods: []
# Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
# false positives.
Exclude:
- 'spec/**/*'
Style/OneLineConditional:
Description: >-
Favor the ternary operator(?:) over
if/then/else/end constructs.
StyleGuide: '#ternary-operator'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.38'
Style/OptionHash:
Description: "Don't use option hashes when you can use keyword arguments."
Enabled: false
VersionAdded: '0.33'
VersionChanged: '0.34'
# A list of parameter names that will be flagged by this cop.
SuspiciousParamNames:
- options
- opts
- args
- params
- parameters
Style/OptionalArguments:
Description: >-
Checks for optional arguments that do not appear at the end
of the argument list
StyleGuide: '#optional-arguments'
Enabled: true
VersionAdded: '0.33'
Style/OrAssignment:
Description: 'Recommend usage of double pipe equals (||=) where applicable.'
StyleGuide: '#double-pipe-for-uninit'
Enabled: true
VersionAdded: '0.50'
Style/ParallelAssignment:
Description: >-
Check for simple usages of parallel assignment.
It will only warn when the number of variables
matches on both sides of the assignment.
StyleGuide: '#parallel-assignment'
Enabled: true
VersionAdded: '0.32'
Style/ParenthesesAroundCondition:
Description: >-
Don't use parentheses around the condition of an
if/unless/while.
StyleGuide: '#no-parens-around-condition'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.56'
AllowSafeAssignment: true
AllowInMultilineConditions: false
Style/PercentLiteralDelimiters:
Description: 'Use `%`-literal delimiters consistently'
StyleGuide: '#percent-literal-braces'
Enabled: true
VersionAdded: '0.19'
# Specify the default preferred delimiter for all types with the 'default' key
# Override individual delimiters (even with default specified) by specifying
# an individual key
PreferredDelimiters:
default: ()
'%i': '[]'
'%I': '[]'
'%r': '{}'
'%w': '[]'
'%W': '[]'
VersionChanged: '0.48.1'
Style/PercentQLiterals:
Description: 'Checks if uses of %Q/%q match the configured preference.'
Enabled: true
VersionAdded: '0.25'
EnforcedStyle: lower_case_q
SupportedStyles:
- lower_case_q # Use `%q` when possible, `%Q` when necessary
- upper_case_q # Always use `%Q`
Style/PerlBackrefs:
Description: 'Avoid Perl-style regex back references.'
StyleGuide: '#no-perl-regexp-last-matchers'
Enabled: true
VersionAdded: '0.13'
Style/PreferredHashMethods:
Description: 'Checks use of `has_key?` and `has_value?` Hash methods.'
StyleGuide: '#hash-key'
Enabled: true
VersionAdded: '0.41'
VersionChanged: '0.44'
EnforcedStyle: short
SupportedStyles:
- short
- verbose
Style/Proc:
Description: 'Use proc instead of Proc.new.'
StyleGuide: '#proc'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.18'
Style/RaiseArgs:
Description: 'Checks the arguments passed to raise/fail.'
StyleGuide: '#exception-class-messages'
Enabled: true
VersionAdded: '0.14'
VersionChanged: '0.40'
EnforcedStyle: exploded
SupportedStyles:
- compact # raise Exception.new(msg)
- exploded # raise Exception, msg
Style/RandomWithOffset:
Description: >-
Prefer to use ranges when generating random numbers instead of
integers with offsets.
StyleGuide: '#random-numbers'
Enabled: true
VersionAdded: '0.52'
Style/RedundantBegin:
Description: "Don't use begin blocks when they are not needed."
StyleGuide: '#begin-implicit'
Enabled: true
VersionAdded: '0.10'
VersionChanged: '0.21'
Style/RedundantConditional:
Description: "Don't return true/false from a conditional."
Enabled: true
VersionAdded: '0.50'
Style/RedundantException:
Description: "Checks for an obsolete RuntimeException argument in raise/fail."
StyleGuide: '#no-explicit-runtimeerror'
Enabled: true
VersionAdded: '0.14'
VersionChanged: '0.29'
Style/RedundantFreeze:
Description: "Checks usages of Object#freeze on immutable objects."
Enabled: true
VersionAdded: '0.34'
Style/RedundantParentheses:
Description: "Checks for parentheses that seem not to serve any purpose."
Enabled: true
VersionAdded: '0.36'
Style/RedundantReturn:
Description: "Don't use return where it's not required."
StyleGuide: '#no-explicit-return'
Enabled: true
VersionAdded: '0.10'
VersionChanged: '0.14'
# When `true` allows code like `return x, y`.
AllowMultipleReturnValues: false
Style/RedundantSelf:
Description: "Don't use self where it's not needed."
StyleGuide: '#no-self-unless-required'
Enabled: true
VersionAdded: '0.10'
VersionChanged: '0.13'
Style/RegexpLiteral:
Description: 'Use / or %r around regular expressions.'
StyleGuide: '#percent-r'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.30'
EnforcedStyle: slashes
# slashes: Always use slashes.
# percent_r: Always use `%r`.
# mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes.
SupportedStyles:
- slashes
- percent_r
- mixed
# If `false`, the cop will always recommend using `%r` if one or more slashes
# are found in the regexp string.
AllowInnerSlashes: true
Style/RescueModifier:
Description: 'Avoid using rescue in its modifier form.'
StyleGuide: '#no-rescue-modifiers'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.34'
Style/RescueStandardError:
Description: 'Avoid rescuing without specifying an error class.'
Enabled: true
VersionAdded: '0.52'
EnforcedStyle: explicit
# implicit: Do not include the error class, `rescue`
# explicit: Require an error class `rescue StandardError`
SupportedStyles:
- implicit
- explicit
Style/ReturnNil:
Description: 'Use return instead of return nil.'
Enabled: false
EnforcedStyle: return
SupportedStyles:
- return
- return_nil
VersionAdded: '0.50'
Style/SafeNavigation:
Description: >-
This cop transforms usages of a method call safeguarded by
a check for the existence of the object to
safe navigation (`&.`).
Enabled: true
VersionAdded: '0.43'
VersionChanged: '0.44'
# Safe navigation may cause a statement to start returning `nil` in addition
# to whatever it used to return.
ConvertCodeThatCanStartToReturnNil: false
Whitelist:
- present?
- blank?
- presence
- try
- try!
VersionChanged: '0.56'
Style/SelfAssignment:
Description: >-
Checks for places where self-assignment shorthand should have
been used.
StyleGuide: '#self-assignment'
Enabled: true
VersionAdded: '0.19'
VersionChanged: '0.29'
Style/Semicolon:
Description: "Don't use semicolons to terminate expressions."
StyleGuide: '#no-semicolon'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.19'
# Allow `;` to separate several expressions on the same line.
AllowAsExpressionSeparator: false
Style/Send:
Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.'
StyleGuide: '#prefer-public-send'
Enabled: false
VersionAdded: '0.33'
Style/SignalException:
Description: 'Checks for proper usage of fail and raise.'
StyleGuide: '#prefer-raise-over-fail'
Enabled: true
VersionAdded: '0.11'
VersionChanged: '0.37'
EnforcedStyle: only_raise
SupportedStyles:
- only_raise
- only_fail
- semantic
Style/SingleLineBlockParams:
Description: 'Enforces the names of some block params.'
Enabled: false
VersionAdded: '0.16'
VersionChanged: '0.47'
Methods:
- reduce:
- acc
- elem
- inject:
- acc
- elem
Style/SingleLineMethods:
Description: 'Avoid single-line methods.'
StyleGuide: '#no-single-line-methods'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.19'
AllowIfMethodIsEmpty: true
Style/SpecialGlobalVars:
Description: 'Avoid Perl-style global variables.'
StyleGuide: '#no-cryptic-perlisms'
Enabled: true
VersionAdded: '0.13'
VersionChanged: '0.36'
SafeAutoCorrect: false
EnforcedStyle: use_english_names
SupportedStyles:
- use_perl_names
- use_english_names
Style/StabbyLambdaParentheses:
Description: 'Check for the usage of parentheses around stabby lambda arguments.'
StyleGuide: '#stabby-lambda-with-args'
Enabled: true
VersionAdded: '0.35'
EnforcedStyle: require_parentheses
SupportedStyles:
- require_parentheses
- require_no_parentheses
Style/StderrPuts:
Description: 'Use `warn` instead of `$stderr.puts`.'
StyleGuide: '#warn'
Enabled: true
VersionAdded: '0.51'
Style/StringHashKeys:
Description: 'Prefer symbols instead of strings as hash keys.'
StyleGuide: '#symbols-as-keys'
Enabled: false
VersionAdded: '0.52'
Style/StringLiterals:
Description: 'Checks if uses of quotes match the configured preference.'
StyleGuide: '#consistent-string-literals'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.36'
EnforcedStyle: single_quotes
SupportedStyles:
- single_quotes
- double_quotes
# If `true`, strings which span multiple lines using `\` for continuation must
# use the same type of quotes on each line.
ConsistentQuotesInMultiline: false
Style/StringLiteralsInInterpolation:
Description: >-
Checks if uses of quotes inside expressions in interpolated
strings match the configured preference.
Enabled: true
VersionAdded: '0.27'
EnforcedStyle: single_quotes
SupportedStyles:
- single_quotes
- double_quotes
Style/StringMethods:
Description: 'Checks if configured preferred methods are used over non-preferred.'
Enabled: false
VersionAdded: '0.34'
VersionChanged: '0.34.2'
# Mapping from undesired method to desired_method
# e.g. to use `to_sym` over `intern`:
#
# StringMethods:
# PreferredMethods:
# intern: to_sym
PreferredMethods:
intern: to_sym
Style/StructInheritance:
Description: 'Checks for inheritance from Struct.new.'
StyleGuide: '#no-extend-struct-new'
Enabled: true
VersionAdded: '0.29'
Style/SymbolArray:
Description: 'Use %i or %I for arrays of symbols.'
StyleGuide: '#percent-i'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.49'
EnforcedStyle: percent
MinSize: 2
SupportedStyles:
- percent
- brackets
Style/SymbolLiteral:
Description: 'Use plain symbols instead of string symbols when possible.'
Enabled: true
VersionAdded: '0.30'
Style/SymbolProc:
Description: 'Use symbols as procs instead of blocks when possible.'
Enabled: true
VersionAdded: '0.26'
VersionChanged: '0.40'
# A list of method names to be ignored by the check.
# The names should be fairly unique, otherwise you'll end up ignoring lots of code.
IgnoredMethods:
- respond_to
- define_method
Style/TernaryParentheses:
Description: 'Checks for use of parentheses around ternary conditions.'
Enabled: true
VersionAdded: '0.42'
VersionChanged: '0.46'
EnforcedStyle: require_no_parentheses
SupportedStyles:
- require_parentheses
- require_no_parentheses
- require_parentheses_when_complex
AllowSafeAssignment: true
Style/TrailingBodyOnClass:
Description: 'Class body goes below class statement.'
Enabled: true
VersionAdded: '0.53'
Style/TrailingBodyOnMethodDefinition:
Description: 'Method body goes below definition.'
Enabled: true
VersionAdded: '0.52'
Style/TrailingBodyOnModule:
Description: 'Module body goes below module statement.'
Enabled: true
VersionAdded: '0.53'
Style/TrailingCommaInArguments:
Description: 'Checks for trailing comma in argument lists.'
StyleGuide: '#no-trailing-params-comma'
Enabled: true
VersionAdded: '0.36'
# If `comma`, the cop requires a comma after the last argument, but only for
# parenthesized method calls where each argument is on its own line.
# If `consistent_comma`, the cop requires a comma after the last argument,
# for all parenthesized method calls with arguments.
EnforcedStyleForMultiline: no_comma
SupportedStylesForMultiline:
- comma
- consistent_comma
- no_comma
Style/TrailingCommaInArrayLiteral:
Description: 'Checks for trailing comma in array literals.'
StyleGuide: '#no-trailing-array-commas'
Enabled: true
VersionAdded: '0.53'
# but only when each item is on its own line.
# If `consistent_comma`, the cop requires a comma after the last item of all
# non-empty array literals.
EnforcedStyleForMultiline: no_comma
SupportedStylesForMultiline:
- comma
- consistent_comma
- no_comma
Style/TrailingCommaInHashLiteral:
Description: 'Checks for trailing comma in hash literals.'
Enabled: true
# If `comma`, the cop requires a comma after the last item in a hash,
# but only when each item is on its own line.
# If `consistent_comma`, the cop requires a comma after the last item of all
# non-empty hash literals.
EnforcedStyleForMultiline: no_comma
SupportedStylesForMultiline:
- comma
- consistent_comma
- no_comma
VersionAdded: '0.53'
Style/TrailingMethodEndStatement:
Description: 'Checks for trailing end statement on line of method body.'
Enabled: true
VersionAdded: '0.52'
Style/TrailingUnderscoreVariable:
Description: >-
Checks for the usage of unneeded trailing underscores at the
end of parallel variable assignment.
AllowNamedUnderscoreVariables: true
Enabled: true
VersionAdded: '0.31'
VersionChanged: '0.35'
# `TrivialAccessors` requires exact name matches and doesn't allow
# predicated methods by default.
Style/TrivialAccessors:
Description: 'Prefer attr_* methods to trivial readers/writers.'
StyleGuide: '#attr_family'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.38'
# When set to `false` the cop will suggest the use of accessor methods
# in situations like:
#
# def name
# @other_name
# end
#
# This way you can uncover "hidden" attributes in your code.
ExactNameMatch: true
AllowPredicates: true
# 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
IgnoreClassMethods: 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/UnlessElse:
Description: >-
Do not use unless with else. Rewrite these with the positive
case first.
StyleGuide: '#no-else-with-unless'
Enabled: true
VersionAdded: '0.9'
Style/UnneededCapitalW:
Description: 'Checks for %W when interpolation is not needed.'
Enabled: true
VersionAdded: '0.21'
VersionChanged: '0.24'
Style/UnneededCondition:
Description: 'Checks for unnecessary conditional expressions.'
Enabled: true
VersionAdded: '0.57'
Style/UnneededInterpolation:
Description: 'Checks for strings that are just an interpolated expression.'
Enabled: true
VersionAdded: '0.36'
Style/UnneededPercentQ:
Description: 'Checks for %q/%Q when single quotes or double quotes would do.'
StyleGuide: '#percent-q'
Enabled: true
VersionAdded: '0.24'
Style/UnpackFirst:
Description: >-
Checks for accessing the first element of `String#unpack`
instead of using `unpack1`
Enabled: true
VersionAdded: '0.54'
Style/VariableInterpolation:
Description: >-
Don't interpolate global, instance and class variables
directly in strings.
StyleGuide: '#curlies-interpolate'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.20'
Style/WhenThen:
Description: 'Use when x then ... for one-line cases.'
StyleGuide: '#one-line-cases'
Enabled: true
VersionAdded: '0.9'
Style/WhileUntilDo:
Description: 'Checks for redundant do after while or until.'
StyleGuide: '#no-multiline-while-do'
Enabled: true
VersionAdded: '0.9'
Style/WhileUntilModifier:
Description: >-
Favor modifier while/until usage when you have a
single-line body.
StyleGuide: '#while-as-a-modifier'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.30'
Style/WordArray:
Description: 'Use %w or %W for arrays of words.'
StyleGuide: '#percent-w'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.36'
EnforcedStyle: percent
SupportedStyles:
# percent style: %w(word1 word2)
- percent
# bracket style: ['word1', 'word2']
- brackets
# The `MinSize` option causes the `WordArray` rule to be ignored for arrays
# smaller than a certain size. The rule is only applied to arrays
# whose element count is greater than or equal to `MinSize`.
MinSize: 2
# The regular expression `WordRegex` decides what is considered a word.
WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/'
Style/YodaCondition:
Description: 'Do not use literals as the first operand of a comparison.'
Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions'
Enabled: false
EnforcedStyle: forbid_for_all_comparison_operators
SupportedStyles:
- forbid_for_all_comparison_operators
- forbid_for_equality_operators_only
- require_for_all_comparison_operators
- require_for_equality_operators_only
VersionAdded: '0.49'
VersionChanged: '0.50'
Style/ZeroLengthPredicate:
Description: 'Use #empty? when testing for objects of length 0.'
Enabled: true
Safe: false
VersionAdded: '0.37'
VersionChanged: '0.39'