Packages
croma
0.13.0
0.13.0
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Elixir macro utilities to make type-based programming easier
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/compile.croma.ex
defmodule Mix.Tasks.Compile.Croma do
@moduledoc """
Custom compiler that checks if Croma consistently defines `new/1` functions.
You need to put `:croma` compiler after `:elixir` compiler.
"""
use Mix.Task.Compiler
alias Croma.New1Existence
@impl Mix.Task.Compiler
def run(_args) do
mods = New1Existence.modules_to_confirm()
New1Existence.cleanup()
case Enum.reject(mods, &has_new1?/1) do
[] ->
{:ok, []}
inconsistent_mods ->
Mix.raise("""
Croma couldn't consistently define new/1 functions.
There is missing new/1 in the following modules (or missing module itself):
#{Enum.map_join(inconsistent_mods, "\n", &("* " <> inspect(&1)))}
Consider defining new/1 just wrapping a valid value as follows:
def new(v), do: Croma.Result.wrap_if_valid(v, __MODULE__)
""")
end
end
defp has_new1?(mod) do
Code.ensure_loaded?(mod) and function_exported?(mod, :new, 1)
end
end