{erl_opts, [
    debug_info,
    inline,
    inline_list_funcs,
    warnings_as_errors,
    warn_export_all,
    warn_shadow_vars,
    warn_unused_import,
    warn_unused_function,
    warn_bif_clash,
    warn_unused_record,
    warn_deprecated_function,
    warn_obsolete_guard,
    warn_export_vars,
    warn_exported_vars,
    % warn_unused_vars, warn_untyped_record, warn_missing_spec, warn_missing_doc,
    % %% Disabled because of ASN1 generated code
    {feature, maybe_expr, enable}
]}.

{project_plugins, [
    {rebar3_depup, "~> 0.4"},
    {rebar3_hex, "~> 7.0"},
    {rebar3_ex_doc, "~> 0.2"},
    {rebar3_lint, "~> 4.1"},
    {erlfmt, "~> 1.7"},
    {covertool, "~> 2.0"}
]}.

{deps, [{base32, "~> 1.0"}]}.

{plugins, [{provider_asn1, "~> 0.4"}]}.

{profiles, [
    {test, [
        {erl_opts, [nowarn_export_all, nowarn_missing_spec, nowarn_missing_doc]},
        {eunit_opts, [verbose]},
        {covertool, [{coverdata_files, ["eunit.coverdata", "ct.coverdata"]}]},
        {cover_opts, [verbose, {min_coverage, 75}]},
        {cover_enabled, true},
        {cover_export_enabled, true}
    ]}
]}.

{provider_hooks, [
    {pre, [{compile, {asn, compile}}]},
    {post, [{clean, {asn, clean}}]}
]}.

{dialyzer, [
    {warnings, [
        no_return,
        unmatched_returns,
        error_handling,
        unknown
    ]},
    {plt_extra_apps, [asn1]}
]}.

{xref_checks, [
    locals_not_used,
    undefined_functions,
    undefined_function_calls,
    {deprecated_function_calls, next_major_release},
    {deprecated_functions, next_major_release}
]}.

{hex, [{doc, #{provider => ex_doc}}]}.

{ex_doc, [
    {source_url, <<"https://github.com/dnsimple/dns_erlang">>},
    {main, <<"readme">>},
    {extras, [<<"README.md">>, <<"LICENSE">>]}
]}.

{erlfmt, [
    write,
    {exclude_files, ["include/DNS-ASN1.hrl", "src/DNS-ASN1.erl"]}
]}.

{elvis, [
    #{
        dirs => ["src"],
        filter => "*.erl",
        rules => [
            %% TODO: fix
            {elvis_style, dont_repeat_yourself, #{min_complexity => 12}},
            %% NOTE: keep
            {elvis_style, private_data_types, #{ignore => [dns]}},
            {elvis_style, no_throw, disable}
        ],
        ruleset => erl_files,
        ignore => ['DNS-ASN1']
    },
    #{
        dirs => ["include"],
        filter => "*.hrl",
        ruleset => hrl_files,
        ignore => ["DNS-ASN1.hrl"],
        rules => [
            {elvis_style, no_nested_hrls, disable}
        ]
    },
    #{
        dirs => ["."],
        filter => "rebar.config",
        ruleset => rebar_config
    }
]}.
