Minga.Language.Filetype.Registry (Minga v0.1.0)

Copy Markdown View Source

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

Types

Registry state: extension map, filename map, shebang map.

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

state()

@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

all_extensions()

@spec all_extensions() :: %{
  required(String.t()) => Minga.Language.Filetype.filetype()
}

Returns all registered extensions.

all_filenames()

@spec all_filenames() :: %{required(String.t()) => Minga.Language.Filetype.filetype()}

Returns all registered filenames.

child_spec(arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

lookup_extension(ext)

@spec lookup_extension(String.t()) :: Minga.Language.Filetype.filetype() | nil

Looks up a filetype by extension (without the dot, already downcased).

lookup_filename(filename)

@spec lookup_filename(String.t()) :: Minga.Language.Filetype.filetype() | nil

Looks up a filetype by exact filename.

lookup_shebang(interpreter)

@spec lookup_shebang(String.t()) :: Minga.Language.Filetype.filetype() | nil

Looks up a filetype by shebang interpreter name.

register(filename, filetype)

@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

register_shebang(interpreter, filetype)

@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").

start_link(opts \\ [])

@spec start_link(keyword()) :: Agent.on_start()

Starts the registry for runtime filetype overrides.