require: rubocop-rspec # Common configuration. AllCops: # Include common Ruby source files. Include: - '**/*.arb' - '**/*.axlsx' - '**/*.builder' - '**/*.fcgi' - '**/*.gemfile' - '**/*.gemspec' - '**/*.god' - '**/*.jb' - '**/*.jbuilder' - '**/*.mspec' - '**/*.opal' - '**/*.pluginspec' - '**/*.podspec' - '**/*.rabl' - '**/*.rake' - '**/*.rbuild' - '**/*.rbw' - '**/*.rbx' - '**/*.ru' - '**/*.ruby' - '**/*.spec' - '**/*.thor' - '**/*.watchr' - '**/.irbrc' - '**/.pryrc' - '**/buildfile' - '**/config.ru' - '**/Appraisals' - '**/Berksfile' - '**/Brewfile' - '**/Buildfile' - '**/Capfile' - '**/Cheffile' - '**/Dangerfile' - '**/Deliverfile' - '**/Fastfile' - '**/*Fastfile' - '**/Gemfile' - '**/Guardfile' - '**/Jarfile' - '**/Mavenfile' - '**/Podfile' - '**/Puppetfile' - '**/Rakefile' - '**/Snapfile' - '**/Thorfile' - '**/Vagabondfile' - '**/Vagrantfile' Exclude: - 'node_modules/**/*' - 'vendor/**/*' - '.git/**/*' # Default formatter will be used if no `-f/--format` option is given. DefaultFormatter: progress # Cop names are displayed in offense messages by default. Change behavior # by overriding DisplayCopNames, or by giving the `--no-display-cop-names` # option. DisplayCopNames: true # Style guide URLs are not displayed in offense messages by default. Change # behavior by overriding `DisplayStyleGuide`, or by giving the # `-S/--display-style-guide` option. DisplayStyleGuide: false # When specifying style guide URLs, any paths and/or fragments will be # evaluated relative to the base URL. StyleGuideBaseURL: https://github.com/bbatsov/ruby-style-guide # Extra details are not displayed in offense messages by default. Change # behavior by overriding ExtraDetails, or by giving the # `-E/--extra-details` option. ExtraDetails: false # Additional cops that do not reference a style guide rule may be enabled by # default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving # the `--only-guide-cops` option. StyleGuideCopsOnly: false # All cops except the ones in disabled.yml 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. # 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 # line option. UseCache: true # Threshold for how many files can be stored in the result cache before some # of the files are automatically removed. MaxFilesInCache: 20000 # The cache will be stored in "rubocop_cache" under this directory. If # CacheRootDirectory is ~ (nil), which it is by default, the root will be # taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if # `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`. CacheRootDirectory: ~ # It is possible for a malicious user to know the location of RuboCop's cache # directory by looking at CacheRootDirectory, and create a symlink in its # place that could cause RuboCop to overwrite unintended files, or read # malicious input. If you are certain that your cache location is secure from # this kind of attack, and wish to use a symlinked cache location, set this # value to "true". AllowSymlinksInCacheRootDirectory: false # What MRI version of the Ruby interpreter is the inspected code intended to # run on? (If there is more than one, set this to the lowest version.) # If a value is specified for TargetRubyVersion then it is used. Acceptable # values are specificed as a float (i.e. 2.5); the teeny version of Ruby # should not be included. If the project specifies a Ruby version in the # .ruby-version file, Gemfile or gems.rb file, RuboCop will try to determine # the desired version of Ruby by inspecting the .ruby-version file first, # followed by the Gemfile.lock or gems.locked file. (Although the Ruby version # is specified in the Gemfile or gems.rb file, RuboCop reads the final value # from the lock file.) If the Ruby version is still unresolved, RuboCop will # use the oldest officially supported Ruby version (currently Ruby 2.1). TargetRubyVersion: ~ # What version of Rails is the inspected code using? If a value is specified # for TargetRailsVersion then it is used. Acceptable values are specificed # as a float (i.e. 5.1); the patch version of Rails should not be included. # If TargetRailsVersion is not set, RuboCop will parse the Gemfile.lock or # 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: ~ #################### 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 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/AlignHash: Description: Align the elements of a hash literal if they span more than one line. Enabled: true # Alignment of entries using hash rocket as separator. Valid values are: # # key - left alignment of keys # 'a' => 2 # 'bb' => 3 # separator - alignment of hash rockets, keys are right aligned # 'a' => 2 # 'bb' => 3 # table - left alignment of keys, hash rockets, and values # 'a' => 2 # 'bb' => 3 EnforcedHashRocketStyle: key SupportedHashRocketStyles: - key - separator - table # Alignment of entries using colon as separator. Valid values are: # # key - left alignment of keys # a: 0 # bb: 1 # separator - alignment of colons, keys are right aligned # a: 0 # bb: 1 # table - left alignment of keys and values # a: 0 # bb: 1 EnforcedColonStyle: key SupportedColonStyles: - key - separator - table # Select whether hashes that are the last argument in a method call should be # inspected? Valid values are: # # always_inspect - Inspect both implicit and explicit hashes. # Registers an offense for: # function(a: 1, # b: 2) # Registers an offense for: # function({a: 1, # b: 2}) # always_ignore - Ignore both implicit and explicit hashes. # Accepts: # function(a: 1, # b: 2) # Accepts: # function({a: 1, # b: 2}) # ignore_implicit - Ignore only implicit hashes. # Accepts: # function(a: 1, # b: 2) # Registers an offense for: # function({a: 1, # b: 2}) # ignore_explicit - Ignore only explicit hashes. # Accepts: # function({a: 1, # b: 2}) # Registers an offense for: # function(a: 1, # b: 2) EnforcedLastArgumentHashStyle: always_inspect SupportedLastArgumentHashStyles: - always_inspect - always_ignore - ignore_implicit - ignore_explicit Layout/AlignParameters: Description: Align the parameters of a method call if they span more than one line. StyleGuide: "#no-double-indent" Enabled: true # 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. # # method_call(a, # b) # # The `with_fixed_indentation` style aligns the following lines with one # level of indentation relative to the start of the line with the method call. # # method_call(a, # b) EnforcedStyle: with_first_parameter SupportedStyles: - with_first_parameter - with_fixed_indentation # By default, the indentation width from Layout/IndentationWidth is used # But it can be overridden by setting this parameter IndentationWidth: ~ # checks whether the end keywords are aligned properly for `do` `end` blocks. Layout/BlockAlignment: Description: Align block ends correctly. Enabled: true # The value `start_of_block` means that the `end` should be aligned with line # where the `do` keyword appears. # The value `start_of_line` means it should be aligned with the whole # expression's starting line. # The value `either` means both are allowed. EnforcedStyleAlignWith: either SupportedStylesAlignWith: - either - start_of_block - start_of_line # Indentation of `when`. Layout/CaseIndentation: Description: Indentation of when in a case/when/[else/]end. StyleGuide: "#indent-when-to-case" Enabled: true 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/bbatsov/ruby-style-guide#consistent-classes Enabled: false Categories: module_inclusion: - include - prepend - extend ExpectedOrder: - module_inclusion - constants - public_class_methods - initializer - public_methods - protected_methods - private_methods Layout/DefEndAlignment: Description: Align ends corresponding to defs correctly. Enabled: true # The value `def` means that `end` should be aligned with the def keyword. # The value `start_of_line` means that `end` should be aligned with method # calls like `private`, `public`, etc, if present in front of the `def` # keyword on the same line. EnforcedStyleAlignWith: start_of_line SupportedStylesAlignWith: - start_of_line - def 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 EnforcedStyle: leading SupportedStyles: - leading - trailing Layout/EmptyComment: Description: Checks empty comment. Enabled: true AllowBorderComment: true AllowMarginComment: true # Use empty lines between defs. Layout/EmptyLineBetweenDefs: Description: Use empty lines between defs. StyleGuide: "#empty-lines-between-methods" Enabled: true # If `true`, this parameter means that single line method definitions don't # need an empty line between them. AllowAdjacentOneLineDefs: false # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2] NumberOfEmptyLines: 1 Layout/EmptyLinesAroundBlockBody: Description: Keeps track of empty lines around block bodies. StyleGuide: "#empty-lines-around-bodies" Enabled: true 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 EnforcedStyle: no_empty_lines SupportedStyles: - empty_lines - empty_lines_except_namespace - empty_lines_special - no_empty_lines - beginning_only - ending_only Layout/EmptyLinesAroundModuleBody: Description: Keeps track of empty lines around module bodies. StyleGuide: "#empty-lines-around-bodies" Enabled: true 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 # The value `keyword` means that `end` should be aligned with the matching # keyword (`if`, `while`, etc.). # The value `variable` means that in assignments, `end` should be aligned # with the start of the variable on the left hand side of `=`. In all other # situations, `end` should still be aligned with the keyword. # The value `start_of_line` means that `end` should be aligned with the start # of the line which the matching keyword appears on. EnforcedStyleAlignWith: keyword SupportedStylesAlignWith: - keyword - variable - start_of_line AutoCorrect: false Severity: warning Layout/EndOfLine: Description: Use Unix-style line endings. StyleGuide: "#crlf" Enabled: true # 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 # 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 Layout/FirstHashElementLineBreak: Description: Checks for a line break before the first element in a multi-line hash. Enabled: false Layout/FirstMethodArgumentLineBreak: Description: Checks for a line break before the first argument in a multi-line method call. Enabled: false Layout/FirstMethodParameterLineBreak: Description: Checks for a line break before the first parameter in a multi-line method parameter definition. Enabled: false Layout/IndentFirstArgument: Description: Checks the indentation of the first parameter in a method call. Enabled: true EnforcedStyle: special_for_inner_method_call_in_parentheses SupportedStyles: # The first parameter should always be indented one step more than the # preceding line. - consistent # The first parameter should normally be indented one step more than the # preceding line, but if it's a parameter for a method call that is itself # a parameter in a method call, then the inner parameter should be indented # relative to the inner method. - special_for_inner_method_call # Same as `special_for_inner_method_call` except that the special rule only # applies if the outer method call encloses its arguments in parentheses. - special_for_inner_method_call_in_parentheses # By default, the indentation width from `Layout/IndentationWidth` is used # But it can be overridden by setting this parameter IndentationWidth: ~ Layout/IndentationConsistency: Description: Keep indentation straight. StyleGuide: "#spaces-indentation" Enabled: true # 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: Description: Use 2 spaces for indentation. StyleGuide: "#spaces-indentation" Enabled: true # Number of spaces for each indentation level. Width: 2 IgnoredPatterns: [] # Checks the indentation of the first element in an array literal. Layout/IndentFirstArrayElement: Description: Checks the indentation of the first element in an array literal. Enabled: true # The value `special_inside_parentheses` means that array literals with # brackets that have their opening bracket on the same line as a surrounding # opening round parenthesis, shall have their first element indented relative # to the first position inside the parenthesis. # # The value `consistent` means that the indentation of the first element shall # always be relative to the first position of the line where the opening # bracket is. # # The value `align_brackets` means that the indentation of the first element # shall always be relative to the position of the opening bracket. EnforcedStyle: special_inside_parentheses SupportedStyles: - special_inside_parentheses - consistent - align_brackets # By default, the indentation width from `Layout/IndentationWidth` is used # But it can be overridden by setting this parameter IndentationWidth: ~ # 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 # 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/IndentFirstHashElement: Description: Checks the indentation of the first key in a hash literal. Enabled: true # The value `special_inside_parentheses` means that hash literals with braces # that have their opening brace on the same line as a surrounding opening # round parenthesis, shall have their first key indented relative to the # first position inside the parenthesis. # # The value `consistent` means that the indentation of the first key shall # always be relative to the first position of the line where the opening # brace is. # # The value `align_braces` means that the indentation of the first key shall # always be relative to the position of the opening brace. EnforcedStyle: special_inside_parentheses SupportedStyles: - special_inside_parentheses - consistent - align_braces # By default, the indentation width from `Layout/IndentationWidth` is used # But it can be overridden by setting this parameter IndentationWidth: ~ Layout/IndentHeredoc: Description: This cops checks the indentation of the here document bodies. StyleGuide: "#squiggly-heredocs" Enabled: true EnforcedStyle: squiggly SupportedStyles: - squiggly - active_support - powerpack - unindent Layout/SpaceInLambdaLiteral: Description: Checks for spaces in lambda literals. Enabled: true EnforcedStyle: require_no_space SupportedStyles: - require_no_space - require_space 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 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 # The types of assignments which are subject to this rule. SupportedTypes: - block - case - class - if - kwbegin - module EnforcedStyle: new_line SupportedStyles: # Ensures that the assignment operator and the rhs are on the same line for # the set of supported types. - same_line # Ensures that the assignment operator and the rhs are on separate lines # for the set of supported types. - new_line Layout/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 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 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 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 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 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/SpaceAroundBlockParameters: Description: Checks the spacing inside and after block parameters pipes. Enabled: true 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 EnforcedStyle: space SupportedStyles: - space - no_space Layout/SpaceAroundOperators: Description: Use a single space around operators. StyleGuide: "#spaces-operators" Enabled: true # 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 EnforcedStyle: space SupportedStyles: - space - no_space EnforcedStyleForEmptyBraces: space SupportedStylesForEmptyBraces: - space - no_space 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 # 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/SpaceInsideArrayLiteralBrackets: Description: Checks the spacing inside array literal brackets. Enabled: true EnforcedStyle: no_space SupportedStyles: - space - no_space # 'compact' normally requires a space inside the brackets, with the exception # that successive left brackets or right brackets are collapsed together - compact EnforcedStyleForEmptyBrackets: no_space SupportedStylesForEmptyBrackets: - space - no_space Layout/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 EnforcedStyle: space SupportedStyles: - space - no_space EnforcedStyleForEmptyBraces: no_space SupportedStylesForEmptyBraces: - space - no_space # Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict. SpaceBeforeBlockParameters: true Layout/SpaceInsideHashLiteralBraces: Description: Use spaces inside hash literal braces - or don't. StyleGuide: "#spaces-operators" Enabled: true EnforcedStyle: space SupportedStyles: - space - no_space # 'compact' normally requires a space inside hash braces, with the exception # that successive left braces or right braces are collapsed together - compact EnforcedStyleForEmptyBraces: no_space SupportedStylesForEmptyBraces: - space - no_space Layout/SpaceInsideReferenceBrackets: Description: Checks the spacing inside referential brackets. Enabled: true 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 EnforcedStyle: no_space SupportedStyles: - space - no_space Layout/Tab: IndentationWidth: Description: No hard tabs. StyleGuide: "#spaces-indentation" Enabled: true Layout/TrailingBlankLines: EnforcedStyle: final_newline SupportedStyles: - final_newline - final_blank_line Description: Checks trailing blank lines and final newline. StyleGuide: "#newline-eof" Enabled: true Layout/AlignArray: Description: Align the elements of an array literal if they span more than one line. StyleGuide: "#align-multiline-arrays" Enabled: true Layout/BlockEndNewline: Description: Put end statement of multiline block on its own line. Enabled: true Layout/ClosingParenthesisIndentation: Description: Checks the indentation of hanging closing parentheses. Enabled: true Layout/CommentIndentation: Description: Indentation of comments. Enabled: true Layout/ConditionPosition: Description: Checks for condition placed in a confusing position relative to the keyword. StyleGuide: "#same-line-condition" Enabled: true Layout/ElseAlignment: Description: Align elses and elsifs correctly. Enabled: true Layout/EmptyLineAfterMagicComment: Description: Add an empty line after magic comments to separate them from code. StyleGuide: "#separate-magic-comments-from-code" Enabled: true Layout/EmptyLines: Description: Don't use several empty lines in a row. StyleGuide: "#two-or-more-empty-lines" Enabled: true Layout/EmptyLinesAroundAccessModifier: Description: Keep blank lines around access modifiers. StyleGuide: "#empty-lines-around-access-modifier" Enabled: true Layout/EmptyLinesAroundArguments: Description: Keeps track of empty lines around method arguments. Enabled: true Layout/EmptyLinesAroundBeginBody: Description: Keeps track of empty lines around begin-end bodies. StyleGuide: "#empty-lines-around-bodies" Enabled: true Layout/EmptyLinesAroundExceptionHandlingKeywords: Description: Keeps track of empty lines around exception handling keywords. StyleGuide: "#empty-lines-around-bodies" Enabled: true Layout/EmptyLinesAroundMethodBody: Description: Keeps track of empty lines around method bodies. StyleGuide: "#empty-lines-around-bodies" Enabled: true Layout/InitialIndentation: Description: Checks the indentation of the first non-blank non-comment line in a file. Enabled: true Layout/LeadingCommentSpace: Description: Comments should start with a space. StyleGuide: "#hash-space" Enabled: true Layout/MultilineBlockLayout: Description: Ensures newlines after multiline block do statements. Enabled: true Layout/RescueEnsureAlignment: Description: Align rescues and ensures correctly. Enabled: true Layout/SpaceAfterColon: Description: Use spaces after colons. StyleGuide: "#spaces-operators" Enabled: true Layout/SpaceAfterComma: Description: Use spaces after commas. StyleGuide: "#spaces-operators" Enabled: true 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 Layout/SpaceAfterNot: Description: Tracks redundant space after the ! operator. StyleGuide: "#no-space-bang" Enabled: true Layout/SpaceAfterSemicolon: Description: Use spaces after semicolons. StyleGuide: "#spaces-operators" Enabled: true Layout/SpaceAroundKeyword: Description: Use a space around keywords if appropriate. Enabled: true Layout/SpaceBeforeComma: Description: No spaces before commas. Enabled: true Layout/SpaceBeforeComment: Description: Checks for missing space between code and a comment on the same line. Enabled: true Layout/SpaceBeforeSemicolon: Description: No spaces before semicolons. Enabled: true Layout/SpaceInsideArrayPercentLiteral: Description: No unnecessary additional spaces between elements in %i/%w literals. Enabled: true Layout/SpaceInsideParens: Description: No spaces after ( or before ). StyleGuide: "#spaces-braces" Enabled: true Layout/SpaceInsidePercentLiteralDelimiters: Description: No unnecessary spaces inside delimiters of %i/%w/%x literals. Enabled: true Layout/SpaceInsideRangeLiteral: Description: No spaces inside range literals. StyleGuide: "#no-space-inside-range-literals" Enabled: true Layout/TrailingWhitespace: Description: Avoid trailing whitespace. StyleGuide: "#no-trailing-whitespace" Enabled: true #################### Naming ########################## Naming/AccessorMethodName: Description: Check the naming of accessor methods for get_/set_. StyleGuide: "#accessor_mutator_method_names" Enabled: true Naming/AsciiIdentifiers: Description: Use only ascii symbols in identifiers. StyleGuide: "#english-identifiers" Enabled: true Naming/BinaryOperatorParameterName: Description: When defining binary operators, name the argument other. StyleGuide: "#other-arg" Enabled: true Naming/ClassAndModuleCamelCase: Description: Use CamelCase for classes and modules. StyleGuide: "#camelcase-classes" Enabled: true Naming/ConstantName: Description: Constants should use SCREAMING_SNAKE_CASE. StyleGuide: "#screaming-snake-case" Enabled: true Naming/FileName: Description: Use snake_case for source file names. StyleGuide: "#snake-case-files" Enabled: true # File names listed in `AllCops:Include` are excluded by default. Add extra # excludes here. Exclude: [] # When `true`, requires that each source file should define a class or module # with a name which matches the file name (converted to ... case). # It further expects it to be nested inside modules which match the names # of subdirectories in its path. ExpectMatchingDefinition: false # If non-`nil`, expect all source file names to match the following regex. # Only the file name itself is matched, not the entire file path. # Use anchors as necessary if you want to match the entire name rather than # just a part of it. Regex: ~ # With `IgnoreExecutableScripts` set to `true`, this cop does not # report offending filenames for executable scripts (i.e. source # files with a shebang in the first line). IgnoreExecutableScripts: true AllowedAcronyms: - CLI - DSL - ACL - API - ASCII - CPU - CSS - DNS - EOF - GUID - HTML - HTTP - HTTPS - ID - IP - JSON - LHS - QPS - RAM - RHS - RPC - SLA - SMTP - SQL - SSH - TCP - TLS - TTL - UDP - UI - UID - UUID - URI - URL - UTF8 - VM - XML - XMPP - XSRF - XSS Naming/HeredocDelimiterNaming: Description: Use descriptive heredoc delimiters. StyleGuide: "#heredoc-delimiters" Enabled: true Blacklist: - END - !ruby/regexp /EO[A-Z]{1}/ Naming/HeredocDelimiterCase: Description: Use configured case for heredoc delimiters. StyleGuide: "#heredoc-delimiters" Enabled: true EnforcedStyle: uppercase SupportedStyles: - lowercase - uppercase Naming/MemoizedInstanceVariableName: Description: Memoized method name should match memo instance variable name. Enabled: true Naming/MethodName: Description: Use the configured style when naming methods. StyleGuide: "#snake-case-symbols-methods-vars" Enabled: true EnforcedStyle: snake_case SupportedStyles: - snake_case - camelCase Naming/PredicateName: Description: Check the names of predicate methods. StyleGuide: "#bool-methods-qmark" Enabled: true # Predicate name prefixes. NamePrefix: - is_ - has_ - have_ # Predicate name prefixes that should be removed. NamePrefixBlacklist: - is_ - has_ - have_ # Predicate names which, despite having a blacklisted prefix, or no `?`, # should still be accepted NameWhitelist: - is_a? # Method definition macros for dynamically generated methods. MethodDefinitionMacros: - define_method - define_singleton_method # Exclude Rspec specs because there is a strong convention to write spec # helpers in the form of `have_something` or `be_something`. Exclude: - 'spec/**/*' Naming/UncommunicativeBlockParamName: Description: Checks for block parameter names that contain capital letters, end in numbers, or do not meet a minimal length. Enabled: true # 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 # Parameter names may be equal to or greater than this value MinNameLength: 3 AllowNamesEndingInNumbers: true # Whitelisted names that will not register an offense AllowedNames: - io - id - to # 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 EnforcedStyle: snake_case SupportedStyles: - snake_case - camelCase Naming/VariableNumber: Description: Use the configured style when numbering variables. Enabled: true EnforcedStyle: normalcase SupportedStyles: - snake_case - normalcase - non_integer #################### Style ########################### Style/MinMax: Description: Use `Enumerable#minmax` instead of `Enumerable#min` and `Enumerable#max` in conjunction.' Enabled: true Style/MixinUsage: Description: Checks that `include`, `extend` and `prepend` exists at the top level. Enabled: true Style/MultilineBlockChain: Description: Avoid multi-line chains of blocks. StyleGuide: "#single-line-blocks" Enabled: true Style/MultilineIfModifier: Description: Only use if/unless modifiers on single line statements. StyleGuide: "#no-multiline-if-modifiers" Enabled: true Style/MultilineIfThen: Description: Do not use then for multi-line if/unless. StyleGuide: "#no-then" Enabled: true Style/MultilineTernaryOperator: Description: 'Avoid multi-line ?: (the ternary operator); use if/unless instead.' StyleGuide: "#no-multiline-ternary" Enabled: true Style/MultipleComparison: Description: Avoid comparing a variable with multiple items in a conditional, use Array#include? instead. Enabled: true Style/MutableConstant: Description: Do not assign mutable objects to constants. Enabled: true Style/NegatedWhile: Description: Favor until over while for negative conditions. StyleGuide: "#until-for-negatives" Enabled: true Style/NestedModifier: Description: Avoid using nested modifiers. StyleGuide: "#no-nested-modifiers" Enabled: true Style/NestedTernaryOperator: Description: Use one expression per branch in a ternary operator. StyleGuide: "#no-nested-ternary" Enabled: true Style/NilComparison: Description: Prefer x.nil? to x == nil. StyleGuide: "#predicate-methods" Enabled: true Style/Not: Description: Use ! instead of not. StyleGuide: "#bang-not-not" Enabled: true Style/OneLineConditional: Description: Favor the ternary operator(?:) over if/then/else/end constructs. StyleGuide: "#ternary-operator" Enabled: true Style/OptionalArguments: Description: Checks for optional arguments that do not appear at the end of the argument list StyleGuide: "#optional-arguments" Enabled: true Style/OrAssignment: Description: Recommend usage of double pipe equals (||=) where applicable. StyleGuide: "#double-pipe-for-uninit" Enabled: true 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 Style/PerlBackrefs: Description: Avoid Perl-style regex back references. StyleGuide: "#no-perl-regexp-last-matchers" Enabled: true Style/Proc: Description: Use proc instead of Proc.new. StyleGuide: "#proc" Enabled: true Style/RandomWithOffset: Description: Prefer to use ranges when generating random numbers instead of integers with offsets. StyleGuide: "#random-numbers" Enabled: true Style/RedundantBegin: Description: Don't use begin blocks when they are not needed. StyleGuide: "#begin-implicit" Enabled: true Style/RedundantConditional: Description: Don't return true/false from a conditional. Enabled: true Style/RedundantException: Description: Checks for an obsolete RuntimeException argument in raise/fail. StyleGuide: "#no-explicit-runtimeerror" Enabled: true Style/RedundantFreeze: Description: Checks usages of Object#freeze on immutable objects. Enabled: true Style/RedundantParentheses: Description: Checks for parentheses that seem not to serve any purpose. Enabled: true Style/RedundantSelf: Description: Don't use self where it's not needed. StyleGuide: "#no-self-unless-required" Enabled: true Style/RescueModifier: Description: Avoid using rescue in its modifier form. StyleGuide: "#no-rescue-modifiers" Enabled: true Style/SelfAssignment: Description: Checks for places where self-assignment shorthand should have been used. StyleGuide: "#self-assignment" Enabled: true Style/StderrPuts: Description: Use `warn` instead of `$stderr.puts`. StyleGuide: "#warn" Enabled: true Style/StructInheritance: Description: Checks for inheritance from Struct.new. StyleGuide: "#no-extend-struct-new" Enabled: true Style/SymbolLiteral: Description: Use plain symbols instead of string symbols when possible. Enabled: true # ========================== # ========================================= Style/Alias: Description: Use alias instead of alias_method. StyleGuide: "#alias-method" Enabled: true EnforcedStyle: prefer_alias SupportedStyles: - prefer_alias - prefer_alias_method Style/AndOr: # Whether `and` and `or` are banned only in conditionals (conditionals) # or completely (always). Description: Use &&/|| instead of and/or. StyleGuide: "#no-and-or-or" Enabled: true EnforcedStyle: always SupportedStyles: - always - conditionals Style/ArrayJoin: Description: Use Array#join instead of Array#*. StyleGuide: "#array-join" Enabled: true Style/AsciiComments: Description: Use only ascii symbols in comments. StyleGuide: "#english-comments" Enabled: true AllowedChars: [] Style/Attr: Description: Checks for uses of Module#attr. StyleGuide: "#attr" Enabled: true Style/AutoResourceCleanup: Description: Suggests the usage of an auto resource cleanup version of a method (if available). Enabled: false # Checks if usage of `%()` or `%Q()` matches configuration. Style/BarePercentLiterals: Description: Checks if usage of %() or %Q() matches configuration. StyleGuide: "#percent-q-shorthand" Enabled: true EnforcedStyle: bare_percent SupportedStyles: - percent_q - bare_percent Style/BeginBlock: Description: Avoid the use of BEGIN blocks. StyleGuide: "#no-BEGIN-blocks" Enabled: true Style/BlockComments: Description: Do not use block comments. StyleGuide: "#no-block-comments" Enabled: true 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 EnforcedStyle: line_count_based SupportedStyles: # The `line_count_based` style enforces braces around single line blocks and # do..end around multi-line blocks. - line_count_based # The `semantic` style enforces braces around functional blocks, where the # primary purpose of the block is to return a value and do..end for # procedural blocks, where the primary purpose of the block is its # side-effects. # # This looks at the usage of a block's method to determine its type (e.g. is # the result of a `map` assigned to a variable or passed to another # method) but exceptions are permitted in the `ProceduralMethods`, # `FunctionalMethods` and `IgnoredMethods` sections below. - semantic # The `braces_for_chaining` style enforces braces around single line blocks # and do..end around multi-line blocks, except for multi-line blocks whose # return value is being chained with another method (in which case braces # are enforced). - braces_for_chaining ProceduralMethods: # Methods that are known to be procedural in nature but look functional from # their usage, e.g. # # time = Benchmark.realtime do # foo.bar # end # # Here, the return value of the block is discarded but the return value of # `Benchmark.realtime` is used. - benchmark - bm - bmbm - create - each_with_object - measure - new - realtime - tap - with_object FunctionalMethods: # Methods that are known to be functional in nature but look procedural from # their usage, e.g. # # let(:foo) { Foo.new } # # Here, the return value of `Foo.new` is used to define a `foo` helper but # doesn't appear to be used from the return value of `let`. - let - let! - subject - watch IgnoredMethods: # Methods that can be either procedural or functional and cannot be # categorised from their usage alone, e.g. # # foo = lambda do |x| # puts "Hello, #{x}" # end # # foo = lambda do |x| # x * 100 # end # # Here, it is impossible to tell from the return value of `lambda` whether # the inner block's return value is significant. - lambda - proc - it Style/BracesAroundHashParameters: Description: Enforce braces style around hash parameters. Enabled: true EnforcedStyle: no_braces SupportedStyles: # The `braces` style enforces braces around all method parameters that are # hashes. - braces # The `no_braces` style checks that the last parameter doesn't have braces # around it. - no_braces # 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 Style/CharacterLiteral: Description: 'Checks for uses of character literals.' StyleGuide: '#no-character-literals' Enabled: true Style/ClassAndModuleChildren: Description: 'Checks style of children classes and modules.' StyleGuide: '#namespace-definition' # Moving from compact to nested children requires knowledge of whether the # outer parent is a module or a class. Moving from nested to compact requires # verification that the outer parent is defined elsewhere. Rubocop does not # have the knowledge to perform either operation safely and thus requires # manual oversight. AutoCorrect: false Enabled: true # Checks the style of children definitions at classes and modules. # # Basically there are two different styles: # # `nested` - have each child on a separate line # class Foo # class Bar # end # end # # `compact` - combine definitions as much as possible # class Foo::Bar # end # # The compact style is only forced, for classes or modules with one child. EnforcedStyle: nested SupportedStyles: - nested - compact AutoCorrect: false Style/ClassCheck: Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.' Enabled: true 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 Style/ClassVars: Description: 'Avoid the use of class variables.' StyleGuide: '#no-class-vars' Enabled: true # Align with the style guide. Style/CollectionMethods: Description: 'Preferred collection methods.' StyleGuide: '#map-find-select-reduce-size' Enabled: false # Mapping from undesired method to desired_method # e.g. to use `detect` over `find`: # # CollectionMethods: # PreferredMethods: # find: detect PreferredMethods: collect: 'map' collect!: 'map!' inject: 'reduce' detect: 'find' find_all: 'select' Style/ColonMethodCall: Description: 'Do not use :: for method call.' StyleGuide: '#double-colons' Enabled: true Style/ColonMethodDefinition: Description: 'Do not use :: for defining class methods.' StyleGuide: '#colon-method-definition' Enabled: true # Use '`' or '%x' around command literals. Style/CommandLiteral: Description: 'Use `` or %x around command literals.' StyleGuide: '#percent-x' Enabled: true EnforcedStyle: backticks # backticks: Always use backticks. # percent_x: Always use `%x`. # mixed: Use backticks on single-line commands, and `%x` on multi-line commands. SupportedStyles: - backticks - percent_x - mixed # If `false`, the cop will always recommend using `%x` if one or more backticks # are found in the command string. AllowInnerBackticks: false # Checks formatting of special comments Style/CommentAnnotation: Description: >- Checks formatting of special comments (TODO, FIXME, OPTIMIZE, HACK, REVIEW). StyleGuide: '#annotate-keywords' Enabled: true Keywords: - TODO - FIXME - OPTIMIZE - HACK - REVIEW Style/CommentedKeyword: Description: 'Do not place comments on the same line as certain keywords.' Enabled: true 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 EnforcedStyle: assign_to_condition SupportedStyles: - assign_to_condition - assign_inside_condition # When configured to `assign_to_condition`, `SingleLineConditionsOnly` # will only register an offense when all branches of a condition are # a single line. # When configured to `assign_inside_condition`, `SingleLineConditionsOnly` # will only register an offense for assignment to a condition that has # at least one multiline branch. SingleLineConditionsOnly: true IncludeTernaryExpressions: true # Checks that you have put a copyright in a comment before any code. # # You can override the default Notice in your .rubocop.yml file. # # In order to use autocorrect, you must supply a value for the # `AutocorrectNotice` key that matches the regexp Notice. A blank # `AutocorrectNotice` will cause an error during autocorrect. # # Autocorrect will add a copyright notice in a comment at the top # of the file immediately after any shebang or encoding comments. # # Example rubocop.yml: # # Style/Copyright: # Enabled: true # Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc' # AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.' # Style/Copyright: Description: 'Include a copyright notice in each file before any code.' Enabled: false Notice: '^Copyright (\(c\) )?2[0-9]{3} .+' AutocorrectNotice: '' Style/DateTime: Description: 'Use Date or Time over DateTime.' StyleGuide: '#date--time' Enabled: true Style/DefWithParentheses: Description: 'Use def with parentheses when there are arguments.' StyleGuide: '#method-parens' Enabled: true Style/Dir: Description: >- Use the `__dir__` method to retrieve the canonicalized absolute path to the current file. Enabled: true Style/Documentation: Description: 'Document classes and non-namespace modules.' Enabled: true Exclude: - 'spec/**/*' - 'test/**/*' Style/DocumentationMethod: Description: 'Public methods.' Enabled: false Exclude: - 'spec/**/*' - 'test/**/*' RequireForNonPublicMethods: false Style/DoubleNegation: Description: Checks for uses of double negation (!!). StyleGuide: "#no-bang-bang" Enabled: true Style/EachForSimpleLoop: Description: >- Use `Integer#times` for a simple loop which iterates a fixed number of times. Enabled: true Style/EachWithObject: Description: 'Prefer `each_with_object` over `inject` or `reduce`.' Enabled: true Style/EmptyBlockParameter: Description: 'Omit pipes for empty block parameters.' Enabled: true Style/EmptyCaseCondition: Description: 'Avoid empty condition in case statements.' Enabled: true # 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/EmptyElse: Description: Avoid empty else-clauses. Enabled: true EnforcedStyle: both SupportedStyles: - empty - nil - both Style/EmptyLambdaParameter: Description: 'Omit parens for empty lambda parameters.' Enabled: true Style/EmptyLineAfterGuardClause: Description: Add empty line after guard clause. Enabled: false Style/EmptyLiteral: Description: 'Prefer literals to Array.new/Hash.new/String.new.' StyleGuide: '#literal-array-hash' Enabled: true Style/EmptyMethod: Description: 'Checks the formatting of empty method definitions.' StyleGuide: '#no-single-line-methods' Enabled: true EnforcedStyle: compact SupportedStyles: - compact - expanded Style/Encoding: Description: 'Use UTF-8 as the source file encoding.' StyleGuide: '#utf-8' Enabled: true Style/EndBlock: Description: 'Avoid the use of END blocks.' StyleGuide: '#no-END-blocks' Enabled: true Style/EvalWithLocation: Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.' Enabled: true Style/EvenOdd: Description: 'Favor the use of Integer#even? && Integer#odd?' StyleGuide: '#predicate-methods' Enabled: true Style/ExpandPathArguments: Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`." Enabled: true Style/FlipFlop: Description: 'Checks for flip flops' StyleGuide: '#no-flip-flops' Enabled: true # Checks use of for or each in multiline loops. Style/For: Description: 'Checks use of for or each in multiline loops.' StyleGuide: '#no-for-loops' Enabled: true 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 EnforcedStyle: format SupportedStyles: - format - sprintf - percent # Enforce using either `%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 # `%s`, `%d`, `%f` - annotated # Prefer simple looking "template" style tokens like `%{name}`, `%{age}` - template - unannotated 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 EnforcedStyle: always SupportedStyles: # `always` will always add the frozen string literal comment to a file # regardless of the Ruby version or if `freeze` or `<<` are called on a # string literal. If you run code against multiple versions of Ruby, it is # possible that this will create errors in Ruby 2.3.0+. - 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 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 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 EnforcedStyle: ruby19 SupportedStyles: # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys - ruby19 # checks for hash rocket syntax for all hashes - hash_rockets # forbids mixed key syntaxes (e.g. {a: 1, :b => 2}) - no_mixed_keys # enforces both ruby19 and no_mixed_keys styles - ruby19_no_mixed_keys # Force hashes that have a symbol value to use hash rockets UseHashRocketsWithSymbolValues: false # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style PreferHashRocketsForNonAlnumEndingSymbols: false Style/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 Style/IfInsideElse: Description: 'Finds if nodes inside else, which can be converted to elsif.' Enabled: true Style/IfUnlessModifier: Description: >- Favor modifier if/unless usage when you have a single-line body. StyleGuide: '#if-as-a-modifier' Enabled: true Style/IfUnlessModifierOfIfUnless: Description: >- Avoid modifier if/unless usage on conditionals. Enabled: true Style/IfWithSemicolon: Description: 'Do not use if x; .... Use the ternary operator instead.' StyleGuide: '#no-semicolon-ifs' Enabled: true Style/ImplicitRuntimeError: Description: >- Use `raise` or `fail` with an explicit exception class and message, rather than just a message. Enabled: false Style/InfiniteLoop: Description: 'Use Kernel#loop for infinite loops.' StyleGuide: '#infinite-loop' Enabled: true Style/InlineComment: Description: 'Avoid trailing inline comments.' Enabled: false Style/InverseMethods: Description: >- Use the inverse method instead of `!.method` if an inverse method is defined. Enabled: true # `InverseMethods` are methods that can be inverted by a not (`not` or `!`) # The relationship of inverse methods only needs to be defined in one direction. # Keys and values both need to be defined as symbols. InverseMethods: :any?: :none? :even?: :odd? :==: :!= :=~: :!~ :<: :>= :>: :<= # `ActiveSupport` defines some common inverse methods. They are listed below, # and not enabled by default. #:present?: :blank?, #:include?: :exclude? # `InverseBlocks` are methods that are inverted by inverting the return # of the block that is passed to the method InverseBlocks: :select: :reject :select!: :reject! Style/Lambda: Description: 'Use the new lambda literal syntax for single-line blocks.' StyleGuide: '#lambda-multi-line' Enabled: true EnforcedStyle: line_count_dependent SupportedStyles: - line_count_dependent - lambda - literal Style/LambdaCall: Description: 'Use lambda.call(...) instead of lambda.(...).' StyleGuide: '#proc-call' Enabled: true EnforcedStyle: call SupportedStyles: - call - braces Style/LineEndConcatenation: Description: >- Use \ instead of + or << to concatenate two string literals at line end. Enabled: true Style/MethodCalledOnDoEndBlock: Description: Avoid chaining a method call on a do...end block. StyleGuide: "#single-line-blocks" Enabled: false Style/MethodCallWithArgsParentheses: Description: Use parentheses for method calls with arguments. StyleGuide: "#method-invocation-parens" Enabled: false IgnoreMacros: true IgnoredMethods: [] Style/MethodCallWithoutArgsParentheses: Description: 'Do not use parentheses for method calls with no arguments.' StyleGuide: '#method-invocation-parens' Enabled: true Style/MethodDefParentheses: Description: >- Checks if the method definitions have or don't have parentheses. StyleGuide: '#method-parens' Enabled: true EnforcedStyle: require_parentheses SupportedStyles: - require_parentheses - require_no_parentheses - require_no_parentheses_except_multiline Style/MethodMissingSuper: Description: 'This cop checks for the presence of method_missing without falling back on super.' StyleGuide: '#no-method-missing' Enabled: true Style/MissingRespondToMissing: Description: 'This cop checks for the presence of `method_missing` without also defining `respond_to_missing?`.' StyleGuide: '#no-method-missing' Enabled: true 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 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/MixinGrouping: Description: Checks for grouping of mixins in `class` and `module` bodies. StyleGuide: "#mixin-grouping" Enabled: true 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/ModuleFunction: Description: Checks for usage of `extend self` in modules. StyleGuide: "#module-function" Enabled: true EnforcedStyle: module_function SupportedStyles: - module_function - extend_self Style/MultilineMemoization: Description: Wrap multiline memoizations in a `begin` and `end` block. Enabled: true EnforcedStyle: keyword SupportedStyles: - keyword - braces Style/NegatedIf: Description: Favor unless over if for negative conditions (or control flow or). StyleGuide: "#unless-for-negatives" Enabled: true 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/NestedParenthesizedCalls: Description: Parenthesize method calls which are nested inside the argument list of another parenthesized method call. Enabled: true Whitelist: - be - be_a - be_an - be_between - be_falsey - be_kind_of - be_instance_of - be_truthy - be_within - eq - eql - end_with - include - match - raise_error - respond_to - start_with Style/Next: Description: Use `next` to skip iteration instead of a condition at the end. StyleGuide: "#no-nested-conditionals" Enabled: true # With `always` all conditions at the end of an iteration needs to be # replaced by next - with `skip_modifier_ifs` the modifier if like this one # are ignored: [1, 2].each { |a| return 'yes' if a == 1 } EnforcedStyle: skip_modifier_ifs # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` # needs to have to trigger this cop MinBodyLength: 3 SupportedStyles: - skip_modifier_ifs - always Style/NonNilCheck: Description: Checks for redundant nil checks. StyleGuide: "#no-non-nil-checks" Enabled: true # 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: Description: Add underscores to large numeric literals to improve their readability. StyleGuide: "#underscores-in-numerics" Enabled: true MinDigits: 5 Strict: false Style/NumericLiteralPrefix: Description: Use smallcase prefixes for numeric literals. StyleGuide: "#numeric-literal-prefixes" Enabled: true EnforcedOctalStyle: zero_with_o SupportedOctalStyles: - zero_with_o - zero_only Style/NumericPredicate: Description: Checks for the use of predicate- or comparison methods for numeric comparisons. StyleGuide: "#predicate-methods" AutoCorrect: false Enabled: true EnforcedStyle: predicate SupportedStyles: - predicate - comparison # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause # false positives. Exclude: - 'spec/**/*' Style/OptionHash: # A list of parameter names that will be flagged by this cop. Description: Don't use option hashes when you can use keyword arguments. Enabled: false SuspiciousParamNames: - options - opts - args - params - parameters # Allow safe assignment in conditions. Style/ParenthesesAroundCondition: Description: Don't use parentheses around the condition of an if/unless/while. StyleGuide: "#no-parens-around-condition" Enabled: true AllowSafeAssignment: true Style/PercentLiteralDelimiters: # Specify the default preferred delimiter for all types with the 'default' key # Override individual delimiters (even with default specified) by specifying # an individual key Description: Use `%`-literal delimiters consistently StyleGuide: "#percent-literal-braces" Enabled: true PreferredDelimiters: default: () '%i': '[]' '%I': '[]' '%r': '{}' '%w': '[]' '%W': '[]' Style/PercentQLiterals: Description: Checks if uses of %Q/%q match the configured preference. Enabled: true EnforcedStyle: lower_case_q SupportedStyles: - lower_case_q # Use `%q` when possible, `%Q` when necessary - upper_case_q # Always use `%Q` Style/PreferredHashMethods: Description: Checks use of `has_key?` and `has_value?` Hash methods. StyleGuide: "#hash-key" Enabled: true EnforcedStyle: short SupportedStyles: - short - verbose Style/RaiseArgs: Description: Checks the arguments passed to raise/fail. StyleGuide: "#exception-class-messages" Enabled: true EnforcedStyle: exploded SupportedStyles: - compact # raise Exception.new(msg) - exploded # raise Exception, msg Style/RedundantReturn: # When `true` allows code like `return x, y`. Description: Don't use return where it's not required. StyleGuide: "#no-explicit-return" Enabled: true AllowMultipleReturnValues: false # Use `/` or `%r` around regular expressions. Style/RegexpLiteral: Description: Use / or %r around regular expressions. StyleGuide: "#percent-r" Enabled: true EnforcedStyle: slashes # slashes: Always use slashes. # percent_r: Always use `%r`. # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes. SupportedStyles: - slashes - percent_r - mixed # If `false`, the cop will always recommend using `%r` if one or more slashes # are found in the regexp string. AllowInnerSlashes: false Style/RescueStandardError: Description: Avoid rescuing without specifying an error class. Enabled: true 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 Style/SafeNavigation: # Safe navigation may cause a statement to start returning `nil` in addition # to whatever it used to return. Description: This cop transforms usages of a method call safeguarded by a check for the existence of the object to safe navigation (`&.`). Enabled: true ConvertCodeThatCanStartToReturnNil: false Whitelist: - present? - blank? - presence - try Style/Semicolon: # Allow `;` to separate several expressions on the same line. Description: Don't use semicolons to terminate expressions. StyleGuide: "#no-semicolon" Enabled: true 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 Style/SignalException: Description: Checks for proper usage of fail and raise. StyleGuide: "#prefer-raise-over-fail" Enabled: true EnforcedStyle: only_raise SupportedStyles: - only_raise - only_fail - semantic Style/SingleLineBlockParams: Description: Enforces the names of some block params. Enabled: false Methods: - reduce: - acc - elem - inject: - acc - elem Style/SingleLineMethods: Description: Avoid single-line methods. StyleGuide: "#no-single-line-methods" Enabled: true AllowIfMethodIsEmpty: true Style/SpecialGlobalVars: Description: Avoid Perl-style global variables. StyleGuide: "#no-cryptic-perlisms" Enabled: true 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 EnforcedStyle: require_parentheses SupportedStyles: - require_parentheses - require_no_parentheses Style/StringHashKeys: Description: Prefer symbols instead of strings as hash keys. StyleGuide: "#symbols-as-keys" Enabled: false Style/StringLiterals: Description: Checks if uses of quotes match the configured preference. StyleGuide: "#consistent-string-literals" Enabled: true 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 EnforcedStyle: single_quotes SupportedStyles: - single_quotes - double_quotes Style/StringMethods: # Mapping from undesired method to desired_method # e.g. to use `to_sym` over `intern`: # # StringMethods: # PreferredMethods: # intern: to_sym Description: Checks if configured preferred methods are used over non-preferred. Enabled: false PreferredMethods: intern: to_sym Style/SymbolArray: Description: Use %i or %I for arrays of symbols. StyleGuide: "#percent-i" Enabled: true EnforcedStyle: percent MinSize: 0 SupportedStyles: - percent - brackets Style/SymbolProc: Description: Use symbols as procs instead of blocks when possible. Enabled: true # 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 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 Style/TrailingBodyOnMethodDefinition: Description: Method body goes below definition. Enabled: true Style/TrailingBodyOnModule: Description: Module body goes below module statement. Enabled: true Style/TrailingMethodEndStatement: Description: Checks for trailing end statement on line of method body. Enabled: true Style/TrailingCommaInArguments: Description: Checks for trailing comma in argument lists. StyleGuide: "#no-trailing-params-comma" Enabled: true # If `comma`, the cop requires a comma after the last argument, but only for # parenthesized method calls where each argument is on its own line. # If `consistent_comma`, the cop requires a comma after the last argument, # for all parenthesized method calls with arguments. EnforcedStyleForMultiline: no_comma SupportedStylesForMultiline: - comma - consistent_comma - no_comma Style/TrailingCommaInArrayLiteral: Description: Checks for trailing comma in array literals. StyleGuide: "#no-trailing-array-commas" Enabled: true # If `comma`, the cop requires a comma after the last item in an array, # but only when each item is on its own line. # If `consistent_comma`, the cop requires a comma after the last item of all # non-empty 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 Style/TrailingUnderscoreVariable: Description: Checks for the usage of unneeded trailing underscores at the end of parallel variable assignment. AllowNamedUnderscoreVariables: true Enabled: true # `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 # When set to `false` the cop will suggest the use of accessor methods # in situations like: # # def name # @other_name # end # # This way you can uncover "hidden" attributes in your code. ExactNameMatch: true AllowPredicates: true # Allows trivial writers that don't end in an equal sign. e.g. # # def on_exception(action) # @on_exception=action # end # on_exception :restart # # Commonly used in DSLs AllowDSLWriters: false IgnoreClassMethods: false Whitelist: - to_ary - to_a - to_c - to_enum - to_h - to_hash - to_i - to_int - to_io - to_open - to_path - to_proc - to_r - to_regexp - to_str - to_s - to_sym Style/UnlessElse: Description: Do not use unless with else. Rewrite these with the positive case first. StyleGuide: "#no-else-with-unless" Enabled: true Style/UnneededCapitalW: Description: Checks for %W when interpolation is not needed. Enabled: true Style/UnneededInterpolation: Description: Checks for strings that are just an interpolated expression. Enabled: true Style/UnneededPercentQ: Description: Checks for %q/%Q when single quotes or double quotes would do. StyleGuide: "#percent-q" Enabled: true Style/UnpackFirst: Description: Checks for accessing the first element of `String#unpack` instead of using `unpack1` Enabled: true Style/VariableInterpolation: Description: Don't interpolate global, instance and class variables directly in strings. StyleGuide: "#curlies-interpolate" Enabled: true Style/WhenThen: Description: Use when x then ... for one-line cases. StyleGuide: "#one-line-cases" Enabled: true Style/WhileUntilDo: Description: Checks for redundant do after while or until. StyleGuide: "#no-multiline-while-do" Enabled: true Style/WhileUntilModifier: Description: Favor modifier while/until usage when you have a single-line body. StyleGuide: "#while-as-a-modifier" Enabled: true # `WordArray` enforces how array literals of word-like strings should be expressed. Style/WordArray: Description: Use %w or %W for arrays of words. StyleGuide: "#percent-w" Enabled: true EnforcedStyle: percent SupportedStyles: # percent style: %w(word1 word2) - percent # bracket style: ['word1', 'word2'] - brackets # The `MinSize` option causes the `WordArray` rule to be ignored for arrays # smaller than a certain size. The rule is only applied to arrays # whose element count is greater than or equal to `MinSize`. MinSize: 0 # 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: forbid_for_all_comparison_operators SupportedStyles: # check only equality operators: `!=` and `==` - equality_operators_only - forbid_for_all_comparison_operators - forbid_for_equality_operators_only - require_for_all_comparison_operators - require_for_equality_operators_only Style/ZeroLengthPredicate: Description: 'Use #empty? when testing for objects of length 0.' Enabled: true #################### Metrics ############################### Metrics/AbcSize: # The ABC size is a calculated magnitude, so this number can be an Integer or # a Float. Description: A calculated magnitude based on number of assignments, branches, and conditions. Reference: http://c2.com/cgi/wiki?AbcMetric Enabled: true Max: 15 Metrics/BlockLength: Description: Avoid long blocks with many lines. Enabled: true CountComments: false # count full line comments? Max: 25 ExcludedMethods: [] Exclude: - 'spec/**/*_spec.rb' Metrics/BlockNesting: CountBlocks: false Max: 3 Description: Avoid excessive block nesting StyleGuide: "#three-is-the-number-thou-shalt-count" Enabled: true Metrics/ClassLength: Description: Avoid classes longer than 100 lines of code. Enabled: true 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 Max: 6 Metrics/LineLength: # To make it possible to copy or click on URIs in the code, we allow lines # containing a URI to be longer than Max. Description: Limit lines to 80 characters. StyleGuide: "#80-character-limits" Enabled: true Max: 80 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 CountComments: false # count full line comments? Max: 10 Metrics/ModuleLength: Description: Avoid modules longer than 100 lines of code. Enabled: true 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 Max: 5 CountKeywordArgs: true Metrics/PerceivedComplexity: Description: A complexity metric geared towards measuring complexity for a human reader. Enabled: true Max: 7 #################### Lint ################################## Lint/AmbiguousBlockAssociation: Description: Checks for ambiguous block association with method when param passed without parentheses. StyleGuide: "#syntax" Enabled: true Lint/AmbiguousOperator: Description: Checks for ambiguous operators in the first argument of a method invocation without parentheses. StyleGuide: "#method-invocation-parens" Enabled: true Lint/AmbiguousRegexpLiteral: Description: Checks for ambiguous regexp literals in the first argument of a method invocation without parentheses. Enabled: true # Allow safe assignment in conditions. Lint/AssignmentInCondition: Enabled: true Description: Don't use assignment in conditions. StyleGuide: "#safe-assignment-in-condition" AllowSafeAssignment: true Lint/BigDecimalNew: Description: "`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead." Enabled: true Lint/BooleanSymbol: Description: Check for `:true` and `:false` symbols. Enabled: true 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 Lint/Debugger: Description: Check for debugger calls. Enabled: true Lint/DeprecatedClassMethods: Description: Check for deprecated class method calls. Enabled: true Lint/DuplicateCaseCondition: Description: Do not repeat values in case conditionals. Enabled: true Lint/DuplicateMethods: Description: Check for duplicate method definitions. Enabled: true Lint/DuplicatedKey: Description: Check for duplicate keys in hash literals. Enabled: true Lint/EachWithObjectArgument: Description: Check for immutable argument given to each_with_object. Enabled: true Lint/ElseLayout: Description: Check for odd code arrangement in an else block. Enabled: true Lint/EmptyEnsure: Description: Checks for empty ensure block. Enabled: true AutoCorrect: false Lint/EmptyExpression: Description: Checks for empty expressions. Enabled: true Lint/EmptyInterpolation: Description: Checks for empty string interpolation. Enabled: true Lint/EmptyWhen: Description: Checks for `when` branches with empty bodies. Enabled: true Lint/EndInMethod: Description: END blocks should not be placed inside method definitions. Enabled: true Lint/EnsureReturn: Description: Do not use return in an ensure block. StyleGuide: "#no-return-ensure" Enabled: true Lint/FloatOutOfRange: Description: Catches floating-point literals too large or small for Ruby to represent. Enabled: true Lint/FormatParameterMismatch: Description: The number of parameters to format/sprint must match the fields. Enabled: true Lint/HandleExceptions: Description: Don't suppress exception. StyleGuide: "#dont-hide-exceptions" Enabled: true Lint/ImplicitStringConcatenation: Description: Checks for adjacent string literals on the same line, which could better be represented as a single string literal. Enabled: true 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 Lint/InheritException: Enabled: true Description: Avoid inheriting from the `Exception` class. EnforcedStyle: runtime_error SupportedStyles: - runtime_error - standard_error Lint/InterpolationCheck: Description: Raise warning for interpolation in single q strs Enabled: true Lint/LiteralAsCondition: Description: Checks of literals used in conditions. Enabled: true Lint/LiteralInInterpolation: Description: Checks for literals used in interpolation. Enabled: true 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 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 Enabled: true Description: Checks for a `# rubocop:enable` after `# rubocop:disable` MaximumRangeSize: .inf Lint/MultipleCompare: Description: Use `&&` operator to compare multiple value. Enabled: true Lint/NestedMethodDefinition: Description: Do not use nested method definitions. StyleGuide: "#no-nested-methods" Enabled: true Lint/NestedPercentLiteral: Description: Checks for nested percent literals. Enabled: true Lint/NextWithoutAccumulator: Description: Do not omit the accumulator when calling `next` in a `reduce`/`inject` block. Enabled: true Lint/NonLocalExitFromIterator: Enabled: true Description: Do not use return in iterator to cause non-local exit. Lint/NumberConversion: Enabled: false Description: Checks unsafe usage of number conversion methods. Lint/OrderedMagicComments: Description: Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang. Enabled: true Lint/ParenthesesAsGroupedExpression: Description: Checks for method calls with a space before the opening parenthesis. StyleGuide: "#parens-no-spaces" Enabled: true Lint/PercentStringArray: Description: Checks for unwanted commas and quotes in %w/%W literals. Enabled: true Lint/PercentSymbolArray: Description: Checks for unwanted commas and colons in %i/%I literals. Enabled: true Lint/RandOne: Description: Checks for `rand(1)` calls. Such calls always return `0` and most likely a mistake. Enabled: true Lint/RedundantWithIndex: Description: Checks for redundant `with_index`. Enabled: true Lint/RedundantWithObject: Description: Checks for redundant `with_object`. Enabled: true Lint/RegexpAsCondition: Description: Do not use regexp literal as a condition. The regexp literal matches `$_` implicitly. Enabled: true Lint/RequireParentheses: Description: Use parentheses in the method call to avoid confusion about precedence. Enabled: true Lint/RescueException: Description: Avoid rescuing the Exception class. StyleGuide: "#no-blind-rescues" Enabled: true Lint/RescueType: Description: Avoid rescuing from non constants that could result in a `TypeError`. Enabled: true Lint/ReturnInVoidContext: Description: Checks for return in void context. Enabled: true Lint/SafeNavigationChain: Enabled: true Description: Do not chain ordinary method call after safe navigation operator. Whitelist: - present? - blank? - presence - try Lint/ScriptPermission: Description: Grant script file execute permission. Enabled: true # Checks for shadowed arguments Lint/ShadowedArgument: Enabled: true Description: Avoid reassigning arguments before they were used. IgnoreImplicitReferences: false Lint/ShadowedException: Description: Avoid rescuing a higher level exception before a lower level exception. Enabled: true Lint/ShadowingOuterLocalVariable: Description: Do not use the same name as outer local variable for block arguments or block local variables. Enabled: true Lint/StringConversionInInterpolation: Description: Checks for Object#to_s usage in string interpolation. StyleGuide: "#no-to-s" Enabled: true Lint/UnderscorePrefixedVariableName: Description: Do not use prefix `_` for a variable that is used. Enabled: true Lint/UnifiedInteger: Description: Use Integer instead of Fixnum or Bignum Enabled: true 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 Lint/UnneededCopEnableDirective: Description: Checks for rubocop:enable comments that can be removed. Enabled: true Lint/UnneededRequireStatement: Description: Checks for unnecessary `require` statement. Enabled: true Lint/UnneededSplatExpansion: Description: Checks for splat unnecessarily being called on literals Enabled: true Lint/UnreachableCode: Description: Unreachable code. Enabled: true # Checks for unused block arguments Lint/UnusedBlockArgument: IgnoreEmptyBlocks: true AllowUnusedKeywordArguments: false Description: Checks for unused block arguments. StyleGuide: "#underscore-unused-vars" Enabled: true # Checks for unused method arguments. Lint/UnusedMethodArgument: AllowUnusedKeywordArguments: false IgnoreEmptyMethods: true Description: Checks for unused method arguments. StyleGuide: "#underscore-unused-vars" Enabled: 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 Lint/UriRegexp: Description: Use `URI::DEFAULT_PARSER.make_regexp` instead of `URI.regexp`. Enabled: true Lint/UselessAccessModifier: Description: Checks for useless access modifiers. Enabled: true ContextCreatingMethods: [] MethodCreatingMethods: [] Lint/UselessAssignment: Description: Checks for useless assignment to a local variable. StyleGuide: "#underscore-unused-vars" Enabled: true Lint/UselessComparison: Description: Checks for comparison of something with itself. Enabled: true Lint/UselessElseWithoutRescue: Description: Checks for useless `else` in `begin..end` without `rescue`. Enabled: true Lint/UselessSetterCall: Description: Checks for useless setter call to a local variable. Enabled: true Lint/Void: CheckForMethodsWithNoSideEffects: false Description: Possible use of operator/literal/variable in void context. Enabled: true #################### Performance ########################### Performance/Caller: Description: Use `caller(n..n)` instead of `caller`. Enabled: true Performance/CaseWhenSplat: Description: Place `when` conditions that use splat at the end of the list of `when` branches. Enabled: true 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 Performance/CompareWithBlock: Description: Use `sort_by(&:foo)` instead of `sort { |a, b| a.foo <=> b.foo }`. Enabled: true 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 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 Performance/DoubleStartEndWith: Description: >- Use `str.{start,end}_with?(x, ..., y, ...)` instead of `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`. Enabled: true # 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. AutoCorrect: false Enabled: true Performance/FixedSize: Description: Do not compute the size of statically sized objects except in constants Enabled: true 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 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/LstripRstrip: Description: 'Use `strip` instead of `lstrip.rstrip`.' Enabled: true Performance/RangeInclude: Description: 'Use `Range#cover?` instead of `Range#include?`.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#cover-vs-include-code' Enabled: true Performance/RedundantBlockCall: Description: 'Use `yield` instead of `block.call`.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode' Enabled: true Performance/RedundantMatch: Description: >- Use `=~` instead of `String#match` or `Regexp#match` in a context where the returned `MatchData` is not needed. Enabled: true 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 # 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 Performance/RegexpMatch: Description: >- Use `match?` instead of `Regexp#match`, `String#match`, `Symbol#match`, `Regexp#===`, or `=~` when `MatchData` is not used. Enabled: true Performance/ReverseEach: Description: 'Use `reverse_each` instead of `reverse.each`.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code' Enabled: true 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 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 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. AutoCorrect: false Enabled: true 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 Performance/TimesMap: Description: 'Checks for .times.map calls.' AutoCorrect: false Enabled: true Performance/UnfreezeString: Description: 'Use unary plus to get an unfrozen string literal.' Enabled: true Performance/UriDefaultParser: Description: 'Use `URI::DEFAULT_PARSER` instead of `URI::Parser.new`.' Enabled: true #################### Rails ################################# # Rails checks will be disabled by default. For Rails projects, we'll use # the .rubocop-rails.yml, which inherits from this file, and enables the Rails # checks: Rails: Enabled: false #################### Bundler ############################### Bundler/OrderedGems: Enabled: true Description: Gems within groups in the Gemfile should be alphabetically sorted. TreatCommentsAsGroupSeparators: true Include: - "**/*.gemfile" - "**/Gemfile" - "**/gems.rb" Bundler/DuplicatedGem: Enabled: true Description: Checks for duplicate gem entries in Gemfile. Include: - "**/*.gemfile" - "**/Gemfile" - "**/gems.rb" Bundler/InsecureProtocolSource: Enabled: true 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. Include: - "**/*.gemfile" - "**/Gemfile" - "**/gems.rb" #################### Security ############################## Security/Eval: Description: 'The use of eval represents a serious security risk.' Enabled: true 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 # Autocorrect here will change to a method that may cause crashes depending # on the value of the argument. AutoCorrect: 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 Security/Open: Description: 'The use of Kernel#open represents a serious security risk.' Enabled: true 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 #################### Gemspec ############################### Gemspec/OrderedDependencies: Enabled: true Description: Dependencies in the gemspec should be alphabetically sorted. TreatCommentsAsGroupSeparators: true Include: - "**/*.gemspec" Gemspec/DuplicatedAssignment: Enabled: true Description: An attribute assignment method calls should be listed only once in a gemspec. Include: - "**/*.gemspec" Gemspec/RequiredRubyVersion: Enabled: true Description: Checks that `required_ruby_version` of gemspec and `TargetRubyVersion` of .rubocop.yml are equal. Include: - "**/*.gemspec"