Skip to main content

rebar.config

{erl_opts, [
    debug_info,
    warnings_as_errors,
    warn_missing_spec
]}.

{deps, [
    {hackney, "4.2.1"},
    {livery, "0.2.5"}
]}.

{profiles, [
    {test, [
        {erl_opts, [
            debug_info,
            nowarn_export_all,
            nowarn_missing_spec
        ]}
    ]}
]}.

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

{dialyzer, [
    {warnings, [unknown]},
    {plt_apps, all_deps}
]}.

{cover_enabled, true}.
{cover_opts, [verbose]}.

{project_plugins, [
    {erlfmt, "1.7.0"},
    {rebar3_lint, "4.1.1"},
    rebar3_ex_doc
]}.

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

{ex_doc, [
    {source_url, <<"https://github.com/benoitc/livery_s3">>},
    {extras, [
        {"README.md", #{title => <<"Overview">>}},
        {"docs/features.md", #{title => <<"Features">>}},
        {"CHANGELOG.md", #{title => <<"Changelog">>}}
    ]},
    {main, <<"readme">>},
    {groups_for_modules, [
        {<<"Public API">>, [livery_s3]},
        {<<"Internals">>, [
            livery_s3_sigv4,
            livery_s3_uri,
            livery_s3_xml
        ]}
    ]}
]}.

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

{elvis, [
    #{
        dirs => ["src"],
        filter => "*.erl",
        rules => [
            %% livery_s3 is the intentional public facade (all S3 verbs
            %% live behind one module), like livery_client.
            {elvis_style, god_modules, #{ignore => [livery_s3]}},
            %% The configured client adapter is dispatched dynamically.
            {elvis_style, invalid_dynamic_call, #{ignore => [livery_s3]}},
            %% Internal helper types kept module-private on purpose.
            {elvis_style, export_used_types, disable},
            {elvis_style, no_spec_with_records, disable},
            {elvis_style, no_macros, disable},
            %% Distinct request/response shapes that share a case structure;
            %% keeping them apart is clearer.
            {elvis_style, dont_repeat_yourself, #{ignore => [livery_s3]}},
            %% xmerl SAX event tags (startElement/endElement) are an external
            %% API shape and are necessarily camelCase.
            {elvis_style, atom_naming_convention, #{ignore => [livery_s3_xml]}},
            {elvis_text_style, line_length, #{limit => 100}}
        ],
        ruleset => erl_files
    },
    #{
        dirs => ["."],
        filter => "rebar.config",
        ruleset => rebar_config
    }
]}.