Current section

Files

Jump to
nerves_system_linter lib nerves system.defconfig.ex
Raw

lib/nerves/system.defconfig.ex

defmodule Nerves.System.Defconfig do
alias Nerves.System.Defconfig.Linter.Rule.Checks
defstruct path: nil,
config: %{},
rules: [],
errors: [],
success: [],
warnings: []
def add_rules(%__MODULE__{} = config, rules) do
Enum.reduce(rules, config, fn rule, acc ->
add_rule(acc, rule)
end)
end
def add_rule(config, rule) do
%{config | rules: [rule | config.rules]}
end
def eval_rules(%__MODULE__{rules: []} = config) do
config
end
def eval_rules(%__MODULE__{rules: [rule | remaining]} = config) do
%{enumerate_checks(config, rule.__checks__) | rules: remaining} |> eval_rules()
end
def enumerate_checks(config, nil), do: config
def enumerate_checks(config, []), do: config
def enumerate_checks(config, [{fun, args} | rest]) do
res = apply(Checks, fun, [config | args])
enumerate_checks(res, rest)
end
end