require:
  - rubocop-performance
  - rubocop-rails

AllCops:
  NewCops: disable
  DisplayCopNames: true
  Exclude:
    - 'bin/**/*'
    - 'coverage/**/*'
    - 'db/**/*'
    - 'log/**/*'
    - 'public/**/*'
    - 'tmp/**/*'
    - 'vendor/**/*'

Bundler/GemComment:
  Enabled: true
  OnlyFor:
    - 'restrictive_version_specificiers'
    - 'source'
    - 'git'
    - 'github'
    - 'gist'

Gemspec/RequiredRubyVersion:
  Exclude:
    - schemas_gem/*_schemas.gemspec

# This cop has poor handling for the common case of a lambda arg in a DSL
Lint/AmbiguousBlockAssociation:
  Enabled: false

Lint/AmbiguousOperator:
  Enabled: false

Performance/RedundantMerge:
  MaxKeyValuePairs: 1

Style/Alias:
  EnforcedStyle: prefer_alias_method

Layout/HashAlignment:
  Enabled: false

Style/Documentation:
  Enabled: false

Style/DoubleNegation:
  Enabled: false

# auto-correct is broken for this cop:
# https://github.com/bbatsov/rubocop/issues/3271
Style/EachForSimpleLoop:
  AutoCorrect: false

Style/EachWithObject:
  Enabled: false

Layout/EmptyLines:
  Enabled: false

Layout/EmptyLinesAroundBlockBody:
  Enabled: false

Layout/EmptyLinesAroundClassBody:
  Enabled: false

Layout/EmptyLinesAroundModuleBody:
  Enabled: false

Layout/EmptyLinesAroundMethodBody:
  Enabled: false

Style/EmptyLiteral:
  Enabled: false

Style/EmptyMethod:
  Enabled: false

# Disabling due to performance implications.
# https://github.com/JuanitoFatas/fast-ruby/blob/master/code/proc-and-block/proc-call-vs-yield.rb
Style/ExplicitBlockArgument:
  Enabled: false

# The Exclude list is not additive. Projects that exclude file names will
# need to re-add Appraisals.
Naming/FileName:
  Exclude:
    - 'Appraisals'

Style/FrozenStringLiteralComment:
  Enabled: true

Style/GuardClause:
  Enabled: false

# does not make sense to enable this without AlignHash
Layout/FirstHashElementIndentation:
  Enabled: false

Style/Lambda:
  Enabled: false

Style/ModuleFunction:
  EnforcedStyle: extend_self

Style/MultilineBlockChain:
  Enabled: false

Layout/MultilineMethodCallIndentation:
  Enabled: false

Layout/MultilineOperationIndentation:
  Enabled: false

Layout/MultilineBlockLayout:
  Enabled: false

# This cop complains about values like 05.
Style/NumericLiteralPrefix:
  Enabled: false

# This cop is problematic when nil may be compared with 0.
Style/NumericPredicate:
  Enabled: false

# This cop is unstable.
Style/PercentLiteralDelimiters:
  Enabled: false

Style/Proc:
  Enabled: false

Style/RaiseArgs:
  EnforcedStyle: compact

Style/RegexpLiteral:
  Enabled: false

Style/SafeNavigation:
  Enabled: false

Style/SignalException:
  EnforcedStyle: only_raise

Style/SingleLineBlockParams:
  Enabled: false

# This cop doesn't work properly if you a have a block with
# arguments split across multiple lines
Layout/SpaceAroundBlockParameters:
  Enabled: false

Style/StringLiterals:
  EnforcedStyle: single_quotes
  Exclude:
    - 'spec/**/*'

Naming/VariableNumber:
  Enabled: false

Metrics/AbcSize:
  Enabled: false

Metrics/BlockLength:
  Enabled: false

Metrics/BlockNesting:
  Enabled: false

Metrics/ClassLength:
  Enabled: false

Metrics/CyclomaticComplexity:
  Enabled: false

Layout/LineLength:
  Enabled: true
  Max: 120
  IgnoreCopDirectives: true
  IgnoredPatterns:
    - ^#

Metrics/MethodLength:
  Enabled: false

Metrics/ModuleLength:
  Enabled: false

Metrics/ParameterLists:
  Enabled: false

Metrics/PerceivedComplexity:
  Enabled: false

Rails:
  Enabled: false

# This cop is too greedy I dont
# want to underscore my timestamps.
Style/NumericLiterals:
  Enabled: false

Style/StructInheritance:
  Enabled: false

Style/WordArray:
  EnforcedStyle: brackets 

Style/SymbolArray:
  EnforcedStyle: brackets

Lint/HashCompareByIdentity:
  Enabled: false

Lint/IdentityComparison:
  Enabled: false

Lint/MixedRegexpCaptureTypes:
  Enabled: false

Lint/TopLevelReturnWithArgument:
  Enabled: false

Style/CombinableLoops:
  Enabled: false

Style/HashAsLastArrayItem:
  Enabled: false

Style/HashEachMethods:
  Enabled: false

# Allow both { foo: } and { foo: foo }
Style/HashSyntax:
  EnforcedShorthandSyntax: either

Style/OptionalBooleanParameter:
  Enabled: false

Style/RedundantSelfAssignment:
  Enabled: false

Style/SingleArgumentDig:
  Enabled: false

# Added for v1.13.0 -> v1.27.0 version bump.
Bundler/GemFilename:
  Enabled: false

Bundler/GemVersion:
  Enabled: false

Gemspec/RequireMFA:
  Enabled: false

Layout/LineEndStringConcatenationIndentation:
  Enabled: false

Layout/SingleLineBlockChain:
  Enabled: false

Lint/AmbiguousOperatorPrecedence:
  Enabled: false

Lint/AmbiguousRange:
  Enabled: false

Lint/EmptyInPattern:
  Enabled: false

Lint/IncompatibleIoSelectWithFiberScheduler:
  Enabled: false

Lint/RefinementImportMethods:
  Enabled: false

Lint/RequireRelativeSelfPath:
  Enabled: false

Lint/UselessRuby2Keywords:
  Enabled: false

Naming/BlockForwarding:
  Enabled: false

Naming/InclusiveLanguage:
  Enabled: false

Security/IoMethods:
  Enabled: false

Style/FileRead:
  Enabled: false

Style/FileWrite:
  Enabled: false

Style/InPatternThen:
  Enabled: false

Style/MapToHash:
  Enabled: false

Style/MultilineInPatternThen:
  Enabled: false

Style/NestedFileDirname:
  Enabled: false

Style/NumberedParameters:
  Enabled: false

Style/NumberedParametersLimit:
  Enabled: false

Style/OpenStructUse:
  Enabled: false

Style/QuotedSymbols:
  Enabled: false

Style/RedundantInitialize:
  Enabled: false

Style/RedundantSelfAssignmentBranch:
  Enabled: false

Style/SelectByRegexp:
  Enabled: false

Style/TopLevelMethodDefinition:
  Enabled: false
# End updates for v1.13.0 -> v1.27.0 version bump.