%{
  configs: [
    %{
      checks: %{
        enabled: [
          # Consistency
          {Credo.Check.Consistency.ExceptionNames},
          {Credo.Check.Consistency.LineEndings},
          {Credo.Check.Consistency.MultiAliasImportRequireUse},
          {Credo.Check.Consistency.ParameterPatternMatching, [force: :before]},
          {Credo.Check.Consistency.SpaceAroundOperators},
          {Credo.Check.Consistency.SpaceInParentheses},
          {Credo.Check.Consistency.TabsOrSpaces},
          {Credo.Check.Consistency.UnusedVariableNames, false},

          # Design
          {Credo.Check.Design.AliasUsage,
           [if_called_more_often_than: 1, if_nested_deeper_than: 2]},
          {Credo.Check.Design.DuplicatedCode},
          {Credo.Check.Design.SkipTestWithoutComment},
          {Credo.Check.Design.TagFIXME},
          {Credo.Check.Design.TagTODO, false},

          # Readability
          {Credo.Check.Readability.AliasAs},
          {Credo.Check.Readability.AliasOrder},
          {Credo.Check.Readability.BlockPipe, false},
          {Credo.Check.Readability.FunctionNames},
          {Credo.Check.Readability.ImplTrue},
          {Credo.Check.Readability.LargeNumbers},
          {Credo.Check.Readability.MaxLineLength},
          {Credo.Check.Readability.ModuleAttributeNames},
          {Credo.Check.Readability.ModuleDoc, false},
          {Credo.Check.Readability.ModuleNames},
          {Credo.Check.Readability.MultiAlias},
          {Credo.Check.Readability.NestedFunctionCalls, false},
          {Credo.Check.Readability.OneArityFunctionInPipe},
          {Credo.Check.Readability.OnePipePerLine, false},
          {Credo.Check.Readability.ParenthesesInCondition},
          {Credo.Check.Readability.ParenthesesOnZeroArityDefs},
          {Credo.Check.Readability.PipeIntoAnonymousFunctions, false},
          {Credo.Check.Readability.PredicateFunctionNames},
          {Credo.Check.Readability.PreferImplicitTry},
          {Credo.Check.Readability.PreferUnquotedAtoms, false},
          {Credo.Check.Readability.RedundantBlankLines},
          {Credo.Check.Readability.Semicolons},
          {Credo.Check.Readability.SeparateAliasRequire},
          {Credo.Check.Readability.SingleFunctionToBlockPipe},
          {Credo.Check.Readability.SinglePipe, false},
          {Credo.Check.Readability.SpaceAfterCommas},
          {Credo.Check.Readability.Specs, false},
          {Credo.Check.Readability.StrictModuleLayout},
          {Credo.Check.Readability.StringSigils},
          {Credo.Check.Readability.TrailingBlankLine},
          {Credo.Check.Readability.TrailingWhiteSpace},
          {Credo.Check.Readability.UnnecessaryAliasExpansion},
          {Credo.Check.Readability.VariableNames},
          {Credo.Check.Readability.WithCustomTaggedTuple, false},
          {Credo.Check.Readability.WithSingleClause},

          # Refactor
          {Credo.Check.Refactor.ABCSize, false},
          {Credo.Check.Refactor.AppendSingleItem},
          {Credo.Check.Refactor.Apply},
          {Credo.Check.Refactor.CaseTrivialMatches, false},
          {Credo.Check.Refactor.CondStatements},
          {Credo.Check.Refactor.CyclomaticComplexity},
          {Credo.Check.Refactor.DoubleBooleanNegation},
          {Credo.Check.Refactor.FilterCount},
          {Credo.Check.Refactor.FilterFilter},
          {Credo.Check.Refactor.FilterReject},
          {Credo.Check.Refactor.FunctionArity},
          {Credo.Check.Refactor.IoPuts},
          {Credo.Check.Refactor.LongQuoteBlocks},
          {Credo.Check.Refactor.MapInto, false},
          {Credo.Check.Refactor.MapJoin},
          {Credo.Check.Refactor.MapMap},
          {Credo.Check.Refactor.MatchInCondition},
          {Credo.Check.Refactor.ModuleDependencies, false},
          {Credo.Check.Refactor.NegatedConditionsInUnless},
          {Credo.Check.Refactor.NegatedConditionsWithElse},
          {Credo.Check.Refactor.NegatedIsNil},
          {Credo.Check.Refactor.Nesting},
          {Credo.Check.Refactor.PassAsyncInTestCases},
          {Credo.Check.Refactor.PerceivedComplexity, false},
          {Credo.Check.Refactor.PipeChainStart, false},
          {Credo.Check.Refactor.RedundantWithClauseResult},
          {Credo.Check.Refactor.RejectFilter},
          {Credo.Check.Refactor.RejectReject},
          {Credo.Check.Refactor.UnlessWithElse},
          {Credo.Check.Refactor.VariableRebinding},
          {Credo.Check.Refactor.WithClauses},

          # Warning
          {Credo.Check.Warning.ApplicationConfigInModuleAttribute},
          {Credo.Check.Warning.BoolOperationOnSameValues},
          {Credo.Check.Warning.Dbg},
          {Credo.Check.Warning.ExpensiveEmptyEnumCheck},
          {Credo.Check.Warning.ForbiddenModule},
          {Credo.Check.Warning.IExPry},
          {Credo.Check.Warning.IoInspect},
          {Credo.Check.Warning.LazyLogging, false},
          {Credo.Check.Warning.LeakyEnvironment},
          {Credo.Check.Warning.MapGetUnsafePass},
          {Credo.Check.Warning.MissedMetadataKeyInLoggerConfig},
          {Credo.Check.Warning.MixEnv},
          {Credo.Check.Warning.OperationOnSameValues},
          {Credo.Check.Warning.OperationWithConstantResult},
          {Credo.Check.Warning.RaiseInsideRescue},
          {Credo.Check.Warning.SpecWithStruct},
          {Credo.Check.Warning.UnsafeExec},
          {Credo.Check.Warning.UnsafeToAtom},
          {Credo.Check.Warning.UnusedEnumOperation},
          {Credo.Check.Warning.UnusedFileOperation},
          {Credo.Check.Warning.UnusedKeywordOperation},
          {Credo.Check.Warning.UnusedListOperation},
          {Credo.Check.Warning.UnusedPathOperation},
          {Credo.Check.Warning.UnusedRegexOperation},
          {Credo.Check.Warning.UnusedStringOperation},
          {Credo.Check.Warning.UnusedTupleOperation},
          {Credo.Check.Warning.WrongTestFileExtension}
        ]
      },
      files: %{
        included: [
          ".credo.exs",
          ".formatter.exs",
          "config",
          "lib",
          "mix.exs",
          "test"
        ]
      },
      name: "default",
      strict: true
    }
  ]
}
