ETS-backed registry of tool installation recipes.
Holds all known recipes for installable tools (LSP servers, formatters,
linters). Recipes are contributed at runtime by bundled recipe packs
(via Minga.Extensions.RecipePacks) or user config. Provides fast
lookups by tool name, command string, and category.
Follows the same pattern as Minga.Language.Registry.
Lookups
get/1- look up a recipe by name atomfor_command/1- find the recipe that provides a given command stringall/0- list all recipesby_category/1- filter recipes by category
Summary
Functions
Returns all registered recipes.
Returns recipes filtered by category.
Returns a specification to start this module under a supervisor.
Returns the recipe whose provides list includes the given command string.
Returns all recipes that serve a given language.
Returns the recipe for a given tool name, or nil.
Display labels for tool names, falling back to the name itself when no recipe is registered. Resolved here so pure mode state can carry labels instead of reading ETS.
Registers a config-owned recipe.
Registers a recipe with explicit source ownership.
Removes every recipe contributed by a source.
Types
@type contribution_source() :: :config | {:extension, atom()}
Source that contributed registry entries.
@type name() :: atom()
@type register_error() :: {:duplicate_recipe, atom(), contribution_source(), contribution_source()}
Functions
@spec all() :: [Minga.Tool.Recipe.t()]
Returns all registered recipes.
@spec by_category(Minga.Tool.Recipe.category()) :: [Minga.Tool.Recipe.t()]
Returns recipes filtered by category.
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec for_command(String.t()) :: Minga.Tool.Recipe.t() | nil
Returns the recipe whose provides list includes the given command string.
@spec for_language(atom()) :: [Minga.Tool.Recipe.t()]
Returns all recipes that serve a given language.
@spec get(name()) :: Minga.Tool.Recipe.t() | nil
Returns the recipe for a given tool name, or nil.
Display labels for tool names, falling back to the name itself when no recipe is registered. Resolved here so pure mode state can carry labels instead of reading ETS.
@spec register(Minga.Tool.Recipe.t()) :: :ok | {:error, register_error()}
Registers a config-owned recipe.
@spec register(Minga.Tool.Recipe.t(), contribution_source()) :: :ok | {:error, register_error()}
Registers a recipe with explicit source ownership.
@spec start_link(keyword()) :: GenServer.on_start()
@spec unregister_source(contribution_source()) :: :ok
Removes every recipe contributed by a source.