# -----------------------------------------------------------------------------
# This file has been formatted via a Rake Task configuring cops from
# RuboCop v1.57.2.
#
# To add more cops, paste configurations at the end of the file and run
# the rake task via `bundle exec rake rubocop:format_config`.
# -----------------------------------------------------------------------------

inherit_from: ".rubocop_todo.yml"

require:
- "./rubocop/jekyll"
- rubocop-minitest
- rubocop-performance
- rubocop-rake
- rubocop-rspec

# Directive for all cops
AllCops:
  TargetRubyVersion: 2.7
  Include:
  - lib/**/*.rb
  - test/**/*.rb
  Exclude:
  - benchmark/**/*
  - bin/**/*
  - exe/**/*
  - script/**/*
  - tmp/**/*
  - vendor/**/*

# Configure custom cop
Jekyll/NoPutsAllowed:
  Exclude:
  - rake/*.rake

# Configure built-in cops
# =======================

# Gemspec cops
# ----------------------------------------
Gemspec/DeprecatedAttributeAssignment:
  Enabled: true
Gemspec/DevelopmentDependencies:
  Enabled: false
Gemspec/RequireMFA:
  Enabled: false

# Layout cops
# ----------------------------------------
Layout/BeginEndAlignment:
  Enabled: true
Layout/EmptyComment:
  Enabled: false
Layout/EmptyLinesAroundAttributeAccessor:
  Enabled: true
Layout/EndAlignment:
  Severity: error
Layout/EndOfLine:
  Enabled: false
Layout/FirstArrayElementIndentation:
  EnforcedStyle: consistent
Layout/FirstHashElementIndentation:
  EnforcedStyle: consistent
Layout/HashAlignment:
  EnforcedHashRocketStyle: table
Layout/IndentationWidth:
  Severity: error
Layout/LineContinuationLeadingSpace:
  Enabled: true
Layout/LineContinuationSpacing:
  Enabled: true
Layout/LineEndStringConcatenationIndentation:
  Enabled: true
Layout/LineLength:
  Exclude:
  - Gemfile
  - Rakefile
  - features/**/*.rb
  - rake/**/*.rake
  Max: 100
  Severity: warning
Layout/MultilineMethodCallIndentation:
  EnforcedStyle: indented
Layout/MultilineOperationIndentation:
  EnforcedStyle: indented
Layout/SpaceAroundMethodCallOperator:
  Enabled: true
Layout/SpaceBeforeBrackets:
  Enabled: true
Layout/SpaceInsideHashLiteralBraces:
  Enabled: true
  Exclude:
  - test/**/*.rb

# Lint cops
# ----------------------------------------
Lint/AmbiguousAssignment:
  Enabled: true
Lint/AmbiguousOperatorPrecedence:
  Enabled: true
Lint/AmbiguousRange:
  Enabled: true
Lint/BinaryOperatorWithIdenticalOperands:
  Enabled: true
Lint/ConstantDefinitionInBlock:
  Enabled: true
  Exclude:
  - test/**/*.rb
Lint/ConstantOverwrittenInRescue:
  Enabled: true
Lint/DeprecatedConstants:
  Enabled: true
Lint/DeprecatedOpenSSLConstant:
  Enabled: true
Lint/DuplicateBranch:
  Enabled: true
Lint/DuplicateElsifCondition:
  Enabled: true
Lint/DuplicateMagicComment:
  Enabled: true
Lint/DuplicateMatchPattern:
  Enabled: true
Lint/DuplicateRegexpCharacterClassElement:
  Enabled: true
Lint/DuplicateRequire:
  Enabled: true
Lint/DuplicateRescueException:
  Enabled: true
Lint/EmptyBlock:
  Enabled: true
Lint/EmptyClass:
  Enabled: true
Lint/EmptyConditionalBody:
  Enabled: true
Lint/EmptyFile:
  Enabled: true
Lint/FloatComparison:
  Enabled: true
Lint/HashCompareByIdentity:
  Enabled: true
Lint/IdentityComparison:
  Enabled: true
Lint/LambdaWithoutLiteralBlock:
  Enabled: true
Lint/MissingSuper:
  Enabled: false
Lint/MixedCaseRange:
  Enabled: true
Lint/MixedRegexpCaptureTypes:
  Enabled: false
Lint/NestedPercentLiteral:
  Exclude:
  - test/test_site.rb
Lint/NoReturnInBeginEndBlocks:
  Enabled: true
Lint/NumberedParameterAssignment:
  Enabled: true
Lint/OrAssignmentToConstant:
  Enabled: true
Lint/OutOfRangeRegexpRef:
  Enabled: true
Lint/RaiseException:
  Enabled: true
Lint/RedundantDirGlobSort:
  Enabled: true
Lint/RedundantRegexpQuantifiers:
  Enabled: true
Lint/RedundantSafeNavigation:
  Enabled: true
Lint/RefinementImportMethods:
  Enabled: true
Lint/RequireRangeParentheses:
  Enabled: true
Lint/RequireRelativeSelfPath:
  Enabled: true
Lint/SelfAssignment:
  Enabled: true
Lint/StructNewOverride:
  Enabled: true
Lint/SymbolConversion:
  Enabled: true
Lint/ToEnumArguments:
  Enabled: false
Lint/TopLevelReturnWithArgument:
  Enabled: true
Lint/TrailingCommaInAttributeDeclaration:
  Enabled: true
Lint/TripleQuotes:
  Enabled: true
Lint/UnexpectedBlockArity:
  Enabled: true
Lint/UnmodifiedReduceAccumulator:
  Enabled: true
Lint/UnreachableCode:
  Severity: error
Lint/UnreachableLoop:
  Enabled: true
Lint/UselessMethodDefinition:
  Enabled: true
Lint/UselessRuby2Keywords:
  Enabled: true
Lint/UselessTimes:
  Enabled: true
Lint/Void:
  Exclude:
  - lib/jekyll/site.rb

# Metrics cops
# ----------------------------------------
Metrics/AbcSize:
  Max: 23
Metrics/BlockLength:
  Exclude:
  - lib/jekyll/configuration.rb
  - rake/**/*.rake
  - test/**/*.rb
Metrics/ClassLength:
  Exclude:
  - features/**/*.rb
  - lib/jekyll/commands/serve.rb
  - lib/jekyll/configuration.rb
  - lib/jekyll/document.rb
  - lib/jekyll/site.rb
  - test/**/*.rb
  Max: 240
Metrics/CollectionLiteralLength:
  Enabled: true
Metrics/CyclomaticComplexity:
  Exclude:
  - lib/jekyll/commands/serve.rb
  - lib/jekyll/utils.rb
  Max: 11
Metrics/MethodLength:
  CountComments: false
  Max: 20
  Severity: error
Metrics/ModuleLength:
  Exclude:
  - lib/jekyll/filters.rb
  Max: 240
Metrics/ParameterLists:
  Max: 4
Metrics/PerceivedComplexity:
  Max: 13

# Minitest cops
# ----------------------------------------
Minitest/AssertEmptyLiteral:
  Enabled: false
Minitest/AssertInDelta:
  Enabled: true
Minitest/AssertKindOf:
  Enabled: true
Minitest/AssertOperator:
  Enabled: false
Minitest/AssertOutput:
  Enabled: true
Minitest/AssertPathExists:
  Enabled: true
Minitest/AssertPredicate:
  Enabled: false
Minitest/AssertRaisesWithRegexpArgument:
  Enabled: true
Minitest/AssertSame:
  Enabled: true
Minitest/AssertSilent:
  Enabled: true
Minitest/AssertWithExpectedArgument:
  Enabled: true
Minitest/AssertionInLifecycleHook:
  Enabled: true
Minitest/DuplicateTestRun:
  Enabled: true
Minitest/EmptyLineBeforeAssertionMethods:
  Enabled: false
Minitest/LifecycleHooksOrder:
  Enabled: true
Minitest/LiteralAsActualArgument:
  Enabled: true
Minitest/MultipleAssertions:
  Enabled: true
Minitest/NonExecutableTestMethod:
  Enabled: true
Minitest/NonPublicTestMethod:
  Enabled: true
Minitest/RedundantMessageArgument:
  Enabled: true
Minitest/RefuteInDelta:
  Enabled: true
Minitest/RefuteKindOf:
  Enabled: true
Minitest/RefuteOperator:
  Enabled: false
Minitest/RefutePathExists:
  Enabled: true
Minitest/RefutePredicate:
  Enabled: false
Minitest/RefuteSame:
  Enabled: true
Minitest/ReturnInTestMethod:
  Enabled: true
Minitest/SkipEnsure:
  Enabled: true
Minitest/SkipWithoutReason:
  Enabled: true
Minitest/TestFileName:
  Enabled: true
  Exclude:
  - test/helper.rb
Minitest/TestMethodName:
  Enabled: false
Minitest/UnreachableAssertion:
  Enabled: true
Minitest/UnspecifiedException:
  Enabled: true
Minitest/UselessAssertion:
  Enabled: true

# Naming cops
# ----------------------------------------
Naming/FileName:
  Enabled: false
Naming/HeredocDelimiterNaming:
  Exclude:
  - test/**/*.rb
Naming/MemoizedInstanceVariableName:
  Exclude:
  - lib/jekyll/convertible.rb
  - lib/jekyll/drops/site_drop.rb
  - lib/jekyll/drops/unified_payload_drop.rb
  - lib/jekyll/page_without_a_file.rb

# Performance cops
# ----------------------------------------
Performance/AncestorsInclude:
  Enabled: false
Performance/ArraySemiInfiniteRangeSlice:
  Enabled: true
Performance/BigDecimalWithNumericArgument:
  Enabled: true
Performance/BlockGivenWithExplicitBlock:
  Enabled: true
Performance/ChainArrayAllocation:
  Enabled: true
Performance/CollectionLiteralInLoop:
  Enabled: true
Performance/ConstantRegexp:
  Enabled: true
Performance/MapCompact:
  Enabled: true
Performance/MapMethodChain:
  Enabled: true
Performance/MethodObjectAsBlock:
  Enabled: true
Performance/RedundantEqualityComparisonBlock:
  Enabled: false
Performance/RedundantSortBlock:
  Enabled: true
Performance/RedundantSplitRegexpArgument:
  Enabled: true
Performance/RedundantStringChars:
  Enabled: true
Performance/ReverseFirst:
  Enabled: true
Performance/SortReverse:
  Enabled: false
Performance/Squeeze:
  Enabled: true
Performance/StringIdentifierArgument:
  Enabled: true
Performance/StringInclude:
  Enabled: true
  Exclude:
  - lib/jekyll/utils/platforms.rb
Performance/Sum:
  Enabled: true

# Security cops
# ----------------------------------------
Security/CompoundHash:
  Enabled: true
Security/IoMethods:
  Enabled: true
Security/MarshalLoad:
  Exclude:
  - lib/jekyll/regenerator.rb
  - test/**/*.rb
Security/YAMLLoad:
  Exclude:
  - features/**/*.rb
  - test/**/*.rb

# Style cops
# ----------------------------------------
Style/AccessModifierDeclarations:
  Enabled: false
Style/AccessorGrouping:
  Enabled: true
Style/Alias:
  EnforcedStyle: prefer_alias_method
Style/AndOr:
  Severity: error
Style/ArgumentsForwarding:
  Enabled: false
Style/ArrayCoercion:
  Enabled: true
Style/ArrayIntersect:
  Enabled: true
Style/BisectedAttrAccessor:
  Enabled: true
Style/CaseLikeIf:
  Enabled: true
Style/ClassAndModuleChildren:
  Exclude:
  - test/**/*.rb
Style/ClassEqualityComparison:
  Enabled: true
Style/CollectionCompact:
  Enabled: true
Style/CombinableLoops:
  Enabled: true
Style/ConcatArrayLiterals:
  Enabled: true
Style/DirEmpty:
  Enabled: true
Style/DocumentDynamicEvalDefinition:
  Enabled: true
Style/Documentation:
  Enabled: false
Style/DoubleNegation:
  Enabled: false
Style/EmptyHeredoc:
  Enabled: true
Style/EndlessMethod:
  Enabled: true
Style/EnvHome:
  Enabled: true
Style/ExactRegexpMatch:
  Enabled: true
Style/ExplicitBlockArgument:
  Enabled: false
Style/ExponentialNotation:
  Enabled: true
Style/FetchEnvVar:
  Enabled: false
Style/FileEmpty:
  Enabled: true
Style/FileRead:
  Enabled: false
Style/FileWrite:
  Enabled: true
Style/FormatStringToken:
  Exclude:
  - lib/jekyll/liquid_renderer/table.rb
  - lib/jekyll/profiler.rb
  - lib/jekyll/utils/ansi.rb
Style/FrozenStringLiteralComment:
  EnforcedStyle: always
Style/GlobalStdStream:
  Enabled: true
Style/GuardClause:
  Enabled: false
Style/HashAsLastArrayItem:
  Enabled: true
Style/HashConversion:
  Enabled: true
Style/HashEachMethods:
  Enabled: true
Style/HashExcept:
  Enabled: true
Style/HashLikeCase:
  Enabled: true
Style/HashSyntax:
  EnforcedStyle: hash_rockets
  Severity: error
Style/HashTransformKeys:
  Enabled: false
Style/HashTransformValues:
  Enabled: true
Style/IfWithBooleanLiteralBranches:
  Enabled: true
Style/KeywordParametersOrder:
  Enabled: true
Style/MagicCommentFormat:
  Enabled: true
Style/MapCompactWithConditionalBlock:
  Enabled: true
Style/MapToHash:
  Enabled: true
Style/MinMaxComparison:
  Enabled: true
Style/MixinUsage:
  Exclude:
  - test/helper.rb
Style/ModuleFunction:
  Enabled: false
Style/MultilineTernaryOperator:
  Severity: error
Style/NegatedIfElseCondition:
  Enabled: true
Style/NestedFileDirname:
  Enabled: true
Style/NilLambda:
  Enabled: true
Style/ObjectThen:
  Enabled: true
Style/OperatorMethodCall:
  Enabled: true
Style/OptionalBooleanParameter:
  Enabled: true
  Exclude:
  - lib/jekyll/log_adapter.rb
Style/PercentLiteralDelimiters:
  PreferredDelimiters:
    "%Q": "{}"
    "%W": "()"
    "%q": "{}"
    "%r": "!!"
    "%s": "()"
    "%w": "()"
    "%x": "()"
Style/QuotedSymbols:
  Enabled: true
Style/RedundantArgument:
  Enabled: true
Style/RedundantArrayConstructor:
  Enabled: true
Style/RedundantAssignment:
  Enabled: true
Style/RedundantConstantBase:
  Enabled: true
Style/RedundantCurrentDirectoryInPath:
  Enabled: true
Style/RedundantDoubleSplatHashBraces:
  Enabled: true
Style/RedundantEach:
  Enabled: true
Style/RedundantFetchBlock:
  Enabled: false
Style/RedundantFileExtensionInRequire:
  Enabled: true
Style/RedundantFilterChain:
  Enabled: true
Style/RedundantHeredocDelimiterQuotes:
  Enabled: true
Style/RedundantInitialize:
  Enabled: true
  Exclude:
  - lib/jekyll/plugin.rb
Style/RedundantLineContinuation:
  Enabled: true
Style/RedundantRegexpArgument:
  Enabled: true
Style/RedundantRegexpCharacterClass:
  Enabled: true
Style/RedundantRegexpConstructor:
  Enabled: true
Style/RedundantRegexpEscape:
  Enabled: true
Style/RedundantSelfAssignment:
  Enabled: true
Style/RedundantSelfAssignmentBranch:
  Enabled: true
Style/RedundantStringEscape:
  Enabled: true
Style/RegexpLiteral:
  EnforcedStyle: percent_r
Style/RescueModifier:
  Enabled: false
Style/ReturnNilInPredicateMethodDefinition:
  Enabled: true
Style/SafeNavigation:
  Exclude:
  - lib/jekyll/document.rb
  - lib/jekyll/page.rb
Style/SignalException:
  EnforcedStyle: only_raise
Style/SingleArgumentDig:
  Enabled: true
Style/SingleLineDoEndBlock:
  Enabled: true
Style/SlicingWithRange:
  Enabled: false
Style/SoleNestedConditional:
  Enabled: true
Style/StringChars:
  Enabled: true
Style/StringConcatenation:
  Enabled: true
  Exclude:
  - lib/jekyll/commands/*.rb
  - test/**/*.rb
Style/StringLiterals:
  EnforcedStyle: double_quotes
Style/StringLiteralsInInterpolation:
  EnforcedStyle: double_quotes
Style/SwapValues:
  Enabled: true
Style/SymbolArray:
  EnforcedStyle: brackets
Style/TrailingCommaInArrayLiteral:
  EnforcedStyleForMultiline: consistent_comma
Style/TrailingCommaInHashLiteral:
  EnforcedStyleForMultiline: consistent_comma
