{minimum_otp_vsn, "27"}.
{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
    {i, "scripts"}
]}.

{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, [
        {deps, [{proper, "~> 1.5"}]},
        {erl_opts, [nowarn_export_all, nowarn_missing_spec, nowarn_missing_doc]},
        {eunit_opts, [verbose]},
        {covertool, [{coverdata_files, ["eunit.coverdata", "ct.coverdata"]}]},
        {cover_excl_mods, [dns_zone_lexer, dns_zone_parser]},
        {cover_opts, [verbose, {min_coverage, 80}]},
        {cover_export_enabled, true},
        {cover_enabled, true}
    ]}
]}.

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

{pre_hooks, [
    %% Generate JSON_FORMAT.md before ex_doc
    {compile, "escript scripts/generate_json_docs.escript --output src/JSON_FORMAT.md || true"},
    {edoc, "escript scripts/generate_json_docs.escript --output src/JSON_FORMAT.md || true"}
]}.

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

{xref_ignores, [dns_zone_lexer, dns_zone_parser]}.
{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, [
    {warnings_as_errors, true},
    {source_url, ~"https://github.com/dnsimple/dns_erlang"},
    {main, ~"readme"},
    {extras, [
        ~"README.md",
        ~"SUPPORTED_RFCS.md",
        ~"CHANGELOG.md",
        ~"LICENSE"
    ]},
    %% Exclude generated modules: DNS-ASN1, dns_zone_lexer, dns_zone_parser
    {filter_modules, ~"^(?!DNS-ASN1$|dns_zone_lexer$|dns_zone_parser$)"}
]}.

{erlfmt, [
    write,
    {files, ["{src,include,test,scripts}/*.{hrl,erl,escript}", "rebar.config"]},
    {exclude_files, [
        "include/DNS-ASN1.hrl",
        "src/DNS-ASN1.erl",
        "src/dns_zone_lexer.erl",
        "src/dns_zone_parser.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]}}
        ],
        ruleset => erl_files,
        ignore => ['DNS-ASN1', dns_zone_lexer, dns_zone_parser]
    },
    #{
        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
    }
]}.
