lib/foundry/lint_rules/archival_rule.ex
defmodule Foundry.LintRules.ArchivalRule do
@behaviour SparkLint.Rule
def check(module, ctx) do
sensitive = ctx.metadata[:sensitive_modules] || []
if module in sensitive and not archival?(module) do
{:ok, [%SparkLint.Violation{
rule: :missing_archival,
module: module,
message: "#{inspect module} is sensitive but does not use AshArchival.Resource",
severity: :error
}]}
else
{:ok, []}
end
end
defp archival?(module) do
AshArchival.Resource in Spark.extensions(module)
rescue
_ -> false
end
end