%%-*- mode: erlang -*-
{profiles, [{test, [{deps, [{ proper, "1.4.0"}]}]}]}.
{erl_opts, [ {platform_define, "^R[0-9]+", erlang_deprecated_types}
             %% , warn_export_all
           , warn_export_vars
           , warn_obsolete_guard
           , warn_shadow_vars
           , warn_untyped_record
           , warn_unused_function
           , warn_unused_import
           , warnings_as_errors
           , warn_unused_record
           , warn_unused_vars
           ]}.
{edoc_opts, [{preprocess, true}]}.
{cover_enabled, true}.
{xref_checks, [ fail_on_warning
              , undefined_function_calls
              , deprecated_function_calls
              ]}.
{ deps
, [ {jsx, "3.1.0"}
  , {rfc3339, "0.2.2"}
  ]}.

{ project_plugins
, [ {rebar3_lint, "0.4.0"}
, {rebar3_proper, "0.12.1"}
  ]}.

{escript_name, jesse}.
{escript_emu_args, "%%! -noinput\n"}.

{ elvis
   , [#{ dirs => ["src", "test"]
       , filter => "*.erl"
       , rules => [ {elvis_text_style, line_length, #{ limit => 80
                                                     , skip_comments => false
                                                     }}
                  , {elvis_text_style, no_tabs}
                  , {elvis_text_style, no_trailing_whitespace}
                  , {elvis_style, macro_names, #{ regex => "^([A-Z][A-Za-z_0-9]+)$" }}
                  , {elvis_style, macro_module_names}
                  , {elvis_style, operator_spaces, #{rules => [ {right, ","}
                                                              , {right, "++"}
                                                              , {left, "++"}
                                                              ]}}
                  , {elvis_style, nesting_level, #{level => 4}} % see https://github.com/inaka/elvis/issues/361
                  , {elvis_style, god_modules, #{limit => 25}}
                  , {elvis_style, no_if_expression}
                  , {elvis_style, invalid_dynamic_call, #{ ignore => [elvis]
                                                         }}
                  , {elvis_style, used_ignored_variable}
                  , {elvis_style, no_behavior_info}
                  , { elvis_style
                    , module_naming_convention
                    , #{ regex => "^([a-z][a-z0-9]*_?)*(_SUITE)?$"
                       , ignore => []
                       }
                    }
                    %% , { elvis_style
                    %%   , function_naming_convention
                    %%   , #{ regex => "^([a-z][a-z0-9]*_?)*(_SUITE)?$"
                    %%      , ignore => []
                    %%      }
                    %%   }
                  , { elvis_style
                    , variable_naming_convention
                    , #{ regex => "^(_?[A-Z][0-9a-zA-Z_]*)$" % "^([A-Z][0-9a-zA-Z]*)$" FIXME
                       , ignore => []
                       }
                    }
                  , {elvis_style, state_record_and_type}
                  , {elvis_style, no_spec_with_records}
                  , {elvis_style, dont_repeat_yourself, #{ min_complexity => 250 % 10 FIXME
                                                         }}
                  , {elvis_style, max_module_length, #{ max_length => 1500
                                                      , ignore => []
                                                      , count_comments => true
                                                      , count_whitespace => false
                                                      }}
                  , {elvis_style, max_function_length, #{ max_length => 250
                                                        , count_comments => true
                                                        , count_whitespace => false
                                                        }}
                  , {elvis_style, no_debug_call, #{ debug_functions => [ {ct, pal}
                                                                       , {io, format, 1}
                                                                       , {io, format, 2}
                                                                       ]
                                                  , ignore => [jesse_tests_util]
                                                  }}
                  ]
       }
     , #{ dirs => ["."]
        , filter => "Makefile"
        , rules => [ {elvis_project, no_deps_master_erlang_mk, #{ignore => []}}
                   ]
        }
     , #{ dirs => ["."]
        , filter => "rebar.config"
        , rules => [ {elvis_project, no_deps_master_rebar, #{ignore => []}}
                   ]
        }
     ]
}.
