%% -*- mode: erlang -*-
{minimum_otp_vsn, "26"}.

{erl_opts, [
    debug_info,
    warn_unused_vars,
    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,
    strict_validation,
    warn_export_vars,
    warn_exported_vars
    %warn_missing_spec, warn_untyped_record, <- Added dynamically for OTP >=27 in rebar.config.script
]}.

{deps, [
    {ddskerl, "0.4.1"}
]}.
{shell, [{apps, [prometheus]}]}.

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

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

{profiles, [
    {test, [
        {erl_opts, [nowarn_missing_spec]},
        {eunit_compile_opts, [{src_dirs, ["src", "test/eunit"]}]},
        {eunit_opts, [verbose]},
        {covertool, [{coverdata_files, ["ct.coverdata"]}]},
        {cover_opts, [verbose, {min_coverage, 95}]},
        {cover_enabled, true},
        {cover_export_enabled, true},
        {cover_excl_mods, [prometheus_model, prometheus]}
    ]},
    {gpb, [
        {plugins, [{rebar3_gpb_plugin, "2.23.2"}]},
        {provider_hooks, [
            {pre, [{compile, {protobuf, compile}}]},
            {post, [{clean, {protobuf, clean}}]}
        ]},
        {gpb_opts, [
            {i, "src/model"},
            {o_erl, "src/model"},
            {o_hrl, "include"},
            defs_as_proplists,
            strings_as_binaries,
            type_specs
        ]}
    ]},
    {benchmark, [
        {src_dirs, ["src", "benchmark"]},
        {deps, [
            {'erlang-color',
                {git, "https://github.com/julianduque/erlang-color", {branch, "master"}}}
        ]}
    ]}
]}.

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

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

{ex_doc, [
    {source_url, <<"https://github.com/prometheus-erl/prometheus.erl">>},
    {main, <<"readme">>},
    {extras, [
        {'README.md', #{title => <<"Overview">>}},
        {'LICENSE', #{title => <<"License">>}}
    ]}
]}.

{erlfmt, [
    write,
    {files, [
        "include/**/*.{hrl,erl,app.src}",
        "src/**/*.{hrl,erl,app.src}",
        "test/**/*.{hrl,erl,app.src}",
        "rebar.config.script",
        "rebar.config"
    ]},
    {exclude_files, [
        "src/model/prometheus_model.erl",
        "include/prometheus_model.hrl"
    ]}
]}.

{elvis, [
    #{
        dirs => [
            "src",
            "src/collectors",
            "src/collectors/vm",
            "src/contrib",
            "src/formats",
            "src/metrics"
        ],
        filter => "*.erl",
        rules => [
            {elvis_text_style, line_length, #{limit => 120, skip_comments => false}},
            {elvis_style, consistent_generic_type, #{preferred_type => term}},
            {elvis_style, invalid_dynamic_call, #{
                ignore => [
                    prometheus_misc,
                    prometheus_registry,
                    prometheus_sup
                ]
            }},
            {elvis_style, god_modules, #{limit => 40}},
            {elvis_style, dont_repeat_yourself, #{min_complexity => 15}},
            {elvis_style, no_catch_expressions, disable}
        ],
        ruleset => erl_files
    },
    #{
        dirs => ["src/model"],
        filter => "prometheus_model_helpers.erl",
        rules => [
            {elvis_text_style, line_length, #{limit => 120}},
            {elvis_style, invalid_dynamic_call, #{
                ignore => [
                    %% FIXME: why create_mf calls collect_metrics??
                    prometheus_model_helpers
                ]
            }},
            {elvis_style, god_modules, #{limit => 40}}
        ],
        ruleset => erl_files
    },
    #{
        dirs => ["test/eunit", "test/eunit/format", "test/eunit/contrib", "test/eunit/metric"],
        filter => "*.erl",
        rules => [
            {elvis_text_style, line_length, #{limit => 120}},
            {elvis_style, invalid_dynamic_call, #{ignore => []}},
            {elvis_style, god_modules, #{limit => 40}},
            %% looks like eunit generates underscored vars
            {elvis_style, variable_naming_convention, #{regex => "^([A-Z_][0-9a-zA-Z_]*)$"}},
            {elvis_style, dont_repeat_yourself, #{min_complexity => 200}},
            {elvis_style, no_block_expressions, disable}
        ],
        ruleset => erl_files
    },
    #{
        dirs => ["."],
        filter => "rebar.config",
        ruleset => rebar_config
    }
]}.
