diff --git a/.rubocop.yml b/.rubocop.yml index e122960322..a65610a4e5 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,72 +1,336 @@ -inherit_from: .rubocop_rspec_base.yml +inherit_from: + - .rubocop_todo.yml -# Over time we'd like to get this down, but this is what we're at now. -LineLength: - Max: 186 +AllCops: + Exclude: + # Templates are really ERB which Rubocop does not parse + - 'lib/generators/rspec/*/templates/**/*' + +Layout/AccessModifierIndentation: + Enabled: false + +Layout/AssignmentIndentation: + Enabled: false + +Layout/ClosingParenthesisIndentation: + Enabled: false + +Layout/EmptyLineAfterMagicComment: + Enabled: false -# Over time we'd like to get this down, but this is what we're at now. -MethodLength: - Max: 50 +Layout/EmptyLineBetweenDefs: + Enabled: false + +Layout/EmptyLinesAroundAccessModifier: + Enabled: false + +Layout/EmptyLinesAroundBlockBody: + Enabled: false + +Layout/ExtraSpacing: + Enabled: false + +Layout/FirstArgumentIndentation: + Enabled: false + +Layout/FirstArrayElementIndentation: + Enabled: false + +Layout/HashAlignment: + Enabled: false + +Layout/HeredocIndentation: + Enabled: false + +Layout/MultilineMethodCallBraceLayout: + Enabled: false + +Layout/MultilineMethodCallIndentation: + Enabled: false + +Layout/MultilineOperationIndentation: + Enabled: false + +Layout/ParameterAlignment: + EnforcedStyle: with_first_parameter + +Layout/SpaceInsidePercentLiteralDelimiters: + Enabled: false # We use spaces, so it's less of a change to stick with that. -SpaceAroundEqualsInParameterDefault: +Layout/SpaceAroundEqualsInParameterDefault: EnforcedStyle: space -################################################################################ -# Individual File Exclusions -################################################################################ +Layout/SpaceAroundBlockParameters: + Enabled: false -AllCops: - Exclude: - # Templates are really ERB which Rubocop does not parse - - 'lib/generators/rspec/*/templates/**/*' +Layout/SpaceAroundOperators: + Enabled: false -FileName: - Exclude: - # We break convention here so that when bundler requires the gem, which - # uses the gem name, things work without user configuration. - - lib/rspec-rails.rb +Layout/SpaceBeforeComma: + Enabled: false -HandleExceptions: +Layout/SpaceInsideStringInterpolation: + Enabled: false + +Lint/AssignmentInCondition: + Enabled: false + +Lint/EmptyExpression: + Enabled: false + +Lint/ImplicitStringConcatenation: + Enabled: false + +Lint/NestedMethodDefinition: + Enabled: false + +# Exceptions should be rescued with `Support::AllExceptionsExceptOnesWeMustNotRescue` +Lint/RescueException: + Enabled: true + +Lint/SuppressedException: Exclude: # RSpec is tightly coupled to capybara right now, this should be # re-evaluted in the future. For now we allow the empty rescue - lib/rspec/rails/vendor/capybara.rb -IfUnlessModifier: +Metrics/AbcSize: + Enabled: false + +Metrics/BlockLength: + Enabled: false + +# Warns when the class is excessively long. +Metrics/ClassLength: + Max: 100 + +Metrics/PerceivedComplexity: + Enabled: false + +# Who cares what we call the argument for binary operator methods? +Naming/BinaryOperatorParameterName: + Enabled: false + +Naming/ConstantName: + Enabled: false + +Naming/FileName: Exclude: - # Allow single line statement as the style matches the remainder of the file - - lib/rspec/rails/vendor/capybara.rb + # We break convention here so that when bundler requires the gem, which + # uses the gem name, things work without user configuration. + - lib/rspec-rails.rb + +Naming/HeredocDelimiterNaming: + Enabled: false + +Naming/MemoizedInstanceVariableName: + Enabled: false -PerlBackrefs: +Naming/MethodParameterName: + Enabled: false + +# We have too many special cases where we allow generator methods or prefer a +# prefixed predicate due to it's improved readability. +Naming/PredicateName: + Enabled: false + +Naming/RescuedExceptionsVariableName: + Enabled: false + +Naming/VariableNumber: + Enabled: false + +Style/CollectionMethods: + PreferredMethods: + reduce: 'inject' + +Style/AccessModifierDeclarations: + Enabled: false + +# "Use alias_method instead of alias" +# We're fine with `alias`. +Style/Alias: + Enabled: false + +Style/BlockDelimiters: + Enabled: false + +# "Avoid the use of the case equality operator ===" +# We prefer using `Class#===` over `Object#is_a?` because `Class#===` +# is less likely to be monkey patched than `is_a?` on a user object. +Style/CaseEquality: + Enabled: false + +Style/ClassCheck: + Enabled: false + +Style/ConditionalAssignment: + Enabled: false + +Style/DateTime: + Enabled: false + +# We use YARD to enforce documentation. It works better than rubocop's +# enforcement...rubocop complains about the places we re-open +# `RSpec::Expectations` and `RSpec::Matchers` w/o having doc commments. +Style/Documentation: + Enabled: false + +Style/DoubleNegation: + Enabled: false + +Style/EmptyMethod: + Enabled: false + +Style/EmptyCaseCondition: + Enabled: false + +Style/EmptyElse: + Enabled: false + +Style/FormatString: + EnforcedStyle: percent + +Style/FormatStringToken: + Enabled: false + +Style/FrozenStringLiteralComment: + Enabled: false + +Style/GuardClause: + Enabled: false + +Style/IdenticalConditionalBranches: + Enabled: false + +Style/IfUnlessModifierOfIfUnless: + Enabled: false + +Style/IfInsideElse: + Enabled: false + +Style/IfUnlessModifier: + Enabled: false + +Style/MethodMissingSuper: + Enabled: false + +Style/MissingRespondToMissing: + Enabled: false + +Style/MixinUsage: + Enabled: false + +Style/MultilineIfModifier: + Enabled: false + +Style/MultipleComparison: + Enabled: false + +Style/MutableConstant: + Enabled: false + +Style/NestedModifier: + Enabled: false + +Style/NestedParenthesizedCalls: + Enabled: false + +Style/NumericPredicate: + Enabled: false + +Style/ParallelAssignment: + Enabled: false + +Style/ParenthesesAroundCondition: + Enabled: false + +Style/PerlBackrefs: Exclude: # We probably can refactor the backref out, but for now excluding it since # we can't use named matches in 1.8.7 - lib/generators/rspec/scaffold/scaffold_generator.rb -Style/AccessModifierDeclarations: +Style/PercentLiteralDelimiters: + PreferredDelimiters: + '%': () # double-quoted string + '%i': '[]' # array of symbols + '%q': () # single-quoted string + '%Q': () # double-quoted string + '%r': '{}' # regular expression pattern + '%s': () # a symbol + '%w': '[]' # array of single-quoted strings + '%W': '[]' # array of double-quoted strings + '%x': () # a shell command as a string + +# On 1.8 `proc` was `lambda`, so we used `Proc.new` to ensure we got real procs +# on all supported versions. +# http://batsov.com/articles/2014/02/04/the-elements-of-style-in-ruby-number-12-proc-vs-proc-dot-new/ +Style/Proc: Enabled: false -Naming/MemoizedInstanceVariableName: +Style/RegexpLiteral: Enabled: false -Naming/UncommunicativeMethodParamName: +Style/RedundantReturn: Enabled: false -Metrics/PerceivedComplexity: +Style/RedundantParentheses: Enabled: false -Metrics/BlockLength: +Style/RescueStandardError: Enabled: false -Lint/AssignmentInCondition: +# We haven't adopted the `fail` to signal exceptions vs `raise` for re-raises convention. +Style/SignalException: Enabled: false -Lint/EmptyExpression: +# This rule favors constant names from the English standard library which we don't load. +Style/SpecialGlobalVars: Enabled: false -Layout/AlignHash: +Style/StderrPuts: Enabled: false -Naming/RescuedExceptionsVariableName: +Style/StringLiteralsInInterpolation: + Enabled: false + +Style/StructInheritance: + Enabled: false + +# We don't care about single vs double qoutes. +Style/StringLiterals: + Enabled: false + +Style/SymbolArray: + Enabled: false + +Style/SymbolProc: + Enabled: false + +Style/TernaryParentheses: + Enabled: false + +Style/TrailingCommaInArrayLiteral: + Enabled: false + +Style/TrailingCommaInHashLiteral: + Enabled: false + +Style/TrailingCommaInArguments: + Enabled: false + +Style/TrivialAccessors: + AllowDSLWriters: true + AllowPredicates: true + ExactNameMatch: true + +Style/TrailingUnderscoreVariable: + Enabled: false + +Style/YodaCondition: + Enabled: false + +Style/ZeroLengthPredicate: Enabled: false diff --git a/.rubocop_rspec_base.yml b/.rubocop_rspec_base.yml deleted file mode 100644 index 045f1799cd..0000000000 --- a/.rubocop_rspec_base.yml +++ /dev/null @@ -1,316 +0,0 @@ -# This file was generated on 2019-07-24T15:33:53+02:00 from the rspec-dev repo. -# DO NOT modify it by hand as your changes will get lost the next time it is generated. - -# This file contains defaults for RSpec projects. Individual projects -# can customize by inheriting this file and overriding particular settings. - -AccessModifierIndentation: - Enabled: false - -# "Use alias_method instead of alias" -# We're fine with `alias`. -Alias: - Enabled: false - -AlignParameters: - EnforcedStyle: with_first_parameter - -# "Avoid the use of the case equality operator ===" -# We prefer using `Class#===` over `Object#is_a?` because `Class#===` -# is less likely to be monkey patched than `is_a?` on a user object. -CaseEquality: - Enabled: false - -# Warns when the class is excessively long. -Metrics/ClassLength: - Max: 100 - -CollectionMethods: - PreferredMethods: - reduce: 'inject' - -# Over time we'd like to get this down, but this is what we're at now. -CyclomaticComplexity: - Max: 10 - -# We use YARD to enforce documentation. It works better than rubocop's -# enforcement...rubocop complains about the places we re-open -# `RSpec::Expectations` and `RSpec::Matchers` w/o having doc commments. -Documentation: - Enabled: false - -# We still support 1.8.7 which requires trailing dots -DotPosition: - EnforcedStyle: trailing - -DoubleNegation: - Enabled: false - -# each_with_object is unavailable on 1.8.7 so we have to disable this one. -EachWithObject: - Enabled: false - -FormatString: - EnforcedStyle: percent - -# As long as we support ruby 1.8.7 we have to use hash rockets. -HashSyntax: - EnforcedStyle: hash_rockets - -# We can't use the new lambda syntax, since we still support 1.8.7. -Lambda: - Enabled: false - -# Over time we'd like to get this down, but this is what we're at now. -LineLength: - Max: 100 - -# Over time we'd like to get this down, but this is what we're at now. -Metrics/MethodLength: - Max: 15 - -# Who cares what we call the argument for binary operator methods? -BinaryOperatorParameterName: - Enabled: false - -PercentLiteralDelimiters: - PreferredDelimiters: - '%': () # double-quoted string - '%i': '[]' # array of symbols - '%q': () # single-quoted string - '%Q': () # double-quoted string - '%r': '{}' # regular expression pattern - '%s': () # a symbol - '%w': '[]' # array of single-quoted strings - '%W': '[]' # array of double-quoted strings - '%x': () # a shell command as a string - -# We have too many special cases where we allow generator methods or prefer a -# prefixed predicate due to it's improved readability. -PredicateName: - Enabled: false - -# On 1.8 `proc` is `lambda`, so we use `Proc.new` to ensure we get real procs on all supported versions. -# http://batsov.com/articles/2014/02/04/the-elements-of-style-in-ruby-number-12-proc-vs-proc-dot-new/ -Proc: - Enabled: false - -# Exceptions should be rescued with `Support::AllExceptionsExceptOnesWeMustNotRescue` -RescueException: - Enabled: true - -# We haven't adopted the `fail` to signal exceptions vs `raise` for re-raises convention. -SignalException: - Enabled: false - -# We've tended to use no space, so it's less of a change to stick with that. -SpaceAroundEqualsInParameterDefault: - EnforcedStyle: no_space - -# We don't care about single vs double qoutes. -StringLiterals: - Enabled: false - -# This rule favors constant names from the English standard library which we don't load. -Style/SpecialGlobalVars: - Enabled: false - -Style/TrailingCommaInArrayLiteral: - Enabled: false - -Style/TrailingCommaInHashLiteral: - Enabled: false - -Style/TrailingCommaInArguments: - Enabled: false - -TrivialAccessors: - AllowDSLWriters: true - AllowPredicates: true - ExactNameMatch: true - -Style/ParallelAssignment: - Enabled: false - -Layout/EmptyLineBetweenDefs: - Enabled: false - -Layout/IndentFirstArgument: - Enabled: false - -Naming/ConstantName: - Enabled: false - -Style/ClassCheck: - Enabled: false - -Style/ConditionalAssignment: - Enabled: false - -Style/EmptyMethod: - Enabled: false - -Style/FormatStringToken: - Enabled: false - -Style/FrozenStringLiteralComment: - Enabled: false - -Style/GuardClause: - Enabled: false - -Style/IdenticalConditionalBranches: - Enabled: false - -Style/IfUnlessModifier: - Enabled: false - -Style/IfUnlessModifierOfIfUnless: - Enabled: false - -Style/MethodMissingSuper: - Enabled: false - -Style/MissingRespondToMissing: - Enabled: false - -Style/MixinUsage: - Enabled: false - -Style/MultipleComparison: - Enabled: false - -Style/MutableConstant: - Enabled: false - -Style/NestedModifier: - Enabled: false - -Style/NestedParenthesizedCalls: - Enabled: false - -Style/NumericPredicate: - Enabled: false - -Style/RedundantParentheses: - Enabled: false - -Style/StringLiteralsInInterpolation: - Enabled: false - -Style/SymbolArray: - Enabled: false - -Style/SymbolProc: - Enabled: false - -Style/YodaCondition: - Enabled: false - -Style/ZeroLengthPredicate: - Enabled: false - -Layout/ClosingParenthesisIndentation: - Enabled: false - -Layout/ExtraSpacing: - Enabled: false - -Layout/MultilineMethodCallBraceLayout: - Enabled: false - -Layout/MultilineMethodCallIndentation: - Enabled: false - -Layout/MultilineOperationIndentation: - Enabled: false - -Layout/SpaceAroundBlockParameters: - Enabled: false - -Layout/SpaceAroundOperators: - Enabled: false - -Layout/SpaceBeforeComma: - Enabled: false - -Style/BlockDelimiters: - Enabled: false - -Style/EmptyCaseCondition: - Enabled: false - -Style/MultilineIfModifier: - Enabled: false - -Style/RescueStandardError: - Enabled: false - -Style/StderrPuts: - Enabled: false - -Style/TernaryParentheses: - Enabled: false - -Naming/HeredocDelimiterNaming: - Enabled: false - -Layout/EmptyLineAfterMagicComment: - Enabled: false - -Layout/IndentFirstArrayElement: - Enabled: false - -Layout/IndentAssignment: - Enabled: false - -Layout/IndentHeredoc: - Enabled: false - -Layout/SpaceInsidePercentLiteralDelimiters: - Enabled: false - -Style/EmptyElse: - Enabled: false - -Style/IfInsideElse: - Enabled: false - -Style/RedundantReturn: - Enabled: false - -Style/StructInheritance: - Enabled: false - -Naming/VariableNumber: - Enabled: false - -Layout/SpaceInsideStringInterpolation: - Enabled: false - -Style/DateTime: - Enabled: false - -Style/ParenthesesAroundCondition: - Enabled: false - -Layout/EmptyLinesAroundBlockBody: - Enabled: false - -Lint/ImplicitStringConcatenation: - Enabled: false - -Lint/NestedMethodDefinition: - Enabled: false - -Style/RegexpLiteral: - Enabled: false - -Style/TrailingUnderscoreVariable: - Enabled: false - -Layout/EmptyLinesAroundAccessModifier: - Enabled: false - -Metrics/AbcSize: - Enabled: false diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml new file mode 100644 index 0000000000..d4dffc2e57 --- /dev/null +++ b/.rubocop_todo.yml @@ -0,0 +1,27 @@ +# ruby 1.8.7 required trailing dots +Layout/DotPosition: + EnforcedStyle: trailing + +# Over time we'd like to get this down, but this is what we're at now. +Metrics/CyclomaticComplexity: + Max: 9 # default: 6 + +# Over time we'd like to get this down, but this is what we're at now. +Metrics/LineLength: + Max: 186 # default: 80 + +# Over time we'd like to get this down, but this is what we're at now. +Metrics/MethodLength: + Max: 43 # default: 10 + +# each_with_object was unavailable on ruby 1.8.7 +Style/EachWithObject: + Enabled: false + +# ruby 1.8.7 only had support for hash rockets +Style/HashSyntax: + EnforcedStyle: hash_rockets # default: ruby19 + +# the new lambda syntax was not supported in ruby 1.8.7 +Style/Lambda: + Enabled: false diff --git a/Gemfile b/Gemfile index ebe887d2bf..ec02a32457 100644 --- a/Gemfile +++ b/Gemfile @@ -67,7 +67,7 @@ end gem "rubyzip", '~> 1.2' -gem 'rubocop', "~> 0.74" +gem 'rubocop', '~> 0.77.0' custom_gemfile = File.expand_path("../Gemfile-custom", __FILE__) eval_gemfile custom_gemfile if File.exist?(custom_gemfile)