lib/spark_lint.ex

defmodule SparkLint do
  @moduledoc """
  spark_lint — a minimal, zero-dependency lint rule runner for Spark/Ash projects.

  Ships the framework only. Rules ship separately (e.g. as part of Foundry's
  internal `Foundry.LintRules.*` modules, or as third-party Hex packages).

  ## Quick start

      defmodule MyApp.Rules.MissingDoc do
        @behaviour SparkLint.Rule

        @impl SparkLint.Rule
        def check(module, _ctx) do
          case Code.fetch_docs(module) do
            {:docs_v1, _, _, _, :none, _, _} ->
              {:ok, [%SparkLint.Violation{
                rule: :missing_doc,
                module: module,
                message: "\#{inspect(module)} is missing @moduledoc",
                severity: :error
              }]}
            _ ->
              {:ok, []}
          end
        end
      end

      {violations, errors} = SparkLint.run([MyApp.Rules.MissingDoc], modules)
  """

  defdelegate run(rules, modules, base_context \\ %{}), to: SparkLint.Runner
end