config/default.yml in rubocop-0.59.2 vs config/default.yml in rubocop-0.60.0
- old
+ new
@@ -1,13 +1,7 @@
-# This is the default configuration file. Enabling and disabling is configured
-# in separate files. This file adds all other parameters apart from Enabled.
-
-inherit_from:
- - enabled.yml
- - disabled.yml
-
# Common configuration.
+
AllCops:
RubyInterpreters:
- ruby
- macruby
- rake
@@ -86,19 +80,19 @@
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 in disabled.yml are enabled by default. Change
- # this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`.
+ # 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 in disabled.yml,
- # are enabled by default. Cops can still be disabled in user configuration.
+ # 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
@@ -138,24 +132,109 @@
# gems.locked file to find the version of Rails that has been bound to the
# application. If neither of those files exist, RuboCop will use Rails 5.0
# as the default.
TargetRailsVersion: ~
+#################### 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 ###########################
-# Indent private/protected/public as deep as method definitions
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: ~
-# Align the elements of a hash literal if they span more than one line.
+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
@@ -223,10 +302,16 @@
- 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.
#
@@ -244,12 +329,14 @@
- with_fixed_indentation
# By default, the indentation width from Layout/IndentationWidth is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
-# checks whether the end keywords are aligned properly for `do` `end` blocks.
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.
@@ -257,23 +344,76 @@
SupportedStylesAlignWith:
- either
- start_of_block
- start_of_line
-# Indentation of `when`.
+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
@@ -281,55 +421,131 @@
- start_of_line
- def
AutoCorrect: false
Severity: warning
-# Multi-line method chaining should be done with leading dots.
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
-# Use empty lines between defs.
+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
-# Align ends correctly.
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.
@@ -342,28 +558,67 @@
- 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
@@ -380,29 +635,16 @@
- 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/IndentationConsistency:
- # 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:
- # Number of spaces for each indentation level.
- Width: 2
- IgnoredPatterns: []
-
-# Checks the indentation of the first element in an array literal.
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.
#
@@ -419,18 +661,24 @@
- align_brackets
# By default, the indentation width from `Layout/IndentationWidth` is used
# But it can be overridden by setting this parameter
IndentationWidth: ~
-# Checks the indentation of assignment RHS, when on a different line from LHS
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: ~
-# Checks the indentation of the first key in a hash literal.
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.
#
@@ -448,35 +696,85 @@
# 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/SpaceInLambdaLiteral:
- EnforcedStyle: require_no_space
+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:
- - require_no_space
- - require_space
+ - 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
@@ -490,94 +788,223 @@
- 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
@@ -586,11 +1013,22 @@
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
@@ -599,10 +1037,14 @@
- 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
@@ -611,66 +1053,711 @@
EnforcedStyleForEmptyBraces: no_space
SupportedStylesForEmptyBraces:
- space
- no_space
+
Layout/SpaceInsideParens:
+ Description: 'No spaces after ( or before ).'
+ StyleGuide: '#spaces-braces'
+ Enabled: true
+ 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/ClassStructure:
- Categories:
- module_inclusion:
- - include
- - prepend
- - extend
- ExpectedOrder:
- - module_inclusion
- - constants
- - public_class_methods
- - initializer
- - public_methods
- - protected_methods
- - private_methods
-
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
-#################### Naming ##########################
+#################### 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: 15
+
+Metrics/BlockLength:
+ Description: 'Avoid long blocks with many lines.'
+ Enabled: true
+ 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:
+ Description: 'Limit lines to 80 characters.'
+ StyleGuide: '#80-character-limits'
+ Enabled: true
+ 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).
@@ -726,34 +1813,56 @@
- XML
- XMPP
- XSRF
- XSS
-Naming/HeredocDelimiterNaming:
- Blacklist:
- - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/'
-
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_
@@ -774,19 +1883,30 @@
# 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:
@@ -800,56 +1920,800 @@
- 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
-#################### Style ###########################
+#################### 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/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
+
+#################### Rails #################################
+
+# By default, the rails cops are not run. Override in project or home
+# directory .rubocop.yml files, or by giving the -R/--rails option.
+Rails:
+ Enabled: false
+
+Rails/ActionFilter:
+ Description: 'Enforces consistent use of action filter methods.'
+ Enabled: true
+ VersionAdded: 0.19
+ EnforcedStyle: action
+ SupportedStyles:
+ - action
+ - filter
+ Include:
+ - app/controllers/**/*.rb
+
+Rails/ActiveRecordAliases:
+ Description: >-
+ Avoid Active Record aliases:
+ Use `update` instead of `update_attributes`.
+ Use `update!` instead of `update_attributes!`.
+ Enabled: true
+ VersionAdded: 0.53
+
+Rails/ActiveSupportAliases:
+ Description: >-
+ Avoid ActiveSupport aliases of standard ruby methods:
+ `String#starts_with?`, `String#ends_with?`,
+ `Array#append`, `Array#prepend`.
+ Enabled: true
+ VersionAdded: 0.48
+
+Rails/ApplicationJob:
+ Description: 'Check that jobs subclass ApplicationJob.'
+ Enabled: true
+ VersionAdded: 0.49
+
+Rails/ApplicationRecord:
+ Description: 'Check that models subclass ApplicationRecord.'
+ Enabled: true
+ VersionAdded: 0.49
+
+Rails/AssertNot:
+ Description: 'Use `assert_not` instead of `assert !`.'
+ Enabled: true
+ VersionAdded: 0.56
+ Include:
+ - '**/test/**/*'
+
+Rails/Blank:
+ Description: 'Enforces use of `blank?`.'
+ Enabled: true
+ VersionAdded: 0.48
+ # Convert usages of `nil? || empty?` to `blank?`
+ NilOrEmpty: true
+ # Convert usages of `!present?` to `blank?`
+ NotPresent: true
+ # Convert usages of `unless present?` to `if blank?`
+ UnlessPresent: true
+
+Rails/BulkChangeTable:
+ Description: 'Check whether alter queries are combinable.'
+ Enabled: true
+ VersionAdded: 0.57
+ Database: null
+ SupportedDatabases:
+ - mysql
+ - postgresql
+ Include:
+ - db/migrate/*.rb
+
+Rails/CreateTableWithTimestamps:
+ Description: >-
+ Checks the migration for which timestamps are not included
+ when creating a new table.
+ Enabled: true
+ VersionAdded: 0.52
+ Include:
+ - db/migrate/*.rb
+
+Rails/Date:
+ Description: >-
+ Checks the correct usage of date aware methods,
+ such as Date.today, Date.current etc.
+ Enabled: true
+ VersionAdded: 0.30
+ VersionChanged: 0.33
+ # The value `strict` disallows usage of `Date.today`, `Date.current`,
+ # `Date#to_time` etc.
+ # The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc
+ # (but not `Date.today`) which are overridden by ActiveSupport to handle current
+ # time zone.
+ EnforcedStyle: flexible
+ SupportedStyles:
+ - strict
+ - flexible
+
+Rails/Delegate:
+ Description: 'Prefer delegate method for delegations.'
+ Enabled: true
+ VersionAdded: 0.21
+ VersionChanged: 0.50
+ # When set to true, using the target object as a prefix of the
+ # method name without using the `delegate` method will be a
+ # violation. When set to false, this case is legal.
+ EnforceForPrefixed: true
+
+Rails/DelegateAllowBlank:
+ Description: 'Do not use allow_blank as an option to delegate.'
+ Enabled: true
+ VersionAdded: 0.44
+
+Rails/DynamicFindBy:
+ Description: 'Use `find_by` instead of dynamic `find_by_*`.'
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find_by'
+ Enabled: true
+ VersionAdded: 0.44
+ Whitelist:
+ - find_by_sql
+
+Rails/EnumUniqueness:
+ Description: 'Avoid duplicate integers in hash-syntax `enum` declaration.'
+ Enabled: true
+ VersionAdded: 0.46
+ Include:
+ - app/models/**/*.rb
+
+Rails/EnvironmentComparison:
+ Description: "Favor `Rails.env.production?` over `Rails.env == 'production'`"
+ Enabled: true
+ VersionAdded: 0.52
+
+Rails/Exit:
+ Description: >-
+ Favor `fail`, `break`, `return`, etc. over `exit` in
+ application or library code outside of Rake files to avoid
+ exits during unit testing or running in production.
+ Enabled: true
+ VersionAdded: 0.41
+ Include:
+ - app/**/*.rb
+ - config/**/*.rb
+ - lib/**/*.rb
+ Exclude:
+ - lib/**/*.rake
+
+Rails/FilePath:
+ Description: 'Use `Rails.root.join` for file path joining.'
+ Enabled: true
+ VersionAdded: 0.47
+ VersionChanged: 0.57
+ EnforcedStyle: arguments
+ SupportedStyles:
+ - slashes
+ - arguments
+
+Rails/FindBy:
+ Description: 'Prefer find_by over where.first.'
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find_by'
+ Enabled: true
+ VersionAdded: 0.30
+ Include:
+ - app/models/**/*.rb
+
+Rails/FindEach:
+ Description: 'Prefer all.find_each over all.find.'
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find-each'
+ Enabled: true
+ VersionAdded: 0.30
+ Include:
+ - app/models/**/*.rb
+
+Rails/HasAndBelongsToMany:
+ Description: 'Prefer has_many :through to has_and_belongs_to_many.'
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#has-many-through'
+ Enabled: true
+ VersionAdded: 0.12
+ Include:
+ - app/models/**/*.rb
+
+Rails/HasManyOrHasOneDependent:
+ Description: 'Define the dependent option to the has_many and has_one associations.'
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#has_many-has_one-dependent-option'
+ Enabled: true
+ VersionAdded: 0.50
+ Include:
+ - app/models/**/*.rb
+
+Rails/HttpPositionalArguments:
+ Description: 'Use keyword arguments instead of positional arguments in http method calls.'
+ Enabled: true
+ VersionAdded: 0.44
+ Include:
+ - 'spec/**/*'
+ - 'test/**/*'
+
+Rails/HttpStatus:
+ Description: 'Enforces use of symbolic or numeric value to define HTTP status.'
+ Enabled: true
+ VersionAdded: 0.54
+ EnforcedStyle: symbolic
+ SupportedStyles:
+ - numeric
+ - symbolic
+
+Rails/InverseOf:
+ Description: 'Checks for associations where the inverse cannot be determined automatically.'
+ Enabled: true
+ VersionAdded: 0.52
+ Include:
+ - app/models/**/*.rb
+
+Rails/LexicallyScopedActionFilter:
+ Description: "Checks that methods specified in the filter's `only` or `except` options are explicitly defined in the controller."
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#lexically-scoped-action-filter'
+ Enabled: true
+ VersionAdded: 0.52
+ Include:
+ - app/controllers/**/*.rb
+
+Rails/NotNullColumn:
+ Description: 'Do not add a NOT NULL column without a default value'
+ Enabled: true
+ VersionAdded: 0.43
+ Include:
+ - db/migrate/*.rb
+
+Rails/Output:
+ Description: 'Checks for calls to puts, print, etc.'
+ Enabled: true
+ VersionAdded: 0.15
+ VersionChanged: 0.19
+ Include:
+ - app/**/*.rb
+ - config/**/*.rb
+ - db/**/*.rb
+ - lib/**/*.rb
+
+Rails/OutputSafety:
+ Description: 'The use of `html_safe` or `raw` may be a security risk.'
+ Enabled: true
+ VersionAdded: 0.41
+
+Rails/PluralizationGrammar:
+ Description: 'Checks for incorrect grammar when using methods like `3.day.ago`.'
+ Enabled: true
+ VersionAdded: 0.35
+
+Rails/Presence:
+ Description: 'Checks code that can be written more easily using `Object#presence` defined by Active Support.'
+ Enabled: true
+ VersionAdded: 0.52
+
+Rails/Present:
+ Description: 'Enforces use of `present?`.'
+ Enabled: true
+ VersionAdded: 0.48
+ # Convert usages of `!nil? && !empty?` to `present?`
+ NotNilAndNotEmpty: true
+ # Convert usages of `!blank?` to `present?`
+ NotBlank: true
+ # Convert usages of `unless blank?` to `if present?`
+ UnlessBlank: true
+
+Rails/ReadWriteAttribute:
+ Description: >-
+ Checks for read_attribute(:attr) and
+ write_attribute(:attr, val).
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#read-attribute'
+ Enabled: true
+ VersionAdded: 0.20
+ VersionChanged: 0.29
+ Include:
+ - app/models/**/*.rb
+
+Rails/RedundantReceiverInWithOptions:
+ Description: 'Checks for redundant receiver in `with_options`.'
+ Enabled: true
+ VersionAdded: 0.52
+
+Rails/RefuteMethods:
+ Description: 'Use `assert_not` methods instead of `refute` methods.'
+ Enabled: true
+ VersionAdded: 0.56
+ Include:
+ - '**/test/**/*'
+
+Rails/RelativeDateConstant:
+ Description: 'Do not assign relative date to constants.'
+ Enabled: true
+ VersionAdded: 0.48
+ VersionChanged: 0.59
+ AutoCorrect: false
+
+Rails/RequestReferer:
+ Description: 'Use consistent syntax for request.referer.'
+ Enabled: true
+ VersionAdded: 0.41
+ EnforcedStyle: referer
+ SupportedStyles:
+ - referer
+ - referrer
+
+Rails/ReversibleMigration:
+ Description: 'Checks whether the change method of the migration file is reversible.'
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#reversible-migration'
+ Reference: 'http://api.rubyonrails.org/classes/ActiveRecord/Migration/CommandRecorder.html'
+ Enabled: true
+ VersionAdded: 0.47
+ Include:
+ - db/migrate/*.rb
+
+Rails/SafeNavigation:
+ Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`"
+ Enabled: true
+ VersionAdded: 0.43
+ # This will convert usages of `try` to use safe navigation as well as `try!`.
+ # `try` and `try!` work slightly differently. `try!` and safe navigation will
+ # both raise a `NoMethodError` if the receiver of the method call does not
+ # implement the intended method. `try` will not raise an exception for this.
+ ConvertTry: false
+
+Rails/SaveBang:
+ Description: 'Identifies possible cases where Active Record save! or related should be used.'
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#save-bang'
+ Enabled: false
+ VersionAdded: 0.42
+ VersionChanged: 0.59
+ AllowImplicitReturn: true
+ AllowedReceivers: []
+
+Rails/ScopeArgs:
+ Description: 'Checks the arguments of ActiveRecord scopes.'
+ Enabled: true
+ VersionAdded: 0.19
+ Include:
+ - app/models/**/*.rb
+
+Rails/SkipsModelValidations:
+ Description: >-
+ Use methods that skips model validations with caution.
+ See reference for more information.
+ Reference: 'http://guides.rubyonrails.org/active_record_validations.html#skipping-validations'
+ Enabled: true
+ VersionAdded: 0.47
+ VersionChanged: 0.59
+ Blacklist:
+ - decrement!
+ - decrement_counter
+ - increment!
+ - increment_counter
+ - toggle!
+ - touch
+ - update_all
+ - update_attribute
+ - update_column
+ - update_columns
+ - update_counters
+ Whitelist: []
+
+Rails/TimeZone:
+ Description: 'Checks the correct usage of time zone aware methods.'
+ StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#time'
+ Reference: 'http://danilenko.org/2012/7/6/rails_timezones'
+ Enabled: true
+ VersionAdded: 0.30
+ VersionChanged: 0.33
+ # The value `strict` means that `Time` should be used with `zone`.
+ # The value `flexible` allows usage of `in_time_zone` instead of `zone`.
+ EnforcedStyle: flexible
+ SupportedStyles:
+ - strict
+ - flexible
+
+Rails/UniqBeforePluck:
+ Description: 'Prefer the use of uniq or distinct before pluck.'
+ Enabled: true
+ VersionAdded: 0.40
+ VersionChanged: 0.47
+ EnforcedStyle: conservative
+ SupportedStyles:
+ - conservative
+ - aggressive
+ AutoCorrect: false
+
+Rails/UnknownEnv:
+ Description: 'Use correct environment name.'
+ Enabled: true
+ VersionAdded: 0.51
+ Environments:
+ - development
+ - test
+ - production
+
+Rails/Validation:
+ Description: 'Use validates :attribute, hash of validations.'
+ Enabled: true
+ VersionAdded: 0.9
+ VersionChanged: 0.41
+ Include:
+ - app/models/**/*.rb
+
+#################### Security ##############################
+
+Security/Eval:
+ Description: 'The use of eval represents a serious security risk.'
+ Enabled: true
+ VersionAdded: 0.47
+
+Security/JSONLoad:
+ Description: >-
+ Prefer usage of `JSON.parse` over `JSON.load` due to potential
+ security issues. See reference for more information.
+ Reference: 'http://ruby-doc.org/stdlib-2.3.0/libdoc/json/rdoc/JSON.html#method-i-load'
+ Enabled: true
+ VersionAdded: 0.43
+ VersionChanged: 0.44
+ # Autocorrect here will change to a method that may cause crashes depending
+ # on the value of the argument.
+ AutoCorrect: false
+ SafeAutoCorrect: false
+
+Security/MarshalLoad:
+ Description: >-
+ Avoid using of `Marshal.load` or `Marshal.restore` due to potential
+ security issues. See reference for more information.
+ Reference: 'http://ruby-doc.org/core-2.3.3/Marshal.html#module-Marshal-label-Security+considerations'
+ Enabled: true
+ VersionAdded: 0.47
+
+Security/Open:
+ Description: 'The use of Kernel#open represents a serious security risk.'
+ Enabled: true
+ VersionAdded: 0.53
+ Safe: false
+
+Security/YAMLLoad:
+ Description: >-
+ Prefer usage of `YAML.safe_load` over `YAML.load` due to potential
+ security issues. See reference for more information.
+ Reference: 'https://ruby-doc.org/stdlib-2.3.3/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security'
+ Enabled: true
+ VersionAdded: 0.47
+ SafeAutoCorrect: false
+
+#################### Style ###############################
+
Style/AccessModifierDeclarations:
+ Description: 'Checks style of how access modifiers are used.'
+ Enabled: true
+ 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: true
+ 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: []
-# Checks if usage of `%()` or `%Q()` matches configuration.
+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
@@ -917,10 +2781,14 @@
- 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
@@ -930,12 +2798,34 @@
# 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:
- # Checks the style of children definitions at classes and modules.
+ 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
@@ -952,32 +2842,69 @@
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:
- # Mapping from undesired method to desired_method
+ 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`:
#
- # CollectionMethods:
+ # Style/CollectionMethods:
# PreferredMethods:
# find: detect
PreferredMethods:
collect: 'map'
collect!: 'map!'
inject: 'reduce'
detect: 'find'
find_all: 'select'
-# Use '`' or '%x' around command literals.
+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:
@@ -988,18 +2915,37 @@
# 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`
@@ -1028,60 +2974,200 @@
# 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 Date or Time over DateTime.'
+ StyleGuide: '#date--time'
+ Enabled: true
+ 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: true
+ 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
-# Warn on empty else statements
-# 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
+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
-# Checks use of for or each in multiline loops.
+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
+
+Style/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
-# Enforce the method used for string formatting.
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
-# Enforce using either `%<token>s` or `%{token}`
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
@@ -1092,20 +3178,37 @@
- always
# `never` will enforce that the frozen string literal comment does not
# exist in a file.
- never
-# Built-in global variables are allowed by default.
Style/GlobalVars:
+ Description: 'Do not introduce global variables.'
+ StyleGuide: '#instance-vars'
+ Reference: 'http://www.zenspider.com/Languages/Ruby/QuickRef.html'
+ Enabled: true
+ VersionAdded: 0.13
+ # Built-in global variables are allowed by default.
AllowedVariables: []
-# `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
-# needs to have to trigger this cop
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
@@ -1117,11 +3220,70 @@
# 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
+ SafeAutoCorrect: false
+
+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?
@@ -1139,85 +3301,244 @@
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.48
IgnoreMacros: true
IgnoredMethods: []
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
-# Checks the grouping of mixins (`include`, `extend`, `prepend`) in `class` and
-# `module` bodies.
+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
@@ -1233,11 +3554,22 @@
- 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`
@@ -1246,95 +3578,263 @@
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/NumericLiterals:
- MinDigits: 5
- Strict: 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
-# Allow safe assignment in conditions.
+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
-# Use `/` or `%r` around regular expressions.
+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:
@@ -1343,118 +3843,252 @@
- mixed
# If `false`, the cop will always recommend using `%r` if one or more slashes
# are found in the regexp string.
AllowInnerSlashes: false
+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
@@ -1462,34 +4096,59 @@
- comma
- consistent_comma
- no_comma
Style/TrailingCommaInArrayLiteral:
- # If `comma`, the cop requires a comma after the last item in an array,
+ 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
@@ -1525,12 +4184,83 @@
- to_regexp
- to_str
- to_s
- to_sym
-# `WordArray` enforces how array literals of word-like strings should be expressed.
+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']
@@ -1541,345 +4271,23 @@
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: true
EnforcedStyle: all_comparison_operators
SupportedStyles:
# check all comparison operators
- all_comparison_operators
# check only equality operators: `!=` and `==`
- equality_operators_only
+ VersionAdded: 0.49
+ VersionChanged: 0.50
-#################### Metrics ###############################
-
-Metrics/AbcSize:
- # The ABC size is a calculated magnitude, so this number can be an Integer or
- # a Float.
- Max: 15
-
-Metrics/BlockLength:
- 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:
- CountBlocks: false
- Max: 3
-
-Metrics/ClassLength:
- CountComments: false # count full line comments?
- Max: 100
-
-# Avoid complex methods.
-Metrics/CyclomaticComplexity:
- Max: 6
-
-Metrics/LineLength:
- 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:
- CountComments: false # count full line comments?
- Max: 10
- ExcludedMethods: []
-
-Metrics/ModuleLength:
- CountComments: false # count full line comments?
- Max: 100
-
-Metrics/ParameterLists:
- Max: 5
- CountKeywordArgs: true
-
-Metrics/PerceivedComplexity:
- Max: 7
-
-#################### Lint ##################################
-
-# Allow safe assignment in conditions.
-Lint/AssignmentInCondition:
- AllowSafeAssignment: true
-
-Lint/InheritException:
- # The default base class in favour of `Exception`.
- EnforcedStyle: runtime_error
- SupportedStyles:
- - runtime_error
- - standard_error
-
-Lint/MissingCopEnableDirective:
- # 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/SafeNavigationChain:
- Whitelist:
- - present?
- - blank?
- - presence
- - try
- - try!
-
-Lint/SafeNavigationConsistency:
- Whitelist:
- - present?
- - blank?
- - presence
- - try
- - try!
-
-# Checks for shadowed arguments
-Lint/ShadowedArgument:
- IgnoreImplicitReferences: false
-
-# Checks for unused block arguments
-Lint/UnusedBlockArgument:
- IgnoreEmptyBlocks: true
- AllowUnusedKeywordArguments: false
-
-# Checks for unused method arguments.
-Lint/UnusedMethodArgument:
- AllowUnusedKeywordArguments: false
- IgnoreEmptyMethods: true
-
-Lint/UselessAccessModifier:
- ContextCreatingMethods: []
- MethodCreatingMethods: []
-
-Lint/Void:
- CheckForMethodsWithNoSideEffects: false
-
-#################### Performance ###########################
-
-Performance/DoubleStartEndWith:
- # Used to check for `starts_with?` and `ends_with?`.
- # These methods are defined by `ActiveSupport`.
- IncludeActiveSupportAliases: false
-
-Performance/RedundantMerge:
- # Max number of key-value pairs to consider an offense
- MaxKeyValuePairs: 2
-
-#################### Rails #################################
-
-Rails/ActionFilter:
- EnforcedStyle: action
- SupportedStyles:
- - action
- - filter
- Include:
- - app/controllers/**/*.rb
-
-Rails/AssertNot:
- Include:
- - '**/test/**/*'
-
-Rails/Blank:
- # Convert usages of `nil? || empty?` to `blank?`
- NilOrEmpty: true
- # Convert usages of `!present?` to `blank?`
- NotPresent: true
- # Convert usages of `unless present?` to `if blank?`
- UnlessPresent: true
-
-Rails/BulkChangeTable:
- Database: null
- SupportedDatabases:
- - mysql
- - postgresql
- Include:
- - db/migrate/*.rb
-
-Rails/CreateTableWithTimestamps:
- Include:
- - db/migrate/*.rb
-
-Rails/Date:
- # The value `strict` disallows usage of `Date.today`, `Date.current`,
- # `Date#to_time` etc.
- # The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc
- # (but not `Date.today`) which are overridden by ActiveSupport to handle current
- # time zone.
- EnforcedStyle: flexible
- SupportedStyles:
- - strict
- - flexible
-
-Rails/Delegate:
- # When set to true, using the target object as a prefix of the
- # method name without using the `delegate` method will be a
- # violation. When set to false, this case is legal.
- EnforceForPrefixed: true
-
-Rails/DynamicFindBy:
- Whitelist:
- - find_by_sql
-
-Rails/EnumUniqueness:
- Include:
- - app/models/**/*.rb
-
-Rails/Exit:
- Include:
- - app/**/*.rb
- - config/**/*.rb
- - lib/**/*.rb
- Exclude:
- - lib/**/*.rake
-
-Rails/FilePath:
- EnforcedStyle: arguments
- SupportedStyles:
- - slashes
- - arguments
-
-Rails/FindBy:
- Include:
- - app/models/**/*.rb
-
-Rails/FindEach:
- Include:
- - app/models/**/*.rb
-
-Rails/HasAndBelongsToMany:
- Include:
- - app/models/**/*.rb
-
-Rails/HasManyOrHasOneDependent:
- Include:
- - app/models/**/*.rb
-
-Rails/HttpStatus:
- EnforcedStyle: symbolic
- SupportedStyles:
- - numeric
- - symbolic
-
-Rails/InverseOf:
- Include:
- - app/models/**/*.rb
-
-Rails/LexicallyScopedActionFilter:
- Include:
- - app/controllers/**/*.rb
-
-Rails/NotNullColumn:
- Include:
- - db/migrate/*.rb
-
-Rails/Output:
- Include:
- - app/**/*.rb
- - config/**/*.rb
- - db/**/*.rb
- - lib/**/*.rb
-
-Rails/Present:
- # Convert usages of `!nil? && !empty?` to `present?`
- NotNilAndNotEmpty: true
- # Convert usages of `!blank?` to `present?`
- NotBlank: true
- # Convert usages of `unless blank?` to `if present?`
- UnlessBlank: true
-
-Rails/ReadWriteAttribute:
- Include:
- - app/models/**/*.rb
-
-Rails/RefuteMethods:
- Include:
- - '**/test/**/*'
-
-Rails/RelativeDateConstant:
- AutoCorrect: false
-
-Rails/RequestReferer:
- EnforcedStyle: referer
- SupportedStyles:
- - referer
- - referrer
-
-Rails/ReversibleMigration:
- Include:
- - db/migrate/*.rb
-
-Rails/SafeNavigation:
- # This will convert usages of `try` to use safe navigation as well as `try!`.
- # `try` and `try!` work slightly differently. `try!` and safe navigation will
- # both raise a `NoMethodError` if the receiver of the method call does not
- # implement the intended method. `try` will not raise an exception for this.
- ConvertTry: false
-
-Rails/SaveBang:
- AllowImplicitReturn: true
- AllowedReceivers: []
-
-Rails/ScopeArgs:
- Include:
- - app/models/**/*.rb
-
-Rails/TimeZone:
- # The value `strict` means that `Time` should be used with `zone`.
- # The value `flexible` allows usage of `in_time_zone` instead of `zone`.
- EnforcedStyle: flexible
- SupportedStyles:
- - strict
- - flexible
-
-Rails/UniqBeforePluck:
- EnforcedStyle: conservative
- SupportedStyles:
- - conservative
- - aggressive
- AutoCorrect: false
-
-Rails/UnknownEnv:
- Environments:
- - development
- - test
- - production
-
-Rails/SkipsModelValidations:
- Blacklist:
- - decrement!
- - decrement_counter
- - increment!
- - increment_counter
- - toggle!
- - touch
- - update_all
- - update_attribute
- - update_column
- - update_columns
- - update_counters
-
-Rails/Validation:
- Include:
- - app/models/**/*.rb
-
-Bundler/OrderedGems:
- TreatCommentsAsGroupSeparators: true
-
-Gemspec/OrderedDependencies:
- TreatCommentsAsGroupSeparators: true
+Style/ZeroLengthPredicate:
+ Description: 'Use #empty? when testing for objects of length 0.'
+ Enabled: true
+ Safe: false
+ VersionAdded: 0.37
+ VersionChanged: 0.39