Packages

An embeddable, sandboxed Scheme interpreter for the BEAM, targeting the r7rs-small language minus its mutable operations.

Current section

Files

Jump to
schooner mix.exs
Raw

mix.exs

defmodule Schooner.MixProject do
  use Mix.Project

  @version "1.2.0"
  @source_url "https://github.com/ausimian/schooner"

  def project do
    [
      app: :schooner,
      version: @version,
      elixir: "~> 1.18",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      aliases: aliases(),
      elixirc_paths: elixirc_paths(Mix.env()),
      elixirc_options: [warnings_as_errors: true],
      package: package(),
      description: description(),
      docs: docs()
    ]
  end

  defp description do
    "An embeddable, sandboxed Scheme interpreter for the BEAM, targeting " <>
      "the r7rs-small language minus its mutable operations."
  end

  defp package do
    [
      licenses: ["MIT"],
      links: %{"GitHub" => @source_url},
      files: ~w(lib priv guides .formatter.exs mix.exs README.md CHANGELOG.md LICENSE)
    ]
  end

  def cli do
    [preferred_envs: [precommit: :test]]
  end

  defp elixirc_paths(:test), do: ["lib", "test/support"]
  defp elixirc_paths(_), do: ["lib"]

  def application do
    [
      extra_applications: [:logger],
      mod: {Schooner.Application, []}
    ]
  end

  defp deps do
    [
      {:nimble_options, "~> 1.1"},
      {:stream_data, "~> 1.1", only: [:dev, :test]},
      {:credo, "~> 1.7", only: [:dev, :test], runtime: false},
      {:ex_doc, "~> 0.34", only: :dev, runtime: false},
      {:publisho, "~> 1.0", only: :dev, runtime: false}
    ]
  end

  defp docs do
    [
      main: "readme",
      source_url: @source_url,
      source_ref: @version,
      extras: [
        "README.md",
        "guides/embedding.md",
        "guides/host-functions.md",
        "guides/sandbox.md",
        "guides/deviations.md",
        "guides/tooling.md",
        "CHANGELOG.md"
      ],
      groups_for_extras: [
        Guides: ~r/guides\/.*/
      ],
      filter_modules: &public_module?/2,
      groups_for_modules: [
        "Embedding API": [
          Schooner,
          Schooner.Environment,
          Schooner.Compiled,
          Schooner.Host,
          Schooner.Value,
          Schooner.Env,
          Schooner.Library,
          Schooner.Library.Loader,
          Schooner.Time
        ],
        Tooling: [
          Schooner.Debug,
          Schooner.Diagnostic,
          Schooner.Frame,
          Schooner.Pretty,
          Schooner.Session,
          Mix.Tasks.Schooner.Check,
          Mix.Tasks.Schooner.Expand,
          Mix.Tasks.Schooner.Repl
        ],
        Errors: [
          Schooner.Error,
          Schooner.Eval.Error,
          Schooner.Primitive.Error,
          Schooner.Host.TypeError,
          Schooner.Library.NotFoundError,
          Schooner.Lexer.Error,
          Schooner.Reader.Error,
          Schooner.Expander.Error
        ]
      ]
    ]
  end

  # Modules that should appear in the API Reference. Anything else is
  # an implementation detail — evaluator internals, primitive backing
  # modules, expander helpers, library plumbing — and is hidden from
  # the generated docs even when its individual @moduledoc is set.
  @public_modules MapSet.new([
                    Schooner,
                    Schooner.Environment,
                    Schooner.Compiled,
                    Schooner.Debug,
                    Schooner.Diagnostic,
                    Schooner.Frame,
                    Schooner.Host,
                    Schooner.Host.TypeError,
                    Schooner.Value,
                    Schooner.Env,
                    Schooner.Library,
                    Schooner.Library.Loader,
                    Schooner.Library.NotFoundError,
                    Schooner.Location,
                    Schooner.Pretty,
                    Schooner.Session,
                    Schooner.Time,
                    Schooner.Error,
                    Schooner.Eval.Error,
                    Schooner.Primitive.Error,
                    Schooner.Lexer.Error,
                    Schooner.Reader.Error,
                    Schooner.Expander.Error,
                    Mix.Tasks.Schooner.Check,
                    Mix.Tasks.Schooner.Expand,
                    Mix.Tasks.Schooner.Repl
                  ])

  defp public_module?(module, _metadata), do: MapSet.member?(@public_modules, module)

  defp aliases do
    [
      precommit: [
        "compile --warnings-as-errors",
        "deps.unlock --unused",
        "format",
        "credo --strict",
        "test"
      ]
    ]
  end
end