Packages
finitomata
0.30.2
0.41.0
0.40.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.30.3
0.30.2
0.30.1
0.30.0
0.29.10
0.29.9
0.29.8
0.29.7
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.4
0.26.3
0.26.2
0.26.1
0.26.0
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.7
0.23.6
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.1
0.1.0
The FSM implementation generated from PlantUML textual representation.
Current section
Files
Jump to
Current section
Files
lib/mix/events.ex
defmodule Finitomata.Mix.Events do
@moduledoc false
use Agent
@type diagnostics :: MapSet.t(Mix.Task.Compiler.Diagnostic.t())
@type hooks :: MapSet.t(Finitomata.Hook.t())
@type state :: %{hooks: hooks(), declarations: hooks(), diagnostics: diagnostics()}
def start do
Agent.start(
fn -> %{hooks: MapSet.new(), declarations: MapSet.new(), diagnostics: MapSet.new()} end,
name: __MODULE__
)
end
@spec stop :: :ok
def stop, do: Agent.stop(__MODULE__)
@spec all :: state()
def all, do: Agent.get(__MODULE__, & &1)
@spec hooks(module()) :: hooks()
def hooks(module),
do:
Agent.get(
__MODULE__,
fn all ->
all[:hooks]
|> Enum.filter(&match?(%{__struct__: Finitomata.Hook, module: ^module}, &1))
|> MapSet.new()
end
)
@spec declaration(module()) :: Finitomata.Hook.t() | nil
def declaration(module),
do:
Agent.get(
__MODULE__,
&Enum.find(&1[:declarations], fn hook ->
match?(%{__struct__: Finitomata.Hook, module: ^module}, hook)
end)
)
def put(key, value) do
Agent.update(
__MODULE__,
&Map.update!(&1, key, fn values -> MapSet.put(values, value) end)
)
end
end