Current section

Files

Jump to
elvis_core src elvis_rulesets.erl
Raw

src/elvis_rulesets.erl

-module(elvis_rulesets).
-export([rules/1,
set_rulesets/1]).
-spec set_rulesets(#{atom() => list()}) -> ok.
set_rulesets(Rulesets) ->
Tid = ensure_clean_table(),
lists:foreach(fun({Name, Rules}) ->
true = ets:insert(Tid, {Name, Rules})
end, maps:to_list(Rulesets)).
-spec rules(Group::atom()) -> [elvis_core:rule()].
rules(erl_files) ->
lists:map(
fun ({Mod, Rule}) ->
{Mod, Rule, apply(Mod, default, [Rule])}
end,
[ {elvis_text_style, line_length}
, {elvis_text_style, no_tabs}
, {elvis_text_style, no_trailing_whitespace}
, {elvis_style, macro_names}
, {elvis_style, macro_module_names}
, {elvis_style, operator_spaces}
, {elvis_style, nesting_level}
, {elvis_style, god_modules}
, {elvis_style, no_if_expression}
, {elvis_style, invalid_dynamic_call}
, {elvis_style, used_ignored_variable}
, {elvis_style, no_behavior_info}
, {elvis_style, module_naming_convention}
, {elvis_style, function_naming_convention}
, {elvis_style, state_record_and_type}
, {elvis_style, no_spec_with_records}
, {elvis_style, dont_repeat_yourself}
, {elvis_style, no_debug_call}
, {elvis_style, variable_naming_convention}
, {elvis_style, no_nested_try_catch}
, {elvis_style, atom_naming_convention}
, {elvis_style, numeric_format}
, {elvis_style, behaviour_spelling}
]
);
rules(beam_files) ->
lists:map(
fun (Rule) ->
{elvis_style, Rule, elvis_style:default(Rule)}
end,
[ nesting_level
, god_modules
, no_if_expression
, invalid_dynamic_call
, used_ignored_variable
, module_naming_convention
, function_naming_convention
, state_record_and_type
, no_spec_with_records
, dont_repeat_yourself
, no_debug_call
, variable_naming_convention
, no_nested_try_catch
, atom_naming_convention
, behaviour_spelling
]
);
rules(makefiles) ->
lists:map(
fun (Rule) ->
{elvis_project, Rule, elvis_project:default(Rule)}
end,
[ no_deps_master_erlang_mk
, protocol_for_deps_erlang_mk
]);
rules(rebar_config) ->
lists:map(
fun (Rule) ->
{elvis_project, Rule, elvis_project:default(Rule)}
end,
[ no_deps_master_rebar
, protocol_for_deps_rebar
]);
rules(elvis_config) ->
lists:map(
fun (Rule) ->
{elvis_project, Rule, elvis_project:default(Rule)}
end,
[ old_configuration_format
]);
rules(Group) ->
try ets:lookup_element(?MODULE, Group, 2)
catch
error:badarg -> []
end.
ensure_clean_table() ->
case ets:info(?MODULE) of
undefined ->
ets:new(?MODULE, [set, named_table, {keypos, 1}, public]);
_ ->
true = ets:delete_all_objects(?MODULE),
?MODULE
end.