---
inherit_from: .rubocop_todo.yml

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

Jekyll/NoPutsAllowed:
  Exclude:
    - rake/*.rake

AllCops:
  TargetRubyVersion: 2.7
  Include:
    - lib/**/*.rb
    - test/**/*.rb
  Exclude:
    - bin/**/*
    - exe/**/*
    - benchmark/**/*
    - script/**/*
    - vendor/**/*
    - tmp/**/*

Gemspec/DeprecatedAttributeAssignment:
  Enabled: true
Gemspec/RequireMFA:
  Enabled: false

Layout/BeginEndAlignment:
  Enabled: true
Layout/EmptyComment:
  Enabled: false
Layout/EmptyLinesAroundAttributeAccessor:
  Enabled: true
Layout/EndAlignment:
  Severity: error
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:
    - !ruby/regexp /features\/.*.rb/
    - Rakefile
    - rake/*.rake
    - Gemfile
  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/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/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/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/RedundantSafeNavigation:
  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/UselessTimes:
  Enabled: true
Lint/Void:
  Exclude:
    - lib/jekyll/site.rb

Metrics/AbcSize:
  Max: 23
Metrics/BlockLength:
  Exclude:
    - test/**/*.rb
    - lib/jekyll/configuration.rb
    - rake/*.rake
Metrics/ClassLength:
  Exclude:
    - !ruby/regexp /features\/.*.rb$/
    - !ruby/regexp /test\/.*.rb$/
    - lib/jekyll/document.rb
    - lib/jekyll/site.rb
    - lib/jekyll/commands/serve.rb
    - lib/jekyll/configuration.rb
  Max: 240
Metrics/CyclomaticComplexity:
  Exclude:
    - lib/jekyll/utils.rb
    - lib/jekyll/commands/serve.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/AssertEmptyLiteral:
  Enabled: false
Minitest/AssertInDelta:
  Enabled: true
Minitest/AssertionInLifecycleHook:
  Enabled: true
Minitest/AssertKindOf:
  Enabled: true
Minitest/AssertOutput:
  Enabled: true
Minitest/AssertPathExists:
  Enabled: true
Minitest/AssertSilent:
  Enabled: true
Minitest/AssertWithExpectedArgument:
  Enabled: true
Minitest/LiteralAsActualArgument:
  Enabled: true
Minitest/TestMethodName:
  Enabled: false
Minitest/MultipleAssertions:
  Enabled: true
Minitest/RefuteInDelta:
  Enabled: true
Minitest/RefuteKindOf:
  Enabled: true
Minitest/RefutePathExists:
  Enabled: true
Minitest/UnreachableAssertion:
  Enabled: true
Minitest/UnspecifiedException:
  Enabled: true

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/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/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/CompoundHash:
  Enabled: true
Security/IoMethods:
  Enabled: true
Security/MarshalLoad:
  Exclude:
    - !ruby/regexp /test\/.*.rb$/
    - lib/jekyll/regenerator.rb
Security/YAMLLoad:
  Exclude:
    - !ruby/regexp /features\/.*.rb/
    - !ruby/regexp /test\/.*.rb$/

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/BisectedAttrAccessor:
  Enabled: true
Style/CaseLikeIf:
  Enabled: true
Style/StringChars:
  Enabled: true
Style/ClassAndModuleChildren:
  Exclude:
    - test/**/*.rb
Style/ClassEqualityComparison:
  Enabled: true
Style/CollectionCompact:
  Enabled: true
Style/CombinableLoops:
  Enabled: true
Style/DocumentDynamicEvalDefinition:
  Enabled: true
Style/Documentation:
  Enabled: false
Style/DoubleNegation:
  Enabled: false
Style/EmptyHeredoc:
  Enabled: true
Style/EndlessMethod:
  Enabled: true
Style/ExplicitBlockArgument:
  Enabled: false
Style/ExponentialNotation:
  Enabled: true
Style/EnvHome:
  Enabled: true
Style/FetchEnvVar:
  Enabled: false
Style/FileRead:
  Enabled: false
Style/FormatStringToken:
  Exclude:
    - lib/jekyll/utils/ansi.rb
    - lib/jekyll/liquid_renderer/table.rb
    - lib/jekyll/profiler.rb
Style/FrozenStringLiteralComment:
  EnforcedStyle: always
Style/FileWrite:
  Enabled: true
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/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/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/RedundantAssignment:
  Enabled: true
Style/RedundantFetchBlock:
  Enabled: false
Style/RedundantFileExtensionInRequire:
  Enabled: true
Style/RedundantInitialize:
  Enabled: true
  Exclude:
    - lib/jekyll/plugin.rb
Style/RedundantRegexpCharacterClass:
  Enabled: true
Style/RedundantRegexpEscape:
  Enabled: true
Style/RedundantSelfAssignment:
  Enabled: true
Style/RedundantSelfAssignmentBranch:
  Enabled: true
Style/RegexpLiteral:
  EnforcedStyle: percent_r
Style/RescueModifier:
  Enabled: false
Style/SafeNavigation:
  Exclude:
    - lib/jekyll/document.rb
Style/SignalException:
  EnforcedStyle: only_raise
Style/SingleArgumentDig:
  Enabled: true
Style/SlicingWithRange:
  Enabled: false
Style/SoleNestedConditional:
  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
