--- require: - rubocop-minitest - rubocop-performance - rubocop-rake AllCops: RubyInterpreters: - ruby - macruby - rake - jruby - rbx 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/**/*' DefaultFormatter: progress DisplayCopNames: true DisplayStyleGuide: false StyleGuideBaseURL: https://rubystyle.guide DocumentationBaseURL: https://docs.rubocop.org/rubocop ExtraDetails: false StyleGuideCopsOnly: false EnabledByDefault: false DisabledByDefault: false NewCops: enable UseCache: true MaxFilesInCache: 20000 CacheRootDirectory: ~ AllowSymlinksInCacheRootDirectory: false TargetRubyVersion: 3.1 SuggestExtensions: rubocop-rails: [rails] rubocop-rspec: [rspec, rspec-rails] rubocop-minitest: [minitest] rubocop-sequel: [sequel] rubocop-rake: [rake] rubocop-graphql: [graphql] #################### Bundler ############################### Bundler/DuplicatedGem: Description: 'Checks for duplicate gem entries in Gemfile.' Enabled: true VersionAdded: '0.46' Include: - '**/*.gemfile' - '**/Gemfile' - '**/gems.rb' Bundler/GemComment: Description: 'Add a comment describing each gem.' Enabled: false VersionAdded: '0.59' VersionChanged: '0.85' Include: - '**/*.gemfile' - '**/Gemfile' - '**/gems.rb' IgnoredGems: [] OnlyFor: [] Bundler/GemFilename: Description: 'Enforces the filename for managing gems.' Enabled: true VersionAdded: '1.20' EnforcedStyle: 'Gemfile' SupportedStyles: - 'Gemfile' - 'gems.rb' Include: - '**/Gemfile' - '**/gems.rb' - '**/Gemfile.lock' - '**/gems.locked' Bundler/GemVersion: Description: 'Requires or forbids specifying gem versions.' Enabled: false VersionAdded: '1.14' EnforcedStyle: 'required' SupportedStyles: - 'required' - 'forbidden' Include: - '**/*.gemfile' - '**/Gemfile' - '**/gems.rb' AllowedGems: [] Bundler/InsecureProtocolSource: Description: >- The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated because HTTP requests are insecure. Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not. Enabled: true VersionAdded: '0.50' AllowHttpProtocol: true Include: - '**/*.gemfile' - '**/Gemfile' - '**/gems.rb' Bundler/OrderedGems: Description: >- Gems within groups in the Gemfile should be alphabetically sorted. Enabled: true VersionAdded: '0.46' VersionChanged: '0.47' TreatCommentsAsGroupSeparators: true ConsiderPunctuation: false Include: - '**/*.gemfile' - '**/Gemfile' - '**/gems.rb' #################### Gemspec ############################### Gemspec/DependencyVersion: Description: 'Requires or forbids specifying gem dependency versions.' Enabled: false VersionAdded: '1.29' EnforcedStyle: 'required' SupportedStyles: - 'required' - 'forbidden' Include: - '**/*.gemspec' AllowedGems: [] Gemspec/DeprecatedAttributeAssignment: Description: Checks that deprecated attribute assignments are not set in a gemspec file. Enabled: pending VersionAdded: '1.30' 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 ConsiderPunctuation: false Include: - '**/*.gemspec' Gemspec/RequireMFA: Description: 'Checks that the gemspec has metadata to require Multi-Factor Authentication from RubyGems.' Enabled: pending VersionAdded: '1.23' Reference: - https://guides.rubygems.org/mfa-requirement-opt-in/ Include: - '**/*.gemspec' Gemspec/RequiredRubyVersion: Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.' Enabled: false VersionAdded: '0.52' VersionChanged: '1.22' 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 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' EnforcedStyle: with_first_argument SupportedStyles: - with_first_argument - with_fixed_indentation 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' EnforcedStyle: with_first_element SupportedStyles: - with_first_element - with_fixed_indentation 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' IndentationWidth: ~ Layout/BeginEndAlignment: Description: 'Align ends corresponding to begins correctly.' Enabled: true VersionAdded: '0.91' EnforcedStyleAlignWith: start_of_line SupportedStylesAlignWith: - start_of_line - begin Severity: warning Layout/BlockAlignment: Description: 'Align block ends correctly.' Enabled: true VersionAdded: '0.53' EnforcedStyleAlignWith: either SupportedStylesAlignWith: - either - start_of_block - start_of_line Layout/BlockEndNewline: Description: 'Put end statement of multiline block on its own line.' Enabled: true VersionAdded: '0.49' Layout/CaseIndentation: Description: 'Indentation of when in a case/(when|in)/[else/]end.' StyleGuide: '#indent-when-to-case' Enabled: true VersionAdded: '0.49' VersionChanged: '1.16' EnforcedStyle: case SupportedStyles: - case - end IndentOneStep: false IndentationWidth: ~ Layout/ClassStructure: Description: 'Enforces a configured order of definitions within a class body.' StyleGuide: '#consistent-classes' Enabled: false VersionAdded: '0.52' Categories: module_inclusion: - include - prepend - extend ExpectedOrder: - module_inclusion - constants - public_class_methods - initializer - public_methods - protected_methods - private_methods Layout/ClosingHeredocIndentation: Description: 'Checks the indentation of here document closings.' Enabled: true VersionAdded: '0.57' Layout/ClosingParenthesisIndentation: Description: 'Checks the indentation of hanging closing parentheses.' Enabled: true VersionAdded: '0.49' Layout/CommentIndentation: Description: 'Indentation of comments.' Enabled: true AllowForAlignment: false VersionAdded: '0.49' VersionChanged: '1.24' Layout/ConditionPosition: Description: >- Checks for condition placed in a confusing position relative to the keyword. StyleGuide: '#same-line-condition' Enabled: true VersionAdded: '0.53' VersionChanged: '0.83' Layout/DefEndAlignment: Description: 'Align ends corresponding to defs correctly.' Enabled: true VersionAdded: '0.53' 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.' Enabled: false VersionAdded: '0.90' Reference: - https://github.com/airbnb/ruby#multiline-if-newline Layout/EmptyLineBetweenDefs: Description: 'Use empty lines between class/module/method defs.' StyleGuide: '#empty-lines-between-methods' Enabled: true VersionAdded: '0.49' VersionChanged: '1.23' EmptyLineBetweenMethodDefs: true EmptyLineBetweenClassDefs: true EmptyLineBetweenModuleDefs: true AllowAdjacentOneLineDefs: true 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: - 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' 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' EnforcedStyle: native SupportedStyles: - native - lf - crlf Layout/ExtraSpacing: Description: 'Do not use unnecessary spacing.' Enabled: true VersionAdded: '0.49' AllowForAlignment: true AllowBeforeTrailingComments: false 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: - consistent - consistent_relative_to_receiver - special_for_inner_method_call - special_for_inner_method_call_in_parentheses IndentationWidth: ~ Layout/FirstArrayElementIndentation: Description: >- Checks the indentation of the first element in an array literal. Enabled: true VersionAdded: '0.68' VersionChanged: '0.77' EnforcedStyle: special_inside_parentheses SupportedStyles: - special_inside_parentheses - consistent - align_brackets 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' EnforcedStyle: special_inside_parentheses SupportedStyles: - special_inside_parentheses - consistent - align_braces IndentationWidth: ~ Layout/FirstHashElementLineBreak: Description: >- Checks for a line break before the first element in a multi-line hash. Enabled: false VersionAdded: '0.49' Layout/FirstMethodArgumentLineBreak: Description: >- Checks for a line break before the first argument in a multi-line method call. Enabled: false VersionAdded: '0.49' Layout/FirstMethodParameterLineBreak: Description: >- Checks for a line break before the first parameter in a multi-line method parameter definition. Enabled: false VersionAdded: '0.49' Layout/FirstParameterIndentation: Description: >- Checks the indentation of the first parameter in a method definition. Enabled: true VersionAdded: '0.49' VersionChanged: '0.77' EnforcedStyle: consistent SupportedStyles: - consistent - align_parentheses IndentationWidth: ~ Layout/HashAlignment: Description: >- Align the elements of a hash literal if they span more than one line. Enabled: true AllowMultipleStyles: true VersionAdded: '0.49' VersionChanged: '1.16' EnforcedHashRocketStyle: key SupportedHashRocketStyles: - key - separator - table EnforcedColonStyle: key SupportedColonStyles: - key - separator - table EnforcedLastArgumentHashStyle: always_inspect SupportedLastArgumentHashStyles: - always_inspect - always_ignore - ignore_implicit - ignore_explicit Layout/HeredocArgumentClosingParenthesis: Description: >- Checks for the placement of the closing parenthesis in a method call that passes a HEREDOC string as an argument. Enabled: false StyleGuide: '#heredoc-argument-closing-parentheses' VersionAdded: '0.68' Layout/HeredocIndentation: Description: 'Checks the indentation of the here document bodies.' StyleGuide: '#squiggly-heredocs' Enabled: true VersionAdded: '0.49' VersionChanged: '0.85' Layout/IndentationConsistency: Description: 'Keep indentation straight.' StyleGuide: '#spaces-indentation' Enabled: true VersionAdded: '0.49' EnforcedStyle: normal SupportedStyles: - normal - indented_internal_methods Reference: - 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' IndentationWidth: ~ EnforcedStyle: spaces SupportedStyles: - spaces - tabs Layout/IndentationWidth: Description: 'Use 2 spaces for indentation.' StyleGuide: '#spaces-indentation' Enabled: true VersionAdded: '0.49' Width: 2 AllowedPatterns: [] Layout/InitialIndentation: Description: >- Checks the indentation of the first non-blank non-comment line in a file. Enabled: true VersionAdded: '0.49' Layout/LeadingCommentSpace: Description: 'Comments should start with a space.' StyleGuide: '#hash-space' Enabled: true VersionAdded: '0.49' VersionChanged: '0.73' AllowDoxygenCommentStyle: false AllowGemfileRubyComment: false Layout/LeadingEmptyLines: Description: Check for unnecessary blank lines at the beginning of a file. Enabled: true VersionAdded: '0.57' VersionChanged: '0.77' Layout/LineEndStringConcatenationIndentation: Description: >- Checks the indentation of the next line after a line that ends with a string literal and a backslash. Enabled: pending VersionAdded: '1.18' EnforcedStyle: aligned SupportedStyles: - aligned - indented IndentationWidth: ~ Layout/LineLength: Description: 'Checks that line length does not exceed the configured limit.' StyleGuide: '#max-line-length' Enabled: true VersionAdded: '0.25' VersionChanged: '1.4' Max: 120 AllowHeredoc: true AllowURI: true URISchemes: - http - https IgnoreCopDirectives: true AllowedPatterns: [] Layout/MultilineArrayBraceLayout: Description: >- Checks that the closing brace in an array literal is either on the same line as the last array element, or a new line. Enabled: true VersionAdded: '0.49' EnforcedStyle: symmetrical SupportedStyles: - symmetrical - 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' Layout/MultilineAssignmentLayout: Description: 'Check for a newline after the assignment operator in multi-line assignments.' StyleGuide: '#indent-conditional-assignment' Enabled: false VersionAdded: '0.49' SupportedTypes: - block - case - class - if - kwbegin - module EnforcedStyle: new_line SupportedStyles: - same_line - new_line Layout/MultilineBlockLayout: Description: 'Ensures newlines after multiline block do statements.' Enabled: true VersionAdded: '0.49' Layout/MultilineHashBraceLayout: Description: >- Checks that the closing brace in a hash literal is either on the same line as the last hash element, or a new line. Enabled: true VersionAdded: '0.49' EnforcedStyle: symmetrical SupportedStyles: - symmetrical - new_line - same_line Layout/MultilineHashKeyLineBreaks: Description: >- Checks that each item in a multi-line hash literal starts on a separate line. Enabled: false VersionAdded: '0.67' Layout/MultilineMethodArgumentLineBreaks: Description: >- Checks that each argument in a multi-line method call starts on a separate line. Enabled: false VersionAdded: '0.67' 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 - 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 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 - 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 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' EnforcedStyle: with_first_parameter SupportedStyles: - with_first_parameter - with_fixed_indentation IndentationWidth: ~ Layout/RedundantLineBreak: Description: >- Do not break up an expression into multiple lines when it fits on a single line. Enabled: false InspectBlocks: false VersionAdded: '1.13' Layout/RescueEnsureAlignment: Description: 'Align rescues and ensures correctly.' Enabled: true VersionAdded: '0.49' Layout/SingleLineBlockChain: Description: 'Put method call on a separate line if chained to a single line block.' Enabled: false VersionAdded: '1.14' Layout/SpaceAfterColon: Description: 'Use spaces after colons.' StyleGuide: '#spaces-operators' Enabled: true VersionAdded: '0.49' Layout/SpaceAfterComma: Description: 'Use spaces after commas.' StyleGuide: '#spaces-operators' Enabled: true VersionAdded: '0.49' Layout/SpaceAfterMethodName: Description: >- Do not put a space between a method name and the opening parenthesis in a method definition. StyleGuide: '#parens-no-spaces' Enabled: true VersionAdded: '0.49' Layout/SpaceAfterNot: Description: Tracks redundant space after the ! operator. StyleGuide: '#no-space-bang' Enabled: true VersionAdded: '0.49' Layout/SpaceAfterSemicolon: Description: 'Use spaces after semicolons.' StyleGuide: '#spaces-operators' Enabled: true VersionAdded: '0.49' Layout/SpaceAroundBlockParameters: Description: 'Checks the spacing inside and after block parameters pipes.' Enabled: true VersionAdded: '0.49' EnforcedStyleInsidePipes: no_space SupportedStylesInsidePipes: - space - no_space Layout/SpaceAroundEqualsInParameterDefault: Description: >- Checks that the equals signs in parameter default assignments have or don't have surrounding space depending on configuration. StyleGuide: '#spaces-around-equals' Enabled: true VersionAdded: '0.49' EnforcedStyle: space SupportedStyles: - space - no_space Layout/SpaceAroundKeyword: Description: 'Use a space around keywords if appropriate.' Enabled: true VersionAdded: '0.49' Layout/SpaceAroundMethodCallOperator: Description: 'Checks method call operators to not have spaces around them.' Enabled: true VersionAdded: '0.82' Layout/SpaceAroundOperators: Description: 'Use a single space around operators.' StyleGuide: '#spaces-operators' Enabled: true VersionAdded: '0.49' 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' 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 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 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 EnforcedStyleForEmptyBraces: no_space SupportedStylesForEmptyBraces: - space - no_space Layout/SpaceInsideParens: Description: 'No spaces after ( or before ).' StyleGuide: '#spaces-braces' Enabled: true VersionAdded: '0.49' VersionChanged: '1.22' EnforcedStyle: no_space SupportedStyles: - space - compact - no_space Layout/SpaceInsidePercentLiteralDelimiters: Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.' Enabled: true VersionAdded: '0.49' Layout/SpaceInsideRangeLiteral: Description: 'No spaces inside range literals.' StyleGuide: '#no-space-inside-range-literals' Enabled: true VersionAdded: '0.49' Layout/SpaceInsideReferenceBrackets: Description: 'Checks the spacing inside referential brackets.' Enabled: true VersionAdded: '0.52' VersionChanged: '0.53' EnforcedStyle: no_space SupportedStyles: - space - no_space EnforcedStyleForEmptyBrackets: no_space SupportedStylesForEmptyBrackets: - space - no_space Layout/SpaceInsideStringInterpolation: Description: 'Checks for padding/surrounding spaces inside string interpolation.' StyleGuide: '#string-interpolation' Enabled: true VersionAdded: '0.49' EnforcedStyle: no_space SupportedStyles: - space - no_space Layout/TrailingEmptyLines: Description: 'Checks trailing blank lines and final newline.' StyleGuide: '#newline-eof' Enabled: true VersionAdded: '0.49' VersionChanged: '0.77' EnforcedStyle: final_newline SupportedStyles: - final_newline - final_blank_line Layout/TrailingWhitespace: Description: 'Avoid trailing whitespace.' StyleGuide: '#no-trailing-whitespace' Enabled: true VersionAdded: '0.49' VersionChanged: '1.0' AllowInHeredoc: false #################### Lint ################################## ### Warnings Lint/AmbiguousAssignment: Description: 'Checks for mistyped shorthand assignments.' Enabled: pending VersionAdded: '1.7' Lint/AmbiguousBlockAssociation: Description: >- Checks for ambiguous block association with method when param passed without parentheses. StyleGuide: '#syntax' Enabled: true VersionAdded: '0.48' VersionChanged: '1.13' Lint/AmbiguousOperator: Description: >- Checks for ambiguous operators in the first argument of a method invocation without parentheses. StyleGuide: '#method-invocation-parens' Enabled: true VersionAdded: '0.17' VersionChanged: '0.83' Lint/AmbiguousOperatorPrecedence: Description: >- Checks for expressions containing multiple binary operations with ambiguous precedence. Enabled: pending VersionAdded: '1.21' Lint/AmbiguousRange: Description: Checks for ranges with ambiguous boundaries. Enabled: pending VersionAdded: '1.19' SafeAutoCorrect: false RequireParenthesesForMethodChains: false Lint/AmbiguousRegexpLiteral: Description: >- Checks for ambiguous regexp literals in the first argument of a method invocation without parentheses. Enabled: true VersionAdded: '0.17' VersionChanged: '0.83' Lint/AssignmentInCondition: Description: "Don't use assignment in conditions." StyleGuide: '#safe-assignment-in-condition' Enabled: true VersionAdded: '0.9' AllowSafeAssignment: true Lint/BigDecimalNew: Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.' Enabled: true VersionAdded: '0.53' Lint/BinaryOperatorWithIdenticalOperands: Description: 'Checks for places where binary operator has identical operands.' Enabled: true Safe: false VersionAdded: '0.89' VersionChanged: '1.7' Lint/BooleanSymbol: Description: 'Check for `:true` and `:false` symbols.' Enabled: true SafeAutoCorrect: false VersionAdded: '0.50' VersionChanged: '1.22' Lint/CircularArgumentReference: Description: 'Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument.' Enabled: true VersionAdded: '0.33' Lint/ConstantDefinitionInBlock: Description: 'Do not define constants within a block.' StyleGuide: '#no-constant-definition-in-block' Enabled: true VersionAdded: '0.91' VersionChanged: '1.3' AllowedMethods: - enums Lint/ConstantResolution: Description: 'Check that constants are fully qualified with `::`.' Enabled: false VersionAdded: '0.86' Only: [] Ignore: [] Lint/Debugger: Description: 'Check for debugger calls.' Enabled: true VersionAdded: '0.14' VersionChanged: '1.10' DebuggerMethods: Kernel: - binding.irb Byebug: - byebug - remote_byebug - Kernel.byebug - Kernel.remote_byebug Capybara: - save_and_open_page - save_and_open_screenshot debug.rb: - binding.b - binding.break - Kernel.binding.b - Kernel.binding.break Pry: - binding.pry - binding.remote_pry - binding.pry_remote - Pry.rescue Rails: - debugger - Kernel.debugger RubyJard: - jard WebConsole: - binding.console Lint/DeprecatedClassMethods: Description: 'Check for deprecated class method calls.' Enabled: true VersionAdded: '0.19' Lint/DeprecatedConstants: Description: 'Checks for deprecated constants.' Enabled: pending VersionAdded: '1.8' VersionChanged: '1.22' DeprecatedConstants: 'NIL': Alternative: 'nil' DeprecatedVersion: '2.4' 'TRUE': Alternative: 'true' DeprecatedVersion: '2.4' 'FALSE': Alternative: 'false' DeprecatedVersion: '2.4' 'Net::HTTPServerException': Alternative: 'Net::HTTPClientException' DeprecatedVersion: '2.6' 'Random::DEFAULT': Alternative: 'Random.new' DeprecatedVersion: '3.0' 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 SafeAutoCorrect: false VersionAdded: '0.90' VersionChanged: '1.28' Lint/DuplicateRescueException: Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.' Enabled: true VersionAdded: '0.89' Lint/EachWithObjectArgument: Description: 'Check for immutable argument given to each_with_object.' Enabled: true VersionAdded: '0.31' Lint/ElseLayout: Description: 'Check for odd code arrangement in an else block.' Enabled: true VersionAdded: '0.17' VersionChanged: '1.2' Lint/EmptyBlock: Description: 'Checks for blocks without a body.' Enabled: pending VersionAdded: '1.1' VersionChanged: '1.15' AllowComments: true AllowEmptyLambdas: true Lint/EmptyClass: Description: 'Checks for classes and metaclasses without a body.' Enabled: pending VersionAdded: '1.3' AllowComments: false Lint/EmptyConditionalBody: Description: 'Checks for the presence of `if`, `elsif` and `unless` branches without a body.' Enabled: true 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/EmptyInPattern: Description: 'Checks for the presence of `in` pattern branches without a body.' Enabled: pending AllowComments: true VersionAdded: '1.16' Lint/EmptyInterpolation: Description: 'Checks for empty string interpolation.' Enabled: true VersionAdded: '0.20' VersionChanged: '0.45' Lint/EmptyWhen: Description: 'Checks for `when` branches with empty bodies.' Enabled: true AllowComments: true VersionAdded: '0.45' VersionChanged: '0.83' Lint/EnsureReturn: Description: 'Do not use return in an ensure block.' StyleGuide: '#no-return-ensure' Enabled: true VersionAdded: '0.9' VersionChanged: '0.83' Lint/ErbNewArguments: Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.' Enabled: true VersionAdded: '0.56' Lint/FlipFlop: Description: 'Checks for flip-flops.' StyleGuide: '#no-flip-flops' Enabled: true VersionAdded: '0.16' Lint/FloatComparison: Description: 'Checks for the presence of precise comparison of floating point numbers.' StyleGuide: '#float-comparison' Enabled: true VersionAdded: '0.89' Lint/FloatOutOfRange: Description: >- Catches floating-point literals too large or small for Ruby to represent. Enabled: true VersionAdded: '0.36' Lint/FormatParameterMismatch: Description: 'The number of parameters to format/sprint must match the fields.' Enabled: true VersionAdded: '0.33' Lint/HashCompareByIdentity: Description: 'Prefer using `Hash#compare_by_identity` than using `object_id` for keys.' StyleGuide: '#identity-comparison' Enabled: true Safe: false VersionAdded: '0.93' Lint/HeredocMethodCallPosition: Description: >- Checks for the ordering of a method call where the receiver of the call is a HEREDOC. Enabled: false StyleGuide: '#heredoc-method-calls' VersionAdded: '0.68' Lint/IdentityComparison: Description: 'Prefer `equal?` over `==` when comparing `object_id`.' Enabled: true StyleGuide: '#identity-comparison' VersionAdded: '0.91' Lint/ImplicitStringConcatenation: Description: >- Checks for adjacent string literals on the same line, which could better be represented as a single string literal. Enabled: true VersionAdded: '0.36' Lint/IncompatibleIoSelectWithFiberScheduler: Description: 'Checks for `IO.select` that is incompatible with Fiber Scheduler.' Enabled: pending SafeAutoCorrect: false VersionAdded: '1.21' VersionChanged: '1.24' Lint/IneffectiveAccessModifier: Description: >- Checks for attempts to use `private` or `protected` to set the visibility of a class method, which does not work. Enabled: true VersionAdded: '0.36' Lint/InheritException: Description: 'Avoid inheriting from the `Exception` class.' Enabled: true SafeAutoCorrect: false VersionAdded: '0.41' VersionChanged: '1.26' # The default base class in favour of `Exception`. EnforcedStyle: standard_error SupportedStyles: - standard_error - runtime_error Lint/InterpolationCheck: Description: 'Raise warning for interpolation in single q strs.' Enabled: true 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' MaximumRangeSize: .inf Lint/MissingSuper: Description: >- Checks for the presence of constructors and lifecycle callbacks without calls to `super`. Enabled: true VersionAdded: '0.89' VersionChanged: '1.4' Lint/MixedRegexpCaptureTypes: Description: 'Do not mix named captures and numbered captures in a Regexp literal.' Enabled: true VersionAdded: '0.85' Lint/MultipleComparison: Description: 'Use `&&` operator to compare multiple values.' Enabled: true VersionAdded: '0.47' VersionChanged: '1.1' Lint/NestedMethodDefinition: Description: 'Do not use nested method definitions.' StyleGuide: '#no-nested-methods' Enabled: true 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 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' VersionChanged: '1.26' SafeAutoCorrect: false Lint/RedundantRequireStatement: Description: 'Checks for unnecessary `require` statement.' Enabled: true VersionAdded: '0.76' Lint/RedundantSafeNavigation: Description: 'Checks for redundant safe navigation calls.' Enabled: true VersionAdded: '0.93' AllowedMethods: - instance_of? - kind_of? - is_a? - eql? - respond_to? - equal? Safe: false Lint/RedundantSplatExpansion: Description: 'Checks for splat unnecessarily being called on literals.' Enabled: true VersionAdded: '0.76' VersionChanged: '1.7' AllowPercentLiteralArrayArgument: true Lint/RedundantStringCoercion: Description: 'Checks for Object#to_s usage in string interpolation.' StyleGuide: '#no-to-s' Enabled: true VersionAdded: '0.19' VersionChanged: '0.77' Lint/RedundantWithIndex: Description: 'Checks for redundant `with_index`.' Enabled: true VersionAdded: '0.50' Lint/RedundantWithObject: Description: 'Checks for redundant `with_object`.' Enabled: true VersionAdded: '0.51' Lint/RefinementImportMethods: Description: 'Use `Refinement#import_methods` when using `include` or `prepend` in `refine` block.' Enabled: pending SafeAutoCorrect: false VersionAdded: '1.27' Lint/RegexpAsCondition: Description: >- Do not use regexp literal as a condition. The regexp literal matches `$_` implicitly. Enabled: true VersionAdded: '0.51' VersionChanged: '0.86' Lint/RequireParentheses: Description: >- Use parentheses in the method call to avoid confusion about precedence. Enabled: true VersionAdded: '0.18' Lint/RequireRelativeSelfPath: Description: 'Checks for uses a file requiring itself with `require_relative`.' Enabled: pending VersionAdded: '1.22' Lint/RescueException: Description: 'Avoid rescuing the Exception class.' StyleGuide: '#no-blind-rescues' Enabled: true VersionAdded: '0.9' VersionChanged: '0.27' Lint/RescueType: Description: 'Avoid rescuing from non constants that could result in a `TypeError`.' Enabled: true VersionAdded: '0.49' Lint/ReturnInVoidContext: Description: 'Checks for return in void context.' Enabled: true VersionAdded: '0.50' Lint/SafeNavigationChain: Description: 'Do not chain ordinary method call after safe navigation operator.' Enabled: true VersionAdded: '0.47' VersionChanged: '0.77' AllowedMethods: - present? - blank? - presence - try - try! - in? Lint/SafeNavigationConsistency: Description: >- Check to make sure that if safe navigation is used for a method call in an `&&` or `||` condition that safe navigation is used for all method calls on that same object. Enabled: true VersionAdded: '0.55' VersionChanged: '0.77' AllowedMethods: - present? - blank? - presence - try - try! Lint/SafeNavigationWithEmpty: Description: 'Avoid `foo&.empty?` in conditionals.' Enabled: true VersionAdded: '0.62' VersionChanged: '0.87' Lint/ScriptPermission: Description: 'Grant script file execute permission.' Enabled: true VersionAdded: '0.49' VersionChanged: '0.50' Lint/SelfAssignment: Description: 'Checks for self-assignments.' Enabled: true VersionAdded: '0.89' Lint/SendWithMixinArgument: Description: 'Checks for `send` method when using mixin.' Enabled: true VersionAdded: '0.75' Lint/ShadowedArgument: Description: 'Avoid reassigning arguments before they were used.' Enabled: true VersionAdded: '0.52' IgnoreImplicitReferences: false Lint/ShadowedException: Description: >- Avoid rescuing a higher level exception before a lower level exception. Enabled: true VersionAdded: '0.41' Lint/ShadowingOuterLocalVariable: Description: >- Do not use the same name as outer local variable for block arguments or block local variables. Enabled: true VersionAdded: '0.9' Lint/StructNewOverride: Description: 'Disallow overriding the `Struct` built-in methods via `Struct.new`.' Enabled: true VersionAdded: '0.81' Lint/SuppressedException: Description: "Don't suppress exceptions." StyleGuide: '#dont-hide-exceptions' Enabled: true AllowComments: true AllowNil: true VersionAdded: '0.9' VersionChanged: '1.12' Lint/SymbolConversion: Description: 'Checks for unnecessary symbol conversions.' Enabled: pending VersionAdded: '1.9' VersionChanged: '1.16' EnforcedStyle: strict SupportedStyles: - strict - consistent Lint/Syntax: Description: 'Checks for syntax errors.' Enabled: true VersionAdded: '0.9' Lint/ToEnumArguments: Description: 'Ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.' Enabled: pending VersionAdded: '1.1' Lint/ToJSON: Description: 'Ensure #to_json includes an optional argument.' Enabled: true VersionAdded: '0.66' Lint/TopLevelReturnWithArgument: Description: 'Detects top level return statements with argument.' Enabled: true VersionAdded: '0.89' Lint/TrailingCommaInAttributeDeclaration: Description: 'Checks for trailing commas in attribute declarations.' Enabled: true VersionAdded: '0.90' Lint/TripleQuotes: Description: 'Checks for useless triple quote constructs.' Enabled: pending VersionAdded: '1.9' Lint/UnderscorePrefixedVariableName: Description: 'Do not use prefix `_` for a variable that is used.' Enabled: true VersionAdded: '0.21' AllowKeywordBlockArguments: false Lint/UnexpectedBlockArity: Description: 'Looks for blocks that have fewer arguments that the calling method expects.' Enabled: pending Safe: false VersionAdded: '1.5' Methods: chunk_while: 2 each_with_index: 2 each_with_object: 2 inject: 2 max: 2 min: 2 minmax: 2 reduce: 2 slice_when: 2 sort: 2 Lint/UnifiedInteger: Description: 'Use Integer instead of Fixnum or Bignum.' Enabled: true VersionAdded: '0.43' Lint/UnmodifiedReduceAccumulator: Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration. Enabled: pending VersionAdded: '1.1' VersionChanged: '1.5' Lint/UnreachableCode: Description: 'Unreachable code.' Enabled: true VersionAdded: '0.9' Lint/UnreachableLoop: Description: 'Checks for loops that will have at most one iteration.' Enabled: true VersionAdded: '0.89' VersionChanged: '1.7' AllowedPatterns: - !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/UselessMethodDefinition: Description: 'Checks for useless method definitions.' Enabled: true VersionAdded: '0.90' VersionChanged: '0.91' Safe: false Lint/UselessRuby2Keywords: Description: 'Finds unnecessary uses of `ruby2_keywords`.' Enabled: pending VersionAdded: '1.23' Lint/UselessSetterCall: Description: 'Checks for useless setter call to a local variable.' Enabled: true SafeAutoCorrect: false VersionAdded: '0.13' VersionChanged: '1.2' Safe: false Lint/UselessTimes: Description: 'Checks for useless `Integer#times` calls.' Enabled: true VersionAdded: '0.91' Safe: false Lint/Void: Description: 'Possible use of operator/literal/variable in void context.' Enabled: true VersionAdded: '0.9' CheckForMethodsWithNoSideEffects: false #################### Metrics ############################### Metrics/AbcSize: Description: >- A calculated magnitude based on number of assignments, branches, and conditions. Reference: - http://c2.com/cgi/wiki?AbcMetric - https://en.wikipedia.org/wiki/ABC_Software_Metric Enabled: true VersionAdded: '0.27' VersionChanged: '1.5' CountRepeatedAttributes: true Max: 17 Metrics/BlockLength: Description: 'Avoid long blocks with many lines.' Enabled: true VersionAdded: '0.44' VersionChanged: '1.5' CountComments: false Max: 25 CountAsOne: [] Exclude: - '**/*.gemspec' Metrics/BlockNesting: Description: 'Avoid excessive block nesting.' StyleGuide: '#three-is-the-number-thou-shalt-count' Enabled: true VersionAdded: '0.25' VersionChanged: '0.47' CountBlocks: false Max: 3 Metrics/ClassLength: Description: 'Avoid classes longer than 100 lines of code.' Enabled: true VersionAdded: '0.25' VersionChanged: '0.87' CountComments: false Max: 100 CountAsOne: [] Metrics/CyclomaticComplexity: Description: >- A complexity metric that is strongly correlated to the number of test cases needed to validate a method. Enabled: true VersionAdded: '0.25' VersionChanged: '0.81' Max: 7 Metrics/MethodLength: Description: 'Avoid methods longer than 10 lines of code.' StyleGuide: '#short-methods' Enabled: true VersionAdded: '0.25' VersionChanged: '1.5' CountComments: false Max: 10 CountAsOne: [] Metrics/ModuleLength: Description: 'Avoid modules longer than 100 lines of code.' Enabled: true VersionAdded: '0.31' VersionChanged: '0.87' CountComments: false Max: 100 CountAsOne: [] Metrics/ParameterLists: Description: 'Avoid parameter lists longer than three or four parameters.' StyleGuide: '#too-many-params' Enabled: true VersionAdded: '0.25' VersionChanged: '1.5' Max: 5 CountKeywordArgs: true MaxOptionalParameters: 3 Metrics/PerceivedComplexity: Description: >- A complexity metric geared towards measuring complexity for a human reader. Enabled: true VersionAdded: '0.25' VersionChanged: '0.81' Max: 8 ################## Migration ############################# Migration/DepartmentName: Description: >- Check that cop names in rubocop:disable (etc) comments are given with department name. Enabled: true VersionAdded: '0.75' #################### Naming ############################## Naming/AccessorMethodName: Description: Check the naming of accessor methods for get_/set_. StyleGuide: '#accessor_mutator_method_names' Enabled: true VersionAdded: '0.50' Naming/AsciiIdentifiers: Description: 'Use only ascii symbols in identifiers and constants.' StyleGuide: '#english-identifiers' Enabled: true VersionAdded: '0.50' VersionChanged: '0.87' AsciiConstants: true Naming/BinaryOperatorParameterName: Description: 'When defining binary operators, name the argument other.' StyleGuide: '#other-arg' Enabled: true VersionAdded: '0.50' VersionChanged: '1.2' Naming/BlockForwarding: Description: 'Use anonymous block forwarding.' StyleGuide: '#block-forwarding' Enabled: pending VersionAdded: '1.24' EnforcedStyle: anonymous SupportedStyles: - anonymous - explicit BlockForwardingName: block Naming/BlockParameterName: Description: >- Checks for block parameter names that contain capital letters, end in numbers, or do not meet a minimal length. Enabled: true VersionAdded: '0.53' VersionChanged: '0.77' MinNameLength: 1 AllowNamesEndingInNumbers: true AllowedNames: [] ForbiddenNames: [] Naming/ClassAndModuleCamelCase: Description: 'Use CamelCase for classes and modules.' StyleGuide: '#camelcase-classes' Enabled: true VersionAdded: '0.50' VersionChanged: '0.85' AllowedNames: - module_parent Naming/ConstantName: Description: 'Constants should use SCREAMING_SNAKE_CASE.' StyleGuide: '#screaming-snake-case' Enabled: true VersionAdded: '0.50' Naming/FileName: Description: 'Use snake_case for source file names.' StyleGuide: '#snake-case-files' Enabled: true VersionAdded: '0.50' VersionChanged: '1.23' Exclude: ['./lib/simplecov-tailwindcss.rb'] ExpectMatchingDefinition: false CheckDefinitionPathHierarchy: true CheckDefinitionPathHierarchyRoots: - lib - spec - test - src Regex: ~ 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/InclusiveLanguage: Description: 'Recommend the use of inclusive language instead of problematic terms.' Enabled: false VersionAdded: '1.18' VersionChanged: '1.21' CheckIdentifiers: true CheckConstants: true CheckVariables: true CheckStrings: false CheckSymbols: true CheckComments: true CheckFilepaths: true FlaggedTerms: whitelist: Regex: !ruby/regexp '/white[-_\s]?list/' Suggestions: - allowlist - permit blacklist: Regex: !ruby/regexp '/black[-_\s]?list/' Suggestions: - denylist - block slave: WholeWord: true Suggestions: ['replica', 'secondary', 'follower'] Naming/MemoizedInstanceVariableName: Description: >- Memoized method name should match memo instance variable name. Enabled: true VersionAdded: '0.53' VersionChanged: '1.2' EnforcedStyleForLeadingUnderscores: disallowed SupportedStylesForLeadingUnderscores: - disallowed - required - optional Safe: false Naming/MethodName: Description: 'Use the configured style when naming methods.' StyleGuide: '#snake-case-symbols-methods-vars' Enabled: true VersionAdded: '0.50' EnforcedStyle: snake_case SupportedStyles: - snake_case - camelCase AllowedPatterns: [] Naming/MethodParameterName: Description: >- Checks for method parameter names that contain capital letters, end in numbers, or do not meet a minimal length. Enabled: true VersionAdded: '0.53' VersionChanged: '0.77' MinNameLength: 3 AllowNamesEndingInNumbers: true AllowedNames: - at - by - db - id - in - io - ip - of - 'on' - os - pp - to ForbiddenNames: [] Naming/PredicateName: Description: 'Check the names of predicate methods.' StyleGuide: '#bool-methods-qmark' Enabled: true VersionAdded: '0.50' VersionChanged: '0.77' NamePrefix: - is_ - has_ - have_ ForbiddenPrefixes: - is_ - has_ - have_ AllowedMethods: - is_a? MethodDefinitionMacros: - define_method - define_singleton_method Exclude: - 'spec/**/*' Naming/RescuedExceptionsVariableName: Description: 'Use consistent rescued exceptions variables naming.' Enabled: true VersionAdded: '0.67' VersionChanged: '0.68' PreferredName: e Naming/VariableName: Description: 'Use the configured style when naming variables.' StyleGuide: '#snake-case-symbols-methods-vars' Enabled: true VersionAdded: '0.50' VersionChanged: '1.8' EnforcedStyle: snake_case SupportedStyles: - snake_case - camelCase AllowedIdentifiers: [] AllowedPatterns: [] Naming/VariableNumber: Description: 'Use the configured style when numbering symbols, methods and variables.' StyleGuide: '#snake-case-symbols-methods-vars-with-numbers' Enabled: true VersionAdded: '0.50' VersionChanged: '1.4' EnforcedStyle: normalcase SupportedStyles: - snake_case - normalcase - non_integer CheckMethodNames: true CheckSymbols: true AllowedIdentifiers: - capture3 # Open3.capture3 - iso8601 # Time#iso8601 - rfc1123_date # CGI.rfc1123_date - rfc822 # Time#rfc822 - rfc2822 # Time#rfc2822 - rfc3339 # DateTime.rfc3339 AllowedPatterns: [] #################### Security ############################## Security/CompoundHash: Description: 'When overwriting Object#hash to combine values, prefer delegating to Array#hash over writing a custom implementation.' Enabled: pending VersionAdded: '1.28' Security/Eval: Description: 'The use of eval represents a serious security risk.' Enabled: true VersionAdded: '0.47' Security/IoMethods: Description: >- Checks for the first argument to `IO.read`, `IO.binread`, `IO.write`, `IO.binwrite`, `IO.foreach`, and `IO.readlines`. Enabled: pending Safe: false VersionAdded: '1.22' Security/JSONLoad: Description: >- Prefer usage of `JSON.parse` over `JSON.load` due to potential security issues. See reference for more information. Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/json/rdoc/JSON.html#method-i-load' Enabled: true VersionAdded: '0.43' VersionChanged: '1.22' 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 - grouped Style/Alias: Description: 'Use alias instead of alias_method.' StyleGuide: '#alias-method-lexically' Enabled: true VersionAdded: '0.9' VersionChanged: '0.36' EnforcedStyle: prefer_alias SupportedStyles: - prefer_alias - prefer_alias_method Style/AndOr: Description: 'Use &&/|| instead of and/or.' StyleGuide: '#no-and-or-or' Enabled: true SafeAutoCorrect: false VersionAdded: '0.9' VersionChanged: '1.21' EnforcedStyle: conditionals SupportedStyles: - always - conditionals Style/ArgumentsForwarding: Description: 'Use arguments forwarding.' StyleGuide: '#arguments-forwarding' Enabled: pending AllowOnlyRestArgument: true VersionAdded: '1.1' Style/ArrayCoercion: Description: >- Use Array() instead of explicit Array check or [*var], when dealing with a variable you want to treat as an Array, but you're not certain it's an array. StyleGuide: '#array-coercion' Safe: false Enabled: false VersionAdded: '0.88' Style/ArrayJoin: Description: 'Use Array#join instead of Array#*.' StyleGuide: '#array-join' Enabled: true VersionAdded: '0.20' VersionChanged: '0.31' Style/AsciiComments: Description: 'Use only ascii symbols in comments.' StyleGuide: '#english-comments' Enabled: false VersionAdded: '0.9' VersionChanged: '1.21' AllowedChars: - © Style/Attr: Description: 'Checks for uses of Module#attr.' StyleGuide: '#attr' Enabled: true VersionAdded: '0.9' VersionChanged: '0.12' Style/AutoResourceCleanup: Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).' Enabled: false VersionAdded: '0.30' Style/BarePercentLiterals: Description: 'Checks if usage of %() or %Q() matches configuration.' StyleGuide: '#percent-q-shorthand' Enabled: true VersionAdded: '0.25' EnforcedStyle: bare_percent SupportedStyles: - percent_q - bare_percent Style/BeginBlock: Description: 'Avoid the use of BEGIN blocks.' StyleGuide: '#no-BEGIN-blocks' Enabled: true VersionAdded: '0.9' Style/BisectedAttrAccessor: Description: >- Checks for places where `attr_reader` and `attr_writer` for the same method can be combined into single `attr_accessor`. Enabled: true VersionAdded: '0.87' Style/BlockComments: Description: 'Do not use block comments.' StyleGuide: '#no-block-comments' Enabled: true VersionAdded: '0.9' VersionChanged: '0.23' Style/BlockDelimiters: Description: >- Avoid using {...} for multi-line blocks (multiline chaining is always ugly). Prefer {...} over do...end for single-line blocks. StyleGuide: '#single-line-blocks' Enabled: true VersionAdded: '0.30' VersionChanged: '0.35' EnforcedStyle: line_count_based SupportedStyles: - line_count_based - semantic - braces_for_chaining - always_braces ProceduralMethods: - benchmark - bm - bmbm - create - each_with_object - measure - new - realtime - tap - with_object FunctionalMethods: - let - let! - subject - watch AllowBracesOnProceduralOneLiners: false BracesRequiredMethods: [] Style/CaseEquality: Description: 'Avoid explicit use of the case equality operator(===).' StyleGuide: '#no-case-equality' Enabled: true VersionAdded: '0.9' VersionChanged: '0.89' AllowOnConstant: false Style/CaseLikeIf: Description: 'Identifies places where `if-elsif` constructions can be replaced with `case-when`.' StyleGuide: '#case-vs-if-else' Enabled: true Safe: false VersionAdded: '0.88' 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' SafeAutoCorrect: false Enabled: true VersionAdded: '0.19' 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' 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' Style/CollectionMethods: Description: 'Preferred collection methods.' StyleGuide: '#map-find-select-reduce-include-size' Enabled: false VersionAdded: '0.9' VersionChanged: '1.7' Safe: false PreferredMethods: collect: 'map' collect!: 'map!' inject: 'reduce' detect: 'find' find_all: 'select' member?: 'include?' 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 SupportedStyles: - backticks - percent_x - mixed AllowInnerBackticks: false Style/CommentAnnotation: Description: >- Checks formatting of special comments (TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE). StyleGuide: '#annotate-keywords' Enabled: true VersionAdded: '0.10' VersionChanged: '1.20' Keywords: - TODO - FIXME - OPTIMIZE - HACK - REVIEW - NOTE RequireColon: true Style/CommentedKeyword: Description: 'Do not place comments on the same line as certain keywords.' Enabled: true SafeAutoCorrect: false VersionAdded: '0.51' VersionChanged: '1.19' Style/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 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 Style/Copyright: Description: 'Include a copyright notice in each file before any code.' Enabled: false VersionAdded: '0.30' Notice: '^Copyright (\(c\) )?2[0-9]{3} .+' AutocorrectNotice: '' Style/DateTime: Description: 'Use Time over DateTime.' StyleGuide: '#date--time' Enabled: false VersionAdded: '0.51' VersionChanged: '0.92' SafeAutoCorrect: false AllowCoercion: false Style/DefWithParentheses: Description: 'Use def with parentheses when there are arguments.' StyleGuide: '#method-parens' Enabled: true VersionAdded: '0.9' VersionChanged: '0.12' Style/Dir: Description: >- Use the `__dir__` method to retrieve the canonicalized absolute path to the current file. Enabled: true VersionAdded: '0.50' Style/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: false VersionAdded: '0.9' AllowedConstants: [] Exclude: - 'spec/**/*' - 'test/**/*' Style/DocumentationMethod: Description: 'Checks for missing documentation comment for public methods.' Enabled: false VersionAdded: '0.43' Exclude: - 'spec/**/*' - 'test/**/*' RequireForNonPublicMethods: false Style/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 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/EnvHome: Description: "Checks for consistent usage of `ENV['HOME']`." Enabled: pending Safe: false VersionAdded: '1.29' 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/FetchEnvVar: Description: >- Suggests `ENV.fetch` for the replacement of `ENV[]`. Reference: - https://rubystyle.guide/#hash-fetch-defaults Enabled: pending VersionAdded: '1.28' AllowedVars: [] Style/FileRead: Description: 'Favor `File.(bin)read` convenience methods.' StyleGuide: '#file-read' Enabled: pending VersionAdded: '1.24' Style/FileWrite: Description: 'Favor `File.(bin)write` convenience methods.' StyleGuide: '#file-write' Enabled: pending VersionAdded: '1.24' 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 SafeAutoCorrect: false VersionAdded: '0.13' VersionChanged: '1.26' 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: - annotated - template - unannotated MaxUnannotatedPlaceholdersAllowed: 1 VersionAdded: '0.49' VersionChanged: '1.0' 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 - always_true - 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' AllowedVariables: [] Style/GuardClause: Description: 'Check for conditionals that can be replaced with guard clauses.' StyleGuide: '#no-nested-conditionals' Enabled: true VersionAdded: '0.20' VersionChanged: '1.28' MinBodyLength: 1 AllowConsecutiveConditionals: false 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.' StyleGuide: '#avoid-hash-constructor' 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 Safe: false VersionAdded: '0.80' VersionChanged: '1.16' AllowedReceivers: [] 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: 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: '1.24' EnforcedStyle: ruby19 SupportedStyles: - ruby19 - hash_rockets - no_mixed_keys - ruby19_no_mixed_keys EnforcedShorthandSyntax: always SupportedShorthandSyntax: - always - never - either UseHashRocketsWithSymbolValues: false 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 SafeAutoCorrect: false VersionAdded: '0.36' VersionChanged: '1.19' 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' Style/InPatternThen: Description: 'Checks for `in;` uses in `case` expressions.' StyleGuide: '#no-in-pattern-semicolons' Enabled: pending VersionAdded: '1.16' Style/InfiniteLoop: Description: >- Use Kernel#loop for infinite loops. This cop is unsafe if the body may raise a `StopIteration` exception. Safe: false StyleGuide: '#infinite-loop' Enabled: true VersionAdded: '0.26' VersionChanged: '0.61' Style/InlineComment: Description: 'Avoid trailing inline comments.' Enabled: false VersionAdded: '0.23' Style/InverseMethods: Description: >- Use the inverse method instead of `!.method` if an inverse method is defined. Enabled: true Safe: false VersionAdded: '0.48' InverseMethods: :any?: :none? :even?: :odd? :==: :!= :=~: :!~ :<: :>= :>: :<= InverseBlocks: :select: :reject :select!: :reject! Style/IpAddresses: Description: "Don't include literal IP addresses in code." Enabled: false VersionAdded: '0.58' VersionChanged: '0.91' AllowedAddresses: - '::' Exclude: - '**/*.gemfile' - '**/Gemfile' - '**/gems.rb' - '**/*.gemspec' 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/MapCompactWithConditionalBlock: Description: 'Prefer `select` or `reject` over `map { ... }.compact`.' Enabled: pending VersionAdded: '1.30' Style/MapToHash: Description: 'Prefer `to_h` with a block over `map.to_h`.' Enabled: pending VersionAdded: '1.24' Safe: false Style/MethodCallWithArgsParentheses: Description: 'Use parentheses for method calls with arguments.' StyleGuide: '#method-invocation-parens' Enabled: false VersionAdded: '0.47' VersionChanged: '1.7' IgnoreMacros: true AllowedPatterns: [] IncludedMacros: [] AllowParenthesesInMultilineCall: false AllowParenthesesInChaining: false AllowParenthesesInCamelCaseMethod: false AllowParenthesesInStringInterpolation: 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 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 - 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 - 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/MultilineInPatternThen: Description: 'Do not use `then` for multi-line `in` statement.' StyleGuide: '#no-then' Enabled: pending VersionAdded: '1.16' 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/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' AllowMethodComparison: true Style/MutableConstant: Description: 'Do not assign mutable objects to constants.' Enabled: true VersionAdded: '0.34' VersionChanged: '1.8' SafeAutoCorrect: false EnforcedStyle: literals SupportedStyles: - 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 - postfix Style/NegatedIfElseCondition: Description: >- 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 - postfix Style/NegatedWhile: Description: 'Favor until over while for negative conditions.' StyleGuide: '#until-for-negatives' Enabled: true VersionAdded: '0.20' Style/NestedFileDirname: Description: 'Checks for nested `File.dirname`.' Enabled: pending VersionAdded: '1.26' 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' EnforcedStyle: skip_modifier_ifs 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' VersionChanged: '1.15' Style/NonNilCheck: Description: 'Checks for redundant nil checks.' StyleGuide: '#no-non-nil-checks' Enabled: true VersionAdded: '0.20' VersionChanged: '0.22' IncludeSemanticChanges: false Style/Not: Description: 'Use ! instead of not.' StyleGuide: '#bang-not-not' Enabled: true VersionAdded: '0.9' VersionChanged: '0.20' Style/NumberedParameters: Description: 'Restrict the usage of numbered parameters.' Enabled: pending VersionAdded: '1.22' EnforcedStyle: allow_single_line SupportedStyles: - allow_single_line - disallow Style/NumberedParametersLimit: Description: 'Avoid excessive numbered params in a single block.' Enabled: pending VersionAdded: '1.22' Max: 1 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 AllowedNumbers: [] Style/NumericPredicate: Description: >- Checks for the use of predicate- or comparison methods for numeric comparisons. StyleGuide: '#predicate-methods' Safe: false SafeAutoCorrect: false Enabled: true VersionAdded: '0.42' VersionChanged: '0.59' EnforcedStyle: predicate SupportedStyles: - predicate - comparison Exclude: - 'spec/**/*' Style/ObjectThen: Description: 'Enforces the use of consistent method names `Object#yield_self` or `Object#then`.' StyleGuide: '#object-yield-self-vs-object-then' Enabled: pending VersionAdded: '1.28' EnforcedStyle: 'then' SupportedStyles: - then - yield_self 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/OpenStructUse: Description: >- Avoid using OpenStruct. As of Ruby 3.0, use is officially discouraged due to performance, version compatibility, and potential security issues. Reference: - https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats Enabled: pending VersionAdded: '1.23' Style/OptionHash: Description: "Don't use option hashes when you can use keyword arguments." Enabled: false VersionAdded: '0.33' VersionChanged: '0.34' SuspiciousParamNames: - options - opts - args - params - parameters Allowlist: [] 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' 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/QuotedSymbols: Description: 'Use a consistent style for quoted symbols.' Enabled: pending VersionAdded: '1.16' EnforcedStyle: same_as_string_literals SupportedStyles: - same_as_string_literals - single_quotes - double_quotes 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: join: '' split: ' ' chomp: "\n" 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 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/RedundantInitialize: Description: 'Checks for redundant `initialize` methods.' Enabled: pending Safe: false AllowComments: true VersionAdded: '1.27' VersionChanged: '1.28' Style/RedundantInterpolation: Description: 'Checks for strings that are just an interpolated expression.' Enabled: true SafeAutoCorrect: false VersionAdded: '0.76' VersionChanged: '1.30' 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/RedundantSelfAssignmentBranch: Description: 'Checks for places where conditional branch makes redundant self-assignment.' Enabled: pending VersionAdded: '1.19' Style/RedundantSort: Description: >- Use `min` instead of `sort.first`, `max_by` instead of `sort_by...last`, etc. Enabled: true VersionAdded: '0.76' VersionChanged: '1.22' Safe: false 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 SupportedStyles: - slashes - percent_r - mixed 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 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: >- Transforms usages of a method call safeguarded by a check for the existence of the object to safe navigation (`&.`). Autocorrection is unsafe as it assumes the object will be `nil` or truthy, but never `false`. Enabled: true VersionAdded: '0.43' VersionChanged: '1.27' ConvertCodeThatCanStartToReturnNil: false AllowedMethods: - present? - blank? - presence - try - try! SafeAutoCorrect: false MaxChainLength: 2 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/SelectByRegexp: Description: 'Prefer grep/grep_v to select/reject with a regexp match.' Enabled: pending SafeAutoCorrect: false VersionAdded: '1.22' 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' 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 RequireEnglish: true EnforcedStyle: use_english_names SupportedStyles: - use_perl_names - use_english_names - use_builtin_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' Style/StderrPuts: Description: 'Use `warn` instead of `$stderr.puts`.' StyleGuide: '#warn' Enabled: true VersionAdded: '0.51' Style/StringChars: Description: 'Checks for uses of `String#split` with empty string or regexp literal argument.' StyleGuide: '#string-chars' Enabled: pending Safe: false VersionAdded: '1.12' 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.18' Mode: aggressive 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: double_quotes SupportedStyles: - single_quotes - double_quotes ConsistentQuotesInMultiline: false Style/StringLiteralsInInterpolation: Description: >- Checks if uses of quotes inside expressions in interpolated strings match the configured preference. Enabled: true VersionAdded: '0.27' EnforcedStyle: double_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' 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 SafeAutoCorrect: false VersionAdded: '0.29' VersionChanged: '1.20' Style/SwapValues: Description: '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.28' AllowMethodsWithArguments: false AllowComments: false 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/TopLevelMethodDefinition: Description: 'Looks for top-level method definitions.' StyleGuide: '#top-level-methods' Enabled: false VersionAdded: '1.15' 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' 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' 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 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' Style/TrivialAccessors: Description: 'Prefer attr_* methods to trivial readers/writers.' StyleGuide: '#attr_family' Enabled: true VersionAdded: '0.9' VersionChanged: '1.15' ExactNameMatch: true AllowPredicates: true AllowDSLWriters: true 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: '#no-when-semicolons' 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: '1.19' EnforcedStyle: percent SupportedStyles: - percent - brackets MinSize: 2 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: - forbid_for_all_comparison_operators - forbid_for_equality_operators_only - require_for_all_comparison_operators - 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' #################### Performance ############################## Performance/AncestorsInclude: Description: 'Use `A <= B` instead of `A.ancestors.include?(B)`.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#ancestorsinclude-vs--code' Enabled: 'pending' Safe: false VersionAdded: '1.7' Performance/ArraySemiInfiniteRangeSlice: Description: 'Identifies places where slicing arrays with semi-infinite ranges can be replaced by `Array#take` and `Array#drop`.' Enabled: false Safe: false VersionAdded: '1.9' Performance/BigDecimalWithNumericArgument: Description: 'Convert numeric literal to string and pass it to `BigDecimal`.' Enabled: 'pending' VersionAdded: '1.7' Performance/BindCall: Description: 'Use `bind_call(obj, args, ...)` instead of `bind(obj).call(args, ...)`.' Enabled: true VersionAdded: '1.6' Performance/BlockGivenWithExplicitBlock: Description: 'Check block argument explicitly instead of using `block_given?`.' Enabled: pending VersionAdded: '1.9' Performance/Caller: Description: >- Use `caller(n..n)` instead of `caller`. Enabled: true VersionAdded: '0.49' VersionChanged: '1.9' Performance/CaseWhenSplat: Description: >- Reordering `when` conditions with a splat to the end of the `when` branches can improve performance. Enabled: false SafeAutoCorrect: false VersionAdded: '0.34' VersionChanged: '1.13' Performance/Casecmp: Description: >- Use `casecmp` rather than `downcase ==`, `upcase ==`, `== downcase`, or `== upcase`.. Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringcasecmp-vs-stringdowncase---code' Enabled: true Safe: false VersionAdded: '0.36' Performance/ChainArrayAllocation: Description: >- Instead of chaining array methods that allocate new arrays, mutate an existing array. Reference: 'https://twitter.com/schneems/status/1034123879978029057' Enabled: false VersionAdded: '0.59' Performance/CollectionLiteralInLoop: Description: 'Extract Array and Hash literals outside of loops into local variables or constants.' Enabled: 'pending' VersionAdded: '1.8' MinSize: 1 Performance/CompareWithBlock: Description: 'Use `sort_by(&:foo)` instead of `sort { |a, b| a.foo <=> b.foo }`.' Enabled: true VersionAdded: '0.46' Performance/ConcurrentMonotonicTime: Description: 'Use `Process.clock_gettime(Process::CLOCK_MONOTONIC)` instead of `Concurrent.monotonic_time`.' Reference: 'https://github.com/rails/rails/pull/43502' Enabled: pending VersionAdded: '1.12' Performance/ConstantRegexp: Description: 'Finds regular expressions with dynamic components that are all constants.' Enabled: pending VersionAdded: '1.9' VersionChanged: '1.10' Performance/Count: Description: >- Use `count` instead of `{select,find_all,filter,reject}...{size,count,length}`. SafeAutoCorrect: false Enabled: true VersionAdded: '0.31' VersionChanged: '1.8' Performance/DeletePrefix: Description: 'Use `delete_prefix` instead of `gsub`.' Enabled: true Safe: false SafeMultiline: true VersionAdded: '1.6' VersionChanged: '1.11' Performance/DeleteSuffix: Description: 'Use `delete_suffix` instead of `gsub`.' Enabled: true Safe: false SafeMultiline: true VersionAdded: '1.6' VersionChanged: '1.11' Performance/Detect: Description: >- Use `detect` instead of `select.first`, `find_all.first`, `filter.first`, `select.last`, `find_all.last`, and `filter.last`. Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code' SafeAutoCorrect: false Enabled: true VersionAdded: '0.30' VersionChanged: '1.8' Performance/DoubleStartEndWith: Description: >- Use `str.{start,end}_with?(x, ..., y, ...)` instead of `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`. Enabled: true VersionAdded: '0.36' VersionChanged: '0.48' IncludeActiveSupportAliases: false Performance/EndWith: Description: 'Use `end_with?` instead of a regex match anchored to the end of a string.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end' SafeAutoCorrect: false Enabled: true SafeMultiline: true VersionAdded: '0.36' VersionChanged: '1.10' Performance/FixedSize: Description: 'Do not compute the size of statically sized objects except in constants.' Enabled: true VersionAdded: '0.35' Performance/FlatMap: Description: >- Use `Enumerable#flat_map` instead of `Enumerable#map...Array#flatten(1)` or `Enumberable#collect..Array#flatten(1)`. Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code' Enabled: true VersionAdded: '0.30' EnabledForFlattenWithoutParams: false Performance/InefficientHashSearch: Description: 'Use `key?` or `value?` instead of `keys.include?` or `values.include?`.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashkey-instead-of-hashkeysinclude-code' Enabled: true VersionAdded: '0.56' Safe: false Performance/IoReadlines: Description: 'Use `IO.each_line` (`IO#each_line`) instead of `IO.readlines` (`IO#readlines`).' Reference: 'https://docs.gitlab.com/ee/development/performance.html#reading-from-files-and-other-data-sources' Enabled: false VersionAdded: '1.7' Performance/MapCompact: Description: 'Use `filter_map` instead of `collection.map(&:do_something).compact`.' Enabled: pending SafeAutoCorrect: false VersionAdded: '1.11' Performance/MethodObjectAsBlock: Description: 'Use block explicitly instead of block-passing a method object.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#normal-way-to-apply-method-vs-method-code' Enabled: pending VersionAdded: '1.9' Performance/OpenStruct: Description: 'Use `Struct` instead of `OpenStruct`.' Enabled: false VersionAdded: '0.61' Safe: false Performance/RangeInclude: Description: 'Use `Range#cover?` instead of `Range#include?` (or `Range#member?`).' Reference: 'https://github.com/JuanitoFatas/fast-ruby#cover-vs-include-code' Enabled: true VersionAdded: '0.36' VersionChanged: '1.7' Safe: false Performance/RedundantBlockCall: Description: 'Use `yield` instead of `block.call`.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode' Enabled: true VersionAdded: '0.36' Performance/RedundantEqualityComparisonBlock: Description: >- Checks for uses `Enumerable#all?`, `Enumerable#any?`, `Enumerable#one?`, or `Enumerable#none?` are compared with `===` or similar methods in block. Reference: 'https://github.com/rails/rails/pull/41363' Enabled: pending Safe: false VersionAdded: '1.10' Performance/RedundantMatch: Description: >- Use `=~` instead of `String#match` or `Regexp#match` in a context where the returned `MatchData` is not needed. Enabled: true VersionAdded: '0.36' Performance/RedundantMerge: Description: 'Use Hash#[]=, rather than Hash#merge! with a single key-value pair.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashmerge-vs-hash-code' Enabled: true Safe: false VersionAdded: '0.36' VersionChanged: '1.11' MaxKeyValuePairs: 2 Performance/RedundantSortBlock: Description: 'Use `sort` instead of `sort { |a, b| a <=> b }`.' Enabled: 'pending' VersionAdded: '1.7' Performance/RedundantSplitRegexpArgument: Description: 'Identifies places where `split` argument can be replaced from a deterministic regexp to a string.' Enabled: pending VersionAdded: '1.10' Performance/RedundantStringChars: Description: 'Checks for redundant `String#chars`.' Enabled: 'pending' VersionAdded: '1.7' Performance/RegexpMatch: Description: >- Use `match?` instead of `Regexp#match`, `String#match`, `Symbol#match`, `Regexp#===`, or `=~` when `MatchData` is not used. Reference: 'https://github.com/JuanitoFatas/fast-ruby#regexp-vs-stringmatch-vs-string-vs-stringmatch-code-' Enabled: true VersionAdded: '0.47' Performance/ReverseEach: Description: 'Use `reverse_each` instead of `reverse.each`.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code' Enabled: true VersionAdded: '0.30' Performance/ReverseFirst: Description: 'Use `last(n).reverse` instead of `reverse.first(n)`.' Enabled: 'pending' VersionAdded: '1.7' Performance/SelectMap: Description: 'Use `filter_map` instead of `ary.select(&:foo).map(&:bar)`.' Enabled: false VersionAdded: '1.11' Performance/Size: Description: >- Use `size` instead of `count` for counting the number of elements in `Array` and `Hash`. Reference: 'https://github.com/JuanitoFatas/fast-ruby#arraylength-vs-arraysize-vs-arraycount-code' Enabled: true VersionAdded: '0.30' Performance/SortReverse: Description: 'Use `sort.reverse` instead of `sort { |a, b| b <=> a }`.' Enabled: 'pending' VersionAdded: '1.7' Performance/Squeeze: Description: "Use `squeeze('a')` instead of `gsub(/a+/, 'a')`." Reference: 'https://github.com/JuanitoFatas/fast-ruby#remove-extra-spaces-or-other-contiguous-characters-code' Enabled: 'pending' VersionAdded: '1.7' Performance/StartWith: Description: 'Use `start_with?` instead of a regex match anchored to the beginning of a string.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end' SafeAutoCorrect: false Enabled: true SafeMultiline: true VersionAdded: '0.36' VersionChanged: '1.10' Performance/StringIdentifierArgument: Description: 'Use symbol identifier argument instead of string identifier argument.' Enabled: pending VersionAdded: '1.13' Performance/StringInclude: Description: 'Use `String#include?` instead of a regex match with literal-only pattern.' Enabled: 'pending' SafeAutoCorrect: false VersionAdded: '1.7' VersionChanged: '1.12' Performance/StringReplacement: Description: >- Use `tr` instead of `gsub` when you are replacing the same number of characters. Use `delete` instead of `gsub` when you are deleting characters. Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringgsub-vs-stringtr-code' Enabled: true VersionAdded: '0.33' Performance/Sum: Description: 'Use `sum` instead of a custom array summation.' SafeAutoCorrect: false Reference: 'https://blog.bigbinary.com/2016/11/02/ruby-2-4-introduces-enumerable-sum.html' Enabled: 'pending' VersionAdded: '1.8' VersionChanged: '1.13' OnlySumOrWithInitialValue: false Performance/TimesMap: Description: 'Checks for .times.map calls.' Enabled: true SafeAutoCorrect: false VersionAdded: '0.36' VersionChanged: '1.13' Performance/UnfreezeString: Description: 'Use unary plus to get an unfrozen string literal.' Enabled: true SafeAutoCorrect: false VersionAdded: '0.50' VersionChanged: '1.9' Performance/UriDefaultParser: Description: 'Use `URI::DEFAULT_PARSER` instead of `URI::Parser.new`.' Enabled: true VersionAdded: '0.50' #################### Rake ############################## Rake: Enabled: true Include: - 'Rakefile' - '**/*.rake' Rake/ClassDefinitionInTask: Description: 'Do not define a class or module in rake task, because it will be defined to the top level.' Enabled: true VersionAdded: '0.3.0' Rake/Desc: Description: 'Describe the task with `desc` method.' Enabled: true VersionAdded: '0.1.0' Rake/DuplicateNamespace: Description: 'Do not define namespace with the same name' Enabled: true VersionAdded: '0.5.0' Rake/DuplicateTask: Description: 'Do not define tasks with the same name' Enabled: true VersionAdded: '0.4.0' Rake/MethodDefinitionInTask: Description: 'Do not define a method in rake task, because it will be defined to the top level.' Enabled: true VersionAdded: '0.2.0' #################### Minitest ############################## Minitest: Enabled: true Include: - '**/test/**/*' - '**/*_test.rb' Minitest/AssertEmpty: Description: 'This cop enforces the test to use `assert_empty` instead of using `assert(object.empty?)`.' StyleGuide: 'https://minitest.rubystyle.guide#assert-empty' Enabled: true VersionAdded: '0.2' Minitest/AssertEmptyLiteral: Description: 'This cop enforces the test to use `assert_empty` instead of using `assert_equal([], object)`.' Enabled: true VersionAdded: '0.5' VersionChanged: '0.11' Minitest/AssertEqual: Description: 'This cop enforces the test to use `assert_equal` instead of using `assert(expected == actual)`.' StyleGuide: 'https://minitest.rubystyle.guide#assert-equal-arguments-order' Enabled: true VersionAdded: '0.4' Minitest/AssertInDelta: Description: 'This cop enforces the test to use `assert_in_delta` instead of using `assert_equal` to compare floats.' StyleGuide: 'https://minitest.rubystyle.guide/#assert-in-delta' Enabled: 'pending' VersionAdded: '0.10' Minitest/AssertIncludes: Description: 'This cop enforces the test to use `assert_includes` instead of using `assert(collection.include?(object))`.' StyleGuide: 'https://minitest.rubystyle.guide#assert-includes' Enabled: true VersionAdded: '0.2' Minitest/AssertInstanceOf: Description: 'This cop enforces the test to use `assert_instance_of(Class, object)` over `assert(object.instance_of?(Class))`' StyleGuide: 'https://minitest.rubystyle.guide#assert-instance-of' Enabled: true VersionAdded: '0.4' Minitest/AssertKindOf: Description: 'This cop enforces the test to use `assert_kind_of(Class, object)` over `assert(object.kind_of?(Class))`' StyleGuide: 'https://github.com/rubocop/minitest-style-guide#assert-kind-of' Enabled: 'pending' VersionAdded: '0.10' Minitest/AssertMatch: Description: 'This cop enforces the test to use `assert_match` instead of using `assert(matcher.match(object))`.' StyleGuide: 'https://minitest.rubystyle.guide#assert-match' Enabled: true VersionAdded: '0.6' Minitest/AssertNil: Description: 'This cop enforces the test to use `assert_nil` instead of using `assert_equal(nil, something)` or `assert(something.nil?)`.' StyleGuide: 'https://minitest.rubystyle.guide#assert-nil' Enabled: true VersionAdded: '0.1' Minitest/AssertOutput: Description: 'This cop checks for opportunities to use `assert_output`.' StyleGuide: 'https://minitest.rubystyle.guide/#assert-output' Enabled: 'pending' VersionAdded: '0.10' Minitest/AssertPathExists: Description: 'This cop enforces the test to use `assert_path_exists` instead of using `assert(File.exist?(path))`.' StyleGuide: 'https://minitest.rubystyle.guide/#assert-path-exists' Enabled: 'pending' VersionAdded: '0.10' Minitest/AssertPredicate: Description: 'This cop enforces the test to use `assert_predicate` instead of using `assert(obj.a_predicate_method?)`.' StyleGuide: 'https://minitest.rubystyle.guide/#assert-predicate' Enabled: pending VersionAdded: '0.18' Minitest/AssertRespondTo: Description: 'This cop enforces the test to use `assert_respond_to(object, :do_something)` over `assert(object.respond_to?(:do_something))`.' StyleGuide: 'https://minitest.rubystyle.guide#assert-responds-to-method' Enabled: true VersionAdded: '0.3' Minitest/AssertSilent: Description: "This cop enforces the test to use `assert_silent { ... }` instead of using `assert_output('', '') { ... }`." StyleGuide: 'https://github.com/rubocop/minitest-style-guide#assert-silent' Enabled: 'pending' VersionAdded: '0.10' Minitest/AssertTruthy: Description: 'This cop enforces the test to use `assert(actual)` instead of using `assert_equal(true, actual)`.' StyleGuide: 'https://minitest.rubystyle.guide#assert-truthy' Enabled: true VersionAdded: '0.2' Minitest/AssertWithExpectedArgument: Description: 'This cop tries to detect when a user accidentally used `assert` when they meant to use `assert_equal`.' Enabled: pending Safe: false VersionAdded: '0.11' Minitest/AssertionInLifecycleHook: Description: 'This cop checks for usage of assertions in lifecycle hooks.' Enabled: 'pending' VersionAdded: '0.10' Minitest/DuplicateTestRun: Description: 'This cop detects duplicate test runs caused by one test class inheriting from another.' StyleGuide: 'https://minitest.rubystyle.guide/#subclassing-test-cases' Enabled: pending VersionAdded: '0.19' Minitest/GlobalExpectations: Description: 'This cop checks for deprecated global expectations.' StyleGuide: 'https://minitest.rubystyle.guide#global-expectations' Enabled: true EnforcedStyle: any Include: - '**/test/**/*' - '**/*_test.rb' - '**/spec/**/*' - '**/*_spec.rb' SupportedStyles: - _ - any - expect - value VersionAdded: '0.7' VersionChanged: '0.16' Minitest/LiteralAsActualArgument: Description: 'This cop enforces correct order of `expected` and `actual` arguments for `assert_equal`.' StyleGuide: 'https://minitest.rubystyle.guide/#assert-equal-arguments-order' Enabled: 'pending' VersionAdded: '0.10' Minitest/MultipleAssertions: Description: 'This cop checks if test cases contain too many assertion calls.' Enabled: 'pending' VersionAdded: '0.10' Max: 3 Minitest/NoAssertions: Description: 'This cop checks for at least one assertion (or flunk) in tests.' Enabled: false VersionAdded: '0.12' Minitest/RefuteEmpty: Description: 'This cop enforces to use `refute_empty` instead of using `refute(object.empty?)`.' StyleGuide: 'https://minitest.rubystyle.guide#refute-empty' Enabled: true VersionAdded: '0.3' Minitest/RefuteEqual: Description: 'Check if your test uses `refute_equal` instead of `assert(expected != object)` or `assert(! expected == object))`.' StyleGuide: 'https://minitest.rubystyle.guide#refute-equal' Enabled: true VersionAdded: '0.3' Minitest/RefuteFalse: Description: 'Check if your test uses `refute(actual)` instead of `assert_equal(false, actual)`.' StyleGuide: 'https://minitest.rubystyle.guide#refute-false' Enabled: true VersionAdded: '0.3' Minitest/RefuteInDelta: Description: 'This cop enforces the test to use `refute_in_delta` instead of using `refute_equal` to compare floats.' StyleGuide: 'https://minitest.rubystyle.guide/#refute-in-delta' Enabled: 'pending' VersionAdded: '0.10' Minitest/RefuteIncludes: Description: 'This cop enforces the test to use `refute_includes` instead of using `refute(collection.include?(object))`.' StyleGuide: 'https://minitest.rubystyle.guide#refute-includes' Enabled: true VersionAdded: '0.3' Minitest/RefuteInstanceOf: Description: 'This cop enforces the test to use `refute_instance_of(Class, object)` over `refute(object.instance_of?(Class))`.' StyleGuide: 'https://minitest.rubystyle.guide#refute-instance-of' Enabled: true VersionAdded: '0.4' Minitest/RefuteKindOf: Description: 'This cop enforces the test to use `refute_kind_of(Class, object)` over `refute(object.kind_of?(Class))`.' StyleGuide: 'https://github.com/rubocop/minitest-style-guide#refute-kind-of' Enabled: 'pending' VersionAdded: '0.10' Minitest/RefuteMatch: Description: 'This cop enforces the test to use `refute_match` instead of using `refute(matcher.match(object))`.' StyleGuide: 'https://minitest.rubystyle.guide#refute-match' Enabled: true VersionAdded: '0.6' Minitest/RefuteNil: Description: 'This cop enforces the test to use `refute_nil` instead of using `refute_equal(nil, something)` or `refute(something.nil?)`.' StyleGuide: 'https://minitest.rubystyle.guide#refute-nil' Enabled: true VersionAdded: '0.2' Minitest/RefutePathExists: Description: 'This cop enforces the test to use `refute_path_exists` instead of using `refute(File.exist?(path))`.' StyleGuide: 'https://minitest.rubystyle.guide/#refute-path-exists' Enabled: 'pending' VersionAdded: '0.10' Minitest/RefutePredicate: Description: 'This cop enforces the test to use `refute_predicate` instead of using `refute(obj.a_predicate_method?)`.' StyleGuide: 'https://minitest.rubystyle.guide/#refute-predicate' Enabled: pending VersionAdded: '0.18' Minitest/RefuteRespondTo: Description: 'This cop enforces the test to use `refute_respond_to(object, :do_something)` over `refute(object.respond_to?(:do_something))`.' StyleGuide: 'https://minitest.rubystyle.guide#refute-respond-to' Enabled: true VersionAdded: '0.4' Minitest/SkipEnsure: Description: 'Checks that `ensure` call even if `skip`.' Enabled: pending VersionAdded: '0.20' Minitest/TestMethodName: Description: 'This cop enforces that test method names start with `test_` prefix.' Enabled: 'pending' VersionAdded: '0.10' Minitest/UnreachableAssertion: Description: 'This cop checks for an `assert_raises` block containing any unreachable assertions.' Enabled: pending VersionAdded: '0.14' Minitest/UnspecifiedException: Description: 'This cop checks for a specified error in `assert_raises`.' StyleGuide: 'https://minitest.rubystyle.guide#unspecified-exception' Enabled: 'pending' VersionAdded: '0.10'