.rubocop.yml in danger-pmd-1.0.1 vs .rubocop.yml in danger-pmd-1.0.2
- old
+ new
@@ -1,157 +1,4835 @@
-# Defaults can be found here: https://github.com/bbatsov/rubocop/blob/master/config/default.yml
+# Common configuration.
-# If you don't like these settings, just delete this file :)
-
AllCops:
- TargetRubyVersion: 2.4
+ 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
+ # 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: enable
+ # 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 specificed as a float (i.e. 2.5); the teeny version of Ruby
+ # should not be included. If the project specifies a Ruby version in the
+ # .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.4).
+ 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]
-Style/StringLiterals:
- EnforcedStyle: double_quotes
+#################### Bundler ###############################
+
+Bundler/DuplicatedGem:
+ Description: 'Checks for duplicate gem entries in Gemfile.'
Enabled: true
+ VersionAdded: '0.46'
+ Include:
+ - '**/*.gemfile'
+ - '**/Gemfile'
+ - '**/gems.rb'
-# kind_of? is a good way to check a type
-Style/ClassCheck:
- EnforcedStyle: kind_of?
+Bundler/GemComment:
+ Description: 'Add a comment describing each gem.'
+ Enabled: false
+ VersionAdded: '0.59'
+ VersionChanged: '0.85'
+ Include:
+ - '**/*.gemfile'
+ - '**/Gemfile'
+ - '**/gems.rb'
+ IgnoredGems: []
+ OnlyFor: []
-# It's better to be more explicit about the type
-Style/BracesAroundHashParameters:
+Bundler/InsecureProtocolSource:
+ Description: >-
+ The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated
+ because HTTP requests are insecure. Please change your source to
+ 'https://rubygems.org' if possible, or 'http://rubygems.org' if not.
+ Enabled: true
+ VersionAdded: '0.50'
+ Include:
+ - '**/*.gemfile'
+ - '**/Gemfile'
+ - '**/gems.rb'
+
+Bundler/OrderedGems:
+ Description: >-
+ Gems within groups in the Gemfile should be alphabetically sorted.
+ Enabled: true
+ VersionAdded: '0.46'
+ VersionChanged: '0.47'
+ TreatCommentsAsGroupSeparators: true
+ # 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/DateAssignment:
+ Description: 'Checks that `date =` is not used in gemspec file, it is set automatically when the gem is packaged.'
+ Enabled: pending
+ VersionAdded: '1.10'
+ Include:
+ - '**/*.gemspec'
+
+Gemspec/DuplicatedAssignment:
+ Description: 'An attribute assignment method calls should be listed only once in a gemspec.'
+ Enabled: true
+ VersionAdded: '0.52'
+ Include:
+ - '**/*.gemspec'
+
+Gemspec/OrderedDependencies:
+ Description: >-
+ Dependencies in the gemspec should be alphabetically sorted.
+ Enabled: true
+ VersionAdded: '0.51'
+ TreatCommentsAsGroupSeparators: true
+ # By default, "-" and "_" are ignored for order purposes.
+ # This can be overridden by setting this parameter to true.
+ ConsiderPunctuation: false
+ Include:
+ - '**/*.gemspec'
+
+Gemspec/RequiredRubyVersion:
+ Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.'
+ Enabled: true
+ VersionAdded: '0.52'
+ VersionChanged: '0.89'
+ Include:
+ - '**/*.gemspec'
+
+Gemspec/RubyVersionGlobalsUsage:
+ Description: Checks usage of RUBY_VERSION in gemspec.
+ StyleGuide: '#no-ruby-version-in-the-gemspec'
+ Enabled: true
+ VersionAdded: '0.72'
+ 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: '0.77'
+ # 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/[else/]end.'
+ StyleGuide: '#indent-when-to-case'
+ Enabled: true
+ VersionAdded: '0.49'
+ EnforcedStyle: case
+ SupportedStyles:
+ - case
+ - end
+ IndentOneStep: false
+ # By default, the indentation width from `Layout/IndentationWidth` is used.
+ # But it can be overridden by setting this parameter.
+ # This only matters if `IndentOneStep` is `true`
+ IndentationWidth: ~
+
+Layout/ClassStructure:
+ Description: 'Enforces a configured order of definitions within a class body.'
+ StyleGuide: '#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
-# specs sometimes have useless assignments, which is fine
-Lint/UselessAssignment:
- Exclude:
- - '**/spec/**/*'
+Layout/ClosingHeredocIndentation:
+ Description: 'Checks the indentation of here document closings.'
+ Enabled: true
+ VersionAdded: '0.57'
-# We could potentially enable the 2 below:
+Layout/ClosingParenthesisIndentation:
+ Description: 'Checks the indentation of hanging closing parentheses.'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/CommentIndentation:
+ Description: 'Indentation of comments.'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/ConditionPosition:
+ Description: >-
+ Checks for condition placed in a confusing position relative to
+ the keyword.
+ StyleGuide: '#same-line-condition'
+ Enabled: true
+ VersionAdded: '0.53'
+ 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.7'
+ EmptyLineBetweenMethodDefs: true
+ EmptyLineBetweenClassDefs: true
+ EmptyLineBetweenModuleDefs: true
+ # If `true`, this parameter means that single line method definitions don't
+ # need an empty line between them.
+ AllowAdjacentOneLineDefs: false
+ # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2]
+ NumberOfEmptyLines: 1
+
+Layout/EmptyLines:
+ Description: "Don't use several empty lines in a row."
+ StyleGuide: '#two-or-more-empty-lines'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/EmptyLinesAroundAccessModifier:
+ Description: "Keep blank lines around access modifiers."
+ StyleGuide: '#empty-lines-around-access-modifier'
+ Enabled: true
+ VersionAdded: '0.49'
+ 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'
+
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'
-Layout/HashAlignment:
+Layout/FirstMethodArgumentLineBreak:
+ Description: >-
+ Checks for a line break before the first argument in a
+ multi-line method call.
Enabled: false
+ VersionAdded: '0.49'
-# HoundCI doesn't like this rule
-Layout/DotPosition:
+Layout/FirstMethodParameterLineBreak:
+ Description: >-
+ Checks for a line break before the first parameter in a
+ multi-line method parameter definition.
Enabled: false
+ VersionAdded: '0.49'
-# We allow !! as it's an easy way to convert ot boolean
-Style/DoubleNegation:
+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: '0.77'
+ # 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'
-# Cop supports --auto-correct.
-Lint/UnusedBlockArgument:
+Layout/HeredocIndentation:
+ Description: 'This cop 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 auto-correction 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
+ IgnoredPatterns: []
+
+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/LineLength:
+ Description: 'Checks that line length does not exceed the configured limit.'
+ StyleGuide: '#max-line-length'
+ Enabled: true
+ VersionAdded: '0.25'
+ VersionChanged: '1.4'
+ AutoCorrect: true
+ Max: 160
+ # 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 IgnoredPatterns option is a list of !ruby/regexp and/or string
+ # elements. Strings will be converted to Regexp objects. A line that matches
+ # any regular expression listed in this option will be ignored by LineLength.
+ IgnoredPatterns: []
+
+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'
-# We want to allow class Fastlane::Class
-Style/ClassAndModuleChildren:
+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
-Metrics/AbcSize:
- Max: 60
+Layout/MultilineBlockLayout:
+ Description: 'Ensures newlines after multiline block do statements.'
+ Enabled: true
+ VersionAdded: '0.49'
-# The %w might be confusing for new users
-Style/WordArray:
- MinSize: 19
+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
-# raise and fail are both okay
-Style/SignalException:
+Layout/MultilineHashKeyLineBreaks:
+ Description: >-
+ Checks that each item in a multi-line hash literal
+ starts on a separate line.
Enabled: false
+ VersionAdded: '0.67'
-# Better too much 'return' than one missing
-Style/RedundantReturn:
+Layout/MultilineMethodArgumentLineBreaks:
+ Description: >-
+ Checks that each argument in a multi-line method call
+ starts on a separate line.
Enabled: false
+ VersionAdded: '0.67'
-# Having if in the same line might not always be good
-Style/IfUnlessModifier:
+Layout/MultilineMethodCallBraceLayout:
+ Description: >-
+ Checks that the closing brace in a method call is
+ either on the same line as the last method argument, or
+ a new line.
+ Enabled: true
+ VersionAdded: '0.49'
+ EnforcedStyle: symmetrical
+ SupportedStyles:
+ # symmetrical: closing brace is positioned in same way as opening brace
+ # new_line: closing brace is always on a new line
+ # same_line: closing brace is always on the same line as last argument
+ - symmetrical
+ - new_line
+ - same_line
+
+Layout/MultilineMethodCallIndentation:
+ Description: >-
+ Checks indentation of method calls with the dot operator
+ that span more than one line.
+ Enabled: true
+ VersionAdded: '0.49'
+ EnforcedStyle: aligned
+ SupportedStyles:
+ - aligned
+ - indented
+ - indented_relative_to_receiver
+ # By default, the indentation width from Layout/IndentationWidth is used
+ # But it can be overridden by setting this parameter
+ IndentationWidth: ~
+
+Layout/MultilineMethodDefinitionBraceLayout:
+ Description: >-
+ Checks that the closing brace in a method definition is
+ either on the same line as the last method parameter, or
+ a new line.
+ Enabled: true
+ VersionAdded: '0.49'
+ EnforcedStyle: symmetrical
+ SupportedStyles:
+ # symmetrical: closing brace is positioned in same way as opening brace
+ # new_line: closing brace is always on a new line
+ # same_line: closing brace is always on the same line as last parameter
+ - symmetrical
+ - new_line
+ - same_line
+
+Layout/MultilineOperationIndentation:
+ Description: >-
+ Checks indentation of binary operations that span more than
+ one line.
+ Enabled: true
+ VersionAdded: '0.49'
+ EnforcedStyle: aligned
+ SupportedStyles:
+ - aligned
+ - indented
+ # By default, the indentation width from `Layout/IndentationWidth` is used
+ # But it can be overridden by setting this parameter
+ IndentationWidth: ~
+
+Layout/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/RescueEnsureAlignment:
+ Description: 'Align rescues and ensures correctly.'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/SpaceAfterColon:
+ Description: 'Use spaces after colons.'
+ StyleGuide: '#spaces-operators'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/SpaceAfterComma:
+ Description: 'Use spaces after commas.'
+ StyleGuide: '#spaces-operators'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/SpaceAfterMethodName:
+ Description: >-
+ Do not put a space between a method name and the opening
+ parenthesis in a method definition.
+ StyleGuide: '#parens-no-spaces'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/SpaceAfterNot:
+ Description: Tracks redundant space after the ! operator.
+ StyleGuide: '#no-space-bang'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/SpaceAfterSemicolon:
+ Description: 'Use spaces after semicolons.'
+ StyleGuide: '#spaces-operators'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/SpaceAroundBlockParameters:
+ Description: 'Checks the spacing inside and after block parameters pipes.'
+ Enabled: true
+ VersionAdded: '0.49'
+ EnforcedStyleInsidePipes: no_space
+ SupportedStylesInsidePipes:
+ - space
+ - no_space
+
+Layout/SpaceAroundEqualsInParameterDefault:
+ Description: >-
+ Checks that the equals signs in parameter default assignments
+ have or don't have surrounding space depending on
+ configuration.
+ StyleGuide: '#spaces-around-equals'
+ Enabled: true
+ VersionAdded: '0.49'
+ EnforcedStyle: space
+ SupportedStyles:
+ - space
+ - no_space
+
+Layout/SpaceAroundKeyword:
+ Description: 'Use a space around keywords if appropriate.'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/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: '0.55'
+ EnforcedStyle: no_space
+ SupportedStyles:
+ - space
+ - no_space
+
+Layout/SpaceInsidePercentLiteralDelimiters:
+ Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/SpaceInsideRangeLiteral:
+ Description: 'No spaces inside range literals.'
+ StyleGuide: '#no-space-inside-range-literals'
+ Enabled: true
+ VersionAdded: '0.49'
+
+Layout/SpaceInsideReferenceBrackets:
+ Description: 'Checks the spacing inside referential brackets.'
+ Enabled: true
+ VersionAdded: '0.52'
+ VersionChanged: '0.53'
+ EnforcedStyle: no_space
+ SupportedStyles:
+ - space
+ - no_space
+ EnforcedStyleForEmptyBrackets: no_space
+ SupportedStylesForEmptyBrackets:
+ - space
+ - no_space
+
+Layout/SpaceInsideStringInterpolation:
+ Description: 'Checks for padding/surrounding spaces inside string interpolation.'
+ StyleGuide: '#string-interpolation'
+ Enabled: true
+ VersionAdded: '0.49'
+ EnforcedStyle: no_space
+ SupportedStyles:
+ - space
+ - no_space
+
+Layout/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'
+
+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/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
+ VersionAdded: '0.9'
+ AllowSafeAssignment: true
+
+Lint/BigDecimalNew:
+ Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.'
+ Enabled: true
+ VersionAdded: '0.53'
+
+Lint/BinaryOperatorWithIdenticalOperands:
+ Description: 'This cop 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
+ Safe: false
+ VersionAdded: '0.50'
+ VersionChanged: '0.83'
+
+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/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: []
-# and and or is okay
-Style/AndOr:
+Lint/Debugger:
+ Description: 'Check for debugger calls.'
+ Enabled: true
+ VersionAdded: '0.14'
+ VersionChanged: '1.10'
+ 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
+ Byebug:
+ - byebug
+ - remote_byebug
+ - Kernel.byebug
+ - Kernel.remote_byebug
+ Capybara:
+ - save_and_open_page
+ - save_and_open_screenshot
+ Pry:
+ - binding.pry
+ - binding.remote_pry
+ - binding.pry_remote
+ - Pry.rescue
+ Rails:
+ - debugger
+ - Kernel.debugger
+ 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'
+ # 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'
+ 'Random::DEFAULT':
+ Alternative: 'Random.new'
+ 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/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
+ VersionAdded: '0.90'
+
+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: 'This cop checks for blocks without a body.'
+ Enabled: pending
+ VersionAdded: '1.1'
+ VersionChanged: '1.3'
+ 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: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
+ Enabled: true
+ AllowComments: true
+ VersionAdded: '0.89'
+
+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/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'
-# Configuration parameters: CountComments.
+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/IneffectiveAccessModifier:
+ Description: >-
+ Checks for attempts to use `private` or `protected` to set
+ the visibility of a class method, which does not work.
+ Enabled: true
+ VersionAdded: '0.36'
+
+Lint/InheritException:
+ Description: 'Avoid inheriting from the `Exception` class.'
+ Enabled: true
+ VersionAdded: '0.41'
+ # The default base class in favour of `Exception`.
+ EnforcedStyle: runtime_error
+ SupportedStyles:
+ - runtime_error
+ - standard_error
+
+Lint/InterpolationCheck:
+ Description: 'Raise warning for interpolation in single q strs.'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.50'
+ VersionChanged: '0.87'
+
+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: >-
+ This cop 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'
+ AllowMethodComparison: true
+
+Lint/NestedMethodDefinition:
+ Description: 'Do not use nested method definitions.'
+ StyleGuide: '#no-nested-methods'
+ Enabled: true
+ VersionAdded: '0.32'
+
+Lint/NestedPercentLiteral:
+ Description: 'Checks for nested percent literals.'
+ Enabled: true
+ VersionAdded: '0.52'
+
+Lint/NextWithoutAccumulator:
+ Description: >-
+ Do not omit the accumulator when calling `next`
+ in a `reduce`/`inject` block.
+ Enabled: true
+ VersionAdded: '0.36'
+
+Lint/NoReturnInBeginEndBlocks:
+ Description: 'Do not `return` inside `begin..end` blocks in assignment contexts.'
+ Enabled: pending
+ VersionAdded: '1.2'
+
+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
+ IgnoredMethods: []
+ 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
+ VersionAdded: '0.53'
+
+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'
+
+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/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/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
+ VersionAdded: '0.9'
+ VersionChanged: <<next>>
+
+Lint/SymbolConversion:
+ Description: 'Checks for unnecessary symbol conversions.'
+ Enabled: pending
+ VersionAdded: '1.9'
+
+Lint/Syntax:
+ Description: 'Checks for syntax errors.'
+ Enabled: true
+ VersionAdded: '0.9'
+
+Lint/ToEnumArguments:
+ Description: 'This cop 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: 'This cop detects top level return statements with argument.'
+ Enabled: true
+ VersionAdded: '0.89'
+
+Lint/TrailingCommaInAttributeDeclaration:
+ Description: 'This cop 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: 'This cop checks for loops that will have at most one iteration.'
+ Enabled: true
+ VersionAdded: '0.89'
+ VersionChanged: '1.7'
+ IgnoredPatterns:
+ # 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'
+
+Lint/UselessMethodDefinition:
+ Description: 'Checks for useless method definitions.'
+ Enabled: true
+ VersionAdded: '0.90'
+ Safe: false
+ AllowComments: true
+
+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.
+ IgnoredMethods: []
+ 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: []
+ IgnoredMethods:
+ # By default, exclude the `#refine` method, as it tends to have larger
+ # associated blocks.
+ - refine
+ Exclude:
+ - '**/*.gemspec'
+ - '**/*_spec.rb'
+
+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:
- Max: 350
+ 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: []
+# Avoid complex methods.
Metrics/CyclomaticComplexity:
- Max: 17
+ 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'
+ IgnoredMethods: []
+ Max: 7
-# Configuration parameters: AllowURI, URISchemes.
-Metrics/LineLength:
- Max: 370
+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: []
+ IgnoredMethods: []
-# Configuration parameters: CountKeywordArgs.
+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: []
+ Exclude:
+ - '**/*_spec.rb'
+
Metrics/ParameterLists:
- Max: 10
+ 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:
- Max: 18
+ Description: >-
+ A complexity metric geared towards measuring complexity for a
+ human reader.
+ Enabled: true
+ VersionAdded: '0.25'
+ VersionChanged: '0.81'
+ IgnoredMethods: []
+ Max: 8
-# Sometimes it's easier to read without guards
-Style/GuardClause:
+################## 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/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'
+ # 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
+ # 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|$)/'
+
+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
+
+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.
+ #
+ # IgnoredPatterns:
+ # - '\A\s*onSelectionBulkChange\s*'
+ # - '\A\s*onSelectionCleared\s*'
+ #
+ IgnoredPatterns: []
+
+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:
+ - at
+ - by
+ - db
+ - id
+ - 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: []
+
+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
+
+#################### Security ##############################
+
+Security/Eval:
+ Description: 'The use of eval represents a serious security risk.'
+ Enabled: true
+ VersionAdded: '0.47'
+
+Security/JSONLoad:
+ Description: >-
+ Prefer usage of `JSON.parse` over `JSON.load` due to potential
+ security issues. See reference for more information.
+ Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/json/rdoc/JSON.html#method-i-load'
+ Enabled: true
+ VersionAdded: '0.43'
+ VersionChanged: '0.44'
+ # Autocorrect here will change to a method that may cause crashes depending
+ # on the value of the argument.
+ AutoCorrect: false
+ SafeAutoCorrect: false
+
+Security/MarshalLoad:
+ Description: >-
+ Avoid using of `Marshal.load` or `Marshal.restore` due to potential
+ security issues. See reference for more information.
+ Reference: '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
+
+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
+ VersionAdded: '0.9'
+ VersionChanged: '0.25'
+ # 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'
-# something = if something_else
-# that's confusing
+Style/ArrayJoin:
+ Description: 'Use Array#join instead of Array#*.'
+ StyleGuide: '#array-join'
+ Enabled: true
+ VersionAdded: '0.20'
+ VersionChanged: '0.31'
+
+Style/AsciiComments:
+ Description: 'Use only ascii symbols in comments.'
+ StyleGuide: '#english-comments'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.52'
+ AllowedChars:
+ - ©
+
+Style/Attr:
+ Description: 'Checks for uses of Module#attr.'
+ StyleGuide: '#attr'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.12'
+
+Style/AutoResourceCleanup:
+ Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
+ Enabled: false
+ VersionAdded: '0.30'
+
+Style/BarePercentLiterals:
+ Description: 'Checks if usage of %() or %Q() matches configuration.'
+ StyleGuide: '#percent-q-shorthand'
+ Enabled: true
+ VersionAdded: '0.25'
+ EnforcedStyle: bare_percent
+ SupportedStyles:
+ - percent_q
+ - bare_percent
+
+Style/BeginBlock:
+ Description: 'Avoid the use of BEGIN blocks.'
+ StyleGuide: '#no-BEGIN-blocks'
+ Enabled: true
+ VersionAdded: '0.9'
+
+Style/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 `IgnoredMethods` sections below.
+ - semantic
+ # The `braces_for_chaining` style enforces braces around single line blocks
+ # and do..end around multi-line blocks, except for multi-line blocks whose
+ # return value is being chained with another method (in which case braces
+ # are enforced).
+ - braces_for_chaining
+ # 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
+ IgnoredMethods:
+ # Methods that can be either procedural or functional and cannot be
+ # categorised from their usage alone, e.g.
+ #
+ # foo = lambda do |x|
+ # puts "Hello, #{x}"
+ # end
+ #
+ # foo = lambda do |x|
+ # x * 100
+ # end
+ #
+ # Here, it is impossible to tell from the return value of `lambda` whether
+ # the inner block's return value is significant.
+ - lambda
+ - proc
+ - it
+ # 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
+ # IgnoredMethods. 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 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
+
+Style/CaseLikeIf:
+ Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
+ StyleGuide: '#case-vs-if-else'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.88'
+
+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'
+ IgnoredMethods:
+ - ==
+ - equal?
+ - eql?
+
+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.3'
+ Keywords:
+ - TODO
+ - FIXME
+ - OPTIMIZE
+ - HACK
+ - REVIEW
+ - NOTE
+
+Style/CommentedKeyword:
+ Description: 'Do not place comments on the same line as certain keywords.'
+ Enabled: true
+ VersionAdded: '0.51'
+ VersionChanged: '1.7'
+
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
+ visibility declarations.
Enabled: false
+ VersionAdded: '0.66'
+ VersionChanged: '1.10'
+ IgnoreModules: false
-# Better to have too much self than missing a self
-Style/RedundantSelf:
+# Checks that you have put a copyright in a comment before any code.
+#
+# You can override the default Notice in your .rubocop.yml file.
+#
+# In order to use autocorrect, you must supply a value for the
+# `AutocorrectNotice` key that matches the regexp Notice. A blank
+# `AutocorrectNotice` will cause an error during autocorrect.
+#
+# Autocorrect will add a copyright notice in a comment at the top
+# of the file immediately after any shebang or encoding comments.
+#
+# Example rubocop.yml:
+#
+# Style/Copyright:
+# Enabled: true
+# Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc'
+# AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.'
+#
+Style/Copyright:
+ Description: 'Include a copyright notice in each file before any code.'
Enabled: false
+ VersionAdded: '0.30'
+ Notice: '^Copyright (\(c\) )?2[0-9]{3} .+'
+ AutocorrectNotice: ''
-Metrics/MethodLength:
- Max: 60
+Style/DateTime:
+ Description: 'Use Time over DateTime.'
+ StyleGuide: '#date--time'
+ Enabled: false
+ VersionAdded: '0.51'
+ VersionChanged: '0.92'
+ SafeAutoCorrect: false
+ AllowCoercion: false
-# We're not there yet
+Style/DefWithParentheses:
+ Description: 'Use def with parentheses when there are arguments.'
+ StyleGuide: '#method-parens'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.12'
+
+Style/Dir:
+ Description: >-
+ Use the `__dir__` method to retrieve the canonicalized
+ absolute path to the current file.
+ Enabled: true
+ VersionAdded: '0.50'
+
+Style/DisableCopsWithinSourceCodeDirective:
+ Description: >-
+ Forbids disabling/enabling cops within source code.
+ Enabled: false
+ VersionAdded: '0.82'
+ VersionChanged: '1.9'
+ AllowedCops: []
+
+Style/DocumentDynamicEvalDefinition:
+ Description: >-
+ When using `class_eval` (or other `eval`) with string interpolation,
+ add a comment block showing its appearance if interpolated.
+ StyleGuide: '#eval-comment-docs'
+ Enabled: pending
+ VersionAdded: '1.1'
+ VersionChanged: '1.3'
+
Style/Documentation:
+ Description: 'Document classes and non-namespace modules.'
+ Enabled: true
+ VersionAdded: '0.9'
+ Exclude:
+ - 'spec/**/*'
+ - 'test/**/*'
+
+Style/DocumentationMethod:
+ Description: 'Checks for missing documentation comment for public methods.'
Enabled: false
+ VersionAdded: '0.43'
+ Exclude:
+ - 'spec/**/*'
+ - 'test/**/*'
+ RequireForNonPublicMethods: false
-# Adds complexity
+Style/DoubleCopDisableDirective:
+ Description: 'Checks for double rubocop:disable comments on a single line.'
+ Enabled: true
+ VersionAdded: '0.73'
+
+Style/DoubleNegation:
+ Description: 'Checks for uses of double negation (!!).'
+ StyleGuide: '#no-bang-bang'
+ Enabled: true
+ VersionAdded: '0.19'
+ VersionChanged: '1.2'
+ EnforcedStyle: allowed_in_returns
+ SafeAutoCorrect: false
+ SupportedStyles:
+ - allowed_in_returns
+ - forbidden
+
+Style/EachForSimpleLoop:
+ Description: >-
+ Use `Integer#times` for a simple loop which iterates a fixed
+ number of times.
+ Enabled: true
+ VersionAdded: '0.41'
+
+Style/EachWithObject:
+ Description: 'Prefer `each_with_object` over `inject` or `reduce`.'
+ Enabled: true
+ VersionAdded: '0.22'
+ VersionChanged: '0.42'
+
+Style/EmptyBlockParameter:
+ Description: 'Omit pipes for empty block parameters.'
+ Enabled: true
+ VersionAdded: '0.52'
+
+Style/EmptyCaseCondition:
+ Description: 'Avoid empty condition in case statements.'
+ Enabled: true
+ VersionAdded: '0.40'
+
+Style/EmptyElse:
+ Description: 'Avoid empty else-clauses.'
+ Enabled: true
+ VersionAdded: '0.28'
+ VersionChanged: '0.32'
+ EnforcedStyle: both
+ # empty - warn only on empty `else`
+ # nil - warn on `else` with nil in it
+ # both - warn on empty `else` and `else` with `nil` in it
+ SupportedStyles:
+ - empty
+ - nil
+ - both
+
+Style/EmptyLambdaParameter:
+ Description: 'Omit parens for empty lambda parameters.'
+ Enabled: true
+ VersionAdded: '0.52'
+
+Style/EmptyLiteral:
+ Description: 'Prefer literals to Array.new/Hash.new/String.new.'
+ StyleGuide: '#literal-array-hash'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.12'
+
+Style/EmptyMethod:
+ Description: 'Checks the formatting of empty method definitions.'
+ StyleGuide: '#no-single-line-methods'
+ Enabled: true
+ VersionAdded: '0.46'
+ EnforcedStyle: compact
+ SupportedStyles:
+ - compact
+ - expanded
+
+Style/Encoding:
+ Description: 'Use UTF-8 as the source file encoding.'
+ StyleGuide: '#utf-8'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.50'
+
+Style/EndBlock:
+ Description: 'Avoid the use of END blocks.'
+ StyleGuide: '#no-END-blocks'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.81'
+
+Style/EndlessMethod:
+ Description: 'Avoid the use of multi-lined endless method definitions.'
+ StyleGuide: '#endless-methods'
+ Enabled: pending
+ VersionAdded: '1.8'
+ EnforcedStyle: allow_single_line
+ SupportedStyles:
+ - allow_single_line
+ - allow_always
+ - disallow
+
+Style/EvalWithLocation:
+ Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.'
+ Enabled: true
+ VersionAdded: '0.52'
+
+Style/EvenOdd:
+ Description: 'Favor the use of `Integer#even?` && `Integer#odd?`.'
+ StyleGuide: '#predicate-methods'
+ Enabled: true
+ VersionAdded: '0.12'
+ VersionChanged: '0.29'
+
+Style/ExpandPathArguments:
+ Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`."
+ Enabled: true
+ VersionAdded: '0.53'
+
+Style/ExplicitBlockArgument:
+ Description: >-
+ Consider using explicit block argument to avoid writing block literal
+ that just passes its arguments to another block.
+ StyleGuide: '#block-argument'
+ Enabled: true
+ VersionAdded: '0.89'
+ VersionChanged: '1.8'
+
+Style/ExponentialNotation:
+ Description: 'When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).'
+ StyleGuide: '#exponential-notation'
+ Enabled: true
+ VersionAdded: '0.82'
+ EnforcedStyle: scientific
+ SupportedStyles:
+ - scientific
+ - engineering
+ - integral
+
+Style/FloatDivision:
+ Description: 'For performing float division, coerce one side only.'
+ StyleGuide: '#float-division'
+ Reference: 'https://blog.rubystyle.guide/ruby/2019/06/21/float-division.html'
+ Enabled: true
+ VersionAdded: '0.72'
+ VersionChanged: '1.9'
+ Safe: false
+ EnforcedStyle: single_coerce
+ SupportedStyles:
+ - left_coerce
+ - right_coerce
+ - single_coerce
+ - fdiv
+
+Style/For:
+ Description: 'Checks use of for or each in multiline loops.'
+ StyleGuide: '#no-for-loops'
+ Enabled: true
+ VersionAdded: '0.13'
+ VersionChanged: '0.59'
+ EnforcedStyle: each
+ SupportedStyles:
+ - each
+ - for
+
+Style/FormatString:
+ Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.'
+ StyleGuide: '#sprintf'
+ Enabled: true
+ VersionAdded: '0.19'
+ VersionChanged: '0.49'
+ EnforcedStyle: format
+ SupportedStyles:
+ - format
+ - sprintf
+ - percent
+
+Style/FormatStringToken:
+ Description: 'Use a consistent style for format string tokens.'
+ Enabled: true
+ EnforcedStyle: annotated
+ SupportedStyles:
+ # Prefer tokens which contain a sprintf like type annotation like
+ # `%<name>s`, `%<age>d`, `%<score>f`
+ - annotated
+ # Prefer simple looking "template" style tokens like `%{name}`, `%{age}`
+ - template
+ - unannotated
+ # `MaxUnannotatedPlaceholdersAllowed` defines the number of `unannotated`
+ # style token in a format string to be allowed when enforced style is not
+ # `unannotated`.
+ MaxUnannotatedPlaceholdersAllowed: 1
+ VersionAdded: '0.49'
+ VersionChanged: '1.0'
+ IgnoredMethods: []
+
+Style/FrozenStringLiteralComment:
+ Description: >-
+ Add the frozen_string_literal comment to the top of files
+ to help transition to frozen string literals by default.
+ Enabled: true
+ VersionAdded: '0.36'
+ VersionChanged: '0.79'
+ EnforcedStyle: always
+ SupportedStyles:
+ # `always` will always add the frozen string literal comment to a file
+ # regardless of the Ruby version or if `freeze` or `<<` are called on a
+ # string literal. It is possible that this will create errors.
+ - always
+ # `always_true` will add the frozen string literal comment to a file,
+ # similarly to the `always` style, but will also change any disabled
+ # comments (e.g. `# frozen_string_literal: false`) to be enabled.
+ - always_true
+ # `never` will enforce that the frozen string literal comment does not
+ # exist in a file.
+ - never
+ SafeAutoCorrect: false
+
+Style/GlobalStdStream:
+ Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.'
+ StyleGuide: '#global-stdout'
+ Enabled: true
+ VersionAdded: '0.89'
+ SafeAutoCorrect: false
+
+Style/GlobalVars:
+ Description: 'Do not introduce global variables.'
+ StyleGuide: '#instance-vars'
+ Reference: 'https://www.zenspider.com/ruby/quickref.html'
+ Enabled: true
+ VersionAdded: '0.13'
+ # Built-in global variables are allowed by default.
+ AllowedVariables: []
+
+Style/GuardClause:
+ Description: 'Check for conditionals that can be replaced with guard clauses.'
+ StyleGuide: '#no-nested-conditionals'
+ Enabled: true
+ VersionAdded: '0.20'
+ VersionChanged: '0.22'
+ # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
+ # needs to have to trigger this cop
+ MinBodyLength: 1
+
+Style/HashAsLastArrayItem:
+ Description: >-
+ Checks for presence or absence of braces around hash literal as a last
+ array item depending on configuration.
+ StyleGuide: '#hash-literal-as-last-array-item'
+ Enabled: true
+ VersionAdded: '0.88'
+ EnforcedStyle: braces
+ SupportedStyles:
+ - braces
+ - no_braces
+
+Style/HashConversion:
+ Description: 'Avoid Hash[] in favor of ary.to_h or literal hashes.'
+ Enabled: pending
+ VersionAdded: '1.10'
+ VersionChanged: '1.11'
+ AllowSplatArgument: true
+
+Style/HashEachMethods:
+ Description: 'Use Hash#each_key and Hash#each_value.'
+ StyleGuide: '#hash-each'
+ Enabled: true
+ VersionAdded: '0.80'
+ Safe: false
+
+Style/HashExcept:
+ Description: >-
+ Checks for usages of `Hash#reject`, `Hash#select`, and `Hash#filter` methods
+ that can be replaced with `Hash#except` method.
+ Enabled: pending
+ VersionAdded: '1.7'
+
+Style/HashLikeCase:
+ Description: >-
+ Checks for places where `case-when` represents a simple 1:1
+ mapping and can be replaced with a hash lookup.
+ Enabled: true
+ VersionAdded: '0.88'
+ # `MinBranchesCount` defines the number of branches `case` needs to have
+ # to trigger this cop
+ MinBranchesCount: 3
+
+Style/HashSyntax:
+ Description: >-
+ Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
+ { :a => 1, :b => 2 }.
+ StyleGuide: '#hash-literals'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.43'
+ EnforcedStyle: ruby19
+ SupportedStyles:
+ # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys
+ - ruby19
+ # checks for hash rocket syntax for all hashes
+ - hash_rockets
+ # forbids mixed key syntaxes (e.g. {a: 1, :b => 2})
+ - no_mixed_keys
+ # enforces both ruby19 and no_mixed_keys styles
+ - ruby19_no_mixed_keys
+ # Force hashes that have a symbol value to use hash rockets
+ UseHashRocketsWithSymbolValues: false
+ # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
+ PreferHashRocketsForNonAlnumEndingSymbols: false
+
+Style/HashTransformKeys:
+ Description: 'Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.'
+ Enabled: true
+ VersionAdded: '0.80'
+ VersionChanged: '0.90'
+ Safe: false
+
+Style/HashTransformValues:
+ Description: 'Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.'
+ Enabled: true
+ VersionAdded: '0.80'
+ VersionChanged: '0.90'
+ Safe: false
+
+Style/IdenticalConditionalBranches:
+ Description: >-
+ Checks that conditional statements do not have an identical
+ line at the end of each branch, which can validly be moved
+ out of the conditional.
+ Enabled: true
+ VersionAdded: '0.36'
+
Style/IfInsideElse:
+ Description: 'Finds if nodes inside else, which can be converted to elsif.'
+ Enabled: true
+ AllowIfModifier: false
+ VersionAdded: '0.36'
+ VersionChanged: '1.3'
+
+Style/IfUnlessModifier:
+ Description: >-
+ Favor modifier if/unless usage when you have a
+ single-line body.
+ StyleGuide: '#if-as-a-modifier'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.30'
+
+Style/IfUnlessModifierOfIfUnless:
+ Description: >-
+ Avoid modifier if/unless usage on conditionals.
+ Enabled: true
+ VersionAdded: '0.39'
+ VersionChanged: '0.87'
+
+Style/IfWithBooleanLiteralBranches:
+ Description: 'Checks for redundant `if` with boolean literal branches.'
+ Enabled: pending
+ VersionAdded: '1.9'
+ SafeAutoCorrect: false
+ AllowedMethods:
+ - nonzero?
+
+Style/IfWithSemicolon:
+ Description: 'Do not use if x; .... Use the ternary operator instead.'
+ StyleGuide: '#no-semicolon-ifs'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.83'
+
+Style/ImplicitRuntimeError:
+ Description: >-
+ Use `raise` or `fail` with an explicit exception class and
+ message, rather than just a message.
Enabled: false
+ VersionAdded: '0.41'
-# danger specific
+Style/InfiniteLoop:
+ Description: >-
+ Use Kernel#loop for infinite loops.
+ This cop is unsafe in the body may raise a `StopIteration` exception.
+ Safe: false
+ StyleGuide: '#infinite-loop'
+ Enabled: true
+ VersionAdded: '0.26'
+ VersionChanged: '0.61'
-Style/BlockComments:
+Style/InlineComment:
+ Description: 'Avoid trailing inline comments.'
Enabled: false
+ VersionAdded: '0.23'
-Layout/MultilineMethodCallIndentation:
- EnforcedStyle: indented
+Style/InverseMethods:
+ Description: >-
+ Use the inverse method instead of `!.method`
+ if an inverse method is defined.
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.48'
+ # `InverseMethods` are methods that can be inverted by a not (`not` or `!`)
+ # The relationship of inverse methods only needs to be defined in one direction.
+ # Keys and values both need to be defined as symbols.
+ InverseMethods:
+ :any?: :none?
+ :even?: :odd?
+ :==: :!=
+ :=~: :!~
+ :<: :>=
+ :>: :<=
+ # `ActiveSupport` defines some common inverse methods. They are listed below,
+ # and not enabled by default.
+ #:present?: :blank?,
+ #:include?: :exclude?
+ # `InverseBlocks` are methods that are inverted by inverting the return
+ # of the block that is passed to the method
+ InverseBlocks:
+ :select: :reject
+ :select!: :reject!
-# FIXME: 25
-Metrics/BlockLength:
- Max: 345
+Style/IpAddresses:
+ Description: "Don't include literal IP addresses in code."
+ Enabled: false
+ VersionAdded: '0.58'
+ VersionChanged: '0.91'
+ # Allow addresses to be permitted
+ AllowedAddresses:
+ - "::"
+ # :: is a valid IPv6 address, but could potentially be legitimately in code
Exclude:
- - "**/*_spec.rb"
+ - '**/*.gemfile'
+ - '**/Gemfile'
+ - '**/gems.rb'
+ - '**/*.gemspec'
-Metrics/ModuleLength:
- Max: 100
- Exclude:
- - "**/*_spec.rb"
+Style/KeywordParametersOrder:
+ Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
+ StyleGuide: '#keyword-parameters-order'
+ Enabled: true
+ VersionAdded: '0.90'
+ VersionChanged: '1.7'
+Style/Lambda:
+ Description: 'Use the new lambda literal syntax for single-line blocks.'
+ StyleGuide: '#lambda-multi-line'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.40'
+ EnforcedStyle: line_count_dependent
+ SupportedStyles:
+ - line_count_dependent
+ - lambda
+ - literal
+
+Style/LambdaCall:
+ Description: 'Use lambda.call(...) instead of lambda.(...).'
+ StyleGuide: '#proc-call'
+ Enabled: true
+ VersionAdded: '0.13'
+ VersionChanged: '0.14'
+ EnforcedStyle: call
+ SupportedStyles:
+ - call
+ - braces
+
+Style/LineEndConcatenation:
+ Description: >-
+ Use \ instead of + or << to concatenate two string literals at
+ line end.
+ Enabled: true
+ SafeAutoCorrect: false
+ VersionAdded: '0.18'
+ VersionChanged: '0.64'
+
+Style/MethodCallWithArgsParentheses:
+ Description: 'Use parentheses for method calls with arguments.'
+ StyleGuide: '#method-invocation-parens'
+ Enabled: false
+ VersionAdded: '0.47'
+ VersionChanged: '1.7'
+ IgnoreMacros: true
+ IgnoredMethods: []
+ IgnoredPatterns: []
+ IncludedMacros: []
+ AllowParenthesesInMultilineCall: false
+ AllowParenthesesInChaining: false
+ AllowParenthesesInCamelCaseMethod: false
+ EnforcedStyle: require_parentheses
+ SupportedStyles:
+ - require_parentheses
+ - omit_parentheses
+
+Style/MethodCallWithoutArgsParentheses:
+ Description: 'Do not use parentheses for method calls with no arguments.'
+ StyleGuide: '#method-invocation-parens'
+ Enabled: true
+ IgnoredMethods: []
+ VersionAdded: '0.47'
+ VersionChanged: '0.55'
+
+Style/MethodCalledOnDoEndBlock:
+ Description: 'Avoid chaining a method call on a do...end block.'
+ StyleGuide: '#single-line-blocks'
+ Enabled: false
+ VersionAdded: '0.14'
+
+Style/MethodDefParentheses:
+ Description: >-
+ Checks if the method definitions have or don't have
+ parentheses.
+ StyleGuide: '#method-parens'
+ Enabled: true
+ VersionAdded: '0.16'
+ VersionChanged: '1.7'
+ EnforcedStyle: require_parentheses
+ SupportedStyles:
+ - require_parentheses
+ - require_no_parentheses
+ - require_no_parentheses_except_multiline
+
+Style/MinMax:
+ Description: >-
+ Use `Enumerable#minmax` instead of `Enumerable#min`
+ and `Enumerable#max` in conjunction.
+ Enabled: true
+ VersionAdded: '0.50'
+
+Style/MissingElse:
+ Description: >-
+ Require if/case expressions to have an else branches.
+ If enabled, it is recommended that
+ Style/UnlessElse and Style/EmptyElse be enabled.
+ This will conflict with Style/EmptyElse if
+ Style/EmptyElse is configured to style "both".
+ Enabled: false
+ VersionAdded: '0.30'
+ VersionChanged: '0.38'
+ EnforcedStyle: both
+ SupportedStyles:
+ # if - warn when an if expression is missing an else branch
+ # case - warn when a case expression is missing an else branch
+ # both - warn when an if or case expression is missing an else branch
+ - if
+ - case
+ - both
+
+Style/MissingRespondToMissing:
+ Description: >-
+ Checks if `method_missing` is implemented
+ without implementing `respond_to_missing`.
+ StyleGuide: '#no-method-missing'
+ Enabled: true
+ VersionAdded: '0.56'
+
Style/MixinGrouping:
+ Description: 'Checks for grouping of mixins in `class` and `module` bodies.'
+ StyleGuide: '#mixin-grouping'
+ Enabled: true
+ VersionAdded: '0.48'
+ VersionChanged: '0.49'
+ EnforcedStyle: separated
+ SupportedStyles:
+ # separated: each mixed in module goes in a separate statement.
+ # grouped: mixed in modules are grouped into a single statement.
+ - separated
+ - grouped
+
+Style/MixinUsage:
+ Description: 'Checks that `include`, `extend` and `prepend` exists at the top level.'
+ Enabled: true
+ VersionAdded: '0.51'
+
+Style/ModuleFunction:
+ Description: 'Checks for usage of `extend self` in modules.'
+ StyleGuide: '#module-function'
+ Enabled: true
+ VersionAdded: '0.11'
+ VersionChanged: '0.65'
+ EnforcedStyle: module_function
+ SupportedStyles:
+ - module_function
+ - extend_self
+ - forbidden
+ Autocorrect: false
+ SafeAutoCorrect: false
+
+Style/MultilineBlockChain:
+ Description: 'Avoid multi-line chains of blocks.'
+ StyleGuide: '#single-line-blocks'
+ Enabled: true
+ VersionAdded: '0.13'
+
+Style/MultilineIfModifier:
+ Description: 'Only use if/unless modifiers on single line statements.'
+ StyleGuide: '#no-multiline-if-modifiers'
+ Enabled: true
+ VersionAdded: '0.45'
+
+Style/MultilineIfThen:
+ Description: 'Do not use then for multi-line if/unless.'
+ StyleGuide: '#no-then'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.26'
+
+Style/MultilineMemoization:
+ Description: 'Wrap multiline memoizations in a `begin` and `end` block.'
+ Enabled: true
+ VersionAdded: '0.44'
+ VersionChanged: '0.48'
+ EnforcedStyle: keyword
+ SupportedStyles:
+ - keyword
+ - braces
+
+Style/MultilineMethodSignature:
+ Description: 'Avoid multi-line method signatures.'
Enabled: false
+ VersionAdded: '0.59'
+ VersionChanged: '1.7'
-Style/FileName:
+Style/MultilineTernaryOperator:
+ Description: >-
+ Avoid multi-line ?: (the ternary operator);
+ use if/unless instead.
+ StyleGuide: '#no-multiline-ternary'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.86'
+
+Style/MultilineWhenThen:
+ Description: 'Do not use then for multi-line when statement.'
+ StyleGuide: '#no-then'
+ Enabled: true
+ VersionAdded: '0.73'
+
+Style/MultipleComparison:
+ Description: >-
+ Avoid comparing a variable with multiple items in a conditional,
+ use Array#include? instead.
+ Enabled: true
+ VersionAdded: '0.49'
+ VersionChanged: '1.1'
+
+Style/MutableConstant:
+ Description: 'Do not assign mutable objects to constants.'
+ Enabled: true
+ VersionAdded: '0.34'
+ VersionChanged: '1.8'
+ SafeAutoCorrect: false
+ EnforcedStyle: literals
+ SupportedStyles:
+ # literals: freeze literals assigned to constants
+ # strict: freeze all constants
+ # Strict mode is considered an experimental feature. It has not been updated
+ # with an exhaustive list of all methods that will produce frozen objects so
+ # there is a decent chance of getting some false positives. Luckily, there is
+ # no harm in freezing an already frozen object.
+ - literals
+ - strict
+
+Style/NegatedIf:
+ Description: >-
+ Favor unless over if for negative conditions
+ (or control flow or).
+ StyleGuide: '#unless-for-negatives'
+ Enabled: true
+ VersionAdded: '0.20'
+ VersionChanged: '0.48'
+ EnforcedStyle: both
+ SupportedStyles:
+ # both: prefix and postfix negated `if` should both use `unless`
+ # prefix: only use `unless` for negated `if` statements positioned before the body of the statement
+ # postfix: only use `unless` for negated `if` statements positioned after the body of the statement
+ - both
+ - prefix
+ - postfix
+
+Style/NegatedIfElseCondition:
+ Description: >-
+ This cop checks for uses of `if-else` and ternary operators with a negated condition
+ which can be simplified by inverting condition and swapping branches.
+ Enabled: pending
+ VersionAdded: '1.2'
+
+Style/NegatedUnless:
+ Description: 'Favor if over unless for negative conditions.'
+ StyleGuide: '#if-for-negatives'
+ Enabled: true
+ VersionAdded: '0.69'
+ EnforcedStyle: both
+ SupportedStyles:
+ # both: prefix and postfix negated `unless` should both use `if`
+ # prefix: only use `if` for negated `unless` statements positioned before the body of the statement
+ # postfix: only use `if` for negated `unless` statements positioned after the body of the statement
+ - both
+ - prefix
+ - postfix
+
+Style/NegatedWhile:
+ Description: 'Favor until over while for negative conditions.'
+ StyleGuide: '#until-for-negatives'
+ Enabled: true
+ VersionAdded: '0.20'
+
+Style/NestedModifier:
+ Description: 'Avoid using nested modifiers.'
+ StyleGuide: '#no-nested-modifiers'
+ Enabled: true
+ VersionAdded: '0.35'
+
+Style/NestedParenthesizedCalls:
+ Description: >-
+ Parenthesize method calls which are nested inside the
+ argument list of another parenthesized method call.
+ Enabled: true
+ VersionAdded: '0.36'
+ VersionChanged: '0.77'
+ AllowedMethods:
+ - be
+ - be_a
+ - be_an
+ - be_between
+ - be_falsey
+ - be_kind_of
+ - be_instance_of
+ - be_truthy
+ - be_within
+ - eq
+ - eql
+ - end_with
+ - include
+ - match
+ - raise_error
+ - respond_to
+ - start_with
+
+Style/NestedTernaryOperator:
+ Description: 'Use one expression per branch in a ternary operator.'
+ StyleGuide: '#no-nested-ternary'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.86'
+
+Style/Next:
+ Description: 'Use `next` to skip iteration instead of a condition at the end.'
+ StyleGuide: '#no-nested-conditionals'
+ Enabled: true
+ VersionAdded: '0.22'
+ VersionChanged: '0.35'
+ # With `always` all conditions at the end of an iteration needs to be
+ # replaced by next - with `skip_modifier_ifs` the modifier if like this one
+ # are ignored: [1, 2].each { |a| return 'yes' if a == 1 }
+ EnforcedStyle: skip_modifier_ifs
+ # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
+ # needs to have to trigger this cop
+ MinBodyLength: 3
+ SupportedStyles:
+ - skip_modifier_ifs
+ - always
+
+Style/NilComparison:
+ Description: 'Prefer x.nil? to x == nil.'
+ StyleGuide: '#predicate-methods'
+ Enabled: true
+ VersionAdded: '0.12'
+ VersionChanged: '0.59'
+ EnforcedStyle: predicate
+ SupportedStyles:
+ - predicate
+ - comparison
+
+Style/NilLambda:
+ Description: 'Prefer `-> {}` to `-> { nil }`.'
+ Enabled: pending
+ VersionAdded: '1.3'
+
+Style/NonNilCheck:
+ Description: 'Checks for redundant nil checks.'
+ StyleGuide: '#no-non-nil-checks'
+ Enabled: true
+ VersionAdded: '0.20'
+ VersionChanged: '0.22'
+ # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
+ # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
+ # **usually** OK, but might change behavior.
+ #
+ # With `IncludeSemanticChanges` set to `false`, this cop does not report
+ # offenses for `!x.nil?` and does no changes that might change behavior.
+ IncludeSemanticChanges: false
+
+Style/Not:
+ Description: 'Use ! instead of not.'
+ StyleGuide: '#bang-not-not'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.20'
+
+Style/NumericLiteralPrefix:
+ Description: 'Use smallcase prefixes for numeric literals.'
+ StyleGuide: '#numeric-literal-prefixes'
+ Enabled: true
+ VersionAdded: '0.41'
+ EnforcedOctalStyle: zero_with_o
+ SupportedOctalStyles:
+ - zero_with_o
+ - zero_only
+
+
+Style/NumericLiterals:
+ Description: >-
+ Add underscores to large numeric literals to improve their
+ readability.
+ StyleGuide: '#underscores-in-numerics'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.48'
+ MinDigits: 5
+ Strict: false
+
+Style/NumericPredicate:
+ Description: >-
+ Checks for the use of predicate- or comparison methods for
+ numeric comparisons.
+ StyleGuide: '#predicate-methods'
+ Safe: false
+ # This will change to a new method call which isn't guaranteed to be on the
+ # object. Switching these methods has to be done with knowledge of the types
+ # of the variables which rubocop doesn't have.
+ SafeAutoCorrect: false
+ Enabled: true
+ VersionAdded: '0.42'
+ VersionChanged: '0.59'
+ EnforcedStyle: predicate
+ SupportedStyles:
+ - predicate
+ - comparison
+ IgnoredMethods: []
+ # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
+ # false positives.
+ Exclude:
+ - 'spec/**/*'
+
+Style/OneLineConditional:
+ Description: >-
+ Favor the ternary operator (?:) or multi-line constructs over
+ single-line if/then/else/end constructs.
+ StyleGuide: '#ternary-operator'
+ Enabled: true
+ AlwaysCorrectToMultiline: false
+ VersionAdded: '0.9'
+ VersionChanged: '0.90'
+
+Style/OptionHash:
+ Description: "Don't use option hashes when you can use keyword arguments."
Enabled: false
+ VersionAdded: '0.33'
+ VersionChanged: '0.34'
+ # A list of parameter names that will be flagged by this cop.
+ SuspiciousParamNames:
+ - options
+ - opts
+ - args
+ - params
+ - parameters
-Layout/HeredocIndentation:
+Style/OptionalArguments:
+ Description: >-
+ Checks for optional arguments that do not appear at the end
+ of the argument list.
+ StyleGuide: '#optional-arguments'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.33'
+ VersionChanged: '0.83'
+
+Style/OptionalBooleanParameter:
+ Description: 'Use keyword arguments when defining method with boolean argument.'
+ StyleGuide: '#boolean-keyword-arguments'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.89'
+ AllowedMethods:
+ - respond_to_missing?
+
+Style/OrAssignment:
+ Description: 'Recommend usage of double pipe equals (||=) where applicable.'
+ StyleGuide: '#double-pipe-for-uninit'
+ Enabled: true
+ VersionAdded: '0.50'
+
+Style/ParallelAssignment:
+ Description: >-
+ Check for simple usages of parallel assignment.
+ It will only warn when the number of variables
+ matches on both sides of the assignment.
+ StyleGuide: '#parallel-assignment'
+ Enabled: true
+ VersionAdded: '0.32'
+
+Style/ParenthesesAroundCondition:
+ Description: >-
+ Don't use parentheses around the condition of an
+ if/unless/while.
+ StyleGuide: '#no-parens-around-condition'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.56'
+ AllowSafeAssignment: true
+ AllowInMultilineConditions: false
+
+Style/PercentLiteralDelimiters:
+ Description: 'Use `%`-literal delimiters consistently.'
+ StyleGuide: '#percent-literal-braces'
+ Enabled: true
+ VersionAdded: '0.19'
+ # Specify the default preferred delimiter for all types with the 'default' key
+ # Override individual delimiters (even with default specified) by specifying
+ # an individual key
+ PreferredDelimiters:
+ default: ()
+ '%i': '[]'
+ '%I': '[]'
+ '%r': '{}'
+ '%w': '[]'
+ '%W': '[]'
+ VersionChanged: '0.48'
+
+Style/PercentQLiterals:
+ Description: 'Checks if uses of %Q/%q match the configured preference.'
+ Enabled: true
+ VersionAdded: '0.25'
+ EnforcedStyle: lower_case_q
+ SupportedStyles:
+ - lower_case_q # Use `%q` when possible, `%Q` when necessary
+ - upper_case_q # Always use `%Q`
+
+Style/PerlBackrefs:
+ Description: 'Avoid Perl-style regex back references.'
+ StyleGuide: '#no-perl-regexp-last-matchers'
+ Enabled: true
+ VersionAdded: '0.13'
+
+Style/PreferredHashMethods:
+ Description: 'Checks use of `has_key?` and `has_value?` Hash methods.'
+ StyleGuide: '#hash-key'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.41'
+ VersionChanged: '0.70'
+ EnforcedStyle: short
+ SupportedStyles:
+ - short
+ - verbose
+
+Style/Proc:
+ Description: 'Use proc instead of Proc.new.'
+ StyleGuide: '#proc'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.18'
+
+Style/RaiseArgs:
+ Description: 'Checks the arguments passed to raise/fail.'
+ StyleGuide: '#exception-class-messages'
+ Enabled: true
+ VersionAdded: '0.14'
+ VersionChanged: '1.2'
+ EnforcedStyle: exploded
+ SupportedStyles:
+ - compact # raise Exception.new(msg)
+ - exploded # raise Exception, msg
+ AllowedCompactTypes: []
+
+Style/RandomWithOffset:
+ Description: >-
+ Prefer to use ranges when generating random numbers instead of
+ integers with offsets.
+ StyleGuide: '#random-numbers'
+ Enabled: true
+ VersionAdded: '0.52'
+
+Style/RedundantArgument:
+ Description: 'Check for a redundant argument passed to certain methods.'
+ Enabled: pending
+ Safe: false
+ VersionAdded: '1.4'
+ VersionChanged: '1.7'
+ Methods:
+ # Array#join
+ join: ''
+ # String#split
+ split: ' '
+ # String#chomp
+ chomp: "\n"
+ # String#chomp!
+ chomp!: "\n"
+
+Style/RedundantAssignment:
+ Description: 'Checks for redundant assignment before returning.'
+ Enabled: true
+ VersionAdded: '0.87'
+
+Style/RedundantBegin:
+ Description: "Don't use begin blocks when they are not needed."
+ StyleGuide: '#begin-implicit'
+ Enabled: true
+ VersionAdded: '0.10'
+ VersionChanged: '0.21'
+
+Style/RedundantCapitalW:
+ Description: 'Checks for %W when interpolation is not needed.'
+ Enabled: true
+ VersionAdded: '0.76'
+
+Style/RedundantCondition:
+ Description: 'Checks for unnecessary conditional expressions.'
+ Enabled: true
+ VersionAdded: '0.76'
+
+Style/RedundantConditional:
+ Description: "Don't return true/false from a conditional."
+ Enabled: true
+ VersionAdded: '0.50'
+
+Style/RedundantException:
+ Description: "Checks for an obsolete RuntimeException argument in raise/fail."
+ StyleGuide: '#no-explicit-runtimeerror'
+ Enabled: true
+ VersionAdded: '0.14'
+ VersionChanged: '0.29'
+
+Style/RedundantFetchBlock:
+ Description: >-
+ Use `fetch(key, value)` instead of `fetch(key) { value }`
+ when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant.
+ Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code'
+ Enabled: true
+ Safe: false
+ # If enabled, this cop will autocorrect usages of
+ # `fetch` being called with block returning a constant.
+ # This can be dangerous since constants will not be defined at that moment.
+ SafeForConstants: false
+ VersionAdded: '0.86'
+
+Style/RedundantFileExtensionInRequire:
+ Description: >-
+ Checks for the presence of superfluous `.rb` extension in
+ the filename provided to `require` and `require_relative`.
+ StyleGuide: '#no-explicit-rb-to-require'
+ Enabled: true
+ VersionAdded: '0.88'
+
+Style/RedundantFreeze:
+ Description: "Checks usages of Object#freeze on immutable objects."
+ Enabled: true
+ VersionAdded: '0.34'
+ VersionChanged: '0.66'
+
+Style/RedundantInterpolation:
+ Description: 'Checks for strings that are just an interpolated expression.'
+ Enabled: true
+ VersionAdded: '0.76'
+
+Style/RedundantParentheses:
+ Description: "Checks for parentheses that seem not to serve any purpose."
+ Enabled: true
+ VersionAdded: '0.36'
+
+Style/RedundantPercentQ:
+ Description: 'Checks for %q/%Q when single quotes or double quotes would do.'
+ StyleGuide: '#percent-q'
+ Enabled: true
+ VersionAdded: '0.76'
+
+Style/RedundantRegexpCharacterClass:
+ Description: 'Checks for unnecessary single-element Regexp character classes.'
+ Enabled: true
+ VersionAdded: '0.85'
+
+Style/RedundantRegexpEscape:
+ Description: 'Checks for redundant escapes in Regexps.'
+ Enabled: true
+ VersionAdded: '0.85'
+
+Style/RedundantReturn:
+ Description: "Don't use return where it's not required."
+ StyleGuide: '#no-explicit-return'
+ Enabled: true
+ VersionAdded: '0.10'
+ VersionChanged: '0.14'
+ # When `true` allows code like `return x, y`.
+ AllowMultipleReturnValues: false
+
+Style/RedundantSelf:
+ Description: "Don't use self where it's not needed."
+ StyleGuide: '#no-self-unless-required'
+ Enabled: true
+ VersionAdded: '0.10'
+ VersionChanged: '0.13'
+
+Style/RedundantSelfAssignment:
+ Description: 'Checks for places where redundant assignments are made for in place modification methods.'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.90'
+
+Style/RedundantSort:
+ Description: >-
+ Use `min` instead of `sort.first`,
+ `max_by` instead of `sort_by...last`, etc.
+ Enabled: true
+ VersionAdded: '0.76'
+
+Style/RedundantSortBy:
+ Description: 'Use `sort` instead of `sort_by { |x| x }`.'
+ Enabled: true
+ VersionAdded: '0.36'
+
+Style/RegexpLiteral:
+ Description: 'Use / or %r around regular expressions.'
+ StyleGuide: '#percent-r'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.30'
+ EnforcedStyle: slashes
+ # slashes: Always use slashes.
+ # percent_r: Always use `%r`.
+ # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes.
+ SupportedStyles:
+ - slashes
+ - percent_r
+ - mixed
+ # If `false`, the cop will always recommend using `%r` if one or more slashes
+ # are found in the regexp string.
+ AllowInnerSlashes: false
+
+Style/RescueModifier:
+ Description: 'Avoid using rescue in its modifier form.'
+ StyleGuide: '#no-rescue-modifiers'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.34'
+
+Style/RescueStandardError:
+ Description: 'Avoid rescuing without specifying an error class.'
+ Enabled: true
+ VersionAdded: '0.52'
+ EnforcedStyle: explicit
+ # implicit: Do not include the error class, `rescue`
+ # explicit: Require an error class `rescue StandardError`
+ SupportedStyles:
+ - implicit
+ - explicit
+
+Style/ReturnNil:
+ Description: 'Use return instead of return nil.'
Enabled: false
+ EnforcedStyle: return
+ SupportedStyles:
+ - return
+ - return_nil
+ VersionAdded: '0.50'
+Style/SafeNavigation:
+ Description: >-
+ This cop transforms usages of a method call safeguarded by
+ a check for the existence of the object to
+ safe navigation (`&.`).
+ Auto-correction is unsafe as it assumes the object will
+ be `nil` or truthy, but never `false`.
+ Enabled: true
+ VersionAdded: '0.43'
+ VersionChanged: '0.77'
+ # Safe navigation may cause a statement to start returning `nil` in addition
+ # to whatever it used to return.
+ ConvertCodeThatCanStartToReturnNil: false
+ AllowedMethods:
+ - present?
+ - blank?
+ - presence
+ - try
+ - try!
+ SafeAutoCorrect: false
+
+Style/Sample:
+ Description: >-
+ Use `sample` instead of `shuffle.first`,
+ `shuffle.last`, and `shuffle[Integer]`.
+ Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
+ Enabled: true
+ VersionAdded: '0.30'
+
+Style/SelfAssignment:
+ Description: >-
+ Checks for places where self-assignment shorthand should have
+ been used.
+ StyleGuide: '#self-assignment'
+ Enabled: true
+ VersionAdded: '0.19'
+ VersionChanged: '0.29'
+
+Style/Semicolon:
+ Description: "Don't use semicolons to terminate expressions."
+ StyleGuide: '#no-semicolon'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.19'
+ # Allow `;` to separate several expressions on the same line.
+ AllowAsExpressionSeparator: false
+
+Style/Send:
+ Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.'
+ StyleGuide: '#prefer-public-send'
+ Enabled: false
+ VersionAdded: '0.33'
+
+Style/SignalException:
+ Description: 'Checks for proper usage of fail and raise.'
+ StyleGuide: '#prefer-raise-over-fail'
+ Enabled: true
+ VersionAdded: '0.11'
+ VersionChanged: '0.37'
+ EnforcedStyle: only_raise
+ SupportedStyles:
+ - only_raise
+ - only_fail
+ - semantic
+
+Style/SingleArgumentDig:
+ Description: 'Avoid using single argument dig method.'
+ Enabled: true
+ VersionAdded: '0.89'
+ Safe: false
+
+Style/SingleLineBlockParams:
+ Description: 'Enforces the names of some block params.'
+ Enabled: false
+ VersionAdded: '0.16'
+ VersionChanged: '1.6'
+ Methods:
+ - reduce:
+ - acc
+ - elem
+ - inject:
+ - acc
+ - elem
+
+Style/SingleLineMethods:
+ Description: 'Avoid single-line methods.'
+ StyleGuide: '#no-single-line-methods'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '1.8'
+ AllowIfMethodIsEmpty: true
+
+Style/SlicingWithRange:
+ Description: 'Checks array slicing is done with endless ranges when suitable.'
+ Enabled: true
+ VersionAdded: '0.83'
+ Safe: false
+
+Style/SoleNestedConditional:
+ Description: >-
+ Finds sole nested conditional nodes
+ which can be merged into outer conditional node.
+ Enabled: true
+ VersionAdded: '0.89'
+ VersionChanged: '1.5'
+ AllowModifier: false
+
Style/SpecialGlobalVars:
+ Description: 'Avoid Perl-style global variables.'
+ StyleGuide: '#no-cryptic-perlisms'
+ Enabled: true
+ VersionAdded: '0.13'
+ VersionChanged: '0.36'
+ SafeAutoCorrect: false
+ EnforcedStyle: use_english_names
+ SupportedStyles:
+ - use_perl_names
+ - use_english_names
+
+Style/StabbyLambdaParentheses:
+ Description: 'Check for the usage of parentheses around stabby lambda arguments.'
+ StyleGuide: '#stabby-lambda-with-args'
+ Enabled: true
+ VersionAdded: '0.35'
+ EnforcedStyle: require_parentheses
+ SupportedStyles:
+ - require_parentheses
+ - require_no_parentheses
+
+Style/StaticClass:
+ Description: 'Prefer modules to classes with only class methods.'
+ StyleGuide: '#modules-vs-classes'
Enabled: false
+ Safe: false
+ VersionAdded: '1.3'
-PercentLiteralDelimiters:
- PreferredDelimiters:
- "%": ()
- "%i": ()
- "%q": ()
- "%Q": ()
- "%r": "{}"
- "%s": ()
- "%w": ()
- "%W": ()
- "%x": ()
+Style/StderrPuts:
+ Description: 'Use `warn` instead of `$stderr.puts`.'
+ StyleGuide: '#warn'
+ Enabled: true
+ VersionAdded: '0.51'
-Security/YAMLLoad:
+Style/StringConcatenation:
+ Description: 'Checks for places where string concatenation can be replaced with string interpolation.'
+ StyleGuide: '#string-interpolation'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.89'
+ VersionChanged: '1.6'
+
+Style/StringHashKeys:
+ Description: 'Prefer symbols instead of strings as hash keys.'
+ StyleGuide: '#symbols-as-keys'
Enabled: false
+ VersionAdded: '0.52'
+ VersionChanged: '0.75'
+ Safe: false
+
+Style/StringLiterals:
+ Description: 'Checks if uses of quotes match the configured preference.'
+ StyleGuide: '#consistent-string-literals'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.36'
+ EnforcedStyle: single_quotes
+ SupportedStyles:
+ - single_quotes
+ - double_quotes
+ # If `true`, strings which span multiple lines using `\` for continuation must
+ # use the same type of quotes on each line.
+ ConsistentQuotesInMultiline: false
+ Exclude:
+ - '**/*_spec.rb'
+
+Style/StringLiteralsInInterpolation:
+ Description: >-
+ Checks if uses of quotes inside expressions in interpolated
+ strings match the configured preference.
+ Enabled: true
+ VersionAdded: '0.27'
+ EnforcedStyle: single_quotes
+ SupportedStyles:
+ - single_quotes
+ - double_quotes
+
+Style/StringMethods:
+ Description: 'Checks if configured preferred methods are used over non-preferred.'
+ Enabled: false
+ VersionAdded: '0.34'
+ VersionChanged: '0.34'
+ # Mapping from undesired method to desired_method
+ # e.g. to use `to_sym` over `intern`:
+ #
+ # StringMethods:
+ # PreferredMethods:
+ # intern: to_sym
+ PreferredMethods:
+ intern: to_sym
+
+Style/Strip:
+ Description: 'Use `strip` instead of `lstrip.rstrip`.'
+ Enabled: true
+ VersionAdded: '0.36'
+
+Style/StructInheritance:
+ Description: 'Checks for inheritance from Struct.new.'
+ StyleGuide: '#no-extend-struct-new'
+ Enabled: true
+ VersionAdded: '0.29'
+ VersionChanged: '0.86'
+
+Style/SwapValues:
+ Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
+ StyleGuide: '#values-swapping'
+ Enabled: pending
+ VersionAdded: '1.1'
+ SafeAutoCorrect: false
+
+Style/SymbolArray:
+ Description: 'Use %i or %I for arrays of symbols.'
+ StyleGuide: '#percent-i'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.49'
+ EnforcedStyle: percent
+ MinSize: 2
+ SupportedStyles:
+ - percent
+ - brackets
+
+Style/SymbolLiteral:
+ Description: 'Use plain symbols instead of string symbols when possible.'
+ Enabled: true
+ VersionAdded: '0.30'
+
+Style/SymbolProc:
+ Description: 'Use symbols as procs instead of blocks when possible.'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.26'
+ VersionChanged: '1.5'
+ AllowMethodsWithArguments: false
+ # A list of method names to be ignored by the check.
+ # The names should be fairly unique, otherwise you'll end up ignoring lots of code.
+ IgnoredMethods:
+ - respond_to
+ - define_method
+
+Style/TernaryParentheses:
+ Description: 'Checks for use of parentheses around ternary conditions.'
+ Enabled: true
+ VersionAdded: '0.42'
+ VersionChanged: '0.46'
+ EnforcedStyle: require_no_parentheses
+ SupportedStyles:
+ - require_parentheses
+ - require_no_parentheses
+ - require_parentheses_when_complex
+ AllowSafeAssignment: true
+
+Style/TrailingBodyOnClass:
+ Description: 'Class body goes below class statement.'
+ Enabled: true
+ VersionAdded: '0.53'
+
+Style/TrailingBodyOnMethodDefinition:
+ Description: 'Method body goes below definition.'
+ Enabled: true
+ VersionAdded: '0.52'
+
+Style/TrailingBodyOnModule:
+ Description: 'Module body goes below module statement.'
+ Enabled: true
+ VersionAdded: '0.53'
+
+Style/TrailingCommaInArguments:
+ Description: 'Checks for trailing comma in argument lists.'
+ StyleGuide: '#no-trailing-params-comma'
+ Enabled: true
+ VersionAdded: '0.36'
+ # If `comma`, the cop requires a comma after the last argument, but only for
+ # parenthesized method calls where each argument is on its own line.
+ # If `consistent_comma`, the cop requires a comma after the last argument,
+ # for all parenthesized method calls with arguments.
+ EnforcedStyleForMultiline: no_comma
+ SupportedStylesForMultiline:
+ - comma
+ - consistent_comma
+ - no_comma
+
+Style/TrailingCommaInArrayLiteral:
+ Description: 'Checks for trailing comma in array literals.'
+ StyleGuide: '#no-trailing-array-commas'
+ Enabled: true
+ VersionAdded: '0.53'
+ # If `comma`, the cop requires a comma after the last item in an array,
+ # but only when each item is on its own line.
+ # If `consistent_comma`, the cop requires a comma after the last item of all
+ # non-empty, multiline array literals.
+ EnforcedStyleForMultiline: no_comma
+ SupportedStylesForMultiline:
+ - comma
+ - consistent_comma
+ - no_comma
+
+Style/TrailingCommaInBlockArgs:
+ Description: 'Checks for useless trailing commas in block arguments.'
+ Enabled: false
+ Safe: false
+ VersionAdded: '0.81'
+
+Style/TrailingCommaInHashLiteral:
+ Description: 'Checks for trailing comma in hash literals.'
+ Enabled: true
+ # If `comma`, the cop requires a comma after the last item in a hash,
+ # but only when each item is on its own line.
+ # If `consistent_comma`, the cop requires a comma after the last item of all
+ # non-empty, multiline hash literals.
+ EnforcedStyleForMultiline: no_comma
+ SupportedStylesForMultiline:
+ - comma
+ - consistent_comma
+ - no_comma
+ VersionAdded: '0.53'
+
+Style/TrailingMethodEndStatement:
+ Description: 'Checks for trailing end statement on line of method body.'
+ Enabled: true
+ VersionAdded: '0.52'
+
+Style/TrailingUnderscoreVariable:
+ Description: >-
+ Checks for the usage of unneeded trailing underscores at the
+ end of parallel variable assignment.
+ AllowNamedUnderscoreVariables: true
+ Enabled: true
+ VersionAdded: '0.31'
+ VersionChanged: '0.35'
+
+# `TrivialAccessors` requires exact name matches and doesn't allow
+# predicated methods by default.
+Style/TrivialAccessors:
+ Description: 'Prefer attr_* methods to trivial readers/writers.'
+ StyleGuide: '#attr_family'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.77'
+ # When set to `false` the cop will suggest the use of accessor methods
+ # in situations like:
+ #
+ # def name
+ # @other_name
+ # end
+ #
+ # This way you can uncover "hidden" attributes in your code.
+ ExactNameMatch: true
+ AllowPredicates: true
+ # Allows trivial writers that don't end in an equal sign. e.g.
+ #
+ # def on_exception(action)
+ # @on_exception=action
+ # end
+ # on_exception :restart
+ #
+ # Commonly used in DSLs
+ AllowDSLWriters: false
+ IgnoreClassMethods: false
+ AllowedMethods:
+ - to_ary
+ - to_a
+ - to_c
+ - to_enum
+ - to_h
+ - to_hash
+ - to_i
+ - to_int
+ - to_io
+ - to_open
+ - to_path
+ - to_proc
+ - to_r
+ - to_regexp
+ - to_str
+ - to_s
+ - to_sym
+
+Style/UnlessElse:
+ Description: >-
+ Do not use unless with else. Rewrite these with the positive
+ case first.
+ StyleGuide: '#no-else-with-unless'
+ Enabled: true
+ VersionAdded: '0.9'
+
+Style/UnlessLogicalOperators:
+ Description: >-
+ Checks for use of logical operators in an unless condition.
+ Enabled: false
+ VersionAdded: '1.11'
+ EnforcedStyle: forbid_mixed_logical_operators
+ SupportedStyles:
+ - forbid_mixed_logical_operators
+ - forbid_logical_operators
+
+Style/UnpackFirst:
+ Description: >-
+ Checks for accessing the first element of `String#unpack`
+ instead of using `unpack1`.
+ Enabled: true
+ VersionAdded: '0.54'
+
+Style/VariableInterpolation:
+ Description: >-
+ Don't interpolate global, instance and class variables
+ directly in strings.
+ StyleGuide: '#curlies-interpolate'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.20'
+
+Style/WhenThen:
+ Description: 'Use when x then ... for one-line cases.'
+ StyleGuide: '#one-line-cases'
+ Enabled: true
+ VersionAdded: '0.9'
+
+Style/WhileUntilDo:
+ Description: 'Checks for redundant do after while or until.'
+ StyleGuide: '#no-multiline-while-do'
+ Enabled: true
+ VersionAdded: '0.9'
+
+Style/WhileUntilModifier:
+ Description: >-
+ Favor modifier while/until usage when you have a
+ single-line body.
+ StyleGuide: '#while-as-a-modifier'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.30'
+
+Style/WordArray:
+ Description: 'Use %w or %W for arrays of words.'
+ StyleGuide: '#percent-w'
+ Enabled: true
+ VersionAdded: '0.9'
+ VersionChanged: '0.36'
+ EnforcedStyle: percent
+ SupportedStyles:
+ # percent style: %w(word1 word2)
+ - percent
+ # bracket style: ['word1', 'word2']
+ - brackets
+ # The `MinSize` option causes the `WordArray` rule to be ignored for arrays
+ # smaller than a certain size. The rule is only applied to arrays
+ # whose element count is greater than or equal to `MinSize`.
+ MinSize: 2
+ # The regular expression `WordRegex` decides what is considered a word.
+ WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/'
+
+Style/YodaCondition:
+ Description: 'Forbid or enforce yoda conditions.'
+ Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions'
+ Enabled: true
+ EnforcedStyle: forbid_for_all_comparison_operators
+ SupportedStyles:
+ # check all comparison operators
+ - forbid_for_all_comparison_operators
+ # check only equality operators: `!=` and `==`
+ - forbid_for_equality_operators_only
+ # enforce yoda for all comparison operators
+ - require_for_all_comparison_operators
+ # enforce yoda only for equality operators: `!=` and `==`
+ - require_for_equality_operators_only
+ Safe: false
+ VersionAdded: '0.49'
+ VersionChanged: '0.75'
+
+Style/ZeroLengthPredicate:
+ Description: 'Use #empty? when testing for objects of length 0.'
+ Enabled: true
+ Safe: false
+ VersionAdded: '0.37'
+ VersionChanged: '0.39'