require:
  - rubocop-rails

AllCops:
  TargetRubyVersion: 2.4
  Exclude:
  - 'spec/**/*'
  - 'db/**/*'
  - 'app/views/**/*'
  - 'config/**/*'
  - 'bin/*'
  - 'Rakefile'
  - 'node_modules/**/*'
  - 'Vagrantfile'
  - 'vendor/**/*'
  - 'lib/json_ld/*'
  - 'lib/templates/**/*'

Bundler/OrderedGems:
  Enabled: false

Layout/AccessModifierIndentation:
  EnforcedStyle: indent

Layout/EmptyLineAfterMagicComment:
  Enabled: false

Layout/EmptyLineAfterGuardClause:
  Enabled: false

Layout/EmptyLinesAroundAttributeAccessor:
  Enabled: true

Layout/HashAlignment:
  Enabled: false
  # EnforcedHashRocketStyle: table
  # EnforcedColonStyle: table

Layout/SpaceAroundMethodCallOperator:
  Enabled: true

Layout/SpaceInsideHashLiteralBraces:
  EnforcedStyle: space

Lint/DeprecatedOpenSSLConstant:
  Enabled: true

Lint/DuplicateElsifCondition:
  Enabled: true

Lint/MixedRegexpCaptureTypes:
  Enabled: true

Lint/RaiseException:
  Enabled: true

Lint/StructNewOverride:
  Enabled: true

Lint/UselessAccessModifier:
  ContextCreatingMethods:
    - class_methods

Metrics/AbcSize:
  Max: 100
  Exclude:
    - 'lib/mastodon/*_cli.rb'

Metrics/BlockLength:
  Max: 55
  Exclude:
    - 'lib/tasks/**/*'
    - 'lib/mastodon/*_cli.rb'

Metrics/BlockNesting:
  Max: 3
  Exclude:
    - 'lib/mastodon/*_cli.rb'

Metrics/ClassLength:
  CountComments: false
  Max: 400
  Exclude:
    - 'lib/mastodon/*_cli.rb'

Metrics/CyclomaticComplexity:
  Max: 25
  Exclude:
    - 'lib/mastodon/*_cli.rb'

Layout/LineLength:
  AllowURI: true
  Enabled: false

Metrics/MethodLength:
  CountComments: false
  Max: 65
  Exclude:
    - 'lib/mastodon/*_cli.rb'

Metrics/ModuleLength:
  CountComments: false
  Max: 200

Metrics/ParameterLists:
  Max: 5
  CountKeywordArgs: true

Metrics/PerceivedComplexity:
  Max: 25

Naming/MemoizedInstanceVariableName:
  Enabled: false

Naming/MethodParameterName:
  Enabled: true

Rails:
  Enabled: true

Rails/ApplicationController:
  Enabled: false
  Exclude:
    - 'app/controllers/well_known/**/*.rb'

Rails/BelongsTo:
  Enabled: false

Rails/ContentTag:
  Enabled: false

Rails/EnumHash:
  Enabled: false

Rails/Exit:
  Exclude:
    - 'lib/mastodon/*'
    - 'lib/cli.rb'

Rails/FilePath:
  Enabled: false

Rails/HasAndBelongsToMany:
  Enabled: false

Rails/HasManyOrHasOneDependent:
  Enabled: false

Rails/HelperInstanceVariable:
  Enabled: false

Rails/HttpStatus:
  Enabled: false

Rails/IndexBy:
  Enabled: false

Rails/InverseOf:
  Enabled: false

Rails/LexicallyScopedActionFilter:
  Enabled: false

Rails/OutputSafety:
  Enabled: true

Rails/RakeEnvironment:
  Enabled: false

Rails/RedundantForeignKey:
  Enabled: false

Rails/SkipsModelValidations:
  Enabled: false

Rails/UniqueValidationWithoutIndex:
  Enabled: false

Style/AccessorGrouping:
  Enabled: true

Style/AccessModifierDeclarations:
  Enabled: false

Style/ArrayCoercion:
  Enabled: true

Style/BisectedAttrAccessor:
  Enabled: true

Style/CaseLikeIf:
  Enabled: false

Style/ClassAndModuleChildren:
  Enabled: false

Style/CollectionMethods:
  Enabled: true
  PreferredMethods:
    find_all: 'select'

Style/Documentation:
  Enabled: false

Style/DoubleNegation:
  Enabled: true

Style/ExpandPathArguments:
  Enabled: false

Style/ExponentialNotation:
  Enabled: true

Style/FormatString:
  Enabled: false

Style/FormatStringToken:
  Enabled: false

Style/FrozenStringLiteralComment:
  Enabled: true

Style/GuardClause:
  Enabled: false

Style/HashAsLastArrayItem:
  Enabled: false

Style/HashEachMethods:
  Enabled: true

Style/HashLikeCase:
  Enabled: true

Style/HashTransformKeys:
  Enabled: true

Style/HashTransformValues:
  Enabled: false

Style/IfUnlessModifier:
  Enabled: false

Style/InverseMethods:
  Enabled: false

Style/Lambda:
  Enabled: false

Style/MutableConstant:
  Enabled: false

Style/PercentLiteralDelimiters:
  PreferredDelimiters:
    '%i': '()'
    '%w': '()'

Style/PerlBackrefs:
  AutoCorrect: false

Style/RedundantAssignment:
  Enabled: false

Style/RedundantFetchBlock:
  Enabled: true

Style/RedundantFileExtensionInRequire:
  Enabled: true

Style/RedundantRegexpCharacterClass:
  Enabled: false

Style/RedundantRegexpEscape:
  Enabled: false

Style/RedundantReturn:
  Enabled: true

Style/RegexpLiteral:
  Enabled: false

Style/RescueStandardError:
  Enabled: false

Style/SignalException:
  Enabled: false

Style/SlicingWithRange:
  Enabled: true

Style/SymbolArray:
  Enabled: false

Style/TrailingCommaInArrayLiteral:
  EnforcedStyleForMultiline: 'comma'

Style/TrailingCommaInHashLiteral:
  EnforcedStyleForMultiline: 'comma'

Style/UnpackFirst:
  Enabled: false