%{configs: [
  %{name: "default",
    files: %{
      included: ["example/lib/", "example/test/", "lib/", "src/", "test/"],
      excluded: [~r"/_build/", ~r"/deps/", ~r"/generated/", "test/fixtures/app/lib/"]
    },
    requires: [],
    check_for_updates: false,
    color: true,
    strict: true,

    # You can customize the parameters of any check by adding a second element
    # to the tuple.
    #
    # To disable a check put `false` as second element:
    #
    #     {Credo.Check.Design.DuplicatedCode, false}
    #
    checks: [
      {Credo.Check.Consistency.ExceptionNames},
      {Credo.Check.Consistency.LineEndings},
      {Credo.Check.Consistency.MultiAliasImportRequireUse, false},
      {Credo.Check.Consistency.SpaceAroundOperators},
      {Credo.Check.Consistency.SpaceInParentheses},
      {Credo.Check.Consistency.TabsOrSpaces},

      {Credo.Check.Design.AliasUsage, false},
      {Credo.Check.Design.DuplicatedCode, excluded_macros: []},

      {Credo.Check.Design.TagTODO},
      {Credo.Check.Design.TagFIXME},

      {Credo.Check.Readability.FunctionNames},
      {Credo.Check.Readability.LargeNumbers, only_greater_than: 99999},
      {Credo.Check.Readability.MaxLineLength, false},
      {Credo.Check.Readability.ModuleAttributeNames},
      {Credo.Check.Readability.ModuleDoc},
      {Credo.Check.Readability.ModuleNames},
      {Credo.Check.Readability.ParenthesesOnZeroArityDefs, false},  # Crashes credo; needs investigation
      {Credo.Check.Readability.ParenthesesInCondition},
      {Credo.Check.Readability.PredicateFunctionNames},
      {Credo.Check.Readability.SinglePipe},
      {Credo.Check.Readability.Specs, false},
      {Credo.Check.Readability.StringSigils},
      {Credo.Check.Readability.TrailingBlankLine},
      {Credo.Check.Readability.TrailingWhiteSpace},
      {Credo.Check.Readability.VariableNames},
      {Credo.Check.Readability.RedundantBlankLines},

      {Credo.Check.Refactor.ABCSize, false},
      {Credo.Check.Refactor.CondStatements},
      {Credo.Check.Refactor.DoubleBooleanNegation, false},
      {Credo.Check.Refactor.FunctionArity, max_arity: 6},
      {Credo.Check.Refactor.MatchInCondition},
      {Credo.Check.Refactor.PipeChainStart, false},
      {Credo.Check.Refactor.CyclomaticComplexity},
      {Credo.Check.Refactor.NegatedConditionsInUnless},
      {Credo.Check.Refactor.NegatedConditionsWithElse},
      {Credo.Check.Refactor.Nesting},
      {Credo.Check.Refactor.UnlessWithElse},
      {Credo.Check.Refactor.VariableRebinding, false},

      {Credo.Check.Warning.BoolOperationOnSameValues},
      {Credo.Check.Warning.IExPry},
      {Credo.Check.Warning.IoInspect, false},
      {Credo.Check.Warning.OperationOnSameValues},
      {Credo.Check.Warning.OperationWithConstantResult},
      {Credo.Check.Warning.UnusedEnumOperation},
      {Credo.Check.Warning.UnusedKeywordOperation},
      {Credo.Check.Warning.UnusedListOperation},
      {Credo.Check.Warning.UnusedStringOperation},
      {Credo.Check.Warning.UnusedTupleOperation},
    ]
  }
]}
