diff --git a/.travis.yml b/.travis.yml index 4e4164f..1083343 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,6 @@ bundler_args: --jobs 7 --without docs debug before_install: gem install bundler -v 1.10.6 rvm: - - 2.2.10 - 2.3.8 - 2.4.5 - 2.5.3 diff --git a/Rakefile b/Rakefile index a488912..c7258e1 100644 --- a/Rakefile +++ b/Rakefile @@ -9,15 +9,13 @@ task :vendor do mkdir_p dst cp(src.join("default.yml"), dst.join("upstream.yml")) - cp(src.join("enabled.yml"), dst.join("enabled.yml")) - cp(src.join("disabled.yml"), dst.join("disabled.yml")) require "rubocop" require "yaml" cfg = RuboCop::Cop::Cop.all.inject({}) { |acc, cop| acc[cop.cop_name] = { "Enabled" => false }; acc } File.open(dst.join("disable_all.yml"), "w") { |fh| fh.write cfg.to_yaml } - sh %{git add #{dst}/{upstream,enabled,disabled,disable_all}.yml} + sh %{git add #{dst}/{upstream,disable_all}.yml} sh %{git commit -m "Vendor rubocop-#{upstream.version} upstream configuration."} end diff --git a/VERSION b/VERSION index 2bb6a82..ac454c6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.11.3 \ No newline at end of file +0.12.0 diff --git a/bin/chefstyle b/bin/chefstyle index 2064004..f22fa4e 100755 --- a/bin/chefstyle +++ b/bin/chefstyle @@ -1,11 +1,11 @@ #!/usr/bin/env ruby # -*- encoding: utf-8 -*- -$LOAD_PATH.unshift File.join(File.dirname(__FILE__), %w[.. lib]) +$LOAD_PATH.unshift File.join(File.dirname(__FILE__), %w{.. lib}) require "chefstyle" -if ARGV.size == 1 && %w[-v --version].include?(ARGV.first) +if ARGV.size == 1 && %w{-v --version}.include?(ARGV.first) puts "Chefstyle #{Chefstyle::VERSION}" print " * RuboCop " end diff --git a/chefstyle.gemspec b/chefstyle.gemspec index ba6bdc7..9d2f460 100644 --- a/chefstyle.gemspec +++ b/chefstyle.gemspec @@ -1,7 +1,7 @@ # coding: utf-8 -lib = File.expand_path('../lib', __FILE__) +lib = File.expand_path("../lib", __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'chefstyle/version' +require "chefstyle/version" Gem::Specification.new do |spec| spec.name = "chefstyle" @@ -12,10 +12,10 @@ Gem::Specification.new do |spec| spec.summary = %q{Rubocop configuration for Chef's ruby projects} spec.homepage = "https://github.com/chef/chefstyle" spec.license = "Apache-2.0" - spec.required_ruby_version = ">= 2.2" + spec.required_ruby_version = ">= 2.3" - spec.files = %w{LICENSE chefstyle.gemspec Gemfile} + Dir.glob("{bin,config,lib}/**/*", File::FNM_DOTMATCH).reject { |f| File.directory?(f) } - spec.executables = %w[chefstyle] + spec.files = %w{LICENSE chefstyle.gemspec Gemfile} + Dir.glob("{bin,config,lib}/**/*", File::FNM_DOTMATCH).reject { |f| File.directory?(f) } + spec.executables = %w{chefstyle} spec.require_paths = ["lib"] spec.add_development_dependency "bundler" diff --git a/config/disable_all.yml b/config/disable_all.yml index 2d850de..2010c95 100644 --- a/config/disable_all.yml +++ b/config/disable_all.yml @@ -1,6 +1,8 @@ --- Bundler/DuplicatedGem: Enabled: false +Bundler/GemComment: + Enabled: false Bundler/InsecureProtocolSource: Enabled: false Bundler/OrderedGems: @@ -27,6 +29,8 @@ Layout/CaseIndentation: Enabled: false Layout/ClassStructure: Enabled: false +Layout/ClosingHeredocIndentation: + Enabled: false Layout/ClosingParenthesisIndentation: Enabled: false Layout/CommentIndentation: @@ -41,6 +45,8 @@ Layout/ElseAlignment: Enabled: false Layout/EmptyComment: Enabled: false +Layout/EmptyLineAfterGuardClause: + Enabled: false Layout/EmptyLineAfterMagicComment: Enabled: false Layout/EmptyLineBetweenDefs: @@ -93,6 +99,8 @@ Layout/IndentHeredoc: Enabled: false Layout/InitialIndentation: Enabled: false +Layout/LeadingBlankLines: + Enabled: false Layout/LeadingCommentSpace: Enabled: false Layout/MultilineArrayBraceLayout: @@ -207,6 +215,8 @@ Lint/EndInMethod: Enabled: false Lint/EnsureReturn: Enabled: false +Lint/ErbNewArguments: + Enabled: false Lint/FloatOutOfRange: Enabled: false Lint/FormatParameterMismatch: @@ -383,8 +393,12 @@ Performance/FixedSize: Enabled: false Performance/FlatMap: Enabled: false +Performance/InefficientHashSearch: + Enabled: false Performance/LstripRstrip: Enabled: false +Performance/OpenStruct: + Enabled: false Performance/RangeInclude: Enabled: false Performance/RedundantBlockCall: @@ -417,6 +431,10 @@ Performance/UnneededSort: Enabled: false Performance/UriDefaultParser: Enabled: false +Performance/ChainArrayAllocation: + Enabled: false +Style/AccessModifierDeclarations: + Enabled: false Style/Alias: Enabled: false Style/AndOr: @@ -491,8 +509,6 @@ Style/EmptyElse: Enabled: false Style/EmptyLambdaParameter: Enabled: false -Style/EmptyLineAfterGuardClause: - Enabled: false Style/EmptyLiteral: Enabled: false Style/EmptyMethod: @@ -541,6 +557,8 @@ Style/InverseMethods: Enabled: false Style/InlineComment: Enabled: false +Style/IpAddresses: + Enabled: false Style/Lambda: Enabled: false Style/LambdaCall: @@ -555,12 +573,14 @@ Style/MethodCalledOnDoEndBlock: Enabled: false Style/MethodDefParentheses: Enabled: false -Style/MethodMissing: +Style/MethodMissingSuper: Enabled: false Style/MinMax: Enabled: false Style/MissingElse: Enabled: false +Style/MissingRespondToMissing: + Enabled: false Style/MixinGrouping: Enabled: false Style/MixinUsage: @@ -573,6 +593,8 @@ Style/MultilineIfThen: Enabled: false Style/MultilineIfModifier: Enabled: false +Style/MultilineMethodSignature: + Enabled: false Style/MultilineMemoization: Enabled: false Style/MultilineTernaryOperator: @@ -713,6 +735,8 @@ Style/UnlessElse: Enabled: false Style/UnneededCapitalW: Enabled: false +Style/UnneededCondition: + Enabled: false Style/UnneededInterpolation: Enabled: false Style/UnneededPercentQ: @@ -743,18 +767,22 @@ Rails/ApplicationJob: Enabled: false Rails/ApplicationRecord: Enabled: false +Rails/AssertNot: + Enabled: false Rails/Blank: Enabled: false +Rails/BulkChangeTable: + Enabled: false Rails/CreateTableWithTimestamps: Enabled: false Rails/Date: Enabled: false -Rails/DynamicFindBy: - Enabled: false Rails/Delegate: Enabled: false Rails/DelegateAllowBlank: Enabled: false +Rails/DynamicFindBy: + Enabled: false Rails/EnumUniqueness: Enabled: false Rails/EnvironmentComparison: @@ -779,12 +807,14 @@ Rails/InverseOf: Enabled: false Rails/LexicallyScopedActionFilter: Enabled: false -Rails/NotNullColumn: +Rails/LinkToBlank: Enabled: false -Rails/OutputSafety: +Rails/NotNullColumn: Enabled: false Rails/Output: Enabled: false +Rails/OutputSafety: + Enabled: false Rails/PluralizationGrammar: Enabled: false Rails/Presence: @@ -795,12 +825,14 @@ Rails/ReadWriteAttribute: Enabled: false Rails/RedundantReceiverInWithOptions: Enabled: false +Rails/RefuteMethods: + Enabled: false +Rails/RelativeDateConstant: + Enabled: false Rails/RequestReferer: Enabled: false Rails/ReversibleMigration: Enabled: false -Rails/RelativeDateConstant: - Enabled: false Rails/SafeNavigation: Enabled: false Rails/SaveBang: diff --git a/config/disabled.yml b/config/disabled.yml deleted file mode 100644 index 1dddee8..0000000 --- a/config/disabled.yml +++ /dev/null @@ -1,128 +0,0 @@ -# These are all the cops that are disabled in the default configuration. - -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 - -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/MultilineAssignmentLayout: - Description: 'Check for a newline after the assignment operator in multi-line assignments.' - StyleGuide: '#indent-conditional-assignment' - Enabled: false - -Lint/NumberConversion: - Description: 'Checks unsafe usage of number conversion methods.' - Enabled: false - -# 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/SaveBang: - Description: 'Identifies possible cases where Active Record save! or related should be used.' - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#save-bang' - Enabled: false - -Style/AutoResourceCleanup: - Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).' - Enabled: false - -Style/CollectionMethods: - Description: 'Preferred collection methods.' - StyleGuide: '#map-find-select-reduce-size' - Enabled: false - -Style/Copyright: - Description: 'Include a copyright notice in each file before any code.' - Enabled: false - -Style/DocumentationMethod: - Description: 'Public methods.' - Enabled: false - Exclude: - - 'spec/**/*' - - 'test/**/*' - -Style/EmptyLineAfterGuardClause: - Description: 'Add empty line after guard clause.' - Enabled: false - -Style/ImplicitRuntimeError: - Description: >- - Use `raise` or `fail` with an explicit exception class and - message, rather than just a message. - Enabled: false - -Style/InlineComment: - Description: 'Avoid trailing inline comments.' - Enabled: false - -Style/MethodCallWithArgsParentheses: - Description: 'Use parentheses for method calls with arguments.' - StyleGuide: '#method-invocation-parens' - Enabled: false - -Style/MethodCalledOnDoEndBlock: - Description: 'Avoid chaining a method call on a do...end block.' - StyleGuide: '#single-line-blocks' - Enabled: false - -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 - -Style/OptionHash: - Description: "Don't use option hashes when you can use keyword arguments." - Enabled: false - -Style/ReturnNil: - Description: 'Use return instead of return nil.' - Enabled: 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/SingleLineBlockParams: - Description: 'Enforces the names of some block params.' - Enabled: false - -Style/StringHashKeys: - Description: 'Prefer symbols instead of strings as hash keys.' - StyleGuide: '#symbols-as-keys' - Enabled: false - -Style/StringMethods: - Description: 'Checks if configured preferred methods are used over non-preferred.' - Enabled: false diff --git a/config/enabled.yml b/config/enabled.yml deleted file mode 100644 index ec31053..0000000 --- a/config/enabled.yml +++ /dev/null @@ -1,2068 +0,0 @@ -# These are all the cops that are enabled in the default configuration. - -#################### Bundler ############################### - -Bundler/DuplicatedGem: - Description: 'Checks for duplicate gem entries in Gemfile.' - Enabled: true - Include: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - -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 - Include: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - -Bundler/OrderedGems: - Description: >- - Gems within groups in the Gemfile should be alphabetically sorted. - Enabled: 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 - Include: - - '**/*.gemspec' - -Gemspec/OrderedDependencies: - Description: >- - Dependencies in the gemspec should be alphabetically sorted. - Enabled: true - Include: - - '**/*.gemspec' - -Gemspec/RequiredRubyVersion: - Description: 'Checks that `required_ruby_version` of gemspec and `TargetRubyVersion` of .rubocop.yml are equal.' - Enabled: true - Include: - - '**/*.gemspec' - -#################### Layout ############################### - -Layout/AccessModifierIndentation: - Description: Check indentation of private/protected visibility modifiers. - StyleGuide: '#indent-public-private-protected' - 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/AlignHash: - Description: >- - Align the elements of a hash literal if they span more than - one line. - Enabled: true - -Layout/AlignParameters: - Description: >- - Align the parameters of a method call if they span more - than one line. - StyleGuide: '#no-double-indent' - Enabled: true - -Layout/BlockAlignment: - Description: 'Align block ends correctly.' - Enabled: true - -Layout/BlockEndNewline: - Description: 'Put end statement of multiline block on its own line.' - Enabled: true - -Layout/CaseIndentation: - Description: 'Indentation of when in a case/when/[else/]end.' - StyleGuide: '#indent-when-to-case' - 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/DefEndAlignment: - Description: 'Align ends corresponding to defs correctly.' - Enabled: true - -Layout/DotPosition: - Description: 'Checks the position of the dot in multi-line method calls.' - StyleGuide: '#consistent-multi-line-chains' - Enabled: true - -Layout/ElseAlignment: - Description: 'Align elses and elsifs correctly.' - Enabled: true - -Layout/EmptyComment: - Description: 'Checks empty comment.' - 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/EmptyLineBetweenDefs: - Description: 'Use empty lines between defs.' - StyleGuide: '#empty-lines-between-methods' - 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/EmptyLinesAroundBlockBody: - Description: "Keeps track of empty lines around block bodies." - StyleGuide: '#empty-lines-around-bodies' - Enabled: true - -Layout/EmptyLinesAroundClassBody: - Description: "Keeps track of empty lines around class 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/EmptyLinesAroundModuleBody: - Description: "Keeps track of empty lines around module bodies." - StyleGuide: '#empty-lines-around-bodies' - Enabled: true - -Layout/EndAlignment: - Description: 'Align ends correctly.' - Enabled: true - -Layout/EndOfLine: - Description: 'Use Unix-style line endings.' - StyleGuide: '#crlf' - Enabled: true - -Layout/ExtraSpacing: - Description: 'Do not use unnecessary spacing.' - Enabled: true - -Layout/FirstParameterIndentation: - Description: 'Checks the indentation of the first parameter in a method call.' - Enabled: true - -Layout/IndentArray: - Description: >- - Checks the indentation of the first element in an array - literal. - Enabled: true - -Layout/IndentAssignment: - Description: >- - Checks the indentation of the first line of the - right-hand-side of a multi-line assignment. - Enabled: true - -Layout/IndentHash: - Description: 'Checks the indentation of the first key in a hash literal.' - Enabled: true - -Layout/IndentHeredoc: - Description: 'This cops checks the indentation of the here document bodies.' - StyleGuide: '#squiggly-heredocs' - Enabled: true - -Layout/IndentationConsistency: - Description: 'Keep indentation straight.' - StyleGuide: '#spaces-indentation' - Enabled: true - -Layout/IndentationWidth: - Description: 'Use 2 spaces for indentation.' - StyleGuide: '#spaces-indentation' - 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/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 - -Layout/MultilineBlockLayout: - Description: 'Ensures newlines after multiline block do statements.' - Enabled: true - -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 - -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 - -Layout/MultilineMethodCallIndentation: - Description: >- - Checks indentation of method calls with the dot operator - that span more than one line. - Enabled: true - -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 - -Layout/MultilineOperationIndentation: - Description: >- - Checks indentation of binary operations that span more than - one line. - 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/SpaceAroundBlockParameters: - Description: 'Checks the spacing inside and after block parameters pipes.' - Enabled: true - -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 - -Layout/SpaceAroundKeyword: - Description: 'Use a space around keywords if appropriate.' - Enabled: true - -Layout/SpaceAroundOperators: - Description: 'Use a single space around operators.' - StyleGuide: '#spaces-operators' - Enabled: true - -Layout/SpaceBeforeBlockBraces: - Description: >- - Checks that the left block brace has or doesn't have space - before it. - 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/SpaceBeforeFirstArg: - Description: >- - Checks that exactly one space is used between a method name - and the first argument for method calls without parentheses. - Enabled: true - -Layout/SpaceBeforeSemicolon: - Description: 'No spaces before semicolons.' - Enabled: true - -Layout/SpaceInLambdaLiteral: - Description: 'Checks for spaces in lambda literals.' - Enabled: true - -Layout/SpaceInsideArrayLiteralBrackets: - Description: 'Checks the spacing inside array literal brackets.' - Enabled: true - -Layout/SpaceInsideArrayPercentLiteral: - Description: 'No unnecessary additional spaces between elements in %i/%w literals.' - Enabled: true - -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 - -Layout/SpaceInsideHashLiteralBraces: - Description: "Use spaces inside hash literal braces - or don't." - StyleGuide: '#spaces-operators' - 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/SpaceInsideReferenceBrackets: - Description: 'Checks the spacing inside referential brackets.' - Enabled: true - -Layout/SpaceInsideStringInterpolation: - Description: 'Checks for padding/surrounding spaces inside string interpolation.' - StyleGuide: '#string-interpolation' - Enabled: true - -Layout/Tab: - Description: 'No hard tabs.' - StyleGuide: '#spaces-indentation' - Enabled: true - -Layout/TrailingBlankLines: - Description: 'Checks trailing blank lines and final newline.' - StyleGuide: '#newline-eof' - Enabled: true - -Layout/TrailingWhitespace: - Description: 'Avoid trailing whitespace.' - StyleGuide: '#no-trailing-whitespace' - Enabled: true - -#################### Lint ################################## -### Warnings - -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 - -Lint/AssignmentInCondition: - Description: "Don't use assignment in conditions." - StyleGuide: '#safe-assignment-in-condition' - Enabled: 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: - Description: 'Avoid inheriting from the `Exception` class.' - Enabled: true - -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: - Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`' - Enabled: true - -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: - Description: 'Do not use return in iterator to cause non-local exit.' - Enabled: true - -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: - Description: 'Do not chain ordinary method call after safe navigation operator.' - Enabled: true - -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 - -Lint/ScriptPermission: - Description: 'Grant script file execute permission.' - Enabled: true - -Lint/ShadowedArgument: - Description: 'Avoid reassigning arguments before they were used.' - Enabled: true - -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/Syntax: - Description: 'Checks syntax error' - 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 - -Lint/UnusedBlockArgument: - Description: 'Checks for unused block arguments.' - StyleGuide: '#underscore-unused-vars' - Enabled: true - -Lint/UnusedMethodArgument: - 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: - Description: 'Possible use of operator/literal/variable in void context.' - Enabled: true - -#################### Metrics ############################### - -Metrics/AbcSize: - Description: >- - A calculated magnitude based on number of assignments, - branches, and conditions. - Reference: 'http://c2.com/cgi/wiki?AbcMetric' - Enabled: true - -Metrics/BlockLength: - Description: 'Avoid long blocks with many lines.' - Enabled: true - -Metrics/BlockNesting: - 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 - -Metrics/CyclomaticComplexity: - Description: >- - A complexity metric that is strongly correlated to the number - of test cases needed to validate a method. - Enabled: true - -Metrics/LineLength: - Description: 'Limit lines to 80 characters.' - StyleGuide: '#80-character-limits' - Enabled: true - -Metrics/MethodLength: - Description: 'Avoid methods longer than 10 lines of code.' - StyleGuide: '#short-methods' - Enabled: true - -Metrics/ModuleLength: - Description: 'Avoid modules longer than 100 lines of code.' - Enabled: true - -Metrics/ParameterLists: - Description: 'Avoid parameter lists longer than three or four parameters.' - StyleGuide: '#too-many-params' - Enabled: true - -Metrics/PerceivedComplexity: - Description: >- - A complexity metric geared towards measuring complexity for a - human reader. - 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 - -Naming/HeredocDelimiterCase: - Description: 'Use configured case for heredoc delimiters.' - StyleGuide: '#heredoc-delimiters' - Enabled: true - -Naming/HeredocDelimiterNaming: - Description: 'Use descriptive heredoc delimiters.' - StyleGuide: '#heredoc-delimiters' - Enabled: true - -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 - -Naming/PredicateName: - Description: 'Check the names of predicate methods.' - StyleGuide: '#bool-methods-qmark' - Enabled: true - -Naming/UncommunicativeBlockParamName: - Description: >- - Checks for block parameter names that contain capital letters, - end in numbers, or do not meet a minimal length. - Enabled: true - -Naming/UncommunicativeMethodParamName: - Description: >- - Checks for method parameter names that contain capital letters, - end in numbers, or do not meet a minimal length. - Enabled: true - -Naming/VariableName: - Description: 'Use the configured style when naming variables.' - StyleGuide: '#snake-case-symbols-methods-vars' - Enabled: true - -Naming/VariableNumber: - Description: 'Use the configured style when numbering variables.' - 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 - -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 - -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/UnneededSort: - Description: >- - Use `min` instead of `sort.first`, - `max_by` instead of `sort_by...last`, etc. - Enabled: true - -Performance/UriDefaultParser: - Description: 'Use `URI::DEFAULT_PARSER` instead of `URI::Parser.new`.' - Enabled: true - -#################### Rails ################################# - -Rails/ActionFilter: - Description: 'Enforces consistent use of action filter methods.' - Enabled: true - -Rails/ActiveRecordAliases: - Description: >- - Avoid Active Record aliases: - Use `update` instead of `update_attributes`. - Use `update!` instead of `update_attributes!`. - Enabled: true - -Rails/ActiveSupportAliases: - Description: >- - Avoid ActiveSupport aliases of standard ruby methods: - `String#starts_with?`, `String#ends_with?`, - `Array#append`, `Array#prepend`. - Enabled: true - -Rails/ApplicationJob: - Description: 'Check that jobs subclass ApplicationJob.' - Enabled: true - -Rails/ApplicationRecord: - Description: 'Check that models subclass ApplicationRecord.' - Enabled: true - -Rails/Blank: - Description: 'Enforce using `blank?` and `present?`.' - Enabled: true - # Convert checks for `nil` or `empty?` to `blank?` - NilOrEmpty: true - # Convert usages of not `present?` to `blank?` - NotPresent: true - # Convert usages of `unless` `present?` to `if` `blank?` - UnlessPresent: true - -Rails/CreateTableWithTimestamps: - Description: >- - Checks the migration for which timestamps are not included - when creating a new table. - Enabled: true - -Rails/Date: - Description: >- - Checks the correct usage of date aware methods, - such as Date.today, Date.current etc. - Enabled: true - -Rails/Delegate: - Description: 'Prefer delegate method for delegations.' - Enabled: true - -Rails/DelegateAllowBlank: - Description: 'Do not use allow_blank as an option to delegate.' - Enabled: true - -Rails/DynamicFindBy: - Description: 'Use `find_by` instead of dynamic `find_by_*`.' - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#find_by' - Enabled: true - -Rails/EnumUniqueness: - Description: 'Avoid duplicate integers in hash-syntax `enum` declaration.' - Enabled: true - -Rails/EnvironmentComparison: - Description: "Favor `Rails.env.production?` over `Rails.env == 'production'`" - Enabled: true - -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 - -Rails/FilePath: - Description: 'Use `Rails.root.join` for file path joining.' - Enabled: true - -Rails/FindBy: - Description: 'Prefer find_by over where.first.' - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#find_by' - Enabled: true - -Rails/FindEach: - Description: 'Prefer all.find_each over all.find.' - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#find-each' - Enabled: true - -Rails/HasAndBelongsToMany: - Description: 'Prefer has_many :through to has_and_belongs_to_many.' - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#has-many-through' - Enabled: true - -Rails/HasManyOrHasOneDependent: - Description: 'Define the dependent option to the has_many and has_one associations.' - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#has_many-has_one-dependent-option' - Enabled: true - -Rails/HttpPositionalArguments: - Description: 'Use keyword arguments instead of positional arguments in http method calls.' - Enabled: true - Include: - - 'spec/**/*' - - 'test/**/*' - -Rails/HttpStatus: - Description: 'Enforces use of symbolic or numeric value to define HTTP status.' - Enabled: true - -Rails/InverseOf: - Description: 'Checks for associations where the inverse cannot be determined automatically.' - Enabled: true - -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/bbatsov/rails-style-guide#lexically-scoped-action-filter' - Enabled: true - -Rails/NotNullColumn: - Description: 'Do not add a NOT NULL column without a default value' - Enabled: true - -Rails/Output: - Description: 'Checks for calls to puts, print, etc.' - Enabled: true - -Rails/OutputSafety: - Description: 'The use of `html_safe` or `raw` may be a security risk.' - Enabled: true - -Rails/PluralizationGrammar: - Description: 'Checks for incorrect grammar when using methods like `3.day.ago`.' - Enabled: true - -Rails/Presence: - Description: 'Checks code that can be written more easily using `Object#presence` defined by Active Support.' - Enabled: true - -Rails/Present: - Description: 'Enforce using `blank?` and `present?`.' - Enabled: true - NotNilAndNotEmpty: true - # Convert checks for not `nil` and not `empty?` to `present?` - NotBlank: true - # Convert usages of not `blank?` to `present?` - UnlessBlank: true - # Convert usages of `unless` `blank?` to `if` `present?` - -Rails/ReadWriteAttribute: - Description: >- - Checks for read_attribute(:attr) and - write_attribute(:attr, val). - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#read-attribute' - Enabled: true - -Rails/RedundantReceiverInWithOptions: - Description: 'Checks for redundant receiver in `with_options`.' - Enabled: true - -Rails/RelativeDateConstant: - Description: 'Do not assign relative date to constants.' - Enabled: true - -Rails/RequestReferer: - Description: 'Use consistent syntax for request.referer.' - Enabled: true - -Rails/ReversibleMigration: - Description: 'Checks whether the change method of the migration file is reversible.' - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#reversible-migration' - Reference: 'http://api.rubyonrails.org/classes/ActiveRecord/Migration/CommandRecorder.html' - Enabled: true - -Rails/SafeNavigation: - Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`" - Enabled: true - -Rails/ScopeArgs: - Description: 'Checks the arguments of ActiveRecord scopes.' - Enabled: true - -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 - -Rails/TimeZone: - Description: 'Checks the correct usage of time zone aware methods.' - StyleGuide: 'https://github.com/bbatsov/rails-style-guide#time' - Reference: 'http://danilenko.org/2012/7/6/rails_timezones' - Enabled: true - -Rails/UniqBeforePluck: - Description: 'Prefer the use of uniq or distinct before pluck.' - Enabled: true - -Rails/UnknownEnv: - Description: 'Use correct environment name.' - Enabled: true - -Rails/Validation: - Description: 'Use validates :attribute, hash of validations.' - Enabled: true - -#################### 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 - -#################### Style ############################### - -Style/Alias: - Description: 'Use alias instead of alias_method.' - StyleGuide: '#alias-method' - Enabled: true - -Style/AndOr: - Description: 'Use &&/|| instead of and/or.' - StyleGuide: '#no-and-or-or' - Enabled: true - -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 - -Style/Attr: - Description: 'Checks for uses of Module#attr.' - StyleGuide: '#attr' - Enabled: true - -Style/BarePercentLiterals: - Description: 'Checks if usage of %() or %Q() matches configuration.' - StyleGuide: '#percent-q-shorthand' - Enabled: true - -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 - -Style/BracesAroundHashParameters: - Description: 'Enforce braces style around hash parameters.' - Enabled: true - -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 - -Style/ClassCheck: - Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.' - Enabled: true - -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 - -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 - -Style/CommandLiteral: - Description: 'Use `` or %x around command literals.' - StyleGuide: '#percent-x' - Enabled: true - -Style/CommentAnnotation: - Description: >- - Checks formatting of special comments - (TODO, FIXME, OPTIMIZE, HACK, REVIEW). - StyleGuide: '#annotate-keywords' - Enabled: true - -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 - -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/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 - -Style/EmptyElse: - Description: 'Avoid empty else-clauses.' - Enabled: true - -Style/EmptyLambdaParameter: - Description: 'Omit parens for empty lambda parameters.' - Enabled: true - -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 - -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 - -Style/For: - Description: 'Checks use of for or each in multiline loops.' - StyleGuide: '#no-for-loops' - Enabled: true - -Style/FormatString: - Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.' - StyleGuide: '#sprintf' - Enabled: true - -Style/FormatStringToken: - Description: 'Use a consistent style for format string tokens.' - Enabled: true - -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 - -Style/GlobalVars: - Description: 'Do not introduce global variables.' - StyleGuide: '#instance-vars' - Reference: 'http://www.zenspider.com/Languages/Ruby/QuickRef.html' - Enabled: true - -Style/GuardClause: - Description: 'Check for conditionals that can be replaced with guard clauses' - StyleGuide: '#no-nested-conditionals' - Enabled: true - -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 - -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/InfiniteLoop: - Description: 'Use Kernel#loop for infinite loops.' - StyleGuide: '#infinite-loop' - Enabled: true - -Style/InverseMethods: - Description: >- - Use the inverse method instead of `!.method` - if an inverse method is defined. - Enabled: true - -Style/Lambda: - Description: 'Use the new lambda literal syntax for single-line blocks.' - StyleGuide: '#lambda-multi-line' - Enabled: true - -Style/LambdaCall: - Description: 'Use lambda.call(...) instead of lambda.(...).' - StyleGuide: '#proc-call' - Enabled: true - -Style/LineEndConcatenation: - Description: >- - Use \ instead of + or << to concatenate two string literals at - line end. - Enabled: true - -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 - -Style/MethodMissing: - Description: 'Avoid using `method_missing`.' - StyleGuide: '#no-method-missing' - Enabled: true - -Style/MinMax: - Description: >- - Use `Enumerable#minmax` instead of `Enumerable#min` - and `Enumerable#max` in conjunction.' - Enabled: true - -Style/MixinGrouping: - Description: 'Checks for grouping of mixins in `class` and `module` bodies.' - StyleGuide: '#mixin-grouping' - Enabled: true - -Style/MixinUsage: - Description: 'Checks that `include`, `extend` and `prepend` exists at the top level.' - Enabled: true - -Style/ModuleFunction: - Description: 'Checks for usage of `extend self` in modules.' - StyleGuide: '#module-function' - 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/MultilineMemoization: - Description: 'Wrap multiline memoizations in a `begin` and `end` block.' - 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/NegatedIf: - Description: >- - Favor unless over if for negative conditions - (or control flow or). - StyleGuide: '#unless-for-negatives' - 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/NestedParenthesizedCalls: - Description: >- - Parenthesize method calls which are nested inside the - argument list of another parenthesized method call. - Enabled: true - -Style/NestedTernaryOperator: - Description: 'Use one expression per branch in a ternary operator.' - StyleGuide: '#no-nested-ternary' - Enabled: true - -Style/Next: - Description: 'Use `next` to skip iteration instead of a condition at the end.' - StyleGuide: '#no-nested-conditionals' - Enabled: true - -Style/NilComparison: - Description: 'Prefer x.nil? to x == nil.' - StyleGuide: '#predicate-methods' - Enabled: true - -Style/NonNilCheck: - Description: 'Checks for redundant nil checks.' - StyleGuide: '#no-non-nil-checks' - Enabled: true - -Style/Not: - Description: 'Use ! instead of not.' - StyleGuide: '#bang-not-not' - Enabled: true - -Style/NumericLiteralPrefix: - Description: 'Use smallcase prefixes for numeric literals.' - StyleGuide: '#numeric-literal-prefixes' - Enabled: true - -Style/NumericLiterals: - Description: >- - Add underscores to large numeric literals to improve their - readability. - StyleGuide: '#underscores-in-numerics' - Enabled: true - -Style/NumericPredicate: - Description: >- - Checks for the use of predicate- or comparison methods for - numeric comparisons. - StyleGuide: '#predicate-methods' - # 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 - -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/ParenthesesAroundCondition: - Description: >- - Don't use parentheses around the condition of an - if/unless/while. - StyleGuide: '#no-parens-around-condition' - Enabled: true - -Style/PercentLiteralDelimiters: - Description: 'Use `%`-literal delimiters consistently' - StyleGuide: '#percent-literal-braces' - Enabled: true - -Style/PercentQLiterals: - Description: 'Checks if uses of %Q/%q match the configured preference.' - Enabled: true - -Style/PerlBackrefs: - Description: 'Avoid Perl-style regex back references.' - StyleGuide: '#no-perl-regexp-last-matchers' - Enabled: true - -Style/PreferredHashMethods: - Description: 'Checks use of `has_key?` and `has_value?` Hash methods.' - StyleGuide: '#hash-key' - Enabled: true - -Style/Proc: - Description: 'Use proc instead of Proc.new.' - StyleGuide: '#proc' - Enabled: true - -Style/RaiseArgs: - Description: 'Checks the arguments passed to raise/fail.' - StyleGuide: '#exception-class-messages' - 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/RedundantReturn: - Description: "Don't use return where it's not required." - StyleGuide: '#no-explicit-return' - Enabled: true - -Style/RedundantSelf: - Description: "Don't use self where it's not needed." - StyleGuide: '#no-self-unless-required' - Enabled: true - -Style/RegexpLiteral: - Description: 'Use / or %r around regular expressions.' - StyleGuide: '#percent-r' - Enabled: true - -Style/RescueModifier: - Description: 'Avoid using rescue in its modifier form.' - StyleGuide: '#no-rescue-modifiers' - Enabled: true - -Style/RescueStandardError: - Description: 'Avoid rescuing without specifying an error class.' - Enabled: true - -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 - -Style/SelfAssignment: - Description: >- - Checks for places where self-assignment shorthand should have - been used. - StyleGuide: '#self-assignment' - Enabled: true - -Style/Semicolon: - Description: "Don't use semicolons to terminate expressions." - StyleGuide: '#no-semicolon' - Enabled: true - -Style/SignalException: - Description: 'Checks for proper usage of fail and raise.' - StyleGuide: '#prefer-raise-over-fail' - Enabled: true - -Style/SingleLineMethods: - Description: 'Avoid single-line methods.' - StyleGuide: '#no-single-line-methods' - Enabled: true - -Style/SpecialGlobalVars: - Description: 'Avoid Perl-style global variables.' - StyleGuide: '#no-cryptic-perlisms' - Enabled: true - -Style/StabbyLambdaParentheses: - Description: 'Check for the usage of parentheses around stabby lambda arguments.' - StyleGuide: '#stabby-lambda-with-args' - Enabled: true - -Style/StderrPuts: - Description: 'Use `warn` instead of `$stderr.puts`.' - StyleGuide: '#warn' - Enabled: true - -Style/StringLiterals: - Description: 'Checks if uses of quotes match the configured preference.' - StyleGuide: '#consistent-string-literals' - Enabled: true - -Style/StringLiteralsInInterpolation: - Description: >- - Checks if uses of quotes inside expressions in interpolated - strings match the configured preference. - Enabled: true - -Style/StructInheritance: - Description: 'Checks for inheritance from Struct.new.' - StyleGuide: '#no-extend-struct-new' - Enabled: true - -Style/SymbolArray: - Description: 'Use %i or %I for arrays of symbols.' - StyleGuide: '#percent-i' - Enabled: true - -Style/SymbolLiteral: - Description: 'Use plain symbols instead of string symbols when possible.' - Enabled: true - -Style/SymbolProc: - Description: 'Use symbols as procs instead of blocks when possible.' - Enabled: true - -Style/TernaryParentheses: - Description: 'Checks for use of parentheses around ternary conditions.' - Enabled: 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/TrailingCommaInArguments: - Description: 'Checks for trailing comma in argument lists.' - StyleGuide: '#no-trailing-params-comma' - Enabled: true - -Style/TrailingCommaInArrayLiteral: - Description: 'Checks for trailing comma in array literals.' - StyleGuide: '#no-trailing-array-commas' - Enabled: true - -Style/TrailingCommaInHashLiteral: - Description: 'Checks for trailing comma in hash literals.' - Enabled: true - -Style/TrailingMethodEndStatement: - Description: 'Checks for trailing end statement on line of method body.' - Enabled: true - -Style/TrailingUnderscoreVariable: - Description: >- - Checks for the usage of unneeded trailing underscores at the - end of parallel variable assignment. - AllowNamedUnderscoreVariables: true - Enabled: true - -Style/TrivialAccessors: - Description: 'Prefer attr_* methods to trivial readers/writers.' - StyleGuide: '#attr_family' - Enabled: true - -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 - -Style/WordArray: - Description: 'Use %w or %W for arrays of words.' - StyleGuide: '#percent-w' - Enabled: true - -Style/YodaCondition: - Description: 'Do not use literals as the first operand of a comparison.' - Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions' - Enabled: true - -Style/ZeroLengthPredicate: - Description: 'Use #empty? when testing for objects of length 0.' - Enabled: true diff --git a/config/upstream.yml b/config/upstream.yml index d12b6ba..67176b2 100644 --- a/config/upstream.yml +++ b/config/upstream.yml @@ -1,14 +1,15 @@ -# 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 + - jruby + - rbx # Include common Ruby source files. Include: + - '**/*.rb' - '**/*.arb' - '**/*.axlsx' - '**/*.builder' @@ -35,7 +36,6 @@ AllCops: - '**/.irbrc' - '**/.pryrc' - '**/buildfile' - - '**/config.ru' - '**/Appraisals' - '**/Berksfile' - '**/Brewfile' @@ -73,7 +73,7 @@ AllCops: 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 + StyleGuideBaseURL: https://github.com/rubocop-hq/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. @@ -82,15 +82,15 @@ AllCops: # 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 @@ -123,21 +123,94 @@ AllCops: # 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). + # use the oldest officially supported Ruby version (currently Ruby 2.2). 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 + # 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 + # 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 @@ -146,8 +219,20 @@ Layout/AccessModifierIndentation: # 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 @@ -219,6 +304,12 @@ Layout/AlignHash: - 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 @@ -240,8 +331,10 @@ Layout/AlignParameters: # 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 @@ -253,8 +346,16 @@ Layout/BlockAlignment: - 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 @@ -265,7 +366,52 @@ Layout/CaseIndentation: # 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` @@ -277,32 +423,90 @@ Layout/DefEndAlignment: 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 @@ -312,7 +516,23 @@ Layout/EmptyLinesAroundClassBody: - 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 @@ -320,8 +540,10 @@ Layout/EmptyLinesAroundModuleBody: - 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 @@ -338,6 +560,10 @@ Layout/EndAlignment: 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. @@ -348,6 +574,9 @@ Layout/EndOfLine: - 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. @@ -355,12 +584,47 @@ Layout/ExtraSpacing: # 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 + # The first parameter should always be indented one level relative to the + # parent that is receiving the parameter + - consistent_relative_to_receiver # The first parameter should normally be indented one step more than the # preceding line, but if it's a parameter for a method call that is itself # a parameter in a method call, then the inner parameter should be indented @@ -373,25 +637,12 @@ Layout/FirstParameterIndentation: # 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 @@ -412,14 +663,20 @@ Layout/IndentArray: # 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 @@ -441,6 +698,10 @@ Layout/IndentHash: 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 @@ -449,13 +710,55 @@ Layout/IndentHeredoc: - 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 @@ -466,6 +769,10 @@ Layout/MultilineArrayBraceLayout: - 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 @@ -483,7 +790,18 @@ Layout/MultilineAssignmentLayout: # 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 @@ -494,6 +812,12 @@ Layout/MultilineHashBraceLayout: - 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 @@ -504,6 +828,11 @@ Layout/MultilineMethodCallBraceLayout: - 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 @@ -514,6 +843,12 @@ Layout/MultilineMethodCallIndentation: 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 @@ -524,6 +859,11 @@ Layout/MultilineMethodDefinitionBraceLayout: - 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 @@ -532,25 +872,86 @@ Layout/MultilineOperationIndentation: # 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 @@ -559,14 +960,49 @@ Layout/SpaceBeforeBlockBraces: 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 @@ -579,7 +1015,18 @@ Layout/SpaceInsideArrayLiteralBrackets: - 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 @@ -592,6 +1039,10 @@ Layout/SpaceInsideBlockBraces: 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 @@ -604,13 +1055,34 @@ Layout/SpaceInsideHashLiteralBraces: - 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 @@ -621,27 +1093,21 @@ Layout/SpaceInsideReferenceBrackets: - 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 @@ -649,19 +1115,649 @@ Layout/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: - # File names listed in `AllCops:Include` are excluded by default. Add extra - # excludes here. + 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). @@ -719,23 +1815,52 @@ Naming/FileName: - 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_ @@ -760,6 +1885,11 @@ Naming/PredicateName: - '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 @@ -769,6 +1899,12 @@ Naming/UncommunicativeBlockParamName: 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 @@ -781,31 +1917,747 @@ Naming/UncommunicativeMethodParamName: - 'on' - in - at + - 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 ########################### -Style/Alias: - EnforcedStyle: prefer_alias - SupportedStyles: +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/OpenStruct: + Description: 'Use `Struct` instead of `OpenStruct`.' + Enabled: false + VersionAdded: '0.61' + Safe: false + +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/LinkToBlank: + Description: 'Checks that `link_to` with a `target: "_blank"` have a `rel: "noopener"` option passed to them.' + Reference: https://mathiasbynens.github.io/rel-noopener/ + Enabled: true + VersionAdded: '0.62' + +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: 'https://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: 'https://guides.rubyonrails.org/active_record_validations.html#skipping-validations' + Enabled: true + VersionAdded: '0.47' + VersionChanged: '0.60' + 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: 'https://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: 'https://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 @@ -813,17 +2665,65 @@ Style/AndOr: - 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 @@ -895,6 +2795,10 @@ Style/BlockDelimiters: - 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 @@ -908,8 +2812,30 @@ Style/BracesAroundHashParameters: # 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: # @@ -930,17 +2856,39 @@ Style/ClassAndModuleChildren: - 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: @@ -950,8 +2898,23 @@ Style/CollectionMethods: 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`. @@ -966,6 +2929,13 @@ Style/CommandLiteral: # 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 @@ -973,7 +2943,19 @@ Style/CommentAnnotation: - 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 @@ -992,7 +2974,7 @@ Style/ConditionalAssignment: # 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` 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 @@ -1006,46 +2988,178 @@ Style/ConditionalAssignment: # 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 Time over DateTime.' + StyleGuide: '#date--time' + Enabled: false + 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 `%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 @@ -1054,8 +3168,16 @@ Style/FormatStringToken: # 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 @@ -1070,16 +3192,33 @@ Style/FrozenStringLiteralComment: # 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: 'https://www.zenspider.com/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 @@ -1095,7 +3234,67 @@ Style/HashSyntax: # 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' + VersionChanged: '0.61' + SafeAutoCorrect: true + +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. @@ -1116,7 +3315,21 @@ Style/InverseMethods: :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 @@ -1124,26 +3337,89 @@ Style/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.61' IgnoreMacros: true IgnoredMethods: [] + AllowParenthesesInMultilineCall: false + AllowParenthesesInChaining: false + EnforcedStyle: require_parentheses + SupportedStyles: + - require_parentheses + - omit_parentheses Style/MethodCallWithoutArgsParentheses: + Description: 'Do not use parentheses for method calls with no arguments.' + StyleGuide: '#method-invocation-parens' + Enabled: true IgnoredMethods: [] + VersionAdded: '0.47' + VersionChanged: '0.55' + +Style/MethodCalledOnDoEndBlock: + Description: 'Avoid chaining a method call on a do...end block.' + StyleGuide: '#single-line-blocks' + Enabled: false + VersionAdded: '0.14' Style/MethodDefParentheses: + Description: >- + Checks if the method definitions have or don't have + parentheses. + StyleGuide: '#method-parens' + Enabled: true + VersionAdded: '0.16' + VersionChanged: '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 @@ -1153,9 +3429,20 @@ Style/MissingElse: - 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. @@ -1163,19 +3450,84 @@ Style/MixinGrouping: - 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` @@ -1185,7 +3537,25 @@ Style/NegatedIf: - 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 @@ -1205,7 +3575,18 @@ Style/NestedParenthesizedCalls: - 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 } @@ -1217,7 +3598,23 @@ Style/Next: - 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. @@ -1226,27 +3623,73 @@ Style/NonNilCheck: # 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 @@ -1255,11 +3698,45 @@ Style/OptionHash: - 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 @@ -1270,31 +3747,111 @@ Style/PercentLiteralDelimiters: '%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`. @@ -1307,7 +3864,17 @@ Style/RegexpLiteral: # 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` @@ -1316,12 +3883,22 @@ Style/RescueStandardError: - 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 @@ -1330,12 +3907,39 @@ Style/SafeNavigation: - 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 @@ -1343,6 +3947,10 @@ Style/SignalException: - semantic Style/SingleLineBlockParams: + Description: 'Enforces the names of some block params.' + Enabled: false + VersionAdded: '0.16' + VersionChanged: '0.47' Methods: - reduce: - acc @@ -1352,21 +3960,53 @@ Style/SingleLineBlockParams: - 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 @@ -1376,12 +4016,21 @@ Style/StringLiterals: 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`: # @@ -1391,14 +4040,34 @@ Style/StringMethods: 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: 0 + 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: @@ -1406,6 +4075,10 @@ Style/SymbolProc: - 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 @@ -1413,7 +4086,26 @@ Style/TernaryParentheses: - 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, @@ -1425,7 +4117,10 @@ Style/TrailingCommaInArguments: - 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. @@ -1436,6 +4131,8 @@ Style/TrailingCommaInArrayLiteral: - 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 @@ -1445,10 +4142,30 @@ Style/TrailingCommaInHashLiteral: - 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: # @@ -1488,8 +4205,79 @@ Style/TrivialAccessors: - 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) @@ -1497,288 +4285,28 @@ Style/WordArray: # 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 + # smaller than a certain size. The rule is only applied to arrays # whose element count is greater than or equal to `MinSize`. - MinSize: 0 + 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 - -#################### 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: [] - -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 - -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 - -# 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/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/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/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/ReadWriteAttribute: - Include: - - app/models/**/*.rb - -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/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 + VersionAdded: '0.49' + VersionChanged: '0.50' + +Style/ZeroLengthPredicate: + Description: 'Use #empty? when testing for objects of length 0.' + Enabled: true + Safe: false + VersionAdded: '0.37' + VersionChanged: '0.39' diff --git a/lib/chefstyle/version.rb b/lib/chefstyle/version.rb index 01e5afc..c8fdb1b 100644 --- a/lib/chefstyle/version.rb +++ b/lib/chefstyle/version.rb @@ -1,4 +1,4 @@ module Chefstyle - VERSION = "0.11.3".freeze - RUBOCOP_VERSION = "0.55.0".freeze + VERSION = "0.12.0".freeze + RUBOCOP_VERSION = "0.62.0".freeze end