# Please do not 'fix' style issues without a compelling, metrics-driven
# argument that a style change will materially improve cod equality.
# https://github.com/lobsters/lobsters/pull/460

# Project setup:
require:
  - ./extras/prohibit_form_for_and_form_tag.rb
  - ./extras/prohibit_safe_navigation.rb
  - rubocop-rails
  - rubocop-rspec
AllCops:
  Include:
    - '**/*.rb'
    - '**/Rakefile'
    - '**/config.ru'
    - '**/*.rake'
  Exclude:
    - Gemfile
    - 'bin/**/*'
    - 'db/**/*'
    - 'vendor/**/*'
  UseCache: false

# Cop configuration:

# Bundler

# Gemspec

# Layout
Layout/AccessModifierIndentation:
  EnforcedStyle: outdent
Layout/ArrayAlignment:
  Enabled: false
Layout/CaseIndentation:
  EnforcedStyle: end
Layout/ElseAlignment:
  Enabled: false
Layout/EmptyLineAfterGuardClause:
  Enabled: false
Layout/EmptyLinesAroundExceptionHandlingKeywords:
  Enabled: false
Layout/EndAlignment:
  EnforcedStyleAlignWith: variable
Layout/FirstHashElementIndentation:
  EnforcedStyle: consistent
Layout/HashAlignment:
  Enabled: false
Layout/LineLength:
  Max: 100
Layout/MultilineMethodCallBraceLayout:
  Enabled: false
Layout/MultilineMethodCallIndentation:
  Enabled: false
Layout/SpaceAroundOperators:
  Enabled: false
Layout/SpaceInsideBlockBraces:
  EnforcedStyle: space
  SpaceBeforeBlockParameters: false
Layout/SpaceInsideRangeLiteral:
  Enabled: false

# Lint
Lint/SuppressedException:
  Enabled: false
Lint/RaiseException:
  Enabled: true
Lint/StructNewOverride:
  Enabled: true

# Metrics
Metrics/AbcSize:
  Enabled: false
Metrics/BlockLength:
  Enabled: false
Metrics/BlockNesting:
  Enabled: false
Metrics/ClassLength:
  Enabled: false
Metrics/CyclomaticComplexity:
  Enabled: false
Metrics/MethodLength:
  Enabled: false
Metrics/ModuleLength:
  Enabled: false
Metrics/ParameterLists:
  Enabled: false
Metrics/PerceivedComplexity:
  Enabled: false

# Naming
Naming/AccessorMethodName:
  Enabled: false
Naming/MemoizedInstanceVariableName:
  Enabled: false
Naming/PredicateName:
  Enabled: false
# disabled until class vaiables in extras become constants
Naming/MethodParameterName:
  Enabled: false
Naming/VariableName:
  Enabled: false

# Performance

# Rails
Rails/Blank:
  Enabled: false
Rails/FilePath:
  Enabled: false
Rails/HttpStatus:
  Enabled: false
Rails/OutputSafety:
  Enabled: false
Rails/Present:
  UnlessBlank: false
Rails/SkipsModelValidations:
  Enabled: false
Rails/HelperInstanceVariable:
  Enabled: false

# RSpec
RSpec/ExampleLength:
  Enabled: false
RSpec/MultipleExpectations:
  Enabled: false
RSpec/DescribedClass:
  Enabled: false
RSpec/MessageSpies:
  Enabled: false
RSpec/VerifiedDoubles:
  Enabled: false
RSpec/NotToNot:
  Enabled: false
RSpec/ContextWording:
  Enabled: false
RSpec/ExpectChange:
  Enabled: false
RSpec/HookArgument:
  Enabled: false
RSpec/ExampleWording:
  Enabled: false
RSpec/NamedSubject:
  Enabled: false
RSpec/NestedGroups:
  Enabled: false
RSpec/AnyInstance:
  Enabled: false
RSpec/UnspecifiedException:
  Enabled: false
RSpec/InstanceVariable:
  Enabled: false
RSpec/BeforeAfterAll:
  Enabled: false
RSpec/DescribeClass:
  Enabled: false
RSpec/LetSetup:
  Enabled: false
Capybara/FeatureMethods:
  Enabled: false

# Security

# Style
Style/AndOr:
  EnforcedStyle: conditionals
Style/BlockDelimiters:
  Enabled: false
Style/BlockComments:
  Enabled: false
Style/CommentedKeyword:
  Enabled: false
Style/ClassVars:
  Enabled: false
Style/ConditionalAssignment:
  Enabled: false
# It would be nice to have this on, but I'm not up for writing 66 of these in
# the process of addressing the initial 4,489 cop warnings.
Style/Documentation:
  Enabled: false
  Exclude: [db/migrate/**/*, spec/**/*, test/**/*]
Style/DoubleNegation:
  Enabled: false
Style/EachWithObject:
  Enabled: false
Style/ExpandPathArguments:
  Enabled: false
Style/FormatString:
  Enabled: false
Style/FormatStringToken:
  Enabled: false
Style/FrozenStringLiteralComment:
  EnforcedStyle: never
Style/GuardClause:
  Enabled: false
Style/HashEachMethods:
  Enabled: true
Style/HashSyntax:
  EnforcedStyle: no_mixed_keys
Style/HashTransformKeys:
  Enabled: true
Style/HashTransformValues:
  Enabled: true
Style/IfInsideElse:
  Enabled: false
Style/IfUnlessModifier:
  Enabled: false
Style/InverseMethods:
  Enabled: false
Style/Lambda:
  Enabled: false
Style/LineEndConcatenation:
  Enabled: false
Style/MethodDefParentheses:
  Enabled: false
Style/MultilineBlockChain:
  Enabled: false
Style/MultilineMemoization:
  Enabled: false
Style/MultilineTernaryOperator:
  Enabled: false
Style/NegatedIf:
  EnforcedStyle: postfix
Style/NegatedWhile:
  Enabled: false
Style/Next:
  Enabled: false
Style/NonNilCheck:
  Enabled: false
Style/NumericPredicate:
  Enabled: false
Style/ParallelAssignment:
  Enabled: false
Style/PercentLiteralDelimiters:
  Enabled: false
Style/PerlBackrefs:
  Enabled: false
Style/RaiseArgs:
  EnforcedStyle: compact
Style/RedundantBegin:
  Enabled: false
Style/RedundantParentheses:
  Enabled: false
Style/RedundantReturn:
  Enabled: false
Style/RedundantSelf:
  Enabled: false
Style/RescueModifier:
  Enabled: false
Style/RescueStandardError:
  EnforcedStyle: implicit
Style/RegexpLiteral:
  AllowInnerSlashes: true
Style/SafeNavigation:
  Enabled: false
Style/SignalException:
  Enabled: false
Style/StringLiterals:
  Enabled: false
Style/SymbolArray:
  EnforcedStyle: brackets
Style/TrailingCommaInArguments:
  Enabled: false
Style/TrailingCommaInArrayLiteral:
  EnforcedStyleForMultiline: consistent_comma
Style/TrailingCommaInHashLiteral:
  EnforcedStyleForMultiline: consistent_comma
Style/WhileUntilDo:
  Enabled: false
Style/WhileUntilModifier:
  Enabled: false
Style/WordArray:
  Enabled: false
Style/YodaCondition:
  Enabled: false
Style/ZeroLengthPredicate:
  Enabled: false
