config/default.yml in rubocop-0.59.2 vs config/default.yml in rubocop-0.60.0

- old
+ new

@@ -1,13 +1,7 @@ -# This is the default configuration file. Enabling and disabling is configured -# in separate files. This file adds all other parameters apart from Enabled. - -inherit_from: - - enabled.yml - - disabled.yml - # Common configuration. + AllCops: RubyInterpreters: - ruby - macruby - rake @@ -86,19 +80,19 @@ ExtraDetails: false # Additional cops that do not reference a style guide rule may be enabled by # default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving # the `--only-guide-cops` option. StyleGuideCopsOnly: false - # All cops except the ones in disabled.yml are enabled by default. Change - # this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`. + # All cops except the ones configured `Enabled: false` in this file are enabled by default. + # Change this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`. # When `DisabledByDefault` is `true`, all cops in the default configuration # are disabled, and only cops in user configuration are enabled. This makes # cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`, # cops in user configuration will be enabled even if they don't set the # Enabled parameter. - # When `EnabledByDefault` is `true`, all cops, even those in disabled.yml, - # are enabled by default. Cops can still be disabled in user configuration. + # When `EnabledByDefault` is `true`, all cops, even those configured `Enabled: false` + # in this file are enabled by default. Cops can still be disabled in user configuration. # Note that it is invalid to set both EnabledByDefault and DisabledByDefault # to true in the same configuration. EnabledByDefault: false DisabledByDefault: false # Enables the result cache if `true`. Can be overridden by the `--cache` command @@ -138,24 +132,109 @@ # gems.locked file to find the version of Rails that has been bound to the # application. If neither of those files exist, RuboCop will use Rails 5.0 # as the default. TargetRailsVersion: ~ +#################### Bundler ############################### + +Bundler/DuplicatedGem: + Description: 'Checks for duplicate gem entries in Gemfile.' + Enabled: true + VersionAdded: 0.46 + Include: + - '**/*.gemfile' + - '**/Gemfile' + - '**/gems.rb' + +Bundler/GemComment: + Description: 'Add a comment describing each gem.' + Enabled: false + VersionAdded: 0.59 + Include: + - '**/*.gemfile' + - '**/Gemfile' + - '**/gems.rb' + Whitelist: [] + +Bundler/InsecureProtocolSource: + Description: >- + The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated + because HTTP requests are insecure. Please change your source to + 'https://rubygems.org' if possible, or 'http://rubygems.org' if not. + Enabled: true + VersionAdded: 0.50 + Include: + - '**/*.gemfile' + - '**/Gemfile' + - '**/gems.rb' + +Bundler/OrderedGems: + Description: >- + Gems within groups in the Gemfile should be alphabetically sorted. + Enabled: true + VersionAdded: 0.46 + VersionChanged: 0.47 + TreatCommentsAsGroupSeparators: true + Include: + - '**/*.gemfile' + - '**/Gemfile' + - '**/gems.rb' + +#################### Gemspec ############################### + +Gemspec/DuplicatedAssignment: + Description: 'An attribute assignment method calls should be listed only once in a gemspec.' + Enabled: true + VersionAdded: 0.52 + Include: + - '**/*.gemspec' + +Gemspec/OrderedDependencies: + Description: >- + Dependencies in the gemspec should be alphabetically sorted. + Enabled: true + VersionAdded: 0.51 + TreatCommentsAsGroupSeparators: true + Include: + - '**/*.gemspec' + +Gemspec/RequiredRubyVersion: + Description: 'Checks that `required_ruby_version` of gemspec and `TargetRubyVersion` of .rubocop.yml are equal.' + Enabled: true + VersionAdded: 0.52 + Include: + - '**/*.gemspec' + #################### Layout ########################### -# Indent private/protected/public as deep as method definitions Layout/AccessModifierIndentation: + Description: Check indentation of private/protected visibility modifiers. + StyleGuide: '#indent-public-private-protected' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: indent SupportedStyles: - outdent - indent # By default, the indentation width from Layout/IndentationWidth is used # But it can be overridden by setting this parameter IndentationWidth: ~ -# Align the elements of a hash literal if they span more than one line. +Layout/AlignArray: + Description: >- + Align the elements of an array literal if they span more than + one line. + StyleGuide: '#align-multiline-arrays' + Enabled: true + VersionAdded: 0.49 + Layout/AlignHash: + Description: >- + Align the elements of a hash literal if they span more than + one line. + Enabled: true + VersionAdded: 0.49 # Alignment of entries using hash rocket as separator. Valid values are: # # key - left alignment of keys # 'a' => 2 # 'bb' => 3 @@ -223,10 +302,16 @@ - always_ignore - ignore_implicit - ignore_explicit Layout/AlignParameters: + Description: >- + Align the parameters of a method call if they span more + than one line. + StyleGuide: '#no-double-indent' + Enabled: true + VersionAdded: 0.49 # Alignment of parameters in multi-line method calls. # # The `with_first_parameter` style aligns the following lines along the same # column as the first parameter. # @@ -244,12 +329,14 @@ - with_fixed_indentation # By default, the indentation width from Layout/IndentationWidth is used # But it can be overridden by setting this parameter IndentationWidth: ~ -# checks whether the end keywords are aligned properly for `do` `end` blocks. Layout/BlockAlignment: + Description: 'Align block ends correctly.' + Enabled: true + VersionAdded: 0.53 # The value `start_of_block` means that the `end` should be aligned with line # where the `do` keyword appears. # The value `start_of_line` means it should be aligned with the whole # expression's starting line. # The value `either` means both are allowed. @@ -257,23 +344,76 @@ SupportedStylesAlignWith: - either - start_of_block - start_of_line -# Indentation of `when`. +Layout/BlockEndNewline: + Description: 'Put end statement of multiline block on its own line.' + Enabled: true + VersionAdded: 0.49 + Layout/CaseIndentation: + Description: 'Indentation of when in a case/when/[else/]end.' + StyleGuide: '#indent-when-to-case' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: case SupportedStyles: - case - end IndentOneStep: false # By default, the indentation width from `Layout/IndentationWidth` is used. # But it can be overridden by setting this parameter. # This only matters if `IndentOneStep` is `true` IndentationWidth: ~ +Layout/ClassStructure: + Description: 'Enforces a configured order of definitions within a class body.' + StyleGuide: 'https://github.com/rubocop-hq/ruby-style-guide#consistent-classes' + Enabled: false + VersionAdded: 0.52 + Categories: + module_inclusion: + - include + - prepend + - extend + ExpectedOrder: + - module_inclusion + - constants + - public_class_methods + - initializer + - public_methods + - protected_methods + - private_methods + +Layout/ClosingHeredocIndentation: + Description: 'Checks the indentation of here document closings.' + Enabled: true + VersionAdded: 0.57 + +Layout/ClosingParenthesisIndentation: + Description: 'Checks the indentation of hanging closing parentheses.' + Enabled: true + VersionAdded: 0.49 + +Layout/CommentIndentation: + Description: 'Indentation of comments.' + Enabled: true + VersionAdded: 0.49 + +Layout/ConditionPosition: + Description: >- + Checks for condition placed in a confusing position relative to + the keyword. + StyleGuide: '#same-line-condition' + Enabled: true + VersionAdded: 0.53 + Layout/DefEndAlignment: + Description: 'Align ends corresponding to defs correctly.' + Enabled: true + VersionAdded: 0.53 # The value `def` means that `end` should be aligned with the def keyword. # The value `start_of_line` means that `end` should be aligned with method # calls like `private`, `public`, etc, if present in front of the `def` # keyword on the same line. EnforcedStyleAlignWith: start_of_line @@ -281,55 +421,131 @@ - start_of_line - def AutoCorrect: false Severity: warning -# Multi-line method chaining should be done with leading dots. Layout/DotPosition: + Description: 'Checks the position of the dot in multi-line method calls.' + StyleGuide: '#consistent-multi-line-chains' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: leading SupportedStyles: - leading - trailing +Layout/ElseAlignment: + Description: 'Align elses and elsifs correctly.' + Enabled: true + VersionAdded: 0.49 + Layout/EmptyComment: + Description: 'Checks empty comment.' + Enabled: true + VersionAdded: 0.53 AllowBorderComment: true AllowMarginComment: true -# Use empty lines between defs. +Layout/EmptyLineAfterGuardClause: + Description: 'Add empty line after guard clause.' + Enabled: true + VersionAdded: 0.56 + VersionChanged: 0.59 + +Layout/EmptyLineAfterMagicComment: + Description: 'Add an empty line after magic comments to separate them from code.' + StyleGuide: '#separate-magic-comments-from-code' + Enabled: true + VersionAdded: 0.49 + Layout/EmptyLineBetweenDefs: + Description: 'Use empty lines between defs.' + StyleGuide: '#empty-lines-between-methods' + Enabled: true + VersionAdded: 0.49 # If `true`, this parameter means that single line method definitions don't # need an empty line between them. AllowAdjacentOneLineDefs: false # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2] NumberOfEmptyLines: 1 +Layout/EmptyLines: + Description: "Don't use several empty lines in a row." + StyleGuide: '#two-or-more-empty-lines' + Enabled: true + VersionAdded: 0.49 + +Layout/EmptyLinesAroundAccessModifier: + Description: "Keep blank lines around access modifiers." + StyleGuide: '#empty-lines-around-access-modifier' + Enabled: true + VersionAdded: 0.49 + +Layout/EmptyLinesAroundArguments: + Description: "Keeps track of empty lines around method arguments." + Enabled: true + VersionAdded: 0.52 + +Layout/EmptyLinesAroundBeginBody: + Description: "Keeps track of empty lines around begin-end bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: 0.49 + Layout/EmptyLinesAroundBlockBody: + Description: "Keeps track of empty lines around block bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: no_empty_lines SupportedStyles: - empty_lines - no_empty_lines Layout/EmptyLinesAroundClassBody: + Description: "Keeps track of empty lines around class bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: 0.49 + VersionChanged: 0.53 EnforcedStyle: no_empty_lines SupportedStyles: - empty_lines - empty_lines_except_namespace - empty_lines_special - no_empty_lines - beginning_only - ending_only +Layout/EmptyLinesAroundExceptionHandlingKeywords: + Description: "Keeps track of empty lines around exception handling keywords." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: 0.49 + +Layout/EmptyLinesAroundMethodBody: + Description: "Keeps track of empty lines around method bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: 0.49 + Layout/EmptyLinesAroundModuleBody: + Description: "Keeps track of empty lines around module bodies." + StyleGuide: '#empty-lines-around-bodies' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: no_empty_lines SupportedStyles: - empty_lines - empty_lines_except_namespace - empty_lines_special - no_empty_lines -# Align ends correctly. Layout/EndAlignment: + Description: 'Align ends correctly.' + Enabled: true + VersionAdded: 0.53 # The value `keyword` means that `end` should be aligned with the matching # keyword (`if`, `while`, etc.). # The value `variable` means that in assignments, `end` should be aligned # with the start of the variable on the left hand side of `=`. In all other # situations, `end` should still be aligned with the keyword. @@ -342,28 +558,67 @@ - start_of_line AutoCorrect: false Severity: warning Layout/EndOfLine: + Description: 'Use Unix-style line endings.' + StyleGuide: '#crlf' + Enabled: true + VersionAdded: 0.49 # The `native` style means that CR+LF (Carriage Return + Line Feed) is # enforced on Windows, and LF is enforced on other platforms. The other styles # mean LF and CR+LF, respectively. EnforcedStyle: native SupportedStyles: - native - lf - crlf Layout/ExtraSpacing: + Description: 'Do not use unnecessary spacing.' + Enabled: true + VersionAdded: 0.49 # When true, allows most uses of extra spacing if the intent is to align # things with the previous or next line, not counting empty lines or comment # lines. AllowForAlignment: true # When true, forces the alignment of `=` in assignments on consecutive lines. ForceEqualSignAlignment: false +Layout/FirstArrayElementLineBreak: + Description: >- + Checks for a line break before the first element in a + multi-line array. + Enabled: false + VersionAdded: 0.49 + +Layout/FirstHashElementLineBreak: + Description: >- + Checks for a line break before the first element in a + multi-line hash. + Enabled: false + VersionAdded: 0.49 + +Layout/FirstMethodArgumentLineBreak: + Description: >- + Checks for a line break before the first argument in a + multi-line method call. + Enabled: false + VersionAdded: 0.49 + +Layout/FirstMethodParameterLineBreak: + Description: >- + Checks for a line break before the first parameter in a + multi-line method parameter definition. + Enabled: false + VersionAdded: 0.49 + Layout/FirstParameterIndentation: + Description: 'Checks the indentation of the first parameter in a method call.' + Enabled: true + VersionAdded: 0.49 + VersionChanged: 0.56 EnforcedStyle: special_for_inner_method_call_in_parentheses SupportedStyles: # The first parameter should always be indented one step more than the # preceding line. - consistent @@ -380,29 +635,16 @@ - special_for_inner_method_call_in_parentheses # By default, the indentation width from `Layout/IndentationWidth` is used # But it can be overridden by setting this parameter IndentationWidth: ~ -Layout/IndentationConsistency: - # The difference between `rails` and `normal` is that the `rails` style - # prescribes that in classes and modules the `protected` and `private` - # modifier keywords shall be indented the same as public methods and that - # protected and private members shall be indented one step more than the - # modifiers. Other than that, both styles mean that entities on the same - # logical depth shall have the same indentation. - EnforcedStyle: normal - SupportedStyles: - - normal - - rails - -Layout/IndentationWidth: - # Number of spaces for each indentation level. - Width: 2 - IgnoredPatterns: [] - -# Checks the indentation of the first element in an array literal. Layout/IndentArray: + Description: >- + Checks the indentation of the first element in an array + literal. + Enabled: true + VersionAdded: 0.49 # The value `special_inside_parentheses` means that array literals with # brackets that have their opening bracket on the same line as a surrounding # opening round parenthesis, shall have their first element indented relative # to the first position inside the parenthesis. # @@ -419,18 +661,24 @@ - align_brackets # By default, the indentation width from `Layout/IndentationWidth` is used # But it can be overridden by setting this parameter IndentationWidth: ~ -# Checks the indentation of assignment RHS, when on a different line from LHS Layout/IndentAssignment: + Description: >- + Checks the indentation of the first line of the + right-hand-side of a multi-line assignment. + Enabled: true + VersionAdded: 0.49 # By default, the indentation width from `Layout/IndentationWidth` is used # But it can be overridden by setting this parameter IndentationWidth: ~ -# Checks the indentation of the first key in a hash literal. Layout/IndentHash: + Description: 'Checks the indentation of the first key in a hash literal.' + Enabled: true + VersionAdded: 0.49 # The value `special_inside_parentheses` means that hash literals with braces # that have their opening brace on the same line as a surrounding opening # round parenthesis, shall have their first key indented relative to the # first position inside the parenthesis. # @@ -448,35 +696,85 @@ # By default, the indentation width from `Layout/IndentationWidth` is used # But it can be overridden by setting this parameter IndentationWidth: ~ Layout/IndentHeredoc: + Description: 'This cop checks the indentation of the here document bodies.' + StyleGuide: '#squiggly-heredocs' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: auto_detection SupportedStyles: - auto_detection - squiggly - active_support - powerpack - unindent -Layout/SpaceInLambdaLiteral: - EnforcedStyle: require_no_space +Layout/IndentationConsistency: + Description: 'Keep indentation straight.' + StyleGuide: '#spaces-indentation' + Enabled: true + VersionAdded: 0.49 + # The difference between `rails` and `normal` is that the `rails` style + # prescribes that in classes and modules the `protected` and `private` + # modifier keywords shall be indented the same as public methods and that + # protected and private members shall be indented one step more than the + # modifiers. Other than that, both styles mean that entities on the same + # logical depth shall have the same indentation. + EnforcedStyle: normal SupportedStyles: - - require_no_space - - require_space + - normal + - rails +Layout/IndentationWidth: + Description: 'Use 2 spaces for indentation.' + StyleGuide: '#spaces-indentation' + Enabled: true + VersionAdded: 0.49 + # Number of spaces for each indentation level. + Width: 2 + IgnoredPatterns: [] + +Layout/InitialIndentation: + Description: >- + Checks the indentation of the first non-blank non-comment line in a file. + Enabled: true + VersionAdded: 0.49 + +Layout/LeadingBlankLines: + Description: Check for unnecessary blank lines at the beginning of a file. + Enabled: true + VersionAdded: 0.57 + +Layout/LeadingCommentSpace: + Description: 'Comments should start with a space.' + StyleGuide: '#hash-space' + Enabled: true + VersionAdded: 0.49 + Layout/MultilineArrayBraceLayout: + Description: >- + Checks that the closing brace in an array literal is + either on the same line as the last array element, or + a new line. + Enabled: true + VersionAdded: 0.49 EnforcedStyle: symmetrical SupportedStyles: # symmetrical: closing brace is positioned in same way as opening brace # new_line: closing brace is always on a new line # same_line: closing brace is always on the same line as last element - symmetrical - new_line - same_line Layout/MultilineAssignmentLayout: + Description: 'Check for a newline after the assignment operator in multi-line assignments.' + StyleGuide: '#indent-conditional-assignment' + Enabled: false + VersionAdded: 0.49 # The types of assignments which are subject to this rule. SupportedTypes: - block - case - class @@ -490,94 +788,223 @@ - same_line # Ensures that the assignment operator and the rhs are on separate lines # for the set of supported types. - new_line +Layout/MultilineBlockLayout: + Description: 'Ensures newlines after multiline block do statements.' + Enabled: true + VersionAdded: 0.49 + Layout/MultilineHashBraceLayout: + Description: >- + Checks that the closing brace in a hash literal is + either on the same line as the last hash element, or + a new line. + Enabled: true + VersionAdded: 0.49 EnforcedStyle: symmetrical SupportedStyles: # symmetrical: closing brace is positioned in same way as opening brace # new_line: closing brace is always on a new line # same_line: closing brace is always on same line as last element - symmetrical - new_line - same_line Layout/MultilineMethodCallBraceLayout: + Description: >- + Checks that the closing brace in a method call is + either on the same line as the last method argument, or + a new line. + Enabled: true + VersionAdded: 0.49 EnforcedStyle: symmetrical SupportedStyles: # symmetrical: closing brace is positioned in same way as opening brace # new_line: closing brace is always on a new line # same_line: closing brace is always on the same line as last argument - symmetrical - new_line - same_line Layout/MultilineMethodCallIndentation: + Description: >- + Checks indentation of method calls with the dot operator + that span more than one line. + Enabled: true + VersionAdded: 0.49 EnforcedStyle: aligned SupportedStyles: - aligned - indented - indented_relative_to_receiver # By default, the indentation width from Layout/IndentationWidth is used # But it can be overridden by setting this parameter IndentationWidth: ~ Layout/MultilineMethodDefinitionBraceLayout: + Description: >- + Checks that the closing brace in a method definition is + either on the same line as the last method parameter, or + a new line. + Enabled: true + VersionAdded: 0.49 EnforcedStyle: symmetrical SupportedStyles: # symmetrical: closing brace is positioned in same way as opening brace # new_line: closing brace is always on a new line # same_line: closing brace is always on the same line as last parameter - symmetrical - new_line - same_line Layout/MultilineOperationIndentation: + Description: >- + Checks indentation of binary operations that span more than + one line. + Enabled: true + VersionAdded: 0.49 EnforcedStyle: aligned SupportedStyles: - aligned - indented # By default, the indentation width from `Layout/IndentationWidth` is used # But it can be overridden by setting this parameter IndentationWidth: ~ +Layout/RescueEnsureAlignment: + Description: 'Align rescues and ensures correctly.' + Enabled: true + VersionAdded: 0.49 + +Layout/SpaceAfterColon: + Description: 'Use spaces after colons.' + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: 0.49 + +Layout/SpaceAfterComma: + Description: 'Use spaces after commas.' + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: 0.49 + +Layout/SpaceAfterMethodName: + Description: >- + Do not put a space between a method name and the opening + parenthesis in a method definition. + StyleGuide: '#parens-no-spaces' + Enabled: true + VersionAdded: 0.49 + +Layout/SpaceAfterNot: + Description: Tracks redundant space after the ! operator. + StyleGuide: '#no-space-bang' + Enabled: true + VersionAdded: 0.49 + +Layout/SpaceAfterSemicolon: + Description: 'Use spaces after semicolons.' + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: 0.49 + Layout/SpaceAroundBlockParameters: + Description: 'Checks the spacing inside and after block parameters pipes.' + Enabled: true + VersionAdded: 0.49 EnforcedStyleInsidePipes: no_space SupportedStylesInsidePipes: - space - no_space Layout/SpaceAroundEqualsInParameterDefault: + Description: >- + Checks that the equals signs in parameter default assignments + have or don't have surrounding space depending on + configuration. + StyleGuide: '#spaces-around-equals' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: space SupportedStyles: - space - no_space +Layout/SpaceAroundKeyword: + Description: 'Use a space around keywords if appropriate.' + Enabled: true + VersionAdded: 0.49 + Layout/SpaceAroundOperators: + Description: 'Use a single space around operators.' + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: 0.49 # When `true`, allows most uses of extra spacing if the intent is to align # with an operator on the previous or next line, not counting empty lines # or comment lines. AllowForAlignment: true Layout/SpaceBeforeBlockBraces: + Description: >- + Checks that the left block brace has or doesn't have space + before it. + Enabled: true + VersionAdded: 0.49 EnforcedStyle: space SupportedStyles: - space - no_space EnforcedStyleForEmptyBraces: space SupportedStylesForEmptyBraces: - space - no_space + VersionChanged: 0.52.1 +Layout/SpaceBeforeComma: + Description: 'No spaces before commas.' + Enabled: true + VersionAdded: 0.49 + +Layout/SpaceBeforeComment: + Description: >- + Checks for missing space between code and a comment on the + same line. + Enabled: true + VersionAdded: 0.49 + Layout/SpaceBeforeFirstArg: + Description: >- + Checks that exactly one space is used between a method name + and the first argument for method calls without parentheses. + Enabled: true + VersionAdded: 0.49 # When `true`, allows most uses of extra spacing if the intent is to align # things with the previous or next line, not counting empty lines or comment # lines. AllowForAlignment: true +Layout/SpaceBeforeSemicolon: + Description: 'No spaces before semicolons.' + Enabled: true + VersionAdded: 0.49 + +Layout/SpaceInLambdaLiteral: + Description: 'Checks for spaces in lambda literals.' + Enabled: true + VersionAdded: 0.49 + EnforcedStyle: require_no_space + SupportedStyles: + - require_no_space + - require_space + Layout/SpaceInsideArrayLiteralBrackets: + Description: 'Checks the spacing inside array literal brackets.' + Enabled: true + VersionAdded: 0.52 EnforcedStyle: no_space SupportedStyles: - space - no_space # 'compact' normally requires a space inside the brackets, with the exception @@ -586,11 +1013,22 @@ EnforcedStyleForEmptyBrackets: no_space SupportedStylesForEmptyBrackets: - space - no_space +Layout/SpaceInsideArrayPercentLiteral: + Description: 'No unnecessary additional spaces between elements in %i/%w literals.' + Enabled: true + VersionAdded: 0.49 + Layout/SpaceInsideBlockBraces: + Description: >- + Checks that block braces have or don't have surrounding space. + For blocks taking parameters, checks that the left brace has + or doesn't have trailing space. + Enabled: true + VersionAdded: 0.49 EnforcedStyle: space SupportedStyles: - space - no_space EnforcedStyleForEmptyBraces: no_space @@ -599,10 +1037,14 @@ - no_space # Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict. SpaceBeforeBlockParameters: true Layout/SpaceInsideHashLiteralBraces: + Description: "Use spaces inside hash literal braces - or don't." + StyleGuide: '#spaces-operators' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: space SupportedStyles: - space - no_space # 'compact' normally requires a space inside hash braces, with the exception @@ -611,66 +1053,711 @@ EnforcedStyleForEmptyBraces: no_space SupportedStylesForEmptyBraces: - space - no_space + Layout/SpaceInsideParens: + Description: 'No spaces after ( or before ).' + StyleGuide: '#spaces-braces' + Enabled: true + VersionAdded: 0.49 + VersionChanged: 0.55 EnforcedStyle: no_space SupportedStyles: - space - no_space +Layout/SpaceInsidePercentLiteralDelimiters: + Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.' + Enabled: true + VersionAdded: 0.49 + +Layout/SpaceInsideRangeLiteral: + Description: 'No spaces inside range literals.' + StyleGuide: '#no-space-inside-range-literals' + Enabled: true + VersionAdded: 0.49 + Layout/SpaceInsideReferenceBrackets: + Description: 'Checks the spacing inside referential brackets.' + Enabled: true + VersionAdded: 0.52 + VersionChanged: 0.53 EnforcedStyle: no_space SupportedStyles: - space - no_space EnforcedStyleForEmptyBrackets: no_space SupportedStylesForEmptyBrackets: - space - no_space Layout/SpaceInsideStringInterpolation: + Description: 'Checks for padding/surrounding spaces inside string interpolation.' + StyleGuide: '#string-interpolation' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: no_space SupportedStyles: - space - no_space -Layout/ClassStructure: - Categories: - module_inclusion: - - include - - prepend - - extend - ExpectedOrder: - - module_inclusion - - constants - - public_class_methods - - initializer - - public_methods - - protected_methods - - private_methods - Layout/Tab: + Description: 'No hard tabs.' + StyleGuide: '#spaces-indentation' + Enabled: true + VersionAdded: 0.49 + VersionChanged: 0.51 # By default, the indentation width from Layout/IndentationWidth is used # But it can be overridden by setting this parameter # It is used during auto-correction to determine how many spaces should # replace each tab. IndentationWidth: ~ Layout/TrailingBlankLines: + Description: 'Checks trailing blank lines and final newline.' + StyleGuide: '#newline-eof' + Enabled: true + VersionAdded: 0.49 EnforcedStyle: final_newline SupportedStyles: - final_newline - final_blank_line Layout/TrailingWhitespace: + Description: 'Avoid trailing whitespace.' + StyleGuide: '#no-trailing-whitespace' + Enabled: true + VersionAdded: 0.49 + VersionChanged: 0.55 AllowInHeredoc: false -#################### Naming ########################## +#################### Lint ################################## +### Warnings +Lint/AmbiguousBlockAssociation: + Description: >- + Checks for ambiguous block association with method when param passed without + parentheses. + StyleGuide: '#syntax' + Enabled: true + VersionAdded: 0.48 + +Lint/AmbiguousOperator: + Description: >- + Checks for ambiguous operators in the first argument of a + method invocation without parentheses. + StyleGuide: '#method-invocation-parens' + Enabled: true + VersionAdded: 0.17 + +Lint/AmbiguousRegexpLiteral: + Description: >- + Checks for ambiguous regexp literals in the first argument of + a method invocation without parentheses. + Enabled: true + VersionAdded: 0.17 + +Lint/AssignmentInCondition: + Description: "Don't use assignment in conditions." + StyleGuide: '#safe-assignment-in-condition' + Enabled: true + VersionAdded: 0.9 + AllowSafeAssignment: true + +Lint/BigDecimalNew: + Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.' + Enabled: true + VersionAdded: 0.53 + +Lint/BooleanSymbol: + Description: 'Check for `:true` and `:false` symbols.' + Enabled: true + VersionAdded: 0.50 + +Lint/CircularArgumentReference: + Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument." + Enabled: true + VersionAdded: 0.33 + +Lint/Debugger: + Description: 'Check for debugger calls.' + Enabled: true + VersionAdded: 0.14 + VersionChanged: 0.49 + +Lint/DeprecatedClassMethods: + Description: 'Check for deprecated class method calls.' + Enabled: true + VersionAdded: 0.19 + +Lint/DuplicateCaseCondition: + Description: 'Do not repeat values in case conditionals.' + Enabled: true + VersionAdded: 0.45 + +Lint/DuplicateMethods: + Description: 'Check for duplicate method definitions.' + Enabled: true + VersionAdded: 0.29 + +Lint/DuplicatedKey: + Description: 'Check for duplicate keys in hash literals.' + Enabled: true + VersionAdded: 0.34 + +Lint/EachWithObjectArgument: + Description: 'Check for immutable argument given to each_with_object.' + Enabled: true + VersionAdded: 0.31 + +Lint/ElseLayout: + Description: 'Check for odd code arrangement in an else block.' + Enabled: true + VersionAdded: 0.17 + +Lint/EmptyEnsure: + Description: 'Checks for empty ensure block.' + Enabled: true + VersionAdded: 0.10 + VersionChanged: 0.48 + AutoCorrect: false + +Lint/EmptyExpression: + Description: 'Checks for empty expressions.' + Enabled: true + VersionAdded: 0.45 + +Lint/EmptyInterpolation: + Description: 'Checks for empty string interpolation.' + Enabled: true + VersionAdded: 0.20 + VersionChanged: 0.45 + +Lint/EmptyWhen: + Description: 'Checks for `when` branches with empty bodies.' + Enabled: true + VersionAdded: 0.45 + +Lint/EndInMethod: + Description: 'END blocks should not be placed inside method definitions.' + Enabled: true + VersionAdded: 0.9 + +Lint/EnsureReturn: + Description: 'Do not use return in an ensure block.' + StyleGuide: '#no-return-ensure' + Enabled: true + VersionAdded: 0.9 + +Lint/ErbNewArguments: + Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.' + Enabled: true + VersionAdded: 0.56 + +Lint/FloatOutOfRange: + Description: >- + Catches floating-point literals too large or small for Ruby to + represent. + Enabled: true + VersionAdded: 0.36 + +Lint/FormatParameterMismatch: + Description: 'The number of parameters to format/sprint must match the fields.' + Enabled: true + VersionAdded: 0.33 + +Lint/HandleExceptions: + Description: "Don't suppress exception." + StyleGuide: '#dont-hide-exceptions' + Enabled: true + VersionAdded: 0.9 + +Lint/ImplicitStringConcatenation: + Description: >- + Checks for adjacent string literals on the same line, which + could better be represented as a single string literal. + Enabled: true + VersionAdded: 0.36 + +Lint/IneffectiveAccessModifier: + Description: >- + Checks for attempts to use `private` or `protected` to set + the visibility of a class method, which does not work. + Enabled: true + VersionAdded: 0.36 + +Lint/InheritException: + Description: 'Avoid inheriting from the `Exception` class.' + Enabled: true + VersionAdded: 0.41 + # The default base class in favour of `Exception`. + EnforcedStyle: runtime_error + SupportedStyles: + - runtime_error + - standard_error + +Lint/InterpolationCheck: + Description: 'Raise warning for interpolation in single q strs' + Enabled: true + VersionAdded: 0.50 + +Lint/LiteralAsCondition: + Description: 'Checks of literals used in conditions.' + Enabled: true + VersionAdded: 0.51 + +Lint/LiteralInInterpolation: + Description: 'Checks for literals used in interpolation.' + Enabled: true + VersionAdded: 0.19 + VersionChanged: 0.32 + +Lint/Loop: + Description: >- + Use Kernel#loop with break rather than begin/end/until or + begin/end/while for post-loop tests. + StyleGuide: '#loop-with-break' + Enabled: true + VersionAdded: 0.9 + +Lint/MissingCopEnableDirective: + Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`' + Enabled: true + VersionAdded: 0.52 + # Maximum number of consecutive lines the cop can be disabled for. + # 0 allows only single-line disables + # 1 would mean the maximum allowed is the following: + # # rubocop:disable SomeCop + # a = 1 + # # rubocop:enable SomeCop + # .inf for any size + MaximumRangeSize: .inf + +Lint/MultipleCompare: + Description: "Use `&&` operator to compare multiple value." + Enabled: true + VersionAdded: 0.47 + +Lint/NestedMethodDefinition: + Description: 'Do not use nested method definitions.' + StyleGuide: '#no-nested-methods' + Enabled: true + VersionAdded: 0.32 + +Lint/NestedPercentLiteral: + Description: 'Checks for nested percent literals.' + Enabled: true + VersionAdded: 0.52 + +Lint/NextWithoutAccumulator: + Description: >- + Do not omit the accumulator when calling `next` + in a `reduce`/`inject` block. + Enabled: true + VersionAdded: 0.36 + +Lint/NonLocalExitFromIterator: + Description: 'Do not use return in iterator to cause non-local exit.' + Enabled: true + VersionAdded: 0.30 + +Lint/NumberConversion: + Description: 'Checks unsafe usage of number conversion methods.' + Enabled: false + VersionAdded: 0.53 + +Lint/OrderedMagicComments: + Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.' + Enabled: true + VersionAdded: 0.53 + +Lint/ParenthesesAsGroupedExpression: + Description: >- + Checks for method calls with a space before the opening + parenthesis. + StyleGuide: '#parens-no-spaces' + Enabled: true + VersionAdded: 0.12 + +Lint/PercentStringArray: + Description: >- + Checks for unwanted commas and quotes in %w/%W literals. + Enabled: true + VersionAdded: 0.41 + +Lint/PercentSymbolArray: + Description: >- + Checks for unwanted commas and colons in %i/%I literals. + Enabled: true + VersionAdded: 0.41 + +Lint/RandOne: + Description: >- + Checks for `rand(1)` calls. Such calls always return `0` + and most likely a mistake. + Enabled: true + VersionAdded: 0.36 + +Lint/RedundantWithIndex: + Description: 'Checks for redundant `with_index`.' + Enabled: true + VersionAdded: 0.50 + +Lint/RedundantWithObject: + Description: 'Checks for redundant `with_object`.' + Enabled: true + VersionAdded: 0.51 + +Lint/RegexpAsCondition: + Description: >- + Do not use regexp literal as a condition. + The regexp literal matches `$_` implicitly. + Enabled: true + VersionAdded: 0.51 + +Lint/RequireParentheses: + Description: >- + Use parentheses in the method call to avoid confusion + about precedence. + Enabled: true + VersionAdded: 0.18 + +Lint/RescueException: + Description: 'Avoid rescuing the Exception class.' + StyleGuide: '#no-blind-rescues' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.27.1 + +Lint/RescueType: + Description: 'Avoid rescuing from non constants that could result in a `TypeError`.' + Enabled: true + VersionAdded: 0.49 + +Lint/ReturnInVoidContext: + Description: 'Checks for return in void context.' + Enabled: true + VersionAdded: 0.50 + +Lint/SafeNavigationChain: + Description: 'Do not chain ordinary method call after safe navigation operator.' + Enabled: true + VersionAdded: 0.47 + VersionChanged: 0.56 + Whitelist: + - present? + - blank? + - presence + - try + - try! + +Lint/SafeNavigationConsistency: + Description: >- + Check to make sure that if safe navigation is used for a method + call in an `&&` or `||` condition that safe navigation is used + for all method calls on that same object. + Enabled: true + VersionAdded: 0.55 + Whitelist: + - present? + - blank? + - presence + - try + - try! + + +Lint/ScriptPermission: + Description: 'Grant script file execute permission.' + Enabled: true + VersionAdded: 0.49 + VersionChanged: 0.50 + +Lint/ShadowedArgument: + Description: 'Avoid reassigning arguments before they were used.' + Enabled: true + VersionAdded: 0.52 + IgnoreImplicitReferences: false + + +Lint/ShadowedException: + Description: >- + Avoid rescuing a higher level exception + before a lower level exception. + Enabled: true + VersionAdded: 0.41 + +Lint/ShadowingOuterLocalVariable: + Description: >- + Do not use the same name as outer local variable + for block arguments or block local variables. + Enabled: true + VersionAdded: 0.9 + +Lint/StringConversionInInterpolation: + Description: 'Checks for Object#to_s usage in string interpolation.' + StyleGuide: '#no-to-s' + Enabled: true + VersionAdded: 0.19 + VersionChanged: 0.20 + +Lint/Syntax: + Description: 'Checks syntax error' + Enabled: true + VersionAdded: 0.9 + + +Lint/UnderscorePrefixedVariableName: + Description: 'Do not use prefix `_` for a variable that is used.' + Enabled: true + VersionAdded: 0.21 + +Lint/UnifiedInteger: + Description: 'Use Integer instead of Fixnum or Bignum' + Enabled: true + VersionAdded: 0.43 + +Lint/UnneededCopDisableDirective: + Description: >- + Checks for rubocop:disable comments that can be removed. + Note: this cop is not disabled when disabling all cops. + It must be explicitly disabled. + Enabled: true + VersionAdded: 0.53 + +Lint/UnneededCopEnableDirective: + Description: Checks for rubocop:enable comments that can be removed. + Enabled: true + VersionAdded: 0.53 + +Lint/UnneededRequireStatement: + Description: 'Checks for unnecessary `require` statement.' + Enabled: true + VersionAdded: 0.51 + +Lint/UnneededSplatExpansion: + Description: 'Checks for splat unnecessarily being called on literals' + Enabled: true + VersionAdded: 0.43 + +Lint/UnreachableCode: + Description: 'Unreachable code.' + Enabled: true + VersionAdded: 0.9 + +Lint/UnusedBlockArgument: + Description: 'Checks for unused block arguments.' + StyleGuide: '#underscore-unused-vars' + Enabled: true + VersionAdded: 0.21 + VersionChanged: 0.22 + IgnoreEmptyBlocks: true + AllowUnusedKeywordArguments: false + +Lint/UnusedMethodArgument: + Description: 'Checks for unused method arguments.' + StyleGuide: '#underscore-unused-vars' + Enabled: true + VersionAdded: 0.21 + VersionChanged: 0.35 + AllowUnusedKeywordArguments: false + IgnoreEmptyMethods: true + +Lint/UriEscapeUnescape: + Description: >- + `URI.escape` method is obsolete and should not be used. Instead, use + `CGI.escape`, `URI.encode_www_form` or `URI.encode_www_form_component` + depending on your specific use case. + Also `URI.unescape` method is obsolete and should not be used. Instead, use + `CGI.unescape`, `URI.decode_www_form` or `URI.decode_www_form_component` + depending on your specific use case. + Enabled: true + VersionAdded: 0.50 + +Lint/UriRegexp: + Description: 'Use `URI::DEFAULT_PARSER.make_regexp` instead of `URI.regexp`.' + Enabled: true + VersionAdded: 0.50 + +Lint/UselessAccessModifier: + Description: 'Checks for useless access modifiers.' + Enabled: true + VersionAdded: 0.20 + VersionChanged: 0.47 + ContextCreatingMethods: [] + MethodCreatingMethods: [] + +Lint/UselessAssignment: + Description: 'Checks for useless assignment to a local variable.' + StyleGuide: '#underscore-unused-vars' + Enabled: true + VersionAdded: 0.11 + +Lint/UselessComparison: + Description: 'Checks for comparison of something with itself.' + Enabled: true + VersionAdded: 0.11 + +Lint/UselessElseWithoutRescue: + Description: 'Checks for useless `else` in `begin..end` without `rescue`.' + Enabled: true + VersionAdded: 0.17 + +Lint/UselessSetterCall: + Description: 'Checks for useless setter call to a local variable.' + Enabled: true + VersionAdded: 0.13 + +Lint/Void: + Description: 'Possible use of operator/literal/variable in void context.' + Enabled: true + VersionAdded: 0.9 + CheckForMethodsWithNoSideEffects: false + +#################### Metrics ############################### + +Metrics/AbcSize: + Description: >- + A calculated magnitude based on number of assignments, + branches, and conditions. + Reference: 'http://c2.com/cgi/wiki?AbcMetric' + Enabled: true + VersionAdded: 0.27 + # The ABC size is a calculated magnitude, so this number can be an Integer or + # a Float. + Max: 15 + +Metrics/BlockLength: + Description: 'Avoid long blocks with many lines.' + Enabled: true + VersionAdded: 0.44 + VersionChanged: 0.58 + CountComments: false # count full line comments? + Max: 25 + ExcludedMethods: + # By default, exclude the `#refine` method, as it tends to have larger + # associated blocks. + - refine + +Metrics/BlockNesting: + Description: 'Avoid excessive block nesting' + StyleGuide: '#three-is-the-number-thou-shalt-count' + Enabled: true + VersionAdded: 0.25 + VersionChanged: 0.47 + CountBlocks: false + Max: 3 + +Metrics/ClassLength: + Description: 'Avoid classes longer than 100 lines of code.' + Enabled: true + VersionAdded: 0.25 + CountComments: false # count full line comments? + Max: 100 + +# Avoid complex methods. +Metrics/CyclomaticComplexity: + Description: >- + A complexity metric that is strongly correlated to the number + of test cases needed to validate a method. + Enabled: true + VersionAdded: 0.25 + Max: 6 + +Metrics/LineLength: + Description: 'Limit lines to 80 characters.' + StyleGuide: '#80-character-limits' + Enabled: true + VersionAdded: 0.25 + VersionChanged: 0.46 + Max: 80 + # To make it possible to copy or click on URIs in the code, we allow lines + # containing a URI to be longer than Max. + AllowHeredoc: true + AllowURI: true + URISchemes: + - http + - https + # The IgnoreCopDirectives option causes the LineLength rule to ignore cop + # directives like '# rubocop: enable ...' when calculating a line's length. + IgnoreCopDirectives: false + # The IgnoredPatterns option is a list of !ruby/regexp and/or string + # elements. Strings will be converted to Regexp objects. A line that matches + # any regular expression listed in this option will be ignored by LineLength. + IgnoredPatterns: [] + +Metrics/MethodLength: + Description: 'Avoid methods longer than 10 lines of code.' + StyleGuide: '#short-methods' + Enabled: true + VersionAdded: 0.25 + VersionChanged: 0.59.2 + CountComments: false # count full line comments? + Max: 10 + ExcludedMethods: [] + +Metrics/ModuleLength: + Description: 'Avoid modules longer than 100 lines of code.' + Enabled: true + VersionAdded: 0.31 + CountComments: false # count full line comments? + Max: 100 + +Metrics/ParameterLists: + Description: 'Avoid parameter lists longer than three or four parameters.' + StyleGuide: '#too-many-params' + Enabled: true + VersionAdded: 0.25 + Max: 5 + CountKeywordArgs: true + +Metrics/PerceivedComplexity: + Description: >- + A complexity metric geared towards measuring complexity for a + human reader. + Enabled: true + VersionAdded: 0.25 + Max: 7 + +#################### Naming ############################## + +Naming/AccessorMethodName: + Description: Check the naming of accessor methods for get_/set_. + StyleGuide: '#accessor_mutator_method_names' + Enabled: true + VersionAdded: 0.50 + +Naming/AsciiIdentifiers: + Description: 'Use only ascii symbols in identifiers.' + StyleGuide: '#english-identifiers' + Enabled: true + VersionAdded: 0.50 + +Naming/BinaryOperatorParameterName: + Description: 'When defining binary operators, name the argument other.' + StyleGuide: '#other-arg' + Enabled: true + VersionAdded: 0.50 + +Naming/ClassAndModuleCamelCase: + Description: 'Use CamelCase for classes and modules.' + StyleGuide: '#camelcase-classes' + Enabled: true + VersionAdded: 0.50 + +Naming/ConstantName: + Description: 'Constants should use SCREAMING_SNAKE_CASE.' + StyleGuide: '#screaming-snake-case' + Enabled: true + VersionAdded: 0.50 + Naming/FileName: + Description: 'Use snake_case for source file names.' + StyleGuide: '#snake-case-files' + Enabled: true + VersionAdded: 0.50 # Camel case file names listed in `AllCops:Include` and all file names listed # in `AllCops:Exclude` are excluded by default. Add extra excludes here. Exclude: [] # When `true`, requires that each source file should define a class or module # with a name which matches the file name (converted to ... case). @@ -726,34 +1813,56 @@ - XML - XMPP - XSRF - XSS -Naming/HeredocDelimiterNaming: - Blacklist: - - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/' - Naming/HeredocDelimiterCase: + Description: 'Use configured case for heredoc delimiters.' + StyleGuide: '#heredoc-delimiters' + Enabled: true + VersionAdded: 0.50 EnforcedStyle: uppercase SupportedStyles: - lowercase - uppercase +Naming/HeredocDelimiterNaming: + Description: 'Use descriptive heredoc delimiters.' + StyleGuide: '#heredoc-delimiters' + Enabled: true + VersionAdded: 0.50 + Blacklist: + - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/' + Naming/MemoizedInstanceVariableName: + Description: >- + Memoized method name should match memo instance variable name. + Enabled: true + VersionAdded: 0.53 + VersionChanged: 0.58 EnforcedStyleForLeadingUnderscores: disallowed SupportedStylesForLeadingUnderscores: - disallowed - required - optional Naming/MethodName: + Description: 'Use the configured style when naming methods.' + StyleGuide: '#snake-case-symbols-methods-vars' + Enabled: true + VersionAdded: 0.50 EnforcedStyle: snake_case SupportedStyles: - snake_case - camelCase Naming/PredicateName: + Description: 'Check the names of predicate methods.' + StyleGuide: '#bool-methods-qmark' + Enabled: true + VersionAdded: 0.50 + VersionChanged: 0.51 # Predicate name prefixes. NamePrefix: - is_ - has_ - have_ @@ -774,19 +1883,30 @@ # helpers in the form of `have_something` or `be_something`. Exclude: - 'spec/**/*' Naming/UncommunicativeBlockParamName: + Description: >- + Checks for block parameter names that contain capital letters, + end in numbers, or do not meet a minimal length. + Enabled: true + VersionAdded: 0.53 # Parameter names may be equal to or greater than this value MinNameLength: 1 AllowNamesEndingInNumbers: true # Whitelisted names that will not register an offense AllowedNames: [] # Blacklisted names that will register an offense ForbiddenNames: [] Naming/UncommunicativeMethodParamName: + Description: >- + Checks for method parameter names that contain capital letters, + end in numbers, or do not meet a minimal length. + Enabled: true + VersionAdded: 0.53 + VersionChanged: 0.59 # Parameter names may be equal to or greater than this value MinNameLength: 3 AllowNamesEndingInNumbers: true # Whitelisted names that will not register an offense AllowedNames: @@ -800,56 +1920,800 @@ - ip - db # Blacklisted names that will register an offense ForbiddenNames: [] + Naming/VariableName: + Description: 'Use the configured style when naming variables.' + StyleGuide: '#snake-case-symbols-methods-vars' + Enabled: true + VersionAdded: 0.50 EnforcedStyle: snake_case SupportedStyles: - snake_case - camelCase Naming/VariableNumber: + Description: 'Use the configured style when numbering variables.' + Enabled: true + VersionAdded: 0.50 EnforcedStyle: normalcase SupportedStyles: - snake_case - normalcase - non_integer -#################### Style ########################### +#################### Performance ########################### +Performance/Caller: + Description: >- + Use `caller(n..n)` instead of `caller`. + Enabled: true + VersionAdded: 0.49 + +Performance/CaseWhenSplat: + Description: >- + Reordering `when` conditions with a splat to the end + of the `when` branches can improve performance. + Enabled: false + AutoCorrect: false + SafeAutoCorrect: false + VersionAdded: 0.34 + VersionChanged: 0.59 + +Performance/Casecmp: + Description: >- + Use `casecmp` rather than `downcase ==`, `upcase ==`, `== downcase`, or `== upcase`.. + Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringcasecmp-vs-stringdowncase---code' + Enabled: true + VersionAdded: 0.36 + +Performance/ChainArrayAllocation: + Description: >- + Instead of chaining array methods that allocate new arrays, mutate an + existing array. + Reference: 'https://twitter.com/schneems/status/1034123879978029057' + Enabled: false + VersionAdded: 0.59 + +Performance/CompareWithBlock: + Description: 'Use `sort_by(&:foo)` instead of `sort { |a, b| a.foo <=> b.foo }`.' + Enabled: true + VersionAdded: 0.46 + +Performance/Count: + Description: >- + Use `count` instead of `select...size`, `reject...size`, + `select...count`, `reject...count`, `select...length`, + and `reject...length`. + # This cop has known compatibility issues with `ActiveRecord` and other + # frameworks. ActiveRecord's `count` ignores the block that is passed to it. + # For more information, see the documentation in the cop itself. + # If you understand the known risk, you can disable `SafeMode`. + SafeMode: true + Enabled: true + VersionAdded: 0.31 + VersionChanged: 0.39 + +Performance/Detect: + Description: >- + Use `detect` instead of `select.first`, `find_all.first`, + `select.last`, and `find_all.last`. + Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code' + # This cop has known compatibility issues with `ActiveRecord` and other + # frameworks. `ActiveRecord` does not implement a `detect` method and `find` + # has its own meaning. Correcting `ActiveRecord` methods with this cop + # should be considered unsafe. + SafeMode: true + Enabled: true + VersionAdded: 0.30 + VersionChanged: 0.39 + +Performance/DoubleStartEndWith: + Description: >- + Use `str.{start,end}_with?(x, ..., y, ...)` + instead of `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`. + Enabled: true + VersionAdded: 0.36 + VersionChanged: 0.48 + # Used to check for `starts_with?` and `ends_with?`. + # These methods are defined by `ActiveSupport`. + IncludeActiveSupportAliases: false + +Performance/EndWith: + Description: 'Use `end_with?` instead of a regex match anchored to the end of a string.' + Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end' + # This will change to a new method call which isn't guaranteed to be on the + # object. Switching these methods has to be done with knowledge of the types + # of the variables which rubocop doesn't have. + SafeAutoCorrect: false + AutoCorrect: false + Enabled: true + VersionAdded: 0.36 + VersionChanged: 0.44 + +Performance/FixedSize: + Description: 'Do not compute the size of statically sized objects except in constants' + Enabled: true + VersionAdded: 0.35 + +Performance/FlatMap: + Description: >- + Use `Enumerable#flat_map` + instead of `Enumerable#map...Array#flatten(1)` + or `Enumberable#collect..Array#flatten(1)` + Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code' + Enabled: true + VersionAdded: 0.30 + EnabledForFlattenWithoutParams: false + # If enabled, this cop will warn about usages of + # `flatten` being called without any parameters. + # This can be dangerous since `flat_map` will only flatten 1 level, and + # `flatten` without any parameters can flatten multiple levels. + +Performance/InefficientHashSearch: + Description: 'Use `key?` or `value?` instead of `keys.include?` or `values.include?`' + Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashkey-instead-of-hashkeysinclude-code' + Enabled: true + VersionAdded: 0.56 + Safe: false + +Performance/LstripRstrip: + Description: 'Use `strip` instead of `lstrip.rstrip`.' + Enabled: true + VersionAdded: 0.36 + +Performance/RangeInclude: + Description: 'Use `Range#cover?` instead of `Range#include?`.' + Reference: 'https://github.com/JuanitoFatas/fast-ruby#cover-vs-include-code' + Enabled: true + VersionAdded: 0.36 + +Performance/RedundantBlockCall: + Description: 'Use `yield` instead of `block.call`.' + Reference: 'https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode' + Enabled: true + VersionAdded: 0.36 + +Performance/RedundantMatch: + Description: >- + Use `=~` instead of `String#match` or `Regexp#match` in a context where the + returned `MatchData` is not needed. + Enabled: true + VersionAdded: 0.36 + +Performance/RedundantMerge: + Description: 'Use Hash#[]=, rather than Hash#merge! with a single key-value pair.' + Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashmerge-vs-hash-code' + Enabled: true + VersionAdded: 0.36 + # Max number of key-value pairs to consider an offense + MaxKeyValuePairs: 2 + +Performance/RedundantSortBy: + Description: 'Use `sort` instead of `sort_by { |x| x }`.' + Enabled: true + VersionAdded: 0.36 + +Performance/RegexpMatch: + Description: >- + Use `match?` instead of `Regexp#match`, `String#match`, `Symbol#match`, + `Regexp#===`, or `=~` when `MatchData` is not used. + Reference: 'https://github.com/JuanitoFatas/fast-ruby#regexp-vs-stringmatch-vs-string-vs-stringmatch-code-' + Enabled: true + VersionAdded: 0.47 + +Performance/ReverseEach: + Description: 'Use `reverse_each` instead of `reverse.each`.' + Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code' + Enabled: true + VersionAdded: 0.30 + +Performance/Sample: + Description: >- + Use `sample` instead of `shuffle.first`, + `shuffle.last`, and `shuffle[Integer]`. + Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code' + Enabled: true + VersionAdded: 0.30 + +Performance/Size: + Description: >- + Use `size` instead of `count` for counting + the number of elements in `Array` and `Hash`. + Reference: 'https://github.com/JuanitoFatas/fast-ruby#arraylength-vs-arraysize-vs-arraycount-code' + Enabled: true + VersionAdded: 0.30 + +Performance/StartWith: + Description: 'Use `start_with?` instead of a regex match anchored to the beginning of a string.' + Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end' + # This will change to a new method call which isn't guaranteed to be on the + # object. Switching these methods has to be done with knowledge of the types + # of the variables which rubocop doesn't have. + SafeAutoCorrect: false + AutoCorrect: false + Enabled: true + VersionAdded: 0.36 + VersionChanged: 0.44 + +Performance/StringReplacement: + Description: >- + Use `tr` instead of `gsub` when you are replacing the same + number of characters. Use `delete` instead of `gsub` when + you are deleting characters. + Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringgsub-vs-stringtr-code' + Enabled: true + VersionAdded: 0.33 + +Performance/TimesMap: + Description: 'Checks for .times.map calls.' + AutoCorrect: false + Enabled: true + VersionAdded: 0.36 + VersionChanged: 0.50 + SafeAutoCorrect: false # see https://github.com/rubocop-hq/rubocop/issues/4658 + +Performance/UnfreezeString: + Description: 'Use unary plus to get an unfrozen string literal.' + Enabled: true + VersionAdded: 0.50 + +Performance/UnneededSort: + Description: >- + Use `min` instead of `sort.first`, + `max_by` instead of `sort_by...last`, etc. + Enabled: true + VersionAdded: 0.55 + +Performance/UriDefaultParser: + Description: 'Use `URI::DEFAULT_PARSER` instead of `URI::Parser.new`.' + Enabled: true + VersionAdded: 0.50 + +#################### Rails ################################# + +# By default, the rails cops are not run. Override in project or home +# directory .rubocop.yml files, or by giving the -R/--rails option. +Rails: + Enabled: false + +Rails/ActionFilter: + Description: 'Enforces consistent use of action filter methods.' + Enabled: true + VersionAdded: 0.19 + EnforcedStyle: action + SupportedStyles: + - action + - filter + Include: + - app/controllers/**/*.rb + +Rails/ActiveRecordAliases: + Description: >- + Avoid Active Record aliases: + Use `update` instead of `update_attributes`. + Use `update!` instead of `update_attributes!`. + Enabled: true + VersionAdded: 0.53 + +Rails/ActiveSupportAliases: + Description: >- + Avoid ActiveSupport aliases of standard ruby methods: + `String#starts_with?`, `String#ends_with?`, + `Array#append`, `Array#prepend`. + Enabled: true + VersionAdded: 0.48 + +Rails/ApplicationJob: + Description: 'Check that jobs subclass ApplicationJob.' + Enabled: true + VersionAdded: 0.49 + +Rails/ApplicationRecord: + Description: 'Check that models subclass ApplicationRecord.' + Enabled: true + VersionAdded: 0.49 + +Rails/AssertNot: + Description: 'Use `assert_not` instead of `assert !`.' + Enabled: true + VersionAdded: 0.56 + Include: + - '**/test/**/*' + +Rails/Blank: + Description: 'Enforces use of `blank?`.' + Enabled: true + VersionAdded: 0.48 + # Convert usages of `nil? || empty?` to `blank?` + NilOrEmpty: true + # Convert usages of `!present?` to `blank?` + NotPresent: true + # Convert usages of `unless present?` to `if blank?` + UnlessPresent: true + +Rails/BulkChangeTable: + Description: 'Check whether alter queries are combinable.' + Enabled: true + VersionAdded: 0.57 + Database: null + SupportedDatabases: + - mysql + - postgresql + Include: + - db/migrate/*.rb + +Rails/CreateTableWithTimestamps: + Description: >- + Checks the migration for which timestamps are not included + when creating a new table. + Enabled: true + VersionAdded: 0.52 + Include: + - db/migrate/*.rb + +Rails/Date: + Description: >- + Checks the correct usage of date aware methods, + such as Date.today, Date.current etc. + Enabled: true + VersionAdded: 0.30 + VersionChanged: 0.33 + # The value `strict` disallows usage of `Date.today`, `Date.current`, + # `Date#to_time` etc. + # The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc + # (but not `Date.today`) which are overridden by ActiveSupport to handle current + # time zone. + EnforcedStyle: flexible + SupportedStyles: + - strict + - flexible + +Rails/Delegate: + Description: 'Prefer delegate method for delegations.' + Enabled: true + VersionAdded: 0.21 + VersionChanged: 0.50 + # When set to true, using the target object as a prefix of the + # method name without using the `delegate` method will be a + # violation. When set to false, this case is legal. + EnforceForPrefixed: true + +Rails/DelegateAllowBlank: + Description: 'Do not use allow_blank as an option to delegate.' + Enabled: true + VersionAdded: 0.44 + +Rails/DynamicFindBy: + Description: 'Use `find_by` instead of dynamic `find_by_*`.' + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find_by' + Enabled: true + VersionAdded: 0.44 + Whitelist: + - find_by_sql + +Rails/EnumUniqueness: + Description: 'Avoid duplicate integers in hash-syntax `enum` declaration.' + Enabled: true + VersionAdded: 0.46 + Include: + - app/models/**/*.rb + +Rails/EnvironmentComparison: + Description: "Favor `Rails.env.production?` over `Rails.env == 'production'`" + Enabled: true + VersionAdded: 0.52 + +Rails/Exit: + Description: >- + Favor `fail`, `break`, `return`, etc. over `exit` in + application or library code outside of Rake files to avoid + exits during unit testing or running in production. + Enabled: true + VersionAdded: 0.41 + Include: + - app/**/*.rb + - config/**/*.rb + - lib/**/*.rb + Exclude: + - lib/**/*.rake + +Rails/FilePath: + Description: 'Use `Rails.root.join` for file path joining.' + Enabled: true + VersionAdded: 0.47 + VersionChanged: 0.57 + EnforcedStyle: arguments + SupportedStyles: + - slashes + - arguments + +Rails/FindBy: + Description: 'Prefer find_by over where.first.' + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find_by' + Enabled: true + VersionAdded: 0.30 + Include: + - app/models/**/*.rb + +Rails/FindEach: + Description: 'Prefer all.find_each over all.find.' + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find-each' + Enabled: true + VersionAdded: 0.30 + Include: + - app/models/**/*.rb + +Rails/HasAndBelongsToMany: + Description: 'Prefer has_many :through to has_and_belongs_to_many.' + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#has-many-through' + Enabled: true + VersionAdded: 0.12 + Include: + - app/models/**/*.rb + +Rails/HasManyOrHasOneDependent: + Description: 'Define the dependent option to the has_many and has_one associations.' + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#has_many-has_one-dependent-option' + Enabled: true + VersionAdded: 0.50 + Include: + - app/models/**/*.rb + +Rails/HttpPositionalArguments: + Description: 'Use keyword arguments instead of positional arguments in http method calls.' + Enabled: true + VersionAdded: 0.44 + Include: + - 'spec/**/*' + - 'test/**/*' + +Rails/HttpStatus: + Description: 'Enforces use of symbolic or numeric value to define HTTP status.' + Enabled: true + VersionAdded: 0.54 + EnforcedStyle: symbolic + SupportedStyles: + - numeric + - symbolic + +Rails/InverseOf: + Description: 'Checks for associations where the inverse cannot be determined automatically.' + Enabled: true + VersionAdded: 0.52 + Include: + - app/models/**/*.rb + +Rails/LexicallyScopedActionFilter: + Description: "Checks that methods specified in the filter's `only` or `except` options are explicitly defined in the controller." + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#lexically-scoped-action-filter' + Enabled: true + VersionAdded: 0.52 + Include: + - app/controllers/**/*.rb + +Rails/NotNullColumn: + Description: 'Do not add a NOT NULL column without a default value' + Enabled: true + VersionAdded: 0.43 + Include: + - db/migrate/*.rb + +Rails/Output: + Description: 'Checks for calls to puts, print, etc.' + Enabled: true + VersionAdded: 0.15 + VersionChanged: 0.19 + Include: + - app/**/*.rb + - config/**/*.rb + - db/**/*.rb + - lib/**/*.rb + +Rails/OutputSafety: + Description: 'The use of `html_safe` or `raw` may be a security risk.' + Enabled: true + VersionAdded: 0.41 + +Rails/PluralizationGrammar: + Description: 'Checks for incorrect grammar when using methods like `3.day.ago`.' + Enabled: true + VersionAdded: 0.35 + +Rails/Presence: + Description: 'Checks code that can be written more easily using `Object#presence` defined by Active Support.' + Enabled: true + VersionAdded: 0.52 + +Rails/Present: + Description: 'Enforces use of `present?`.' + Enabled: true + VersionAdded: 0.48 + # Convert usages of `!nil? && !empty?` to `present?` + NotNilAndNotEmpty: true + # Convert usages of `!blank?` to `present?` + NotBlank: true + # Convert usages of `unless blank?` to `if present?` + UnlessBlank: true + +Rails/ReadWriteAttribute: + Description: >- + Checks for read_attribute(:attr) and + write_attribute(:attr, val). + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#read-attribute' + Enabled: true + VersionAdded: 0.20 + VersionChanged: 0.29 + Include: + - app/models/**/*.rb + +Rails/RedundantReceiverInWithOptions: + Description: 'Checks for redundant receiver in `with_options`.' + Enabled: true + VersionAdded: 0.52 + +Rails/RefuteMethods: + Description: 'Use `assert_not` methods instead of `refute` methods.' + Enabled: true + VersionAdded: 0.56 + Include: + - '**/test/**/*' + +Rails/RelativeDateConstant: + Description: 'Do not assign relative date to constants.' + Enabled: true + VersionAdded: 0.48 + VersionChanged: 0.59 + AutoCorrect: false + +Rails/RequestReferer: + Description: 'Use consistent syntax for request.referer.' + Enabled: true + VersionAdded: 0.41 + EnforcedStyle: referer + SupportedStyles: + - referer + - referrer + +Rails/ReversibleMigration: + Description: 'Checks whether the change method of the migration file is reversible.' + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#reversible-migration' + Reference: 'http://api.rubyonrails.org/classes/ActiveRecord/Migration/CommandRecorder.html' + Enabled: true + VersionAdded: 0.47 + Include: + - db/migrate/*.rb + +Rails/SafeNavigation: + Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`" + Enabled: true + VersionAdded: 0.43 + # This will convert usages of `try` to use safe navigation as well as `try!`. + # `try` and `try!` work slightly differently. `try!` and safe navigation will + # both raise a `NoMethodError` if the receiver of the method call does not + # implement the intended method. `try` will not raise an exception for this. + ConvertTry: false + +Rails/SaveBang: + Description: 'Identifies possible cases where Active Record save! or related should be used.' + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#save-bang' + Enabled: false + VersionAdded: 0.42 + VersionChanged: 0.59 + AllowImplicitReturn: true + AllowedReceivers: [] + +Rails/ScopeArgs: + Description: 'Checks the arguments of ActiveRecord scopes.' + Enabled: true + VersionAdded: 0.19 + Include: + - app/models/**/*.rb + +Rails/SkipsModelValidations: + Description: >- + Use methods that skips model validations with caution. + See reference for more information. + Reference: 'http://guides.rubyonrails.org/active_record_validations.html#skipping-validations' + Enabled: true + VersionAdded: 0.47 + VersionChanged: 0.59 + Blacklist: + - decrement! + - decrement_counter + - increment! + - increment_counter + - toggle! + - touch + - update_all + - update_attribute + - update_column + - update_columns + - update_counters + Whitelist: [] + +Rails/TimeZone: + Description: 'Checks the correct usage of time zone aware methods.' + StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#time' + Reference: 'http://danilenko.org/2012/7/6/rails_timezones' + Enabled: true + VersionAdded: 0.30 + VersionChanged: 0.33 + # The value `strict` means that `Time` should be used with `zone`. + # The value `flexible` allows usage of `in_time_zone` instead of `zone`. + EnforcedStyle: flexible + SupportedStyles: + - strict + - flexible + +Rails/UniqBeforePluck: + Description: 'Prefer the use of uniq or distinct before pluck.' + Enabled: true + VersionAdded: 0.40 + VersionChanged: 0.47 + EnforcedStyle: conservative + SupportedStyles: + - conservative + - aggressive + AutoCorrect: false + +Rails/UnknownEnv: + Description: 'Use correct environment name.' + Enabled: true + VersionAdded: 0.51 + Environments: + - development + - test + - production + +Rails/Validation: + Description: 'Use validates :attribute, hash of validations.' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.41 + Include: + - app/models/**/*.rb + +#################### Security ############################## + +Security/Eval: + Description: 'The use of eval represents a serious security risk.' + Enabled: true + VersionAdded: 0.47 + +Security/JSONLoad: + Description: >- + Prefer usage of `JSON.parse` over `JSON.load` due to potential + security issues. See reference for more information. + Reference: 'http://ruby-doc.org/stdlib-2.3.0/libdoc/json/rdoc/JSON.html#method-i-load' + Enabled: true + VersionAdded: 0.43 + VersionChanged: 0.44 + # Autocorrect here will change to a method that may cause crashes depending + # on the value of the argument. + AutoCorrect: false + SafeAutoCorrect: false + +Security/MarshalLoad: + Description: >- + Avoid using of `Marshal.load` or `Marshal.restore` due to potential + security issues. See reference for more information. + Reference: 'http://ruby-doc.org/core-2.3.3/Marshal.html#module-Marshal-label-Security+considerations' + Enabled: true + VersionAdded: 0.47 + +Security/Open: + Description: 'The use of Kernel#open represents a serious security risk.' + Enabled: true + VersionAdded: 0.53 + Safe: false + +Security/YAMLLoad: + Description: >- + Prefer usage of `YAML.safe_load` over `YAML.load` due to potential + security issues. See reference for more information. + Reference: 'https://ruby-doc.org/stdlib-2.3.3/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security' + Enabled: true + VersionAdded: 0.47 + SafeAutoCorrect: false + +#################### Style ############################### + Style/AccessModifierDeclarations: + Description: 'Checks style of how access modifiers are used.' + Enabled: true + VersionAdded: 0.57 EnforcedStyle: group SupportedStyles: - inline - group Style/Alias: + Description: 'Use alias instead of alias_method.' + StyleGuide: '#alias-method' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.36 EnforcedStyle: prefer_alias SupportedStyles: - prefer_alias - prefer_alias_method Style/AndOr: + Description: 'Use &&/|| instead of and/or.' + StyleGuide: '#no-and-or-or' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.25 # Whether `and` and `or` are banned only in conditionals (conditionals) # or completely (always). EnforcedStyle: always SupportedStyles: - always - conditionals +Style/ArrayJoin: + Description: 'Use Array#join instead of Array#*.' + StyleGuide: '#array-join' + Enabled: true + VersionAdded: 0.20 + VersionChanged: 0.31 + Style/AsciiComments: + Description: 'Use only ascii symbols in comments.' + StyleGuide: '#english-comments' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.52 AllowedChars: [] -# Checks if usage of `%()` or `%Q()` matches configuration. +Style/Attr: + Description: 'Checks for uses of Module#attr.' + StyleGuide: '#attr' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.12 + +Style/AutoResourceCleanup: + Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).' + Enabled: false + VersionAdded: 0.30 + Style/BarePercentLiterals: + Description: 'Checks if usage of %() or %Q() matches configuration.' + StyleGuide: '#percent-q-shorthand' + Enabled: true + VersionAdded: 0.25 EnforcedStyle: bare_percent SupportedStyles: - percent_q - bare_percent +Style/BeginBlock: + Description: 'Avoid the use of BEGIN blocks.' + StyleGuide: '#no-BEGIN-blocks' + Enabled: true + VersionAdded: 0.9 + +Style/BlockComments: + Description: 'Do not use block comments.' + StyleGuide: '#no-block-comments' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.23 + Style/BlockDelimiters: + Description: >- + Avoid using {...} for multi-line blocks (multiline chaining is + always ugly). + Prefer {...} over do...end for single-line blocks. + StyleGuide: '#single-line-blocks' + Enabled: true + VersionAdded: 0.30 + VersionChanged: 0.35 EnforcedStyle: line_count_based SupportedStyles: # The `line_count_based` style enforces braces around single line blocks and # do..end around multi-line blocks. - line_count_based @@ -917,10 +2781,14 @@ - lambda - proc - it Style/BracesAroundHashParameters: + Description: 'Enforce braces style around hash parameters.' + Enabled: true + VersionAdded: 0.14.1 + VersionChanged: 0.28 EnforcedStyle: no_braces SupportedStyles: # The `braces` style enforces braces around all method parameters that are # hashes. - braces @@ -930,12 +2798,34 @@ # The `context_dependent` style checks that the last parameter doesn't have # braces around it, but requires braces if the second to last parameter is # also a hash literal. - context_dependent +Style/CaseEquality: + Description: 'Avoid explicit use of the case equality operator(===).' + StyleGuide: '#no-case-equality' + Enabled: true + VersionAdded: 0.9 + +Style/CharacterLiteral: + Description: 'Checks for uses of character literals.' + StyleGuide: '#no-character-literals' + Enabled: true + VersionAdded: 0.9 + Style/ClassAndModuleChildren: - # Checks the style of children definitions at classes and modules. + Description: 'Checks style of children classes and modules.' + StyleGuide: '#namespace-definition' + # Moving from compact to nested children requires knowledge of whether the + # outer parent is a module or a class. Moving from nested to compact requires + # verification that the outer parent is defined elsewhere. Rubocop does not + # have the knowledge to perform either operation safely and thus requires + # manual oversight. + SafeAutoCorrect: false + AutoCorrect: false + Enabled: true + VersionAdded: 0.19 # # Basically there are two different styles: # # `nested` - have each child on a separate line # class Foo @@ -952,32 +2842,69 @@ SupportedStyles: - nested - compact Style/ClassCheck: + Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.' + Enabled: true + VersionAdded: 0.24 EnforcedStyle: is_a? SupportedStyles: - is_a? - kind_of? +Style/ClassMethods: + Description: 'Use self when defining module/class methods.' + StyleGuide: '#def-self-class-methods' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.20 + +Style/ClassVars: + Description: 'Avoid the use of class variables.' + StyleGuide: '#no-class-vars' + Enabled: true + VersionAdded: 0.13 + # Align with the style guide. Style/CollectionMethods: - # Mapping from undesired method to desired_method + Description: 'Preferred collection methods.' + StyleGuide: '#map-find-select-reduce-size' + Enabled: false + VersionAdded: 0.9 + VersionChanged: 0.27 + Safe: false + # Mapping from undesired method to desired method # e.g. to use `detect` over `find`: # - # CollectionMethods: + # Style/CollectionMethods: # PreferredMethods: # find: detect PreferredMethods: collect: 'map' collect!: 'map!' inject: 'reduce' detect: 'find' find_all: 'select' -# Use '`' or '%x' around command literals. +Style/ColonMethodCall: + Description: 'Do not use :: for method call.' + StyleGuide: '#double-colons' + Enabled: true + VersionAdded: 0.9 + +Style/ColonMethodDefinition: + Description: 'Do not use :: for defining class methods.' + StyleGuide: '#colon-method-definition' + Enabled: true + VersionAdded: 0.52 + Style/CommandLiteral: + Description: 'Use `` or %x around command literals.' + StyleGuide: '#percent-x' + Enabled: true + VersionAdded: 0.30 EnforcedStyle: backticks # backticks: Always use backticks. # percent_x: Always use `%x`. # mixed: Use backticks on single-line commands, and `%x` on multi-line commands. SupportedStyles: @@ -988,18 +2915,37 @@ # are found in the command string. AllowInnerBackticks: false # Checks formatting of special comments Style/CommentAnnotation: + Description: >- + Checks formatting of special comments + (TODO, FIXME, OPTIMIZE, HACK, REVIEW). + StyleGuide: '#annotate-keywords' + Enabled: true + VersionAdded: 0.10 + VersionChanged: 0.31 Keywords: - TODO - FIXME - OPTIMIZE - HACK - REVIEW +Style/CommentedKeyword: + Description: 'Do not place comments on the same line as certain keywords.' + Enabled: true + VersionAdded: 0.51 + Style/ConditionalAssignment: + Description: >- + Use the return value of `if` and `case` statements for + assignment to a variable and variable comparison instead + of assigning that variable inside of each branch. + Enabled: true + VersionAdded: 0.36 + VersionChanged: 0.47 EnforcedStyle: assign_to_condition SupportedStyles: - assign_to_condition - assign_inside_condition # When configured to `assign_to_condition`, `SingleLineConditionsOnly` @@ -1028,60 +2974,200 @@ # Enabled: true # Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc' # AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.' # Style/Copyright: + Description: 'Include a copyright notice in each file before any code.' + Enabled: false + VersionAdded: 0.30 Notice: '^Copyright (\(c\) )?2[0-9]{3} .+' AutocorrectNotice: '' +Style/DateTime: + Description: 'Use Date or Time over DateTime.' + StyleGuide: '#date--time' + Enabled: true + VersionAdded: 0.51 + VersionChanged: 0.59 + AllowCoercion: false + +Style/DefWithParentheses: + Description: 'Use def with parentheses when there are arguments.' + StyleGuide: '#method-parens' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.12 + +Style/Dir: + Description: >- + Use the `__dir__` method to retrieve the canonicalized + absolute path to the current file. + Enabled: true + VersionAdded: 0.50 + +Style/Documentation: + Description: 'Document classes and non-namespace modules.' + Enabled: true + VersionAdded: 0.9 + Exclude: + - 'spec/**/*' + - 'test/**/*' + Style/DocumentationMethod: + Description: 'Checks for missing documentation comment for public methods.' + Enabled: false + VersionAdded: 0.43 + Exclude: + - 'spec/**/*' + - 'test/**/*' RequireForNonPublicMethods: false -# Warn on empty else statements -# empty - warn only on empty `else` -# nil - warn on `else` with nil in it -# both - warn on empty `else` and `else` with `nil` in it +Style/DoubleNegation: + Description: 'Checks for uses of double negation (!!).' + StyleGuide: '#no-bang-bang' + Enabled: true + VersionAdded: 0.19 + +Style/EachForSimpleLoop: + Description: >- + Use `Integer#times` for a simple loop which iterates a fixed + number of times. + Enabled: true + VersionAdded: 0.41 + +Style/EachWithObject: + Description: 'Prefer `each_with_object` over `inject` or `reduce`.' + Enabled: true + VersionAdded: 0.22 + VersionChanged: 0.42 + +Style/EmptyBlockParameter: + Description: 'Omit pipes for empty block parameters.' + Enabled: true + VersionAdded: 0.52 + +Style/EmptyCaseCondition: + Description: 'Avoid empty condition in case statements.' + Enabled: true + VersionAdded: 0.40 + Style/EmptyElse: + Description: 'Avoid empty else-clauses.' + Enabled: true + VersionAdded: 0.28 + VersionChanged: 0.32 EnforcedStyle: both + # empty - warn only on empty `else` + # nil - warn on `else` with nil in it + # both - warn on empty `else` and `else` with `nil` in it SupportedStyles: - empty - nil - both +Style/EmptyLambdaParameter: + Description: 'Omit parens for empty lambda parameters.' + Enabled: true + VersionAdded: 0.52 + +Style/EmptyLiteral: + Description: 'Prefer literals to Array.new/Hash.new/String.new.' + StyleGuide: '#literal-array-hash' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.12 + Style/EmptyMethod: + Description: 'Checks the formatting of empty method definitions.' + StyleGuide: '#no-single-line-methods' + Enabled: true + VersionAdded: 0.46 EnforcedStyle: compact SupportedStyles: - compact - expanded -# Checks use of for or each in multiline loops. +Style/Encoding: + Description: 'Use UTF-8 as the source file encoding.' + StyleGuide: '#utf-8' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.50 + +Style/EndBlock: + Description: 'Avoid the use of END blocks.' + StyleGuide: '#no-END-blocks' + Enabled: true + VersionAdded: 0.9 + +Style/EvalWithLocation: + Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.' + Enabled: true + VersionAdded: 0.52 + +Style/EvenOdd: + Description: 'Favor the use of Integer#even? && Integer#odd?' + StyleGuide: '#predicate-methods' + Enabled: true + VersionAdded: 0.12 + VersionChanged: 0.29 + +Style/ExpandPathArguments: + Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`." + Enabled: true + VersionAdded: 0.53 + +Style/FlipFlop: + Description: 'Checks for flip flops' + StyleGuide: '#no-flip-flops' + Enabled: true + VersionAdded: 0.16 + Style/For: + Description: 'Checks use of for or each in multiline loops.' + StyleGuide: '#no-for-loops' + Enabled: true + VersionAdded: 0.13 + VersionChanged: 0.59 EnforcedStyle: each SupportedStyles: - each - for -# Enforce the method used for string formatting. Style/FormatString: + Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.' + StyleGuide: '#sprintf' + Enabled: true + VersionAdded: 0.19 + VersionChanged: 0.49 EnforcedStyle: format SupportedStyles: - format - sprintf - percent -# Enforce using either `%<token>s` or `%{token}` Style/FormatStringToken: + Description: 'Use a consistent style for format string tokens.' + Enabled: true EnforcedStyle: annotated SupportedStyles: # Prefer tokens which contain a sprintf like type annotation like # `%<name>s`, `%<age>d`, `%<score>f` - annotated # Prefer simple looking "template" style tokens like `%{name}`, `%{age}` - template - unannotated + VersionAdded: 0.49 + VersionChanged: 0.52 Style/FrozenStringLiteralComment: + Description: >- + Add the frozen_string_literal comment to the top of files + to help transition from Ruby 2.3.0 to Ruby 3.0. + Enabled: true + VersionAdded: 0.36 + VersionChanged: 0.47 EnforcedStyle: when_needed SupportedStyles: # `when_needed` will add the frozen string literal comment to files # only when the `TargetRubyVersion` is set to 2.3+. - when_needed @@ -1092,20 +3178,37 @@ - always # `never` will enforce that the frozen string literal comment does not # exist in a file. - never -# Built-in global variables are allowed by default. Style/GlobalVars: + Description: 'Do not introduce global variables.' + StyleGuide: '#instance-vars' + Reference: 'http://www.zenspider.com/Languages/Ruby/QuickRef.html' + Enabled: true + VersionAdded: 0.13 + # Built-in global variables are allowed by default. AllowedVariables: [] -# `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` -# needs to have to trigger this cop Style/GuardClause: + Description: 'Check for conditionals that can be replaced with guard clauses' + StyleGuide: '#no-nested-conditionals' + Enabled: true + VersionAdded: 0.20 + VersionChanged: 0.22 + # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` + # needs to have to trigger this cop MinBodyLength: 1 Style/HashSyntax: + Description: >- + Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax + { :a => 1, :b => 2 }. + StyleGuide: '#hash-literals' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.43 EnforcedStyle: ruby19 SupportedStyles: # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys - ruby19 # checks for hash rocket syntax for all hashes @@ -1117,11 +3220,70 @@ # Force hashes that have a symbol value to use hash rockets UseHashRocketsWithSymbolValues: false # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style PreferHashRocketsForNonAlnumEndingSymbols: false +Style/IdenticalConditionalBranches: + Description: >- + Checks that conditional statements do not have an identical + line at the end of each branch, which can validly be moved + out of the conditional. + Enabled: true + VersionAdded: 0.36 + +Style/IfInsideElse: + Description: 'Finds if nodes inside else, which can be converted to elsif.' + Enabled: true + VersionAdded: 0.36 + +Style/IfUnlessModifier: + Description: >- + Favor modifier if/unless usage when you have a + single-line body. + StyleGuide: '#if-as-a-modifier' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.30 + +Style/IfUnlessModifierOfIfUnless: + Description: >- + Avoid modifier if/unless usage on conditionals. + Enabled: true + VersionAdded: 0.39 + +Style/IfWithSemicolon: + Description: 'Do not use if x; .... Use the ternary operator instead.' + StyleGuide: '#no-semicolon-ifs' + Enabled: true + VersionAdded: 0.9 + +Style/ImplicitRuntimeError: + Description: >- + Use `raise` or `fail` with an explicit exception class and + message, rather than just a message. + Enabled: false + VersionAdded: 0.41 + +Style/InfiniteLoop: + Description: 'Use Kernel#loop for infinite loops.' + StyleGuide: '#infinite-loop' + Enabled: true + VersionAdded: 0.26 + SafeAutoCorrect: false + +Style/InlineComment: + Description: 'Avoid trailing inline comments.' + Enabled: false + VersionAdded: 0.23 + Style/InverseMethods: + Description: >- + Use the inverse method instead of `!.method` + if an inverse method is defined. + Enabled: true + Safe: false + VersionAdded: 0.48 # `InverseMethods` are methods that can be inverted by a not (`not` or `!`) # The relationship of inverse methods only needs to be defined in one direction. # Keys and values both need to be defined as symbols. InverseMethods: :any?: :none? @@ -1139,85 +3301,244 @@ InverseBlocks: :select: :reject :select!: :reject! Style/IpAddresses: + Description: "Don't include literal IP addresses in code." + Enabled: false + VersionAdded: 0.58 # Allow strings to be whitelisted Whitelist: - "::" # :: is a valid IPv6 address, but could potentially be legitimately in code Style/Lambda: + Description: 'Use the new lambda literal syntax for single-line blocks.' + StyleGuide: '#lambda-multi-line' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.40 EnforcedStyle: line_count_dependent SupportedStyles: - line_count_dependent - lambda - literal Style/LambdaCall: + Description: 'Use lambda.call(...) instead of lambda.(...).' + StyleGuide: '#proc-call' + Enabled: true + VersionAdded: 0.13.1 + VersionChanged: 0.14 EnforcedStyle: call SupportedStyles: - call - braces +Style/LineEndConcatenation: + Description: >- + Use \ instead of + or << to concatenate two string literals at + line end. + Enabled: true + VersionAdded: 0.18 + Style/MethodCallWithArgsParentheses: + Description: 'Use parentheses for method calls with arguments.' + StyleGuide: '#method-invocation-parens' + Enabled: false + VersionAdded: 0.47 + VersionChanged: 0.48 IgnoreMacros: true IgnoredMethods: [] Style/MethodCallWithoutArgsParentheses: + Description: 'Do not use parentheses for method calls with no arguments.' + StyleGuide: '#method-invocation-parens' + Enabled: true IgnoredMethods: [] + VersionAdded: 0.47 + VersionChanged: 0.55 +Style/MethodCalledOnDoEndBlock: + Description: 'Avoid chaining a method call on a do...end block.' + StyleGuide: '#single-line-blocks' + Enabled: false + VersionAdded: 0.14 + Style/MethodDefParentheses: + Description: >- + Checks if the method definitions have or don't have + parentheses. + StyleGuide: '#method-parens' + Enabled: true + VersionAdded: 0.16 + VersionChanged: 0.35 EnforcedStyle: require_parentheses SupportedStyles: - require_parentheses - require_no_parentheses - require_no_parentheses_except_multiline +Style/MethodMissingSuper: + Description: Checks for `method_missing` to call `super`. + StyleGuide: '#no-method-missing' + Enabled: true + VersionAdded: 0.56 + +Style/MinMax: + Description: >- + Use `Enumerable#minmax` instead of `Enumerable#min` + and `Enumerable#max` in conjunction.' + Enabled: true + VersionAdded: 0.50 + Style/MissingElse: + Description: >- + Require if/case expressions to have an else branches. + If enabled, it is recommended that + Style/UnlessElse and Style/EmptyElse be enabled. + This will conflict with Style/EmptyElse if + Style/EmptyElse is configured to style "both" + Enabled: false + VersionAdded: 0.30 + VersionChanged: 0.38 EnforcedStyle: both SupportedStyles: # if - warn when an if expression is missing an else branch # case - warn when a case expression is missing an else branch # both - warn when an if or case expression is missing an else branch - if - case - both -# Checks the grouping of mixins (`include`, `extend`, `prepend`) in `class` and -# `module` bodies. +Style/MissingRespondToMissing: + Description: >- + Checks if `method_missing` is implemented + without implementing `respond_to_missing`. + StyleGuide: '#no-method-missing' + Enabled: true + VersionAdded: 0.56 + Style/MixinGrouping: + Description: 'Checks for grouping of mixins in `class` and `module` bodies.' + StyleGuide: '#mixin-grouping' + Enabled: true + VersionAdded: 0.48 + VersionChanged: 0.49 EnforcedStyle: separated SupportedStyles: # separated: each mixed in module goes in a separate statement. # grouped: mixed in modules are grouped into a single statement. - separated - grouped +Style/MixinUsage: + Description: 'Checks that `include`, `extend` and `prepend` exists at the top level.' + Enabled: true + VersionAdded: 0.51 + Style/ModuleFunction: + Description: 'Checks for usage of `extend self` in modules.' + StyleGuide: '#module-function' + Enabled: true + VersionAdded: 0.11 + VersionChanged: 0.53 EnforcedStyle: module_function SupportedStyles: - module_function - extend_self +Style/MultilineBlockChain: + Description: 'Avoid multi-line chains of blocks.' + StyleGuide: '#single-line-blocks' + Enabled: true + VersionAdded: 0.13 + +Style/MultilineIfModifier: + Description: 'Only use if/unless modifiers on single line statements.' + StyleGuide: '#no-multiline-if-modifiers' + Enabled: true + VersionAdded: 0.45 + +Style/MultilineIfThen: + Description: 'Do not use then for multi-line if/unless.' + StyleGuide: '#no-then' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.26 + Style/MultilineMemoization: + Description: 'Wrap multiline memoizations in a `begin` and `end` block.' + Enabled: true + VersionAdded: 0.44 + VersionChanged: 0.48 EnforcedStyle: keyword SupportedStyles: - keyword - braces +Style/MultilineMethodSignature: + Description: 'Avoid multi-line method signatures.' + Enabled: false + VersionAdded: 0.59 + +Style/MultilineTernaryOperator: + Description: >- + Avoid multi-line ?: (the ternary operator); + use if/unless instead. + StyleGuide: '#no-multiline-ternary' + Enabled: true + VersionAdded: 0.9 + +Style/MultipleComparison: + Description: >- + Avoid comparing a variable with multiple items in a conditional, + use Array#include? instead. + Enabled: true + VersionAdded: 0.49 + +Style/MutableConstant: + Description: 'Do not assign mutable objects to constants.' + Enabled: true + VersionAdded: 0.34 + Style/NegatedIf: + Description: >- + Favor unless over if for negative conditions + (or control flow or). + StyleGuide: '#unless-for-negatives' + Enabled: true + VersionAdded: 0.20 + VersionChanged: 0.48 EnforcedStyle: both SupportedStyles: # both: prefix and postfix negated `if` should both use `unless` # prefix: only use `unless` for negated `if` statements positioned before the body of the statement # postfix: only use `unless` for negated `if` statements positioned after the body of the statement - both - prefix - postfix +Style/NegatedWhile: + Description: 'Favor until over while for negative conditions.' + StyleGuide: '#until-for-negatives' + Enabled: true + VersionAdded: 0.20 + +Style/NestedModifier: + Description: 'Avoid using nested modifiers.' + StyleGuide: '#no-nested-modifiers' + Enabled: true + VersionAdded: 0.35 + Style/NestedParenthesizedCalls: + Description: >- + Parenthesize method calls which are nested inside the + argument list of another parenthesized method call. + Enabled: true + VersionAdded: 0.36 + VersionChanged: 0.50 Whitelist: - be - be_a - be_an - be_between @@ -1233,11 +3554,22 @@ - match - raise_error - respond_to - start_with +Style/NestedTernaryOperator: + Description: 'Use one expression per branch in a ternary operator.' + StyleGuide: '#no-nested-ternary' + Enabled: true + VersionAdded: 0.9 + Style/Next: + Description: 'Use `next` to skip iteration instead of a condition at the end.' + StyleGuide: '#no-nested-conditionals' + Enabled: true + VersionAdded: 0.22 + VersionChanged: 0.35 # With `always` all conditions at the end of an iteration needs to be # replaced by next - with `skip_modifier_ifs` the modifier if like this one # are ignored: [1, 2].each { |a| return 'yes' if a == 1 } EnforcedStyle: skip_modifier_ifs # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` @@ -1246,95 +3578,263 @@ SupportedStyles: - skip_modifier_ifs - always Style/NilComparison: + Description: 'Prefer x.nil? to x == nil.' + StyleGuide: '#predicate-methods' + Enabled: true + VersionAdded: 0.12 + VersionChanged: 0.59 EnforcedStyle: predicate SupportedStyles: - predicate - comparison Style/NonNilCheck: + Description: 'Checks for redundant nil checks.' + StyleGuide: '#no-non-nil-checks' + Enabled: true + VersionAdded: 0.20 + VersionChanged: 0.22 # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is # **usually** OK, but might change behavior. # # With `IncludeSemanticChanges` set to `false`, this cop does not report # offenses for `!x.nil?` and does no changes that might change behavior. IncludeSemanticChanges: false -Style/NumericLiterals: - MinDigits: 5 - Strict: false +Style/Not: + Description: 'Use ! instead of not.' + StyleGuide: '#bang-not-not' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.20 Style/NumericLiteralPrefix: + Description: 'Use smallcase prefixes for numeric literals.' + StyleGuide: '#numeric-literal-prefixes' + Enabled: true + VersionAdded: 0.41 EnforcedOctalStyle: zero_with_o SupportedOctalStyles: - zero_with_o - zero_only + +Style/NumericLiterals: + Description: >- + Add underscores to large numeric literals to improve their + readability. + StyleGuide: '#underscores-in-numerics' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.48 + MinDigits: 5 + Strict: false + Style/NumericPredicate: + Description: >- + Checks for the use of predicate- or comparison methods for + numeric comparisons. + StyleGuide: '#predicate-methods' + Safe: false + # This will change to a new method call which isn't guaranteed to be on the + # object. Switching these methods has to be done with knowledge of the types + # of the variables which rubocop doesn't have. + SafeAutoCorrect: false + AutoCorrect: false + Enabled: true + VersionAdded: 0.42 + VersionChanged: 0.59 EnforcedStyle: predicate SupportedStyles: - predicate - comparison IgnoredMethods: [] # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause # false positives. Exclude: - 'spec/**/*' +Style/OneLineConditional: + Description: >- + Favor the ternary operator(?:) over + if/then/else/end constructs. + StyleGuide: '#ternary-operator' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.38 + Style/OptionHash: + Description: "Don't use option hashes when you can use keyword arguments." + Enabled: false + VersionAdded: 0.33 + VersionChanged: 0.34 # A list of parameter names that will be flagged by this cop. SuspiciousParamNames: - options - opts - args - params - parameters -# Allow safe assignment in conditions. +Style/OptionalArguments: + Description: >- + Checks for optional arguments that do not appear at the end + of the argument list + StyleGuide: '#optional-arguments' + Enabled: true + VersionAdded: 0.33 + +Style/OrAssignment: + Description: 'Recommend usage of double pipe equals (||=) where applicable.' + StyleGuide: '#double-pipe-for-uninit' + Enabled: true + VersionAdded: 0.50 + +Style/ParallelAssignment: + Description: >- + Check for simple usages of parallel assignment. + It will only warn when the number of variables + matches on both sides of the assignment. + StyleGuide: '#parallel-assignment' + Enabled: true + VersionAdded: 0.32 + Style/ParenthesesAroundCondition: + Description: >- + Don't use parentheses around the condition of an + if/unless/while. + StyleGuide: '#no-parens-around-condition' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.56 AllowSafeAssignment: true AllowInMultilineConditions: false Style/PercentLiteralDelimiters: + Description: 'Use `%`-literal delimiters consistently' + StyleGuide: '#percent-literal-braces' + Enabled: true + VersionAdded: 0.19 # Specify the default preferred delimiter for all types with the 'default' key # Override individual delimiters (even with default specified) by specifying # an individual key PreferredDelimiters: default: () '%i': '[]' '%I': '[]' '%r': '{}' '%w': '[]' '%W': '[]' + VersionChanged: 0.48.1 Style/PercentQLiterals: + Description: 'Checks if uses of %Q/%q match the configured preference.' + Enabled: true + VersionAdded: 0.25 EnforcedStyle: lower_case_q SupportedStyles: - lower_case_q # Use `%q` when possible, `%Q` when necessary - upper_case_q # Always use `%Q` +Style/PerlBackrefs: + Description: 'Avoid Perl-style regex back references.' + StyleGuide: '#no-perl-regexp-last-matchers' + Enabled: true + VersionAdded: 0.13 + Style/PreferredHashMethods: + Description: 'Checks use of `has_key?` and `has_value?` Hash methods.' + StyleGuide: '#hash-key' + Enabled: true + VersionAdded: 0.41 + VersionChanged: 0.44 EnforcedStyle: short SupportedStyles: - short - verbose +Style/Proc: + Description: 'Use proc instead of Proc.new.' + StyleGuide: '#proc' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.18 + Style/RaiseArgs: + Description: 'Checks the arguments passed to raise/fail.' + StyleGuide: '#exception-class-messages' + Enabled: true + VersionAdded: 0.14 + VersionChanged: 0.40 EnforcedStyle: exploded SupportedStyles: - compact # raise Exception.new(msg) - exploded # raise Exception, msg +Style/RandomWithOffset: + Description: >- + Prefer to use ranges when generating random numbers instead of + integers with offsets. + StyleGuide: '#random-numbers' + Enabled: true + VersionAdded: 0.52 + +Style/RedundantBegin: + Description: "Don't use begin blocks when they are not needed." + StyleGuide: '#begin-implicit' + Enabled: true + VersionAdded: 0.10 + VersionChanged: 0.21 + +Style/RedundantConditional: + Description: "Don't return true/false from a conditional." + Enabled: true + VersionAdded: 0.50 + +Style/RedundantException: + Description: "Checks for an obsolete RuntimeException argument in raise/fail." + StyleGuide: '#no-explicit-runtimeerror' + Enabled: true + VersionAdded: 0.14 + VersionChanged: 0.29 + +Style/RedundantFreeze: + Description: "Checks usages of Object#freeze on immutable objects." + Enabled: true + VersionAdded: 0.34 + +Style/RedundantParentheses: + Description: "Checks for parentheses that seem not to serve any purpose." + Enabled: true + VersionAdded: 0.36 + Style/RedundantReturn: + Description: "Don't use return where it's not required." + StyleGuide: '#no-explicit-return' + Enabled: true + VersionAdded: 0.10 + VersionChanged: 0.14 # When `true` allows code like `return x, y`. AllowMultipleReturnValues: false -# Use `/` or `%r` around regular expressions. +Style/RedundantSelf: + Description: "Don't use self where it's not needed." + StyleGuide: '#no-self-unless-required' + Enabled: true + VersionAdded: 0.10 + VersionChanged: 0.13 + Style/RegexpLiteral: + Description: 'Use / or %r around regular expressions.' + StyleGuide: '#percent-r' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.30 EnforcedStyle: slashes # slashes: Always use slashes. # percent_r: Always use `%r`. # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes. SupportedStyles: @@ -1343,118 +3843,252 @@ - mixed # If `false`, the cop will always recommend using `%r` if one or more slashes # are found in the regexp string. AllowInnerSlashes: false +Style/RescueModifier: + Description: 'Avoid using rescue in its modifier form.' + StyleGuide: '#no-rescue-modifiers' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.34 + Style/RescueStandardError: + Description: 'Avoid rescuing without specifying an error class.' + Enabled: true + VersionAdded: 0.52 EnforcedStyle: explicit # implicit: Do not include the error class, `rescue` # explicit: Require an error class `rescue StandardError` SupportedStyles: - implicit - explicit Style/ReturnNil: + Description: 'Use return instead of return nil.' + Enabled: false EnforcedStyle: return SupportedStyles: - return - return_nil + VersionAdded: 0.50 Style/SafeNavigation: + Description: >- + This cop transforms usages of a method call safeguarded by + a check for the existence of the object to + safe navigation (`&.`). + Enabled: true + VersionAdded: 0.43 + VersionChanged: 0.44 # Safe navigation may cause a statement to start returning `nil` in addition # to whatever it used to return. ConvertCodeThatCanStartToReturnNil: false Whitelist: - present? - blank? - presence - try - try! + VersionChanged: 0.56 +Style/SelfAssignment: + Description: >- + Checks for places where self-assignment shorthand should have + been used. + StyleGuide: '#self-assignment' + Enabled: true + VersionAdded: 0.19 + VersionChanged: 0.29 + Style/Semicolon: + Description: "Don't use semicolons to terminate expressions." + StyleGuide: '#no-semicolon' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.19 # Allow `;` to separate several expressions on the same line. AllowAsExpressionSeparator: false +Style/Send: + Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.' + StyleGuide: '#prefer-public-send' + Enabled: false + VersionAdded: 0.33 + Style/SignalException: + Description: 'Checks for proper usage of fail and raise.' + StyleGuide: '#prefer-raise-over-fail' + Enabled: true + VersionAdded: 0.11 + VersionChanged: 0.37 EnforcedStyle: only_raise SupportedStyles: - only_raise - only_fail - semantic Style/SingleLineBlockParams: + Description: 'Enforces the names of some block params.' + Enabled: false + VersionAdded: 0.16 + VersionChanged: 0.47 Methods: - reduce: - acc - elem - inject: - acc - elem Style/SingleLineMethods: + Description: 'Avoid single-line methods.' + StyleGuide: '#no-single-line-methods' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.19 AllowIfMethodIsEmpty: true Style/SpecialGlobalVars: + Description: 'Avoid Perl-style global variables.' + StyleGuide: '#no-cryptic-perlisms' + Enabled: true + VersionAdded: 0.13 + VersionChanged: 0.36 + SafeAutoCorrect: false EnforcedStyle: use_english_names SupportedStyles: - use_perl_names - use_english_names Style/StabbyLambdaParentheses: + Description: 'Check for the usage of parentheses around stabby lambda arguments.' + StyleGuide: '#stabby-lambda-with-args' + Enabled: true + VersionAdded: 0.35 EnforcedStyle: require_parentheses SupportedStyles: - require_parentheses - require_no_parentheses +Style/StderrPuts: + Description: 'Use `warn` instead of `$stderr.puts`.' + StyleGuide: '#warn' + Enabled: true + VersionAdded: 0.51 + +Style/StringHashKeys: + Description: 'Prefer symbols instead of strings as hash keys.' + StyleGuide: '#symbols-as-keys' + Enabled: false + VersionAdded: 0.52 + Style/StringLiterals: + Description: 'Checks if uses of quotes match the configured preference.' + StyleGuide: '#consistent-string-literals' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.36 EnforcedStyle: single_quotes SupportedStyles: - single_quotes - double_quotes # If `true`, strings which span multiple lines using `\` for continuation must # use the same type of quotes on each line. ConsistentQuotesInMultiline: false Style/StringLiteralsInInterpolation: + Description: >- + Checks if uses of quotes inside expressions in interpolated + strings match the configured preference. + Enabled: true + VersionAdded: 0.27 EnforcedStyle: single_quotes SupportedStyles: - single_quotes - double_quotes Style/StringMethods: + Description: 'Checks if configured preferred methods are used over non-preferred.' + Enabled: false + VersionAdded: 0.34 + VersionChanged: 0.34.2 # Mapping from undesired method to desired_method # e.g. to use `to_sym` over `intern`: # # StringMethods: # PreferredMethods: # intern: to_sym PreferredMethods: intern: to_sym +Style/StructInheritance: + Description: 'Checks for inheritance from Struct.new.' + StyleGuide: '#no-extend-struct-new' + Enabled: true + VersionAdded: 0.29 + Style/SymbolArray: + Description: 'Use %i or %I for arrays of symbols.' + StyleGuide: '#percent-i' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.49 EnforcedStyle: percent MinSize: 2 SupportedStyles: - percent - brackets +Style/SymbolLiteral: + Description: 'Use plain symbols instead of string symbols when possible.' + Enabled: true + VersionAdded: 0.30 + Style/SymbolProc: + Description: 'Use symbols as procs instead of blocks when possible.' + Enabled: true + VersionAdded: 0.26 + VersionChanged: 0.40 # A list of method names to be ignored by the check. # The names should be fairly unique, otherwise you'll end up ignoring lots of code. IgnoredMethods: - respond_to - define_method Style/TernaryParentheses: + Description: 'Checks for use of parentheses around ternary conditions.' + Enabled: true + VersionAdded: 0.42 + VersionChanged: 0.46 EnforcedStyle: require_no_parentheses SupportedStyles: - require_parentheses - require_no_parentheses - require_parentheses_when_complex AllowSafeAssignment: true +Style/TrailingBodyOnClass: + Description: 'Class body goes below class statement.' + Enabled: true + VersionAdded: 0.53 + +Style/TrailingBodyOnMethodDefinition: + Description: 'Method body goes below definition.' + Enabled: true + VersionAdded: 0.52 + +Style/TrailingBodyOnModule: + Description: 'Module body goes below module statement.' + Enabled: true + VersionAdded: 0.53 + Style/TrailingCommaInArguments: + Description: 'Checks for trailing comma in argument lists.' + StyleGuide: '#no-trailing-params-comma' + Enabled: true + VersionAdded: 0.36 # If `comma`, the cop requires a comma after the last argument, but only for # parenthesized method calls where each argument is on its own line. # If `consistent_comma`, the cop requires a comma after the last argument, # for all parenthesized method calls with arguments. EnforcedStyleForMultiline: no_comma @@ -1462,34 +4096,59 @@ - comma - consistent_comma - no_comma Style/TrailingCommaInArrayLiteral: - # If `comma`, the cop requires a comma after the last item in an array, + Description: 'Checks for trailing comma in array literals.' + StyleGuide: '#no-trailing-array-commas' + Enabled: true + VersionAdded: 0.53 # but only when each item is on its own line. # If `consistent_comma`, the cop requires a comma after the last item of all # non-empty array literals. EnforcedStyleForMultiline: no_comma SupportedStylesForMultiline: - comma - consistent_comma - no_comma Style/TrailingCommaInHashLiteral: + Description: 'Checks for trailing comma in hash literals.' + Enabled: true # If `comma`, the cop requires a comma after the last item in a hash, # but only when each item is on its own line. # If `consistent_comma`, the cop requires a comma after the last item of all # non-empty hash literals. EnforcedStyleForMultiline: no_comma SupportedStylesForMultiline: - comma - consistent_comma - no_comma + VersionAdded: 0.53 +Style/TrailingMethodEndStatement: + Description: 'Checks for trailing end statement on line of method body.' + Enabled: true + VersionAdded: 0.52 + +Style/TrailingUnderscoreVariable: + Description: >- + Checks for the usage of unneeded trailing underscores at the + end of parallel variable assignment. + AllowNamedUnderscoreVariables: true + Enabled: true + VersionAdded: 0.31 + VersionChanged: 0.35 + # `TrivialAccessors` requires exact name matches and doesn't allow # predicated methods by default. Style/TrivialAccessors: + Description: 'Prefer attr_* methods to trivial readers/writers.' + StyleGuide: '#attr_family' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.38 # When set to `false` the cop will suggest the use of accessor methods # in situations like: # # def name # @other_name @@ -1525,12 +4184,83 @@ - to_regexp - to_str - to_s - to_sym -# `WordArray` enforces how array literals of word-like strings should be expressed. +Style/UnlessElse: + Description: >- + Do not use unless with else. Rewrite these with the positive + case first. + StyleGuide: '#no-else-with-unless' + Enabled: true + VersionAdded: 0.9 + +Style/UnneededCapitalW: + Description: 'Checks for %W when interpolation is not needed.' + Enabled: true + VersionAdded: 0.21 + VersionChanged: 0.24 + +Style/UnneededCondition: + Description: 'Checks for unnecessary conditional expressions.' + Enabled: true + VersionAdded: 0.57 + +Style/UnneededInterpolation: + Description: 'Checks for strings that are just an interpolated expression.' + Enabled: true + VersionAdded: 0.36 + +Style/UnneededPercentQ: + Description: 'Checks for %q/%Q when single quotes or double quotes would do.' + StyleGuide: '#percent-q' + Enabled: true + VersionAdded: 0.24 + +Style/UnpackFirst: + Description: >- + Checks for accessing the first element of `String#unpack` + instead of using `unpack1` + Enabled: true + VersionAdded: 0.54 + +Style/VariableInterpolation: + Description: >- + Don't interpolate global, instance and class variables + directly in strings. + StyleGuide: '#curlies-interpolate' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.20 + +Style/WhenThen: + Description: 'Use when x then ... for one-line cases.' + StyleGuide: '#one-line-cases' + Enabled: true + VersionAdded: 0.9 + +Style/WhileUntilDo: + Description: 'Checks for redundant do after while or until.' + StyleGuide: '#no-multiline-while-do' + Enabled: true + VersionAdded: 0.9 + +Style/WhileUntilModifier: + Description: >- + Favor modifier while/until usage when you have a + single-line body. + StyleGuide: '#while-as-a-modifier' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.30 + Style/WordArray: + Description: 'Use %w or %W for arrays of words.' + StyleGuide: '#percent-w' + Enabled: true + VersionAdded: 0.9 + VersionChanged: 0.36 EnforcedStyle: percent SupportedStyles: # percent style: %w(word1 word2) - percent # bracket style: ['word1', 'word2'] @@ -1541,345 +4271,23 @@ MinSize: 2 # The regular expression `WordRegex` decides what is considered a word. WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/' Style/YodaCondition: + Description: 'Do not use literals as the first operand of a comparison.' + Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions' + Enabled: true EnforcedStyle: all_comparison_operators SupportedStyles: # check all comparison operators - all_comparison_operators # check only equality operators: `!=` and `==` - equality_operators_only + VersionAdded: 0.49 + VersionChanged: 0.50 -#################### Metrics ############################### - -Metrics/AbcSize: - # The ABC size is a calculated magnitude, so this number can be an Integer or - # a Float. - Max: 15 - -Metrics/BlockLength: - CountComments: false # count full line comments? - Max: 25 - ExcludedMethods: - # By default, exclude the `#refine` method, as it tends to have larger - # associated blocks. - - refine - -Metrics/BlockNesting: - CountBlocks: false - Max: 3 - -Metrics/ClassLength: - CountComments: false # count full line comments? - Max: 100 - -# Avoid complex methods. -Metrics/CyclomaticComplexity: - Max: 6 - -Metrics/LineLength: - Max: 80 - # To make it possible to copy or click on URIs in the code, we allow lines - # containing a URI to be longer than Max. - AllowHeredoc: true - AllowURI: true - URISchemes: - - http - - https - # The IgnoreCopDirectives option causes the LineLength rule to ignore cop - # directives like '# rubocop: enable ...' when calculating a line's length. - IgnoreCopDirectives: false - # The IgnoredPatterns option is a list of !ruby/regexp and/or string - # elements. Strings will be converted to Regexp objects. A line that matches - # any regular expression listed in this option will be ignored by LineLength. - IgnoredPatterns: [] - -Metrics/MethodLength: - CountComments: false # count full line comments? - Max: 10 - ExcludedMethods: [] - -Metrics/ModuleLength: - CountComments: false # count full line comments? - Max: 100 - -Metrics/ParameterLists: - Max: 5 - CountKeywordArgs: true - -Metrics/PerceivedComplexity: - Max: 7 - -#################### Lint ################################## - -# Allow safe assignment in conditions. -Lint/AssignmentInCondition: - AllowSafeAssignment: true - -Lint/InheritException: - # The default base class in favour of `Exception`. - EnforcedStyle: runtime_error - SupportedStyles: - - runtime_error - - standard_error - -Lint/MissingCopEnableDirective: - # Maximum number of consecutive lines the cop can be disabled for. - # 0 allows only single-line disables - # 1 would mean the maximum allowed is the following: - # # rubocop:disable SomeCop - # a = 1 - # # rubocop:enable SomeCop - # .inf for any size - MaximumRangeSize: .inf - -Lint/SafeNavigationChain: - Whitelist: - - present? - - blank? - - presence - - try - - try! - -Lint/SafeNavigationConsistency: - Whitelist: - - present? - - blank? - - presence - - try - - try! - -# Checks for shadowed arguments -Lint/ShadowedArgument: - IgnoreImplicitReferences: false - -# Checks for unused block arguments -Lint/UnusedBlockArgument: - IgnoreEmptyBlocks: true - AllowUnusedKeywordArguments: false - -# Checks for unused method arguments. -Lint/UnusedMethodArgument: - AllowUnusedKeywordArguments: false - IgnoreEmptyMethods: true - -Lint/UselessAccessModifier: - ContextCreatingMethods: [] - MethodCreatingMethods: [] - -Lint/Void: - CheckForMethodsWithNoSideEffects: false - -#################### Performance ########################### - -Performance/DoubleStartEndWith: - # Used to check for `starts_with?` and `ends_with?`. - # These methods are defined by `ActiveSupport`. - IncludeActiveSupportAliases: false - -Performance/RedundantMerge: - # Max number of key-value pairs to consider an offense - MaxKeyValuePairs: 2 - -#################### Rails ################################# - -Rails/ActionFilter: - EnforcedStyle: action - SupportedStyles: - - action - - filter - Include: - - app/controllers/**/*.rb - -Rails/AssertNot: - Include: - - '**/test/**/*' - -Rails/Blank: - # Convert usages of `nil? || empty?` to `blank?` - NilOrEmpty: true - # Convert usages of `!present?` to `blank?` - NotPresent: true - # Convert usages of `unless present?` to `if blank?` - UnlessPresent: true - -Rails/BulkChangeTable: - Database: null - SupportedDatabases: - - mysql - - postgresql - Include: - - db/migrate/*.rb - -Rails/CreateTableWithTimestamps: - Include: - - db/migrate/*.rb - -Rails/Date: - # The value `strict` disallows usage of `Date.today`, `Date.current`, - # `Date#to_time` etc. - # The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc - # (but not `Date.today`) which are overridden by ActiveSupport to handle current - # time zone. - EnforcedStyle: flexible - SupportedStyles: - - strict - - flexible - -Rails/Delegate: - # When set to true, using the target object as a prefix of the - # method name without using the `delegate` method will be a - # violation. When set to false, this case is legal. - EnforceForPrefixed: true - -Rails/DynamicFindBy: - Whitelist: - - find_by_sql - -Rails/EnumUniqueness: - Include: - - app/models/**/*.rb - -Rails/Exit: - Include: - - app/**/*.rb - - config/**/*.rb - - lib/**/*.rb - Exclude: - - lib/**/*.rake - -Rails/FilePath: - EnforcedStyle: arguments - SupportedStyles: - - slashes - - arguments - -Rails/FindBy: - Include: - - app/models/**/*.rb - -Rails/FindEach: - Include: - - app/models/**/*.rb - -Rails/HasAndBelongsToMany: - Include: - - app/models/**/*.rb - -Rails/HasManyOrHasOneDependent: - Include: - - app/models/**/*.rb - -Rails/HttpStatus: - EnforcedStyle: symbolic - SupportedStyles: - - numeric - - symbolic - -Rails/InverseOf: - Include: - - app/models/**/*.rb - -Rails/LexicallyScopedActionFilter: - Include: - - app/controllers/**/*.rb - -Rails/NotNullColumn: - Include: - - db/migrate/*.rb - -Rails/Output: - Include: - - app/**/*.rb - - config/**/*.rb - - db/**/*.rb - - lib/**/*.rb - -Rails/Present: - # Convert usages of `!nil? && !empty?` to `present?` - NotNilAndNotEmpty: true - # Convert usages of `!blank?` to `present?` - NotBlank: true - # Convert usages of `unless blank?` to `if present?` - UnlessBlank: true - -Rails/ReadWriteAttribute: - Include: - - app/models/**/*.rb - -Rails/RefuteMethods: - Include: - - '**/test/**/*' - -Rails/RelativeDateConstant: - AutoCorrect: false - -Rails/RequestReferer: - EnforcedStyle: referer - SupportedStyles: - - referer - - referrer - -Rails/ReversibleMigration: - Include: - - db/migrate/*.rb - -Rails/SafeNavigation: - # This will convert usages of `try` to use safe navigation as well as `try!`. - # `try` and `try!` work slightly differently. `try!` and safe navigation will - # both raise a `NoMethodError` if the receiver of the method call does not - # implement the intended method. `try` will not raise an exception for this. - ConvertTry: false - -Rails/SaveBang: - AllowImplicitReturn: true - AllowedReceivers: [] - -Rails/ScopeArgs: - Include: - - app/models/**/*.rb - -Rails/TimeZone: - # The value `strict` means that `Time` should be used with `zone`. - # The value `flexible` allows usage of `in_time_zone` instead of `zone`. - EnforcedStyle: flexible - SupportedStyles: - - strict - - flexible - -Rails/UniqBeforePluck: - EnforcedStyle: conservative - SupportedStyles: - - conservative - - aggressive - AutoCorrect: false - -Rails/UnknownEnv: - Environments: - - development - - test - - production - -Rails/SkipsModelValidations: - Blacklist: - - decrement! - - decrement_counter - - increment! - - increment_counter - - toggle! - - touch - - update_all - - update_attribute - - update_column - - update_columns - - update_counters - -Rails/Validation: - Include: - - app/models/**/*.rb - -Bundler/OrderedGems: - TreatCommentsAsGroupSeparators: true - -Gemspec/OrderedDependencies: - TreatCommentsAsGroupSeparators: true +Style/ZeroLengthPredicate: + Description: 'Use #empty? when testing for objects of length 0.' + Enabled: true + Safe: false + VersionAdded: 0.37 + VersionChanged: 0.39