.rubocop.yml

Summary

Maintainability
Test Coverage
require:
  - ./lib/bundler_cop.rb

# We're not joking around
Style/Documentation:
  Enabled: true
  Exclude:
    - '**/spec/**/*'

Style/MultipleComparison:
  Enabled: false

Style/PercentLiteralDelimiters:
  Enabled: false

# kind_of? is a good way to check a type
Style/ClassCheck:
  EnforcedStyle: kind_of?

Style/FrozenStringLiteralComment:
  Enabled: false

# This doesn't work with older versions of Ruby (pre 2.4.0)
Style/SafeNavigation:
  Enabled: false

# This doesn't work with older versions of Ruby (pre 2.4.0)
Performance/RegexpMatch:
  Enabled: false

Performance/RedundantBlockCall:
  Enabled: false

# This suggests use of `tr` instead of `gsub`. While this might be more performant,
# these methods are not at all interchangable, and behave very differently. This can
# lead to people making the substitution without considering the differences.
Performance/StringReplacement:
  Enabled: false

# .length == 0 is also good, we don't always want .zero?
Style/NumericPredicate:
  Enabled: false

# this would cause errors with long lanes
Metrics/BlockLength:
  Enabled: false

# this is a bit buggy
Metrics/ModuleLength:
  Enabled: false

# certificate_1 is an okay variable name
Naming/VariableNumber:
  Enabled: false

# This rule isn't useful, lots of discussion happening around it also
# e.g. https://github.com/bbatsov/rubocop/issues/2338
MultilineBlockChain:
  Enabled: false

Layout/MultilineMethodCallIndentation:
  EnforcedStyle: aligned

#
#   File.chmod(0777, f)
#
# is easier to read than
#
#   File.chmod(0o777, f)
#
Style/NumericLiteralPrefix:
  Enabled: false

#
# command = (!clean_expired.nil? || !clean_pattern.nil?) ? CLEANUP : LIST
#
# is easier to read than
#
# command = !clean_expired.nil? || !clean_pattern.nil? ? CLEANUP : LIST
#
Style/TernaryParentheses:
  Enabled: false

# sometimes it is useful to have those empty methods
Style/EmptyMethod:
  Enabled: false

# It's better to be more explicit about the type
Style/BracesAroundHashParameters:
  Enabled: false

# specs sometimes have useless assignments, which is fine
Lint/UselessAssignment:
  Exclude:
    - '**/spec/**/*'

# We could potentially enable the 2 below:
Layout/IndentHash:
  Enabled: false

Layout/AlignHash:
  Enabled: false

# HoundCI doesn't like this rule
Layout/DotPosition:
  Enabled: false

# We allow !! as it's an easy way to convert ot boolean
Style/DoubleNegation:
  Enabled: false

# Prevent to replace [] into %i
Style/SymbolArray:
  Enabled: false

# This cop would not work fine with rspec
Style/MixinGrouping:
  Exclude:
    - '**/spec/**/*'

# Sometimes we allow a rescue block that doesn't contain code
Lint/HandleExceptions:
  Enabled: false

# Cop supports --auto-correct.
Lint/UnusedBlockArgument:
  Enabled: false

Lint/AmbiguousBlockAssociation:
  Enabled: false

# Needed for $verbose
Style/GlobalVars:
  Enabled: false

# We want to allow class Fastlane::Class
Style/ClassAndModuleChildren:
  Enabled: false

# $? Exit
Style/SpecialGlobalVars:
  Enabled: false

Metrics/AbcSize:
  Enabled: false

Metrics/MethodLength:
  Enabled: false

Metrics/CyclomaticComplexity:
  Enabled: false

# The %w might be confusing for new users
Style/WordArray:
  MinSize: 19

# raise and fail are both okay
Style/SignalException:
  Enabled: false

# Better too much 'return' than one missing
Style/RedundantReturn:
  Enabled: false

# Having if in the same line might not always be good
Style/IfUnlessModifier:
  Enabled: false

# and and or is okay
Style/AndOr:
  Enabled: false

# Configuration parameters: CountComments.
Metrics/ClassLength:
  Max: 350

# Configuration parameters: AllowURI, URISchemes.
Metrics/LineLength:
  Max: 120
  Exclude:
    - './spec/**/*'

# Configuration parameters: CountKeywordArgs.
Metrics/ParameterLists:
  Max: 17

Metrics/PerceivedComplexity:
  Max: 18

# Sometimes it's easier to read without guards
Style/GuardClause:
  Enabled: false

# Single quotes being faster is hardly measurable and only affects parse time.
# Enforcing double quotes reduces the times where you need to change them
# when introducing an interpolation. Use single quotes only if their semantics
# are needed.
Style/StringLiterals:
  EnforcedStyle: double_quotes

# something = if something_else
# that's confusing
Style/ConditionalAssignment:
  Enabled: false

Style/RedundantSelf:
  Enabled: True

# e.g.
# def self.is_supported?(platform)
# we may never use `platform`
Lint/UnusedMethodArgument:
  Enabled: false

# the let(:key) { ... }
Lint/ParenthesesAsGroupedExpression:
  Exclude:
    - '**/spec/**/*'

# This would reject is_ in front of methods
# We use `is_supported?` everywhere already
Naming/PredicateName:
  Enabled: false

# We allow the $
Style/PerlBackrefs:
  Enabled: false

AllCops:
  TargetRubyVersion: 2.3
  Exclude:
    - './vendor/**/*'
    - './fastfile-parser/**/*'
    - './taskqueue/**/*'
    - '**/node_modules/**/*'
    - 'protos/*_pb.rb'

# They have not to be snake_case
Naming/FileName:
  Exclude:
    - '**/*.gemspec'

# Added after upgrade to 0.38.0
Style/MutableConstant:
  Enabled: false

# length > 0 is good
Style/ZeroLengthPredicate:
  Enabled: false

# Adds complexity
Style/IfInsideElse:
  Enabled: false

# Sometimes we just want to 'collect'
Style/CollectionMethods:
  Enabled: false

# ( ) for method calls
Style/MethodCallWithArgsParentheses:
  Enabled: true
  IgnoredMethods:
    - 'require'
    - 'require_relative'
    - 'gem'
    - 'program'
    - 'command'
    - 'raise'
    - 'attr_accessor'
    - 'attr_reader'
    # rspec tests code below
    - 'to'
    - 'not_to'
    - 'describe'
    - 'it'
    - 'context'
    - 'before'
    - 'after'