Skip to content
Snippets Groups Projects
.rubocop.yml 21.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • require:
      - rubocop-rspec
      - ./rubocop/rubocop
    
    Robert Speicher's avatar
    Robert Speicher committed
    
    
    inherit_from: .rubocop_todo.yml
    
    
      TargetRubyVersion: 2.3
    
      # Cop names are not d§splayed in offense messages by default. Change behavior
    
      # by overriding DisplayCopNames, or by giving the -D/--display-cop-names
      # option.
      DisplayCopNames: true
      # Style guide URLs are not displayed in offense messages by default. Change
      # behavior by overriding DisplayStyleGuide, or by giving the
      # -S/--display-style-guide option.
      DisplayStyleGuide: false
      # Exclude some GitLab files
      Exclude:
        - 'vendor/**/*'
    
        - 'node_modules/**/*'
    
        - 'db/*'
        - 'db/fixtures/**/*'
    
        - 'tmp/**/*'
        - 'bin/**/*'
        - 'lib/backup/**/*'
        - 'lib/ci/backup/**/*'
        - 'lib/tasks/**/*'
        - 'lib/ci/migrate/**/*'
        - 'lib/email_validator.rb'
        - 'lib/gitlab/upgrader.rb'
        - 'lib/gitlab/seeder.rb'
    
        - 'generator_templates/**/*'
    
    # Style #######################################################################
    
    
    # Check indentation of private/protected visibility modifiers.
    
    Style/AccessModifierIndentation:
    
    # Check the naming of accessor methods for get_/set_.
    Style/AccessorMethodName:
      Enabled: false
    
    
    # Use alias_method instead of alias.
    
      EnforcedStyle: prefer_alias_method
    
      Enabled: true
    
    # Align the elements of an array literal if they span more than one line.
    
      Enabled: true
    
    # Align the elements of a hash literal if they span more than one line.
    
      Enabled: true
    
    Douwe Maan's avatar
    Douwe Maan committed
    # Whether `and` and `or` are banned only in conditionals (conditionals)
    # or completely (always).
    Style/AndOr:
      Enabled: true
    
    
    # Use `Array#join` instead of `Array#*`.
    
    # Use only ascii symbols in comments.
    
      Enabled: true
    
    # Use only ascii symbols in identifiers.
    
      Enabled: true
    
    # Checks for uses of Module#attr.
    
    # Avoid the use of BEGIN blocks.
    
      Enabled: true
    
    # Do not use block comments.
    
    # Put end statement of multiline block on its own line.
    
    # Avoid using {...} for multi-line blocks (multiline chaining is # always
    # ugly). Prefer {...} over do...end for single-line blocks.
    
    Style/BlockDelimiters:
    
    # Indentation of when in a case/when/[else/]end.
    
    # Checks for uses of character literals.
    
      Enabled: true
    
    # Use CamelCase for classes and modules.'
    
      Enabled: true
    
    # Checks style of children classes and modules.
    
    Style/ClassAndModuleChildren:
      Enabled: false
    
    
    # Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.
    
    # Use self when defining module/class methods.
    
    # Avoid the use of class variables.
    
      Enabled: true
    
    # Indentation of comments.
    
      Enabled: true
    
    # Constants should use SCREAMING_SNAKE_CASE.
    
    # Use def with parentheses when there are arguments.
    
    # Document classes and non-namespace modules.
    
    Douwe Maan's avatar
    Douwe Maan committed
    Style/DotPosition:
      Enabled: true
      EnforcedStyle: trailing
    
    
    # Align elses and elsifs correctly.
    
    # Use empty lines between defs.
    
    Style/EmptyLineBetweenDefs:
      Enabled: false
    
    
    # Don't use several empty lines in a row.
    
    # Keep blank lines around access modifiers.
    
    Style/EmptyLinesAroundAccessModifier:
    
    # Keeps track of empty lines around block bodies.
    
    # Keeps track of empty lines around class bodies.
    
    # Keeps track of empty lines around module bodies.
    
    Style/EmptyLinesAroundModuleBody:
    
    # Keeps track of empty lines around method bodies.
    
    Style/EmptyLinesAroundMethodBody:
    
    # Avoid the use of END blocks.
    
    # Use Unix-style line endings.
    
    # Favor the use of Fixnum#even? && Fixnum#odd?
    
    # Use snake_case for source file names.
    
      Enabled: true
    
    # Checks for a line break before the first parameter in a multi-line method
    
    # parameter definition.
    
    Style/FirstMethodParameterLineBreak:
      Enabled: true
    
    # Checks for flip flops.
    
    # Checks use of for or each in multiline loops.
    
      Enabled: true
    
    # Checks if there is a magic comment to enforce string literals
    Style/FrozenStringLiteralComment:
      Enabled: false
    
    # Do not introduce global variables.
    
    # Prefer Ruby 1.9 hash syntax `{ a: 1, b: 2 }`
    # over 1.8 syntax `{ :a => 1, :b => 2 }`.
    
      Enabled: true
    
    # Do not use if x; .... Use the ternary operator instead.
    
    # 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.
    Style/IdenticalConditionalBranches:
    
    
    # Checks the indentation of the first line of the right-hand-side of a
    
    # multi-line assignment.
    
    Style/IndentAssignment:
    
    
    # Keep indentation straight.
    
      Enabled: true
    
    # Use 2 spaces for indentation.
    
      Enabled: true
    
    # Use Kernel#loop for infinite loops.
    
      Enabled: true
    
    # Use lambda.call(...) instead of lambda.(...).
    
    # Comments should start with a space.
    
      Enabled: true
    
    # Checks if the method definitions have or don't have parentheses.
    
    # Use the configured style when naming methods.
    
    # Checks for usage of `extend self` in modules.
    Style/ModuleFunction:
      Enabled: false
    
    
    # Checks that the closing brace in an array literal is either on the same line
    # as the last array element, or a new line.
    Style/MultilineArrayBraceLayout:
      Enabled: false
      EnforcedStyle: symmetrical
    
    
    # Avoid multi-line chains of blocks.
    
    # Ensures newlines after multiline block do statements.
    
      Enabled: true
    
    # Checks that the closing brace in a hash literal is either on the same line as
    # the last hash element, or a new line.
    Style/MultilineHashBraceLayout:
      Enabled: false
      EnforcedStyle: symmetrical
    
    
    # Do not use then for multi-line if/unless.
    
    # Checks that the closing brace in a method call is either on the same line as
    # the last method argument, or a new line.
    Style/MultilineMethodCallBraceLayout:
      Enabled: false
      EnforcedStyle: symmetrical
    
    
    # Checks indentation of method calls with the dot operator that span more than
    # one line.
    Style/MultilineMethodCallIndentation:
      Enabled: false
    
    
    # Checks that the closing brace in a method definition is symmetrical with
    # respect to the opening brace and the method parameters.
    Style/MultilineMethodDefinitionBraceLayout:
      Enabled: false
    
    
    # Checks indentation of binary operations that span more than one line.
    
    Style/MultilineOperationIndentation:
    
      Enabled: true
      EnforcedStyle: indented
    
    # Avoid multi-line `? :` (the ternary operator), use if/unless instead.
    Style/MultilineTernaryOperator:
      Enabled: true
    
    
    Style/MutableConstant:
      Enabled: true
    
    
    # Favor unless over if for negative conditions (or control flow or).
    
      Enabled: true
    
    # Avoid using nested modifiers.
    Style/NestedModifier:
    
    
    # Use one expression per branch in a ternary operator.
    
      Enabled: true
    
    # Prefer x.nil? to x == nil.
    
      Enabled: true
    
    # Checks for redundant nil checks.
    
      Enabled: true
    
    # Use ! instead of not.
    
      Enabled: true
    
    # Add underscores to large numeric literals to improve their readability.
    
    # Favor the ternary operator(?:) over if/then/else/end constructs.
    
      Enabled: true
    
    # When defining binary operators, name the argument other.
    
    # Don't use parentheses around the condition of an if/unless/while.
    
    Style/ParenthesesAroundCondition:
    
      Enabled: true
    
    # Checks for an obsolete RuntimeException argument in raise/fail.
    Style/RedundantException:
      Enabled: true
    
    
    # Checks for parentheses that seem not to serve any purpose.
    Style/RedundantParentheses:
    
    
    # Don't use semicolons to terminate expressions.
    
    # Checks for proper usage of fail and raise.
    
      EnforcedStyle: only_raise
      Enabled: true
    
    # Use spaces after colons.
    
    # Use spaces after commas.
    
    # Do not put a space between a method name and the opening parenthesis in a
    # method definition.
    
    # Tracks redundant space after the ! operator.
    
    # Use spaces after semicolons.
    
    # Use space around equals in parameter default
    Style/SpaceAroundEqualsInParameterDefault:
      Enabled: true
    
    
    # Use a space around keywords if appropriate.
    Style/SpaceAroundKeyword:
    
    # Use a single space around operators.
    Style/SpaceAroundOperators:
    
      Enabled: true
    
    # No spaces before commas.
    Style/SpaceBeforeComma:
    
    # Checks for missing space between code and a comment on the same line.
    Style/SpaceBeforeComment:
    
    # No spaces before semicolons.
    Style/SpaceBeforeSemicolon:
    
    Style/SpaceInsideBrackets:
      Enabled: true
    
    
    # Use spaces inside hash literal braces - or don't.
    
    Style/SpaceInsideHashLiteralBraces:
    
    # No spaces inside range literals.
    
    # Checks for padding/surrounding spaces inside string interpolation.
    Style/SpaceInsideStringInterpolation:
    
      EnforcedStyle: no_space
      Enabled: true
    
    
    # Check for the usage of parentheses around stabby lambda arguments.
    Style/StabbyLambdaParentheses:
    
      EnforcedStyle: require_parentheses
      Enabled: true
    
    
    # Checks if uses of quotes match the configured preference.
    
    # Checks if configured preferred methods are used over non-preferred.
    Style/StringMethods:
    
      PreferredMethods:
        intern: to_sym
      Enabled: true
    
    
    # No hard tabs.
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
      Enabled: true
    
    # Checks trailing blank lines and final newline.
    
      Enabled: true
    
    Style/TrailingCommaInLiteral:
      Enabled: false
    
    
    # Checks for %W when interpolation is not needed.
    
    # Checks for %q/%Q when single quotes or double quotes would do.
    
    # Don't interpolate global, instance and class variables directly in strings.
    
    # Use the configured style when naming variables.
    
      EnforcedStyle: snake_case
      Enabled: true
    
    # Use the configured style when numbering variables.
    Style/VariableNumber:
      Enabled: false
    
    
    # Use when x then ... for one-line cases.
    
    # Checks for redundant do after while or until.
    
    # Favor modifier while/until usage when you have a single-line body.
    
    # Use %w or %W for arrays of words.
    
    # Metrics #####################################################################
    
    # A calculated magnitude based on number of assignments,
    # branches, and conditions.
    
    Grzegorz Bizon's avatar
    Grzegorz Bizon committed
      Enabled: true
    
    # Avoid excessive block nesting.
    
    Grzegorz Bizon's avatar
    Grzegorz Bizon committed
      Enabled: true
      Max: 4
    
    # Avoid classes longer than 100 lines of code.
    
    # A complexity metric that is strongly correlated to the number
    # of test cases needed to validate a method.
    Metrics/CyclomaticComplexity:
      Enabled: true
      Max: 17
    
    # Limit lines to 80 characters.
    
    # Avoid methods longer than 10 lines of code.
    
    # Avoid modules longer than 100 lines of code.
    
    Metrics/ModuleLength:
      Enabled: false
    
    
    # Avoid parameter lists longer than three or four parameters.
    Metrics/ParameterLists:
      Enabled: true
      Max: 8
    
    # A complexity metric geared towards measuring complexity for a human reader.
    Metrics/PerceivedComplexity:
      Enabled: true
    
      Max: 18
    
    # Lint ########################################################################
    
    # Checks for useless access modifiers.
    Lint/UselessAccessModifier:
      Enabled: true
    
    # Checks for attempts to use `private` or `protected` to set the visibility
    # of a class method, which does not work.
    Lint/IneffectiveAccessModifier:
      Enabled: false
    
    
    # Checks for ambiguous operators in the first argument of a method invocation
    # without parentheses.
    
    # Align block ends correctly.
    
    # Default values in optional keyword arguments and optional ordinal arguments
    # should not refer back to the name of the argument.
    Lint/CircularArgumentReference:
    
    
    # Checks for condition placed in a confusing position relative to the keyword.
    
    # Check for debugger calls.
    
    # Align ends corresponding to defs correctly.
    
    # Check for deprecated class method calls.
    
    # Check for immutable argument given to each_with_object.
    Lint/EachWithObjectArgument:
    
    
    # Check for odd code arrangement in an else block.
    
    # Checks for empty ensure block.
    
    # Checks for the presence of `when` branches without a body.
    Lint/EmptyWhen:
      Enabled: true
    
    
    # Align ends correctly.
    
    # END blocks should not be placed inside method definitions.
    
    # Do not use return in an ensure block.
    
    # The use of eval represents a serious security risk.
    
    # Catches floating-point literals too large or small for Ruby to represent.
    Lint/FloatOutOfRange:
    
    
    # The number of parameters to format/sprint must match the fields.
    Lint/FormatParameterMismatch:
    
    
    # Checks for adjacent string literals on the same line, which could better be
    # represented as a single string literal.
    Lint/ImplicitStringConcatenation:
    
    
    # Checks for invalid character literals with a non-escaped whitespace
    # character.
    
    # Checks of literals used in conditions.
    
    # Checks for literals used in interpolation.
    
    # Do not use nested method definitions.
    Lint/NestedMethodDefinition:
    
    
    # Do not omit the accumulator when calling `next` in a `reduce`/`inject` block.
    Lint/NextWithoutAccumulator:
    
    
    # Checks for method calls with a space before the opening parenthesis.
    
    Lint/ParenthesesAsGroupedExpression:
    
    # Checks for `rand(1)` calls. Such calls always return `0` and most likely
    # a mistake.
    Lint/RandOne:
    
    
    # Use parentheses in the method call to avoid confusion about precedence.
    
    # Avoid rescuing the Exception class.
    
      Enabled: true
    
    Connor Shea's avatar
    Connor Shea committed
    # Checks for the order which exceptions are rescued to avoid rescueing a less specific exception before a more specific exception.
    Lint/ShadowedException:
    
    # Checks for Object#to_s usage in string interpolation.
    Lint/StringConversionInInterpolation:
      Enabled: true
    
    
    # Do not use prefix `_` for a variable that is used.
    
    Lint/UnderscorePrefixedVariableName:
    
      Enabled: true
    
    # Checks for rubocop:disable comments that can be removed.
    # Note: this cop is not disabled when disabling all cops.
    # It must be explicitly disabled.
    Lint/UnneededDisable:
      Enabled: false
    
    # Unreachable code.
    
    Lint/UnusedMethodArgument:
      Enabled: false
    
    
    # Checks for useless assignment to a local variable.
    
    # Checks for comparison of something with itself.
    
    # Checks for useless `else` in `begin..end` without `rescue`.
    
    # Checks for useless setter call to a local variable.
    
    # Possible use of operator/literal/variable in void context.
    
    # Performance #################################################################
    
    
    # Use `casecmp` rather than `downcase ==`.
    Performance/Casecmp:
    
      Enabled: true
    
    
    # Use `str.{start,end}_with?(x, ..., y, ...)` instead of
    # `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`.
    Performance/DoubleStartEndWith:
    
    
    # Use `strip` instead of `lstrip.rstrip`.
    Performance/LstripRstrip:
    
    Connor Shea's avatar
    Connor Shea committed
      Enabled: true
    
    
    # Use `Range#cover?` instead of `Range#include?`.
    Performance/RangeInclude:
    
    
    # Use `sort` instead of `sort_by { |x| x }`.
    Performance/RedundantSortBy:
    
    
    # Use `start_with?` instead of a regex match anchored to the beginning of a
    # string.
    Performance/StartWith:
    
    # Use `tr` instead of `gsub` when you are replacing the same number of
    # characters. Use `delete` instead of `gsub` when you are deleting
    # characters.
    Performance/StringReplacement:
    
      Enabled: true
    
    
    # Checks for `.times.map` calls.
    Performance/TimesMap:
    
    # Rails #######################################################################
    
    # Enables Rails cops.
    Rails:
      Enabled: true
    
    # Enforces consistent use of action filter methods.
    
      Enabled: true
    
      EnforcedStyle: action
    
    # Checks the correct usage of date aware methods, such as `Date.today`,
    # `Date.current`, etc.
    
    Rails/Date:
      Enabled: false
    
    
    # Prefer delegate method for delegations.
    Rails/Delegate:
    
    # Prefer `find_by` over `where.first`.
    Rails/FindBy:
    
    
    # Prefer `all.find_each` over `all.find`.
    Rails/FindEach:
    
    # Prefer has_many :through to has_and_belongs_to_many.
    
      Enabled: true
    
    # Checks for calls to puts, print, etc.
    
    # Checks for incorrect grammar when using methods like `3.day.ago`.
    Rails/PluralizationGrammar:
    
    
    # Checks for `read_attribute(:attr)` and `write_attribute(:attr, val)`.
    
    # Checks the arguments of ActiveRecord scopes.
    
    # RSpec #######################################################################
    
    # Check that instances are not being stubbed globally.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/AnyInstance:
      Enabled: false
    
    
    # Check for expectations where `be(...)` can replace `eql(...)`.
    RSpec/BeEql:
      Enabled: false
    
    
    # Check that the first argument to the top level describe is the tested class or
    # module.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/DescribeClass:
      Enabled: false
    
    
    # Use `described_class` for tested class / module.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/DescribeMethod:
      Enabled: false
    
    
    # Checks that the second argument to top level describe is the tested method
    # name.
    RSpec/DescribedClass:
    
    Robert Speicher's avatar
    Robert Speicher committed
      Enabled: false
    
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/ExampleLength:
      Enabled: false
      Max: 5
    
    
    # Do not use should when describing your tests.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/ExampleWording:
      Enabled: false
      CustomTransform:
        be: is
        have: has
        not: does not
      IgnoredWords: []
    
    
    # Checks for `expect(...)` calls containing literal values.
    RSpec/ExpectActual:
      Enabled: true
    
    
    # Checks the file and folder naming of the spec file.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/FilePath:
      Enabled: false
      CustomTransform:
        RuboCop: rubocop
        RSpec: rspec
    
    
    # Checks if there are focused specs.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/Focus:
      Enabled: true
    
    
    # Checks for the usage of instance variables.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/InstanceVariable:
      Enabled: false
    
    
    # Checks for multiple top-level describes.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/MultipleDescribes:
      Enabled: false
    
    
    # Enforces the usage of the same method on all negative message expectations.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/NotToNot:
      EnforcedStyle: not_to
    
    # Prefer using verifying doubles over normal doubles.
    
    Robert Speicher's avatar
    Robert Speicher committed
    RSpec/VerifiedDoubles:
      Enabled: false
    
    Douwe Maan's avatar
    Douwe Maan committed
    
    RSpec/MultipleExpectations:
      Enabled: false
    
    RSpec/NamedSubject:
      Enabled: false
    
    RSpec/NestedGroups:
      Enabled: false
    
    RSpec/LeadingSubject:
      Enabled: false
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Lint/AmbiguousRegexpLiteral:
      Enabled: false
    
    Bundler/OrderedGems:
      Enabled: false
    
    Lint/HandleExceptions:
      Enabled: false
    
    Lint/Loop:
      Enabled: false
    
    Metrics/BlockLength:
      Enabled: false
    
    
    Performance/RedundantMerge:
      Enabled: true
      MaxKeyValuePairs: 1
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    RSpec/LetSetup:
      Enabled: false
    
    RSpec/MessageChain:
      Enabled: false
    
    RSpec/MessageSpies:
      Enabled: false
    
    RSpec/RepeatedDescription:
      Enabled: false
    
    RSpec/SubjectStub:
      Enabled: false
    
    Douwe Maan's avatar
    Douwe Maan committed
    
    Lint/UnifiedInteger:
      Enabled: true
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Lint/ShadowingOuterLocalVariable:
      Enabled: false
    
    Lint/AssignmentInCondition:
      Enabled: false
    
    
    Lint/UnneededSplatExpansion:
      Enabled: false
    
    Douwe Maan's avatar
    Douwe Maan committed
    
    Lint/UnusedBlockArgument:
      Enabled: false
    
    
    Performance/RedundantBlockCall:
      Enabled: true
    
    
    Performance/RedundantMatch:
      Enabled: true
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Rails/DynamicFindBy:
      Enabled: false
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Rails/HttpPositionalArguments:
      Enabled: false
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Rails/OutputSafety:
      Enabled: false
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Rails/TimeZone:
      Enabled: false
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Rails/Validation:
      Enabled: true
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Security/JSONLoad:
      Enabled: true
    
    
    Douwe Maan's avatar
    Douwe Maan committed
    Style/AlignParameters:
      Enabled: false
    
    Style/CaseEquality:
      Enabled: false
    
    Style/CommentAnnotation:
      Enabled: false
    
    Style/DoubleNegation:
      Enabled: false