Packages
finitomata
0.11.0
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 Boundary, deps: [], exports: []
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_link,
do:
Agent.start_link(
fn -> %{hooks: MapSet.new(), declarations: MapSet.new(), diagnostics: MapSet.new()} end,
name: __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