Runtime-extensible filetype registry backed by an Agent.
Starts empty and allows config or extensions to register overrides at runtime via register/2. Built-in language filetypes come from Minga.Language.Registry, where they are owned by their language pack source.
Examples
Minga.Language.Filetype.Registry.register(".astro", :astro)
Minga.Language.Filetype.Registry.register("Justfile", :just)
:astro = Minga.Language.Filetype.Registry.lookup_extension("astro")
:just = Minga.Language.Filetype.Registry.lookup_filename("Justfile")
Summary
Functions
Returns all registered extensions.
Returns all registered filenames.
Returns a specification to start this module under a supervisor.
Looks up a filetype by extension (without the dot, already downcased).
Looks up a filetype by exact filename.
Looks up a filetype by shebang interpreter name.
Registers a new filetype mapping.
Registers a new shebang interpreter mapping.
Starts the registry for runtime filetype overrides.
Types
@type state() :: %{ extensions: %{required(String.t()) => Minga.Language.Filetype.filetype()}, filenames: %{required(String.t()) => Minga.Language.Filetype.filetype()}, shebang_interpreters: %{ required(String.t()) => Minga.Language.Filetype.filetype() } }
Registry state: extension map, filename map, shebang map.
Functions
@spec all_extensions() :: %{ required(String.t()) => Minga.Language.Filetype.filetype() }
Returns all registered extensions.
@spec all_filenames() :: %{required(String.t()) => Minga.Language.Filetype.filetype()}
Returns all registered filenames.
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec lookup_extension(String.t()) :: Minga.Language.Filetype.filetype() | nil
Looks up a filetype by extension (without the dot, already downcased).
@spec lookup_filename(String.t()) :: Minga.Language.Filetype.filetype() | nil
Looks up a filetype by exact filename.
@spec lookup_shebang(String.t()) :: Minga.Language.Filetype.filetype() | nil
Looks up a filetype by shebang interpreter name.
@spec register(String.t(), Minga.Language.Filetype.filetype() | nil) :: :ok
Registers a new filetype mapping.
pattern can be:
- An extension string starting with
.(e.g.,".astro") — case-insensitive - An exact filename string (e.g.,
"Justfile") — case-sensitive
@spec register_shebang(String.t(), Minga.Language.Filetype.filetype() | nil) :: :ok
Registers a new shebang interpreter mapping.
interpreter is the basename of the interpreter (e.g., "deno").
@spec start_link(keyword()) :: Agent.on_start()
Starts the registry for runtime filetype overrides.