{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_missing_doc,
    % Can't enable due to autogenerated code from lexers and public_key
    % warn_missing_spec, warn_untyped_record,
    {i, "scripts"}
]}.

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

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

{profiles, [
    {test, [
        {deps, [{proper, "~> 1.5"}]},
        {erl_opts, [nowarn_export_all, nowarn_missing_spec, nowarn_missing_doc]},
        {covertool, [{coverdata_files, ["ct.coverdata"]}]},
        {cover_excl_mods, [dns_zone_lexer, dns_zone_parser]},
        {cover_opts, [verbose, {min_coverage, 85}]},
        {cover_export_enabled, true},
        {cover_enabled, true}
    ]}
]}.

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

{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_zone_lexer, dns_zone_parser
    {filter_modules, ~"^(?!dns_zone_lexer$|dns_zone_parser$)"}
]}.

{erlfmt, [
    write,
    {files, ["{src,include,test,scripts}/*.{hrl,erl,app.src,escript}", "rebar.config"]},
    {exclude_files, [
        "src/dns_zone_lexer.erl",
        "src/dns_zone_parser.erl"
    ]}
]}.

{elvis, [
    {config, [
        #{
            files => ["src/**/*.erl"],
            rules => [
                {elvis_style, dont_repeat_yourself, disable},
                {elvis_style, private_data_types, #{ignore => [dns, dnssec]}}
            ],
            ruleset => erl_files,
            ignore => [dns_zone_lexer, dns_zone_parser]
        },
        #{
            files => ["include/**/*.hrl"],
            ruleset => hrl_files,
            rules => [{elvis_style, no_includes, disable}]
        },
        #{
            files => ["rebar.config"],
            ruleset => rebar_config
        }
    ]}
]}.
