Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
@ydah
Latest commit e522856 Mar 20, 2023 History
This PR is use RuboCop instead of Rubocop.
249 contributors

Users who have contributed to this file

@koic @bbatsov @jonas054 @dvandersluis @fatkodima @scottmatthewman @alexdowad @Drenmi @rrosenblum @marcandre @tejasbubane @pocke
# Common configuration.
AllCops:
RubyInterpreters:
- ruby
- macruby
- rake
- jruby
- rbx
# Include common Ruby source files.
Include:
- '**/*.rb'
- '**/*.arb'
- '**/*.axlsx'
- '**/*.builder'
- '**/*.fcgi'
- '**/*.gemfile'
- '**/*.gemspec'
- '**/*.god'
- '**/*.jb'
- '**/*.jbuilder'
- '**/*.mspec'
- '**/*.opal'
- '**/*.pluginspec'
- '**/*.podspec'
- '**/*.rabl'
- '**/*.rake'
- '**/*.rbuild'
- '**/*.rbw'
- '**/*.rbx'
- '**/*.ru'
- '**/*.ruby'
- '**/*.spec'
- '**/*.thor'
- '**/*.watchr'
- '**/.irbrc'
- '**/.pryrc'
- '**/.simplecov'
- '**/buildfile'
- '**/Appraisals'
- '**/Berksfile'
- '**/Brewfile'
- '**/Buildfile'
- '**/Capfile'
- '**/Cheffile'
- '**/Dangerfile'
- '**/Deliverfile'
- '**/Fastfile'
- '**/*Fastfile'
- '**/Gemfile'
- '**/Guardfile'
- '**/Jarfile'
- '**/Mavenfile'
- '**/Podfile'
- '**/Puppetfile'
- '**/Rakefile'
- '**/rakefile'
- '**/Snapfile'
- '**/Steepfile'
- '**/Thorfile'
- '**/Vagabondfile'
- '**/Vagrantfile'
Exclude:
- 'node_modules/**/*'
- 'tmp/**/*'
- 'vendor/**/*'
- '.git/**/*'
# Default formatter will be used if no `-f/--format` option is given.
DefaultFormatter: progress
# Cop names are displayed in offense messages by default. Change behavior
# by overriding DisplayCopNames, or by giving the `--no-display-cop-names`
# option.
DisplayCopNames: true
# Style guide URLs are not displayed in offense messages by default. Change
# behavior by overriding `DisplayStyleGuide`, or by giving the
# `-S/--display-style-guide` option.
DisplayStyleGuide: false
# When specifying style guide URLs, any paths and/or fragments will be
# evaluated relative to the base URL.
StyleGuideBaseURL: https://rubystyle.guide
# Documentation URLs will be constructed using the base URL.
DocumentationBaseURL: https://docs.rubocop.org/rubocop
# Extra details are not displayed in offense messages by default. Change
# behavior by overriding ExtraDetails, or by giving the
# `-E/--extra-details` option.
ExtraDetails: false
# Additional cops that do not reference a style guide rule may be enabled by
# default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving
# the `--only-guide-cops` option.
StyleGuideCopsOnly: false
# All cops except the ones configured `Enabled: false` in this file are enabled by default.
# Change this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`.
# When `DisabledByDefault` is `true`, all cops in the default configuration
# are disabled, and only cops in user configuration are enabled. This makes
# cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`,
# cops in user configuration will be enabled even if they don't set the
# Enabled parameter.
# When `EnabledByDefault` is `true`, all cops, even those configured `Enabled: false`
# in this file are enabled by default. Cops can still be disabled in user configuration.
# Note that it is invalid to set both EnabledByDefault and DisabledByDefault
# to true in the same configuration.
EnabledByDefault: false
DisabledByDefault: false
# New cops introduced between major versions are set to a special pending status
# and are not enabled by default with warning message.
# Change this behavior by overriding either `NewCops: enable` or `NewCops: disable`.
# When `NewCops` is `enable`, pending cops are enabled in bulk. Can be overridden by
# the `--enable-pending-cops` command-line option.
# When `NewCops` is `disable`, pending cops are disabled in bulk. Can be overridden by
# the `--disable-pending-cops` command-line option.
NewCops: pending
# Enables the result cache if `true`. Can be overridden by the `--cache` command
# line option.
UseCache: true
# Threshold for how many files can be stored in the result cache before some
# of the files are automatically removed.
MaxFilesInCache: 20000
# The cache will be stored in "rubocop_cache" under this directory. If
# CacheRootDirectory is ~ (nil), which it is by default, the root will be
# taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if
# `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`.
# The CacheRootDirectory can be overwritten by passing the `--cache-root` command
# line option or by setting `$RUBOCOP_CACHE_ROOT` environment variable.
CacheRootDirectory: ~
# It is possible for a malicious user to know the location of RuboCop's cache
# directory by looking at CacheRootDirectory, and create a symlink in its
# place that could cause RuboCop to overwrite unintended files, or read
# malicious input. If you are certain that your cache location is secure from
# this kind of attack, and wish to use a symlinked cache location, set this
# value to "true".
AllowSymlinksInCacheRootDirectory: false
# What MRI version of the Ruby interpreter is the inspected code intended to
# run on? (If there is more than one, set this to the lowest version.)
# If a value is specified for TargetRubyVersion then it is used. Acceptable
# values are specified as a float (i.e. 3.0); the teeny version of Ruby
# should not be included. If the project specifies a Ruby version in the
# .tool-versions or .ruby-version files, Gemfile or gems.rb file, RuboCop will
# try to determine the desired version of Ruby by inspecting the
# .tool-versions file first, then .ruby-version, followed by the Gemfile.lock
# or gems.locked file. (Although the Ruby version is specified in the Gemfile
# or gems.rb file, RuboCop reads the final value from the lock file.) If the
# Ruby version is still unresolved, RuboCop will use the oldest officially
# supported Ruby version (currently Ruby 2.6).
TargetRubyVersion: ~
# Determines if a notification for extension libraries should be shown when
# rubocop is run. Keys are the name of the extension, and values are an array
# of gems in the Gemfile that the extension is suggested for, if not already
# included.
SuggestExtensions:
rubocop-rails: [rails]
rubocop-rspec: [rspec, rspec-rails]
rubocop-minitest: [minitest]
rubocop-sequel: [sequel]
rubocop-rake: [rake]
rubocop-graphql: [graphql]
rubocop-capybara: [capybara]
# Enable/Disable checking the methods extended by Active Support.
ActiveSupportExtensionsEnabled: false
#################### Bundler ###############################
Bundler/DuplicatedGem:
Description: 'Checks for duplicate gem entries in Gemfile.'
Enabled: true
Severity: warning
VersionAdded: '0.46'
VersionChanged: '1.40'
Include:
- '**/*.gemfile'
- '**/Gemfile'
- '**/gems.rb'
Bundler/GemComment:
Description: 'Add a comment describing each gem.'
Enabled: false
VersionAdded: '0.59'
VersionChanged: '0.85'
Include:
- '**/*.gemfile'
- '**/Gemfile'
- '**/gems.rb'
IgnoredGems: []
OnlyFor: []
Bundler/GemFilename:
Description: 'Enforces the filename for managing gems.'
Enabled: true
VersionAdded: '1.20'
EnforcedStyle: 'Gemfile'
SupportedStyles:
- 'Gemfile'
- 'gems.rb'
Include:
- '**/Gemfile'
- '**/gems.rb'
- '**/Gemfile.lock'
- '**/gems.locked'
Bundler/GemVersion:
Description: 'Requires or forbids specifying gem versions.'
Enabled: false
VersionAdded: '1.14'
EnforcedStyle: 'required'
SupportedStyles:
- 'required'
- 'forbidden'
Include:
- '**/*.gemfile'
- '**/Gemfile'
- '**/gems.rb'
AllowedGems: []
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
Severity: warning
VersionAdded: '0.50'
VersionChanged: '1.40'
AllowHttpProtocol: true
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
# By default, "-" and "_" are ignored for order purposes.
# This can be overridden by setting this parameter to true.
ConsiderPunctuation: false
Include:
- '**/*.gemfile'
- '**/Gemfile'
- '**/gems.rb'
#################### Gemspec ###############################
Gemspec/DependencyVersion:
Description: 'Requires or forbids specifying gem dependency versions.'
Enabled: false
VersionAdded: '1.29'
EnforcedStyle: 'required'
SupportedStyles:
- 'required'
- 'forbidden'
Include:
- '**/*.gemspec'
AllowedGems: []
Gemspec/DeprecatedAttributeAssignment:
Description: Checks that deprecated attribute assignments are not set in a gemspec file.
Enabled: pending
Severity: warning
VersionAdded: '1.30'
VersionChanged: '1.40'
Include:
- '**/*.gemspec'
Gemspec/DevelopmentDependencies:
Description: Checks that development dependencies are specified in Gemfile rather than gemspec.
Enabled: pending
VersionAdded: '1.44'
EnforcedStyle: Gemfile
SupportedStyles:
- Gemfile
- gems.rb
- gemspec
AllowedGems: []
Include:
- '**/*.gemspec'
- '**/Gemfile'
- '**/gems.rb'
Gemspec/DuplicatedAssignment:
Description: 'An attribute assignment method calls should be listed only once in a gemspec.'
Enabled: true
Severity: warning
VersionAdded: '0.52'
VersionChanged: '1.40'
Include:
- '**/*.gemspec'
Gemspec/OrderedDependencies:
Description: >-
Dependencies in the gemspec should be alphabetically sorted.
Enabled: true
VersionAdded: '0.51'
TreatCommentsAsGroupSeparators: true
# By default, "-" and "_" are ignored for order purposes.
# This can be overridden by setting this parameter to true.
ConsiderPunctuation: false
Include:
- '**/*.gemspec'
Gemspec/RequireMFA:
Description: 'Checks that the gemspec has metadata to require Multi-Factor Authentication from RubyGems.'
Enabled: pending
Severity: warning
VersionAdded: '1.23'
VersionChanged: '1.40'
Reference:
- https://guides.rubygems.org/mfa-requirement-opt-in/
Include:
- '**/*.gemspec'
Gemspec/RequiredRubyVersion:
Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.'
Enabled: true
Severity: warning
VersionAdded: '0.52'
VersionChanged: '1.40'
Include:
- '**/*.gemspec'
Gemspec/RubyVersionGlobalsUsage:
Description: Checks usage of RUBY_VERSION in gemspec.
StyleGuide: '#no-ruby-version-in-the-gemspec'
Enabled: true
Severity: warning
VersionAdded: '0.72'
VersionChanged: '1.40'
Include:
- '**/*.gemspec'
#################### Layout ###########################
Layout/AccessModifierIndentation:
Description: Check indentation of private/protected visibility modifiers.
StyleGuide: '#indent-public-private-protected'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: indent
SupportedStyles:
- outdent
- indent
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/ArgumentAlignment:
Description: >-
Align the arguments of a method call if they span more
than one line.
StyleGuide: '#no-double-indent'
Enabled: true
VersionAdded: '0.68'
VersionChanged: '0.77'
# Alignment of arguments in multi-line method calls.
#
# The `with_first_argument` style aligns the following lines along the same
# column as the first parameter.
#
# method_call(a,
# b)
#
# The `with_fixed_indentation` style aligns the following lines with one
# level of indentation relative to the start of the line with the method call.
#
# method_call(a,
# b)
EnforcedStyle: with_first_argument
SupportedStyles:
- with_first_argument
- with_fixed_indentation
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/ArrayAlignment:
Description: >-
Align the elements of an array literal if they span more than
one line.
StyleGuide: '#no-double-indent'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.77'
# Alignment of elements of a multi-line array.
#
# The `with_first_parameter` style aligns the following lines along the same
# column as the first element.
#
# array = [1, 2, 3,
# 4, 5, 6]
#
# The `with_fixed_indentation` style aligns the following lines with one
# level of indentation relative to the start of the line with start of array.
#
# array = [1, 2, 3,
# 4, 5, 6]
EnforcedStyle: with_first_element
SupportedStyles:
- with_first_element
- with_fixed_indentation
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/AssignmentIndentation:
Description: >-
Checks the indentation of the first line of the
right-hand-side of a multi-line assignment.
Enabled: true
VersionAdded: '0.49'
VersionChanged: '1.45'
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/BeginEndAlignment:
Description: 'Align ends corresponding to begins correctly.'
Enabled: true
VersionAdded: '0.91'
# The value `start_of_line` means that `end` should be aligned the start of the line
# where the `begin` keyword is.
# The value `begin` means that `end` should be aligned with the `begin` keyword.
EnforcedStyleAlignWith: start_of_line
SupportedStylesAlignWith:
- start_of_line
- begin
Severity: warning
Layout/BlockAlignment:
Description: 'Align block ends correctly.'
Enabled: true
VersionAdded: '0.53'
# The value `start_of_block` means that the `end` should be aligned with line
# where the `do` keyword appears.
# The value `start_of_line` means it should be aligned with the whole
# expression's starting line.
# The value `either` means both are allowed.
EnforcedStyleAlignWith: either
SupportedStylesAlignWith:
- either
- start_of_block
- start_of_line
Layout/BlockEndNewline:
Description: 'Put end statement of multiline block on its own line.'
Enabled: true
VersionAdded: '0.49'
Layout/CaseIndentation:
Description: 'Indentation of when in a case/(when|in)/[else/]end.'
StyleGuide: '#indent-when-to-case'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '1.16'
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: '#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
# When true, allows comments to have extra indentation if that aligns them
# with a comment on the preceding line.
AllowForAlignment: false
VersionAdded: '0.49'
VersionChanged: '1.24'
Layout/ConditionPosition:
Description: >-
Checks for condition placed in a confusing position relative to
the keyword.
StyleGuide: '#same-line-condition'
Enabled: true
VersionAdded: '0.53'
VersionChanged: '0.83'
Layout/DefEndAlignment:
Description: 'Align ends corresponding to defs correctly.'
Enabled: true
VersionAdded: '0.53'
# The value `def` means that `end` should be aligned with the def keyword.
# The value `start_of_line` means that `end` should be aligned with method
# calls like `private`, `public`, etc, if present in front of the `def`
# keyword on the same line.
EnforcedStyleAlignWith: start_of_line
SupportedStylesAlignWith:
- start_of_line
- def
Severity: warning
Layout/DotPosition:
Description: 'Checks the position of the dot in multi-line method calls.'
StyleGuide: '#consistent-multi-line-chains'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: leading
SupportedStyles:
- leading
- trailing
Layout/ElseAlignment:
Description: 'Align elses and elsifs correctly.'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyComment:
Description: 'Checks empty comment.'
Enabled: true
VersionAdded: '0.53'
AllowBorderComment: true
AllowMarginComment: true
Layout/EmptyLineAfterGuardClause:
Description: 'Add empty line after guard clause.'
Enabled: true
VersionAdded: '0.56'
VersionChanged: '0.59'
Layout/EmptyLineAfterMagicComment:
Description: 'Add an empty line after magic comments to separate them from code.'
StyleGuide: '#separate-magic-comments-from-code'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLineAfterMultilineCondition:
Description: 'Enforces empty line after multiline condition.'
# This is disabled, because this style is not very common in practice.
Enabled: false
VersionAdded: '0.90'
Reference:
- https://github.com/airbnb/ruby#multiline-if-newline
Layout/EmptyLineBetweenDefs:
Description: 'Use empty lines between class/module/method defs.'
StyleGuide: '#empty-lines-between-methods'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '1.23'
EmptyLineBetweenMethodDefs: true
EmptyLineBetweenClassDefs: true
EmptyLineBetweenModuleDefs: true
# `AllowAdjacentOneLineDefs` means that single line method definitions don't
# need an empty line between them. `true` by default.
AllowAdjacentOneLineDefs: true
# 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'
EnforcedStyle: around
SupportedStyles:
- around
- only_before
Reference:
# A reference to `EnforcedStyle: only_before`.
- https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
Layout/EmptyLinesAroundArguments:
Description: "Keeps track of empty lines around method arguments."
Enabled: true
VersionAdded: '0.52'
Layout/EmptyLinesAroundAttributeAccessor:
Description: "Keep blank lines around attribute accessors."
StyleGuide: '#empty-lines-around-attribute-accessor'
Enabled: true
VersionAdded: '0.83'
VersionChanged: '0.84'
AllowAliasSyntax: true
AllowedMethods:
- alias_method
- public
- protected
- private
Layout/EmptyLinesAroundBeginBody:
Description: "Keeps track of empty lines around begin-end bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLinesAroundBlockBody:
Description: "Keeps track of empty lines around block bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: no_empty_lines
SupportedStyles:
- empty_lines
- no_empty_lines
Layout/EmptyLinesAroundClassBody:
Description: "Keeps track of empty lines around class bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.53'
EnforcedStyle: no_empty_lines
SupportedStyles:
- empty_lines
- empty_lines_except_namespace
- empty_lines_special
- no_empty_lines
- beginning_only
- ending_only
Layout/EmptyLinesAroundExceptionHandlingKeywords:
Description: "Keeps track of empty lines around exception handling keywords."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLinesAroundMethodBody:
Description: "Keeps track of empty lines around method bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
Layout/EmptyLinesAroundModuleBody:
Description: "Keeps track of empty lines around module bodies."
StyleGuide: '#empty-lines-around-bodies'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: no_empty_lines
SupportedStyles:
- empty_lines
- empty_lines_except_namespace
- empty_lines_special
- no_empty_lines
Layout/EndAlignment:
Description: 'Align ends correctly.'
Enabled: true
VersionAdded: '0.53'
# The value `keyword` means that `end` should be aligned with the matching
# keyword (`if`, `while`, etc.).
# The value `variable` means that in assignments, `end` should be aligned
# with the start of the variable on the left hand side of `=`. In all other
# situations, `end` should still be aligned with the keyword.
# The value `start_of_line` means that `end` should be aligned with the start
# of the line which the matching keyword appears on.
EnforcedStyleAlignWith: keyword
SupportedStylesAlignWith:
- keyword
- variable
- start_of_line
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, allows things like 'obj.meth(arg) # comment',
# rather than insisting on 'obj.meth(arg) # comment'.
# If done for alignment, either this OR AllowForAlignment will allow it.
AllowBeforeTrailingComments: false
# When true, forces the alignment of `=` in assignments on consecutive lines.
ForceEqualSignAlignment: false
Layout/FirstArgumentIndentation:
Description: 'Checks the indentation of the first argument in a method call.'
Enabled: true
VersionAdded: '0.68'
VersionChanged: '0.77'
EnforcedStyle: special_for_inner_method_call_in_parentheses
SupportedStyles:
# The first parameter should always be indented one step more than the
# preceding line.
- consistent
# The first parameter should always be indented one level relative to the
# parent that is receiving the parameter
- consistent_relative_to_receiver
# The first parameter should normally be indented one step more than the
# preceding line, but if it's a parameter for a method call that is itself
# a parameter in a method call, then the inner parameter should be indented
# relative to the inner method.
- special_for_inner_method_call
# Same as `special_for_inner_method_call` except that the special rule only
# applies if the outer method call encloses its arguments in parentheses.
- special_for_inner_method_call_in_parentheses
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/FirstArrayElementIndentation:
Description: >-
Checks the indentation of the first element in an array
literal.
Enabled: true
VersionAdded: '0.68'
VersionChanged: '0.77'
# The value `special_inside_parentheses` means that array literals with
# brackets that have their opening bracket on the same line as a surrounding
# opening round parenthesis, shall have their first element indented relative
# to the first position inside the parenthesis.
#
# The value `consistent` means that the indentation of the first element shall
# always be relative to the first position of the line where the opening
# bracket is.
#
# The value `align_brackets` means that the indentation of the first element
# shall always be relative to the position of the opening bracket.
EnforcedStyle: special_inside_parentheses
SupportedStyles:
- special_inside_parentheses
- consistent
- align_brackets
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/FirstArrayElementLineBreak:
Description: >-
Checks for a line break before the first element in a
multi-line array.
Enabled: false
VersionAdded: '0.49'
AllowMultilineFinalElement: false
Layout/FirstHashElementIndentation:
Description: 'Checks the indentation of the first key in a hash literal.'
Enabled: true
VersionAdded: '0.68'
VersionChanged: '0.77'
# The value `special_inside_parentheses` means that hash literals with braces
# that have their opening brace on the same line as a surrounding opening
# round parenthesis, shall have their first key indented relative to the
# first position inside the parenthesis.
#
# The value `consistent` means that the indentation of the first key shall
# always be relative to the first position of the line where the opening
# brace is.
#
# The value `align_braces` means that the indentation of the first key shall
# always be relative to the position of the opening brace.
EnforcedStyle: special_inside_parentheses
SupportedStyles:
- special_inside_parentheses
- consistent
- align_braces
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/FirstHashElementLineBreak:
Description: >-
Checks for a line break before the first element in a
multi-line hash.
Enabled: false
VersionAdded: '0.49'
AllowMultilineFinalElement: false
Layout/FirstMethodArgumentLineBreak:
Description: >-
Checks for a line break before the first argument in a
multi-line method call.
Enabled: false
VersionAdded: '0.49'
AllowMultilineFinalElement: false
Layout/FirstMethodParameterLineBreak:
Description: >-
Checks for a line break before the first parameter in a
multi-line method parameter definition.
Enabled: false
VersionAdded: '0.49'
AllowMultilineFinalElement: false
Layout/FirstParameterIndentation:
Description: >-
Checks the indentation of the first parameter in a
method definition.
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.77'
EnforcedStyle: consistent
SupportedStyles:
- consistent
- align_parentheses
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/HashAlignment:
Description: >-
Align the elements of a hash literal if they span more than
one line.
Enabled: true
AllowMultipleStyles: true
VersionAdded: '0.49'
VersionChanged: '1.16'
# Alignment of entries using hash rocket as separator. Valid values are:
#
# key - left alignment of keys
# 'a' => 2
# 'bb' => 3
# separator - alignment of hash rockets, keys are right aligned
# 'a' => 2
# 'bb' => 3
# table - left alignment of keys, hash rockets, and values
# 'a' => 2
# 'bb' => 3
EnforcedHashRocketStyle: key
SupportedHashRocketStyles:
- key
- separator
- table
# Alignment of entries using colon as separator. Valid values are:
#
# key - left alignment of keys
# a: 0
# bb: 1
# separator - alignment of colons, keys are right aligned
# a: 0
# bb: 1
# table - left alignment of keys and values
# a: 0
# bb: 1
EnforcedColonStyle: key
SupportedColonStyles:
- key
- separator
- table
# Select whether hashes that are the last argument in a method call should be
# inspected? Valid values are:
#
# always_inspect - Inspect both implicit and explicit hashes.
# Registers an offense for:
# function(a: 1,
# b: 2)
# Registers an offense for:
# function({a: 1,
# b: 2})
# always_ignore - Ignore both implicit and explicit hashes.
# Accepts:
# function(a: 1,
# b: 2)
# Accepts:
# function({a: 1,
# b: 2})
# ignore_implicit - Ignore only implicit hashes.
# Accepts:
# function(a: 1,
# b: 2)
# Registers an offense for:
# function({a: 1,
# b: 2})
# ignore_explicit - Ignore only explicit hashes.
# Accepts:
# function({a: 1,
# b: 2})
# Registers an offense for:
# function(a: 1,
# b: 2)
EnforcedLastArgumentHashStyle: always_inspect
SupportedLastArgumentHashStyles:
- always_inspect
- always_ignore
- ignore_implicit
- ignore_explicit
Layout/HeredocArgumentClosingParenthesis:
Description: >-
Checks for the placement of the closing parenthesis in a
method call that passes a HEREDOC string as an argument.
Enabled: false
StyleGuide: '#heredoc-argument-closing-parentheses'
VersionAdded: '0.68'
Layout/HeredocIndentation:
Description: 'Checks the indentation of the here document bodies.'
StyleGuide: '#squiggly-heredocs'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.85'
Layout/IndentationConsistency:
Description: 'Keep indentation straight.'
StyleGuide: '#spaces-indentation'
Enabled: true
VersionAdded: '0.49'
# The difference between `indented` and `normal` is that the `indented_internal_methods`
# 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
- indented_internal_methods
Reference:
# A reference to `EnforcedStyle: indented_internal_methods`.
- https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
Layout/IndentationStyle:
Description: 'Consistent indentation either with tabs only or spaces only.'
StyleGuide: '#spaces-indentation'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.82'
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
# It is used during autocorrection to determine how many spaces should
# replace each tab.
IndentationWidth: ~
EnforcedStyle: spaces
SupportedStyles:
- spaces
- tabs
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
AllowedPatterns: []
Layout/InitialIndentation:
Description: >-
Checks the indentation of the first non-blank non-comment line in a file.
Enabled: true
VersionAdded: '0.49'
Layout/LeadingCommentSpace:
Description: 'Comments should start with a space.'
StyleGuide: '#hash-space'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.73'
AllowDoxygenCommentStyle: false
AllowGemfileRubyComment: false
Layout/LeadingEmptyLines:
Description: Check for unnecessary blank lines at the beginning of a file.
Enabled: true
VersionAdded: '0.57'
VersionChanged: '0.77'
Layout/LineContinuationLeadingSpace:
Description: >-
Use trailing spaces instead of leading spaces in strings
broken over multiple lines (by a backslash).
Enabled: pending
VersionAdded: '1.31'
VersionChanged: '1.45'
EnforcedStyle: trailing
SupportedStyles:
- leading
- trailing
Layout/LineContinuationSpacing:
Description: 'Checks the spacing in front of backslash in line continuations.'
Enabled: pending
AutoCorrect: true
SafeAutoCorrect: true
VersionAdded: '1.31'
EnforcedStyle: space
SupportedStyles:
- space
- no_space
Layout/LineEndStringConcatenationIndentation:
Description: >-
Checks the indentation of the next line after a line that
ends with a string literal and a backslash.
Enabled: pending
VersionAdded: '1.18'
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/LineLength:
Description: 'Checks that line length does not exceed the configured limit.'
StyleGuide: '#max-line-length'
Enabled: true
VersionAdded: '0.25'
VersionChanged: '1.4'
Max: 120
# 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: true
# The AllowedPatterns 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.
AllowedPatterns: []
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/MultilineArrayLineBreaks:
Description: >-
Checks that each item in a multi-line array literal
starts on a separate line.
Enabled: false
VersionAdded: '0.67'
AllowMultilineFinalElement: false
Layout/MultilineAssignmentLayout:
Description: 'Check for a newline after the assignment operator in multi-line assignments.'
StyleGuide: '#indent-conditional-assignment'
Enabled: false
VersionAdded: '0.49'
# The types of assignments which are subject to this rule.
SupportedTypes:
- block
- case
- class
- if
- kwbegin
- module
EnforcedStyle: new_line
SupportedStyles:
# Ensures that the assignment operator and the rhs are on the same line for
# the set of supported types.
- same_line
# Ensures that the assignment operator and the rhs are on separate lines
# for the set of supported types.
- new_line
Layout/MultilineBlockLayout:
Description: 'Ensures newlines after multiline block do statements.'
Enabled: true
VersionAdded: '0.49'
Layout/MultilineHashBraceLayout:
Description: >-
Checks that the closing brace in a hash literal is
either on the same line as the last hash element, or
a new line.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: symmetrical
SupportedStyles:
# symmetrical: closing brace is positioned in same way as opening brace
# new_line: closing brace is always on a new line
# same_line: closing brace is always on same line as last element
- symmetrical
- new_line
- same_line
Layout/MultilineHashKeyLineBreaks:
Description: >-
Checks that each item in a multi-line hash literal
starts on a separate line.
Enabled: false
VersionAdded: '0.67'
AllowMultilineFinalElement: false
Layout/MultilineMethodArgumentLineBreaks:
Description: >-
Checks that each argument in a multi-line method call
starts on a separate line.
Enabled: false
VersionAdded: '0.67'
AllowMultilineFinalElement: false
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/MultilineMethodParameterLineBreaks:
Description: >-
Checks that each parameter in a multi-line method definition
starts on a separate line.
Enabled: false
VersionAdded: '1.32'
AllowMultilineFinalElement: false
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/ParameterAlignment:
Description: >-
Align the parameters of a method definition if they span more
than one line.
StyleGuide: '#no-double-indent'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.77'
# 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.
#
# def method_foo(a,
# b)
#
# The `with_fixed_indentation` style aligns the following lines with one
# level of indentation relative to the start of the line with the method call.
#
# def method_foo(a,
# b)
EnforcedStyle: with_first_parameter
SupportedStyles:
- with_first_parameter
- with_fixed_indentation
# By default the indentation width from `Layout/IndentationWidth` is used,
# but it can be overridden by setting this parameter.
IndentationWidth: ~
Layout/RedundantLineBreak:
Description: >-
Do not break up an expression into multiple lines when it fits
on a single line.
Enabled: false
InspectBlocks: false
VersionAdded: '1.13'
Layout/RescueEnsureAlignment:
Description: 'Align rescues and ensures correctly.'
Enabled: true
VersionAdded: '0.49'
Layout/SingleLineBlockChain:
Description: 'Put method call on a separate line if chained to a single line block.'
Enabled: false
VersionAdded: '1.14'
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/SpaceAroundMethodCallOperator:
Description: 'Checks method call operators to not have spaces around them.'
Enabled: true
VersionAdded: '0.82'
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
EnforcedStyleForExponentOperator: no_space
SupportedStylesForExponentOperator:
- space
- no_space
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'
Layout/SpaceBeforeBrackets:
Description: 'Checks for receiver with a space before the opening brackets.'
StyleGuide: '#space-in-brackets-access'
Enabled: pending
VersionAdded: '1.7'
Layout/SpaceBeforeComma:
Description: 'No spaces before commas.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceBeforeComment:
Description: >-
Checks for missing space between code and a comment on the
same line.
Enabled: true
VersionAdded: '0.49'
Layout/SpaceBeforeFirstArg:
Description: >-
Checks that exactly one space is used between a method name
and the first argument for method calls without parentheses.
Enabled: true
VersionAdded: '0.49'
# When `true`, allows most uses of extra spacing if the intent is to align
# things with the previous or next line, not counting empty lines or comment
# lines.
AllowForAlignment: true
Layout/SpaceBeforeSemicolon:
Description: 'No spaces before semicolons.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceInLambdaLiteral:
Description: 'Checks for spaces in lambda literals.'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: require_no_space
SupportedStyles:
- require_no_space
- require_space
Layout/SpaceInsideArrayLiteralBrackets:
Description: 'Checks the spacing inside array literal brackets.'
Enabled: true
VersionAdded: '0.52'
EnforcedStyle: no_space
SupportedStyles:
- space
- no_space
# 'compact' normally requires a space inside the brackets, with the exception
# that successive left brackets or right brackets are collapsed together
- compact
EnforcedStyleForEmptyBrackets: no_space
SupportedStylesForEmptyBrackets:
- space
- no_space
Layout/SpaceInsideArrayPercentLiteral:
Description: 'No unnecessary additional spaces between elements in %i/%w literals.'
Enabled: true
VersionAdded: '0.49'
Layout/SpaceInsideBlockBraces:
Description: >-
Checks that block braces have or don't have surrounding space.
For blocks taking parameters, checks that the left brace has
or doesn't have trailing space.
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: space
SupportedStyles:
- space
- no_space
EnforcedStyleForEmptyBraces: no_space
SupportedStylesForEmptyBraces:
- space
- no_space
# Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict.
SpaceBeforeBlockParameters: true
Layout/SpaceInsideHashLiteralBraces:
Description: "Use spaces inside hash literal braces - or don't."
StyleGuide: '#spaces-braces'
Enabled: true
VersionAdded: '0.49'
EnforcedStyle: space
SupportedStyles:
- space
- no_space
# 'compact' normally requires a space inside hash braces, with the exception
# that successive left braces or right braces are collapsed together
- compact
EnforcedStyleForEmptyBraces: no_space
SupportedStylesForEmptyBraces:
- space
- no_space
Layout/SpaceInsideParens:
Description: 'No spaces after ( or before ).'
StyleGuide: '#spaces-braces'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '1.22'
EnforcedStyle: no_space
SupportedStyles:
- space
- compact
- 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/TrailingEmptyLines:
Description: 'Checks trailing blank lines and final newline.'
StyleGuide: '#newline-eof'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.77'
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: '1.0'
AllowInHeredoc: false
#################### Lint ##################################
### Warnings
Lint/AmbiguousAssignment:
Description: 'Checks for mistyped shorthand assignments.'
Enabled: pending
VersionAdded: '1.7'
Lint/AmbiguousBlockAssociation:
Description: >-
Checks for ambiguous block association with method when param passed without
parentheses.
StyleGuide: '#syntax'
Enabled: true
VersionAdded: '0.48'
VersionChanged: '1.13'
AllowedMethods: []
AllowedPatterns: []
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'
VersionChanged: '0.83'
Lint/AmbiguousOperatorPrecedence:
Description: >-
Checks for expressions containing multiple binary operations with
ambiguous precedence.
Enabled: pending
VersionAdded: '1.21'
Lint/AmbiguousRange:
Description: Checks for ranges with ambiguous boundaries.
Enabled: pending
VersionAdded: '1.19'
SafeAutoCorrect: false
RequireParenthesesForMethodChains: false
Lint/AmbiguousRegexpLiteral:
Description: >-
Checks for ambiguous regexp literals in the first argument of
a method invocation without parentheses.
Enabled: true
VersionAdded: '0.17'
VersionChanged: '0.83'
Lint/AssignmentInCondition:
Description: "Don't use assignment in conditions."
StyleGuide: '#safe-assignment-in-condition'
Enabled: true
SafeAutoCorrect: false
VersionAdded: '0.9'
VersionChanged: '1.45'
AllowSafeAssignment: true
Lint/BigDecimalNew:
Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.'
Enabled: true
VersionAdded: '0.53'
Lint/BinaryOperatorWithIdenticalOperands:
Description: 'Checks for places where binary operator has identical operands.'
Enabled: true
Safe: false
VersionAdded: '0.89'
VersionChanged: '1.7'
Lint/BooleanSymbol:
Description: 'Check for `:true` and `:false` symbols.'
Enabled: true
SafeAutoCorrect: false
VersionAdded: '0.50'
VersionChanged: '1.22'
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/ConstantDefinitionInBlock:
Description: 'Do not define constants within a block.'
StyleGuide: '#no-constant-definition-in-block'
Enabled: true
VersionAdded: '0.91'
VersionChanged: '1.3'
# `enums` for Typed Enums via T::Enum in Sorbet.
# https://sorbet.org/docs/tenum
AllowedMethods:
- enums
Lint/ConstantOverwrittenInRescue:
Description: 'Checks for overwriting an exception with an exception result by use `rescue =>`.'
Enabled: pending
VersionAdded: '1.31'
Lint/ConstantResolution:
Description: 'Check that constants are fully qualified with `::`.'
Enabled: false
VersionAdded: '0.86'
# Restrict this cop to only looking at certain names
Only: []
# Restrict this cop from only looking at certain names
Ignore: []
Lint/Debugger:
Description: 'Check for debugger calls.'
Enabled: true
VersionAdded: '0.14'
VersionChanged: '1.46'
DebuggerMethods:
# Groups are available so that a specific group can be disabled in
# a user's configuration, but are otherwise not significant.
Kernel:
- binding.irb
- Kernel.binding.irb
Byebug:
- byebug
- remote_byebug
- Kernel.byebug
- Kernel.remote_byebug
Capybara:
- save_and_open_page
- save_and_open_screenshot
debug.rb:
- binding.b
- binding.break
- Kernel.binding.b
- Kernel.binding.break
Pry:
- binding.pry
- binding.remote_pry
- binding.pry_remote
- Kernel.binding.pry
- Kernel.binding.remote_pry
- Kernel.binding.pry_remote
- Pry.rescue
- pry
Rails:
- debugger
- Kernel.debugger
RubyJard:
- jard
WebConsole:
- binding.console
Lint/DeprecatedClassMethods:
Description: 'Check for deprecated class method calls.'
Enabled: true
VersionAdded: '0.19'
Lint/DeprecatedConstants:
Description: 'Checks for deprecated constants.'
Enabled: pending
VersionAdded: '1.8'
VersionChanged: '1.40'
# You can configure deprecated constants.
# If there is an alternative method, you can set alternative value as `Alternative`.
# And you can set the deprecated version as `DeprecatedVersion`.
# These options can be omitted if they are not needed.
#
# DeprecatedConstants:
# 'DEPRECATED_CONSTANT':
# Alternative: 'alternative_value'
# DeprecatedVersion: 'deprecated_version'
#
DeprecatedConstants:
'NIL':
Alternative: 'nil'
DeprecatedVersion: '2.4'
'TRUE':
Alternative: 'true'
DeprecatedVersion: '2.4'
'FALSE':
Alternative: 'false'
DeprecatedVersion: '2.4'
'Net::HTTPServerException':
Alternative: 'Net::HTTPClientException'
DeprecatedVersion: '2.6'
'Random::DEFAULT':
Alternative: 'Random.new'
DeprecatedVersion: '3.0'
'Struct::Group':
Alternative: 'Etc::Group'
DeprecatedVersion: '3.0'
'Struct::Passwd':
Alternative: 'Etc::Passwd'
DeprecatedVersion: '3.0'
Lint/DeprecatedOpenSSLConstant:
Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`."
Enabled: true
VersionAdded: '0.84'
Lint/DisjunctiveAssignmentInConstructor:
Description: 'In constructor, plain assignment is preferred over disjunctive.'
Enabled: true
Safe: false
VersionAdded: '0.62'
VersionChanged: '0.88'
Lint/DuplicateBranch:
Description: Checks that there are no repeated bodies within `if/unless`, `case-when` and `rescue` constructs.
Enabled: pending
VersionAdded: '1.3'
VersionChanged: '1.7'
IgnoreLiteralBranches: false
IgnoreConstantBranches: false
Lint/DuplicateCaseCondition:
Description: 'Do not repeat values in case conditionals.'
Enabled: true
VersionAdded: '0.45'
Lint/DuplicateElsifCondition:
Description: 'Do not repeat conditions used in if `elsif`.'
Enabled: true
VersionAdded: '0.88'
Lint/DuplicateHashKey:
Description: 'Check for duplicate keys in hash literals.'
Enabled: true
VersionAdded: '0.34'
VersionChanged: '0.77'
Lint/DuplicateMagicComment:
Description: 'Check for duplicated magic comments.'
Enabled: pending
VersionAdded: '1.37'
Lint/DuplicateMethods:
Description: 'Check for duplicate method definitions.'
Enabled: true
VersionAdded: '0.29'
Lint/DuplicateRegexpCharacterClassElement:
Description: 'Checks for duplicate elements in Regexp character classes.'
Enabled: pending
VersionAdded: '1.1'
Lint/DuplicateRequire:
Description: 'Check for duplicate `require`s and `require_relative`s.'
Enabled: true
SafeAutoCorrect: false
VersionAdded: '0.90'
VersionChanged: '1.28'
Lint/DuplicateRescueException:
Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
Enabled: true
VersionAdded: '0.89'
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'
VersionChanged: '1.2'
Lint/EmptyBlock:
Description: 'Checks for blocks without a body.'
Enabled: pending
VersionAdded: '1.1'
VersionChanged: '1.15'
AllowComments: true
AllowEmptyLambdas: true
Lint/EmptyClass:
Description: 'Checks for classes and metaclasses without a body.'
Enabled: pending
VersionAdded: '1.3'
AllowComments: false
Lint/EmptyConditionalBody:
Description: 'Checks for the presence of `if`, `elsif` and `unless` branches without a body.'
Enabled: true
SafeAutoCorrect: false
AllowComments: true
VersionAdded: '0.89'
VersionChanged: '1.34'
Lint/EmptyEnsure:
Description: 'Checks for empty ensure block.'
Enabled: true
VersionAdded: '0.10'
VersionChanged: '0.48'
Lint/EmptyExpression:
Description: 'Checks for empty expressions.'
Enabled: true
VersionAdded: '0.45'
Lint/EmptyFile:
Description: 'Enforces that Ruby source files are not empty.'
Enabled: true
AllowComments: true
VersionAdded: '0.90'
Lint/EmptyInPattern:
Description: 'Checks for the presence of `in` pattern branches without a body.'
Enabled: pending
AllowComments: true
VersionAdded: '1.16'
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
AllowComments: true
VersionAdded: '0.45'
VersionChanged: '0.83'
Lint/EnsureReturn:
Description: 'Do not use return in an ensure block.'
StyleGuide: '#no-return-ensure'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.83'
Lint/ErbNewArguments:
Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.'
Enabled: true
VersionAdded: '0.56'
Lint/FlipFlop:
Description: 'Checks for flip-flops.'
StyleGuide: '#no-flip-flops'
Enabled: true
VersionAdded: '0.16'
Lint/FloatComparison:
Description: 'Checks for the presence of precise comparison of floating point numbers.'
StyleGuide: '#float-comparison'
Enabled: true
VersionAdded: '0.89'
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/HashCompareByIdentity:
Description: 'Prefer using `Hash#compare_by_identity` than using `object_id` for keys.'
StyleGuide: '#identity-comparison'
Enabled: true
Safe: false
VersionAdded: '0.93'
Lint/HeredocMethodCallPosition:
Description: >-
Checks for the ordering of a method call where
the receiver of the call is a HEREDOC.
Enabled: false
StyleGuide: '#heredoc-method-calls'
VersionAdded: '0.68'
Lint/IdentityComparison:
Description: 'Prefer `equal?` over `==` when comparing `object_id`.'
Enabled: true
StyleGuide: '#identity-comparison'
VersionAdded: '0.91'
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/IncompatibleIoSelectWithFiberScheduler:
Description: 'Checks for `IO.select` that is incompatible with Fiber Scheduler.'
Enabled: pending
SafeAutoCorrect: false
VersionAdded: '1.21'
VersionChanged: '1.24'
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
SafeAutoCorrect: false
VersionAdded: '0.41'
VersionChanged: '1.26'
# The default base class in favour of `Exception`.
EnforcedStyle: standard_error
SupportedStyles:
- standard_error
- runtime_error
Lint/InterpolationCheck:
Description: 'Checks for interpolation in a single quoted string.'
Enabled: true
SafeAutoCorrect: false
VersionAdded: '0.50'
VersionChanged: '1.40'
Lint/LambdaWithoutLiteralBlock:
Description: 'Checks uses of lambda without a literal block.'
Enabled: pending
VersionAdded: '1.8'
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'
VersionChanged: '1.3'
Safe: false
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/MissingSuper:
Description: >-
Checks for the presence of constructors and lifecycle callbacks
without calls to `super`.
Enabled: true
VersionAdded: '0.89'
VersionChanged: '1.4'
Lint/MixedRegexpCaptureTypes:
Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
Enabled: true
VersionAdded: '0.85'
Lint/MultipleComparison:
Description: "Use `&&` operator to compare multiple values."
Enabled: true
VersionAdded: '0.47'
VersionChanged: '1.1'
Lint/NestedMethodDefinition:
Description: 'Do not use nested method definitions.'
StyleGuide: '#no-nested-methods'
Enabled: true
AllowedMethods: []
AllowedPatterns: []
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/NoReturnInBeginEndBlocks:
Description: 'Do not `return` inside `begin..end` blocks in assignment contexts.'
Enabled: pending
VersionAdded: '1.2'
Lint/NonAtomicFileOperation:
Description: Checks for non-atomic file operations.
StyleGuide: '#atomic-file-operations'
Enabled: pending
VersionAdded: '1.31'
SafeAutoCorrect: false
Lint/NonDeterministicRequireOrder:
Description: 'Always sort arrays returned by Dir.glob when requiring files.'
Enabled: true
VersionAdded: '0.78'
Safe: false
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'
VersionChanged: '1.1'
SafeAutoCorrect: false
AllowedMethods: []
AllowedPatterns: []
IgnoredClasses:
- Time
- DateTime
Lint/NumberedParameterAssignment:
Description: 'Checks for uses of numbered parameter assignment.'
Enabled: pending
VersionAdded: '1.9'
Lint/OrAssignmentToConstant:
Description: 'Checks unintended or-assignment to constant.'
Enabled: pending
Safe: false
VersionAdded: '1.9'
Lint/OrderedMagicComments:
Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
Enabled: true
SafeAutoCorrect: false
VersionAdded: '0.53'
VersionChanged: '1.37'
Lint/OutOfRangeRegexpRef:
Description: 'Checks for out of range reference for Regexp because it always returns nil.'
Enabled: true
Safe: false
VersionAdded: '0.89'
Lint/ParenthesesAsGroupedExpression:
Description: >-
Checks for method calls with a space before the opening
parenthesis.
StyleGuide: '#parens-no-spaces'
Enabled: true
VersionAdded: '0.12'
VersionChanged: '0.83'
Lint/PercentStringArray:
Description: >-
Checks for unwanted commas and quotes in %w/%W literals.
Enabled: true
Safe: false
VersionAdded: '0.41'
Lint/PercentSymbolArray:
Description: >-
Checks for unwanted commas and colons in %i/%I literals.
Enabled: true
VersionAdded: '0.41'
Lint/RaiseException:
Description: Checks for `raise` or `fail` statements which are raising `Exception` class.
StyleGuide: '#raise-exception'
Enabled: true
Safe: false
VersionAdded: '0.81'
VersionChanged: '0.86'
AllowedImplicitNamespaces:
- 'Gem'
Lint/RandOne:
Description: >-
Checks for `rand(1)` calls. Such calls always return `0`
and most likely a mistake.
Enabled: true
VersionAdded: '0.36'
Lint/RedundantCopDisableDirective:
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.76'
Lint/RedundantCopEnableDirective:
Description: Checks for rubocop:enable comments that can be removed.
Enabled: true
VersionAdded: '0.76'
Lint/RedundantDirGlobSort:
Description: 'Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.'
Enabled: pending
VersionAdded: '1.8'
VersionChanged: '1.26'
SafeAutoCorrect: false
Lint/RedundantRequireStatement:
Description: 'Checks for unnecessary `require` statement.'
Enabled: true
VersionAdded: '0.76'
Lint/RedundantSafeNavigation:
Description: 'Checks for redundant safe navigation calls.'
Enabled: true
VersionAdded: '0.93'
AllowedMethods:
- instance_of?
- kind_of?
- is_a?
- eql?
- respond_to?
- equal?
Safe: false
Lint/RedundantSplatExpansion:
Description: 'Checks for splat unnecessarily being called on literals.'
Enabled: true
VersionAdded: '0.76'
VersionChanged: '1.7'
AllowPercentLiteralArrayArgument: true
Lint/RedundantStringCoercion:
Description: 'Checks for Object#to_s usage in string interpolation.'
StyleGuide: '#no-to-s'
Enabled: true
VersionAdded: '0.19'
VersionChanged: '0.77'
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/RefinementImportMethods:
Description: 'Use `Refinement#import_methods` when using `include` or `prepend` in `refine` block.'
Enabled: pending
SafeAutoCorrect: false
VersionAdded: '1.27'
Lint/RegexpAsCondition:
Description: >-
Do not use regexp literal as a condition.
The regexp literal matches `$_` implicitly.
Enabled: true
VersionAdded: '0.51'
VersionChanged: '0.86'
Lint/RequireParentheses:
Description: >-
Use parentheses in the method call to avoid confusion
about precedence.
Enabled: true
VersionAdded: '0.18'
Lint/RequireRangeParentheses:
Description: 'Checks that a range literal is enclosed in parentheses when the end of the range is at a line break.'
Enabled: pending
VersionAdded: '1.32'
Lint/RequireRelativeSelfPath:
Description: 'Checks for uses a file requiring itself with `require_relative`.'
Enabled: pending
VersionAdded: '1.22'
Lint/RescueException:
Description: 'Avoid rescuing the Exception class.'
StyleGuide: '#no-blind-rescues'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.27'
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.77'
AllowedMethods:
- present?
- blank?
- presence
- try
- try!
- in?
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'
VersionChanged: '0.77'
AllowedMethods:
- present?
- blank?
- presence
- try
- try!
Lint/SafeNavigationWithEmpty:
Description: 'Avoid `foo&.empty?` in conditionals.'
Enabled: true
VersionAdded: '0.62'
VersionChanged: '0.87'
Lint/ScriptPermission:
Description: 'Grant script file execute permission.'
Enabled: true
VersionAdded: '0.49'
VersionChanged: '0.50'
Lint/SelfAssignment:
Description: 'Checks for self-assignments.'
Enabled: true
VersionAdded: '0.89'
Lint/SendWithMixinArgument:
Description: 'Checks for `send` method when using mixin.'
Enabled: true
VersionAdded: '0.75'
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/StructNewOverride:
Description: 'Disallow overriding the `Struct` built-in methods via `Struct.new`.'
Enabled: true
VersionAdded: '0.81'
Lint/SuppressedException:
Description: "Don't suppress exceptions."
StyleGuide: '#dont-hide-exceptions'
Enabled: true
AllowComments: true
AllowNil: true
VersionAdded: '0.9'
VersionChanged: '1.12'
Lint/SymbolConversion:
Description: 'Checks for unnecessary symbol conversions.'
Enabled: pending
VersionAdded: '1.9'
VersionChanged: '1.16'
EnforcedStyle: strict
SupportedStyles:
- strict
- consistent
Lint/Syntax:
Description: 'Checks for syntax errors.'
Enabled: true
VersionAdded: '0.9'
Lint/ToEnumArguments:
Description: 'Ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.'
Enabled: pending
VersionAdded: '1.1'
Lint/ToJSON:
Description: 'Ensure #to_json includes an optional argument.'
Enabled: true
VersionAdded: '0.66'
Lint/TopLevelReturnWithArgument:
Description: 'Detects top level return statements with argument.'
Enabled: true
VersionAdded: '0.89'
Lint/TrailingCommaInAttributeDeclaration:
Description: 'Checks for trailing commas in attribute declarations.'
Enabled: true
VersionAdded: '0.90'
Lint/TripleQuotes:
Description: 'Checks for useless triple quote constructs.'
Enabled: pending
VersionAdded: '1.9'
Lint/UnderscorePrefixedVariableName:
Description: 'Do not use prefix `_` for a variable that is used.'
Enabled: true
VersionAdded: '0.21'
AllowKeywordBlockArguments: false
Lint/UnexpectedBlockArity:
Description: 'Looks for blocks that have fewer arguments that the calling method expects.'
Enabled: pending
Safe: false
VersionAdded: '1.5'
Methods:
chunk_while: 2
each_with_index: 2
each_with_object: 2
inject: 2
max: 2
min: 2
minmax: 2
reduce: 2
slice_when: 2
sort: 2
Lint/UnifiedInteger:
Description: 'Use Integer instead of Fixnum or Bignum.'
Enabled: true
VersionAdded: '0.43'
Lint/UnmodifiedReduceAccumulator:
Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration.
Enabled: pending
VersionAdded: '1.1'
VersionChanged: '1.5'
Lint/UnreachableCode:
Description: 'Unreachable code.'
Enabled: true
VersionAdded: '0.9'
Lint/UnreachableLoop:
Description: 'Checks for loops that will have at most one iteration.'
Enabled: true
VersionAdded: '0.89'
VersionChanged: '1.7'
AllowedPatterns:
# RSpec uses `times` in its message expectations
# eg. `exactly(2).times`
- !ruby/regexp /(exactly|at_least|at_most)\(\d+\)\.times/
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.81'
AllowUnusedKeywordArguments: false
IgnoreEmptyMethods: true
IgnoreNotImplementedMethods: 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.83'
ContextCreatingMethods: []
MethodCreatingMethods: []
Lint/UselessAssignment:
Description: 'Checks for useless assignment to a local variable.'
StyleGuide: '#underscore-unused-vars'
Enabled: true
VersionAdded: '0.11'
Lint/UselessElseWithoutRescue:
Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
Enabled: true
VersionAdded: '0.17'
VersionChanged: '1.31'
Lint/UselessMethodDefinition:
Description: 'Checks for useless method definitions.'
Enabled: true
VersionAdded: '0.90'
VersionChanged: '0.91'
Safe: false
Lint/UselessRescue:
Description: 'Checks for useless `rescue`s.'
Enabled: pending
VersionAdded: '1.43'
Lint/UselessRuby2Keywords:
Description: 'Finds unnecessary uses of `ruby2_keywords`.'
Enabled: pending
VersionAdded: '1.23'
Lint/UselessSetterCall:
Description: 'Checks for useless setter call to a local variable.'
Enabled: true
SafeAutoCorrect: false
VersionAdded: '0.13'
VersionChanged: '1.2'
Safe: false
Lint/UselessTimes:
Description: 'Checks for useless `Integer#times` calls.'
Enabled: true
VersionAdded: '0.91'
Safe: false
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
- https://en.wikipedia.org/wiki/ABC_Software_Metric
Enabled: true
VersionAdded: '0.27'
VersionChanged: '1.5'
# The ABC size is a calculated magnitude, so this number can be an Integer or
# a Float.
AllowedMethods: []
AllowedPatterns: []
CountRepeatedAttributes: true
Max: 17
Metrics/BlockLength:
Description: 'Avoid long blocks with many lines.'
Enabled: true
VersionAdded: '0.44'
VersionChanged: '1.5'
CountComments: false # count full line comments?
Max: 25
CountAsOne: []
AllowedMethods:
# By default, exclude the `#refine` method, as it tends to have larger
# associated blocks.
- refine
AllowedPatterns: []
Exclude:
- '**/*.gemspec'
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'
VersionChanged: '0.87'
CountComments: false # count full line comments?
Max: 100
CountAsOne: []
Metrics/CollectionLiteralLength:
Description: 'Checks for `Array` or `Hash` literals with many entries.'
Enabled: pending
VersionAdded: '1.47'
LengthThreshold: 250
# 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'
VersionChanged: '0.81'
AllowedMethods: []
AllowedPatterns: []
Max: 7
Metrics/MethodLength:
Description: 'Avoid methods longer than 10 lines of code.'
StyleGuide: '#short-methods'
Enabled: true
VersionAdded: '0.25'
VersionChanged: '1.5'
CountComments: false # count full line comments?
Max: 10
CountAsOne: []
AllowedMethods: []
AllowedPatterns: []
Metrics/ModuleLength:
Description: 'Avoid modules longer than 100 lines of code.'
Enabled: true
VersionAdded: '0.31'
VersionChanged: '0.87'
CountComments: false # count full line comments?
Max: 100
CountAsOne: []
Metrics/ParameterLists:
Description: 'Avoid parameter lists longer than three or four parameters.'
StyleGuide: '#too-many-params'
Enabled: true
VersionAdded: '0.25'
VersionChanged: '1.5'
Max: 5
CountKeywordArgs: true
MaxOptionalParameters: 3
Metrics/PerceivedComplexity:
Description: >-
A complexity metric geared towards measuring complexity for a
human reader.
Enabled: true
VersionAdded: '0.25'
VersionChanged: '0.81'
AllowedMethods: []
AllowedPatterns: []
Max: 8
################## Migration #############################
Migration/DepartmentName:
Description: >-
Check that cop names in rubocop:disable (etc) comments are
given with department name.
Enabled: true
VersionAdded: '0.75'
#################### 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 and constants.'
StyleGuide: '#english-identifiers'
Enabled: true
VersionAdded: '0.50'
VersionChanged: '0.87'
AsciiConstants: true
Naming/BinaryOperatorParameterName:
Description: 'When defining binary operators, name the argument other.'
StyleGuide: '#other-arg'
Enabled: true
VersionAdded: '0.50'
VersionChanged: '1.2'
Naming/BlockForwarding:
Description: 'Use anonymous block forwarding.'
StyleGuide: '#block-forwarding'
Enabled: pending
VersionAdded: '1.24'
EnforcedStyle: anonymous
SupportedStyles:
- anonymous
- explicit
BlockForwardingName: block
Naming/BlockParameterName:
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'
VersionChanged: '0.77'
# Parameter names may be equal to or greater than this value
MinNameLength: 1
AllowNamesEndingInNumbers: true
# Allowed names that will not register an offense
AllowedNames: []
# Forbidden names that will register an offense
ForbiddenNames: []
Naming/ClassAndModuleCamelCase:
Description: 'Use CamelCase for classes and modules.'
StyleGuide: '#camelcase-classes'
Enabled: true
VersionAdded: '0.50'
VersionChanged: '0.85'
# Allowed class/module names can be specified here.
# These can be full or part of the name.
AllowedNames:
- module_parent
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'
VersionChanged: '1.23'
# Camel case file names listed in `AllCops:Include` and all file names listed
# in `AllCops:Exclude` are excluded by default. Add extra excludes here.
Exclude: []
# When `true`, requires that each source file should define a class or module
# with a name which matches the file name (converted to ... case).
# It further expects it to be nested inside modules which match the names
# of subdirectories in its path.
ExpectMatchingDefinition: false
# When `false`, changes the behavior of ExpectMatchingDefinition to match only
# whether each source file's class or module name matches the file name --
# not whether the nested module hierarchy matches the subdirectory path.
CheckDefinitionPathHierarchy: true
# paths that are considered root directories, for example "lib" in most ruby projects
# or "app/models" in rails projects
CheckDefinitionPathHierarchyRoots:
- lib
- spec
- test
- src
# If non-`nil`, expect all source file names to match the following regex.
# Only the file name itself is matched, not the entire file path.
# Use anchors as necessary if you want to match the entire name rather than
# just a part of it.
Regex: ~
# With `IgnoreExecutableScripts` set to `true`, this cop does not
# report offending filenames for executable scripts (i.e. source
# files with a shebang in the first line).
IgnoreExecutableScripts: true
AllowedAcronyms:
- CLI
- DSL
- ACL
- API
- ASCII
- CPU
- CSS
- DNS
- EOF
- GUID
- HTML
- HTTP
- HTTPS
- ID
- IP
- JSON
- LHS
- QPS
- RAM
- RHS
- RPC
- SLA
- SMTP
- SQL
- SSH
- TCP
- TLS
- TTL
- UDP
- UI
- UID
- UUID
- URI
- URL
- UTF8
- VM
- XML
- XMPP
- XSRF
- XSS
Naming/HeredocDelimiterCase:
Description: 'Use configured case for heredoc delimiters.'
StyleGuide: '#heredoc-delimiters'
Enabled: true
VersionAdded: '0.50'
VersionChanged: '1.2'
EnforcedStyle: uppercase
SupportedStyles:
- lowercase
- uppercase
Naming/HeredocDelimiterNaming:
Description: 'Use descriptive heredoc delimiters.'
StyleGuide: '#heredoc-delimiters'
Enabled: true
VersionAdded: '0.50'
ForbiddenDelimiters:
- !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/i'
Naming/InclusiveLanguage:
Description: 'Recommend the use of inclusive language instead of problematic terms.'
Enabled: false
VersionAdded: '1.18'
VersionChanged: '<<next>>'
CheckIdentifiers: true
CheckConstants: true
CheckVariables: true
CheckStrings: false
CheckSymbols: true
CheckComments: true
CheckFilepaths: true
FlaggedTerms:
whitelist:
Regex: !ruby/regexp '/white[-_\s]?list/'
Suggestions:
- allowlist
- permit
blacklist:
Regex: !ruby/regexp '/black[-_\s]?list/'
Suggestions:
- denylist
- block
slave:
WholeWord: true
Suggestions: ['replica', 'secondary', 'follower']
Naming/MemoizedInstanceVariableName:
Description: >-
Memoized method name should match memo instance variable name.
Enabled: true
VersionAdded: '0.53'
VersionChanged: '1.2'
EnforcedStyleForLeadingUnderscores: disallowed
SupportedStylesForLeadingUnderscores:
- disallowed
- required
- optional
Safe: false
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
# Method names matching patterns are always allowed.
#
# AllowedPatterns:
# - '\A\s*onSelectionBulkChange\s*'
# - '\A\s*onSelectionCleared\s*'
#
AllowedPatterns: []
Naming/MethodParameterName:
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.77'
# Parameter names may be equal to or greater than this value
MinNameLength: 3
AllowNamesEndingInNumbers: true
# Allowed names that will not register an offense
AllowedNames:
- as
- at
- by
- cc
- db
- id
- if
- in
- io
- ip
- of
- 'on'
- os
- pp
- to
# Forbidden names that will register an offense
ForbiddenNames: []
Naming/PredicateName:
Description: 'Check the names of predicate methods.'
StyleGuide: '#bool-methods-qmark'
Enabled: true
VersionAdded: '0.50'
VersionChanged: '0.77'
# Predicate name prefixes.
NamePrefix:
- is_
- has_
- have_
# Predicate name prefixes that should be removed.
ForbiddenPrefixes:
- is_
- has_
- have_
# Predicate names which, despite having a forbidden prefix, or no `?`,
# should still be accepted
AllowedMethods:
- is_a?
# Method definition macros for dynamically generated methods.
MethodDefinitionMacros:
- define_method
- define_singleton_method
# Exclude Rspec specs because there is a strong convention to write spec
# helpers in the form of `have_something` or `be_something`.
Exclude:
- 'spec/**/*'
Naming/RescuedExceptionsVariableName:
Description: 'Use consistent rescued exceptions variables naming.'
Enabled: true
VersionAdded: '0.67'
VersionChanged: '0.68'
PreferredName: e
Naming/VariableName:
Description: 'Use the configured style when naming variables.'
StyleGuide: '#snake-case-symbols-methods-vars'
Enabled: true
VersionAdded: '0.50'
VersionChanged: '1.8'
EnforcedStyle: snake_case
SupportedStyles:
- snake_case
- camelCase
AllowedIdentifiers: []
AllowedPatterns: []
Naming/VariableNumber:
Description: 'Use the configured style when numbering symbols, methods and variables.'
StyleGuide: '#snake-case-symbols-methods-vars-with-numbers'
Enabled: true
VersionAdded: '0.50'
VersionChanged: '1.4'
EnforcedStyle: normalcase
SupportedStyles:
- snake_case
- normalcase
- non_integer
CheckMethodNames: true
CheckSymbols: true
AllowedIdentifiers:
- capture3 # Open3.capture3
- iso8601 # Time#iso8601
- rfc1123_date # CGI.rfc1123_date
- rfc822 # Time#rfc822
- rfc2822 # Time#rfc2822
- rfc3339 # DateTime.rfc3339
- x86_64 # Allowed by default as an underscore separated CPU architecture name
AllowedPatterns: []
#################### Security ##############################
Security/CompoundHash:
Description: 'When overwriting Object#hash to combine values, prefer delegating to Array#hash over writing a custom implementation.'
Enabled: pending
VersionAdded: '1.28'
Security/Eval:
Description: 'The use of eval represents a serious security risk.'
Enabled: true
VersionAdded: '0.47'
Security/IoMethods:
Description: >-
Checks for the first argument to `IO.read`, `IO.binread`, `IO.write`, `IO.binwrite`,
`IO.foreach`, and `IO.readlines`.
Enabled: pending
Safe: false
VersionAdded: '1.22'
Security/JSONLoad:
Description: >-
Prefer usage of `JSON.parse` over `JSON.load` due to potential
security issues. See reference for more information.
Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/json/rdoc/JSON.html#method-i-load'
Enabled: true
VersionAdded: '0.43'
VersionChanged: '1.22'
# Autocorrect here will change to a method that may cause crashes depending
# on the value of the argument.
SafeAutoCorrect: false
Security/MarshalLoad:
Description: >-
Avoid using of `Marshal.load` or `Marshal.restore` due to potential
security issues. See reference for more information.
Reference: 'https://ruby-doc.org/core-2.7.0/Marshal.html#module-Marshal-label-Security+considerations'
Enabled: true
VersionAdded: '0.47'
Security/Open:
Description: 'The use of `Kernel#open` and `URI.open` represent a serious security risk.'
Enabled: true
VersionAdded: '0.53'
VersionChanged: '1.0'
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.7.0/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'
VersionChanged: '0.81'
EnforcedStyle: group
SupportedStyles:
- inline
- group
AllowModifiersOnSymbols: true
SafeAutoCorrect: false
Style/AccessorGrouping:
Description: 'Checks for grouping of accessors in `class` and `module` bodies.'
Enabled: true
VersionAdded: '0.87'
EnforcedStyle: grouped
SupportedStyles:
# separated: each accessor goes in a separate statement.
# grouped: accessors are grouped into a single statement.
- separated
- grouped
Style/Alias:
Description: 'Use alias instead of alias_method.'
StyleGuide: '#alias-method-lexically'
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
SafeAutoCorrect: false
VersionAdded: '0.9'
VersionChanged: '1.21'
# Whether `and` and `or` are banned only in conditionals (conditionals)
# or completely (always).
EnforcedStyle: conditionals
SupportedStyles:
- always
- conditionals
Style/ArgumentsForwarding:
Description: 'Use arguments forwarding.'
StyleGuide: '#arguments-forwarding'
Enabled: pending
AllowOnlyRestArgument: true
VersionAdded: '1.1'
Style/ArrayCoercion:
Description: >-
Use Array() instead of explicit Array check or [*var], when dealing
with a variable you want to treat as an Array, but you're not certain it's an array.
StyleGuide: '#array-coercion'
Safe: false
Enabled: false
VersionAdded: '0.88'
Style/ArrayIntersect:
Description: 'Use `array1.intersect?(array2)` instead of `(array1 & array2).any?`.'
Enabled: 'pending'
Safe: false
VersionAdded: '1.40'
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: false
VersionAdded: '0.9'
VersionChanged: '1.21'
AllowedChars:
- ©
Style/Attr:
Description: 'Checks for uses of Module#attr.'
StyleGuide: '#attr'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.12'
Style/AutoResourceCleanup:
Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
Enabled: false
VersionAdded: '0.30'
Style/BarePercentLiterals:
Description: 'Checks if usage of %() or %Q() matches configuration.'
StyleGuide: '#percent-q-shorthand'
Enabled: true
VersionAdded: '0.25'
EnforcedStyle: bare_percent
SupportedStyles:
- percent_q
- bare_percent
Style/BeginBlock:
Description: 'Avoid the use of BEGIN blocks.'
StyleGuide: '#no-BEGIN-blocks'
Enabled: true
VersionAdded: '0.9'
Style/BisectedAttrAccessor:
Description: >-
Checks for places where `attr_reader` and `attr_writer`
for the same method can be combined into single `attr_accessor`.
Enabled: true
VersionAdded: '0.87'
Style/BlockComments:
Description: 'Do not use block comments.'
StyleGuide: '#no-block-comments'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.23'
Style/BlockDelimiters:
Description: >-
Avoid using {...} for multi-line blocks (multiline chaining is
always ugly).
Prefer {...} over do...end for single-line blocks.
StyleGuide: '#single-line-blocks'
Enabled: true
VersionAdded: '0.30'
VersionChanged: '0.35'
EnforcedStyle: line_count_based
SupportedStyles:
# The `line_count_based` style enforces braces around single line blocks and
# do..end around multi-line blocks.
- line_count_based
# The `semantic` style enforces braces around functional blocks, where the
# primary purpose of the block is to return a value and do..end for
# multi-line procedural blocks, where the primary purpose of the block is
# its side-effects. Single-line procedural blocks may only use do-end,
# unless AllowBracesOnProceduralOneLiners has a truthy value (see below).
#
# This looks at the usage of a block's method to determine its type (e.g. is
# the result of a `map` assigned to a variable or passed to another
# method) but exceptions are permitted in the `ProceduralMethods`,
# `FunctionalMethods` and `AllowedMethods` sections below.
- semantic
# The `braces_for_chaining` style enforces braces around single line blocks
# and do..end around multi-line blocks, except for multi-line blocks whose
# return value is being chained with another method (in which case braces
# are enforced).
- braces_for_chaining
# The `always_braces` style always enforces braces.
- always_braces
ProceduralMethods:
# Methods that are known to be procedural in nature but look functional from
# their usage, e.g.
#
# time = Benchmark.realtime do
# foo.bar
# end
#
# Here, the return value of the block is discarded but the return value of
# `Benchmark.realtime` is used.
- benchmark
- bm
- bmbm
- create
- each_with_object
- measure
- new
- realtime
- tap
- with_object
FunctionalMethods:
# Methods that are known to be functional in nature but look procedural from
# their usage, e.g.
#
# let(:foo) { Foo.new }
#
# Here, the return value of `Foo.new` is used to define a `foo` helper but
# doesn't appear to be used from the return value of `let`.
- let
- let!
- subject
- watch
AllowedMethods:
# Methods that can be either procedural or functional and cannot be
# categorised from their usage alone, e.g.
#
# foo = lambda do |x|
# puts "Hello, #{x}"
# end
#
# foo = lambda do |x|
# x * 100
# end
#
# Here, it is impossible to tell from the return value of `lambda` whether
# the inner block's return value is significant.
- lambda
- proc
- it
AllowedPatterns: []
# The AllowBracesOnProceduralOneLiners option is ignored unless the
# EnforcedStyle is set to `semantic`. If so:
#
# If AllowBracesOnProceduralOneLiners is unspecified, or set to any
# falsey value, then semantic purity is maintained, so one-line
# procedural blocks must use do-end, not braces.
#
# # bad
# collection.each { |element| puts element }
#
# # good
# collection.each do |element| puts element end
#
# If AllowBracesOnProceduralOneLiners is set to any truthy value,
# then one-line procedural blocks may use either style.
#
# # good
# collection.each { |element| puts element }
#
# # also good
# collection.each do |element| puts element end
AllowBracesOnProceduralOneLiners: false
# The BracesRequiredMethods overrides all other configurations except
# AllowedMethods. It can be used to enforce that all blocks for specific
# methods use braces. For example, you can use this to enforce Sorbet
# signatures use braces even when the rest of your codebase enforces
# the `line_count_based` style.
BracesRequiredMethods: []
Style/CaseEquality:
Description: 'Avoid explicit use of the case equality operator(===).'
StyleGuide: '#no-case-equality'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.89'
# If `AllowOnConstant` option is enabled, the cop will ignore violations when the receiver of
# the case equality operator is a constant.
#
# # bad
# /string/ === "string"
#
# # good
# String === "string"
AllowOnConstant: false
# If `AllowOnSelfClass` option is enabled, the cop will ignore violations when the receiver of
# the case equality operator is `self.class`.
#
# # bad
# some_class === object
#
# # good
# self.class === object
AllowOnSelfClass: false
Style/CaseLikeIf:
Description: 'Identifies places where `if-elsif` constructions can be replaced with `case-when`.'
StyleGuide: '#case-vs-if-else'
Enabled: true
Safe: false
VersionAdded: '0.88'
VersionChanged: '1.48'
# `MinBranchesCount` defines the number of branches `if` needs to have to trigger this cop.
MinBranchesCount: 3
Style/CharacterLiteral:
Description: 'Checks for uses of character literals.'
StyleGuide: '#no-character-literals'
Enabled: true
VersionAdded: '0.9'
Style/ClassAndModuleChildren:
Description: 'Checks style of children classes and modules.'
StyleGuide: '#namespace-definition'
# Moving from compact to nested children requires knowledge of whether the
# outer parent is a module or a class. Moving from nested to compact requires
# verification that the outer parent is defined elsewhere. RuboCop does not
# have the knowledge to perform either operation safely and thus requires
# manual oversight.
SafeAutoCorrect: false
Enabled: true
VersionAdded: '0.19'
#
# Basically there are two different styles:
#
# `nested` - have each child on a separate line
# class Foo
# class Bar
# end
# end
#
# `compact` - combine definitions as much as possible
# class Foo::Bar
# end
#
# The compact style is only forced, for classes or modules with one child.
EnforcedStyle: nested
SupportedStyles:
- nested
- compact
Style/ClassCheck:
Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.'
StyleGuide: '#is-a-vs-kind-of'
Enabled: true
VersionAdded: '0.24'
EnforcedStyle: is_a?
SupportedStyles:
- is_a?
- kind_of?
Style/ClassEqualityComparison:
Description: 'Enforces the use of `Object#instance_of?` instead of class comparison for equality.'
StyleGuide: '#instance-of-vs-class-comparison'
Enabled: true
VersionAdded: '0.93'
AllowedMethods:
- ==
- equal?
- eql?
AllowedPatterns: []
Style/ClassMethods:
Description: 'Use self when defining module/class methods.'
StyleGuide: '#def-self-class-methods'
Enabled: true
VersionAdded: '0.9'
VersionChanged: '0.20'
Style/ClassMethodsDefinitions:
Description: 'Enforces using `def self.method_name` or `class << self` to define class methods.'
StyleGuide: '#def-self-class-methods'
Enabled: false
VersionAdded: '0.89'
EnforcedStyle: def_self
SupportedStyles:
- def_self
- self_class
Style/ClassVars:
Description: 'Avoid the use of class variables.'
StyleGuide: '#no-class-vars'
Enabled: true
VersionAdded: '0.13'
Style/CollectionCompact:
Description: 'Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.'
Enabled: pending
Safe: false
VersionAdded: '1.2'
VersionChanged: '1.3'
# Align with the style guide.
Style/CollectionMethods:
Description: 'Preferred collection methods.'
StyleGuide: '#map-find-select-reduce-include-size'
Enabled: false
VersionAdded: '0.9'
VersionChanged: '1.7'
Safe: false
# Mapping from undesired method to desired method
# e.g. to use `detect` over `find`:
#
# Style/CollectionMethods:
# PreferredMethods:
# find: detect
PreferredMethods:
collect: 'map'
collect!: 'map!'
inject: 'reduce'
detect: 'find'
find_all: 'select'
member?: 'include?'
# Methods in this array accept a final symbol as an implicit block
# eg. `inject(:+)`
MethodsAcceptingSymbol:
- inject
- reduce
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/CombinableLoops:
Description: >-
Checks for places where multiple consecutive loops over the same data
can be combined into a single loop.
Enabled: true
Safe: false
VersionAdded: '0.90'
Style/CommandLiteral:
Description: 'Use `` or %x around command literals.'
StyleGuide: '#percent-x'
Enabled: true
VersionAdded: '0.30'
EnforcedStyle: backticks
# backticks: Always use backticks.
# percent_x: Always use `%x`.
# mixed: Use backticks on single-line commands, and `%x` on multi-line commands.
SupportedStyles:
- backticks
- percent_x
- mixed
# If `false`, the cop will always recommend using `%x` if one or more backticks
# are found in the command string.
AllowInnerBackticks: false
# Checks formatting of special comments
Style/CommentAnnotation:
Description: >-
Checks formatting of special comments
(TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE).
StyleGuide: '#annotate-keywords'
Enabled: true
VersionAdded: '0.10'
VersionChanged: '1.20'
Keywords:
- TODO
- FIXME
- OPTIMIZE
- HACK
- REVIEW
- NOTE
RequireColon: true
Style/CommentedKeyword:
Description: 'Do not place comments on the same line as certain keywords.'
Enabled: true
SafeAutoCorrect: false
VersionAdded: '0.51'
VersionChanged: '1.19'
Style/ComparableClamp:
Description: 'Enforces the use of `Comparable#clamp` instead of comparison by minimum and maximum.'
Enabled: pending
VersionAdded: '1.44'
Style/ConcatArrayLiterals:
Description: 'Enforces the use of `Array#push(item)` instead of `Array#concat([item])` to avoid redundant array literals.'
Enabled: pending
Safe: false
VersionAdded: '1.41'
Style/ConditionalAssignment:
Description: >-
Use the return value of `if` and `case` statements for
assignment to a variable and variable comparison instead
of assigning that variable inside of each branch.
Enabled: true
VersionAdded: '0.36'
VersionChanged: '0.47'
EnforcedStyle: assign_to_condition
SupportedStyles:
- assign_to_condition
- assign_inside_condition
# When configured to `assign_to_condition`, `SingleLineConditionsOnly`
# will only register an offense when all branches of a condition are
# a single line.
# When configured to `assign_inside_condition`, `SingleLineConditionsOnly`
# will only register an offense for assignment to a condition that has
# at least one multiline branch.
SingleLineConditionsOnly: true
IncludeTernaryExpressions: true
Style/ConstantVisibility:
Description: >-
Check that class- and module constants have