Packages
metastatic
0.6.0
0.26.0
0.25.0
0.24.1
0.24.0
0.23.0
0.22.2
0.22.1
0.22.0
0.21.3
0.21.2
0.21.1
0.21.0
0.20.3
0.20.2
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Cross-language code meta-model library using unified MetaAST representation. Parse, transform, and translate code across Python, Elixir, Ruby, Erlang, Haskell, and more via a shared three-tuple AST format.
Current section
Files
Jump to
Current section
Files
lib/metastatic/supplemental/error.ex
defmodule Metastatic.Supplemental.Error do
@moduledoc """
Error types for supplemental module system.
Provides structured errors for common supplemental-related failures.
"""
defmodule MissingSupplementalError do
@moduledoc """
Raised when a required supplemental module is not registered.
Indicates that transformation requires a supplemental that hasn't been
registered in the system.
"""
defexception [:construct, :language, :message]
@impl true
def exception(opts) do
construct = Keyword.fetch!(opts, :construct)
language = Keyword.fetch!(opts, :language)
message =
"No supplemental registered for construct #{inspect(construct)} " <>
"in language #{inspect(language)}. " <>
"Register an appropriate supplemental module or implement native support."
%__MODULE__{
construct: construct,
language: language,
message: message
}
end
end
defmodule IncompatibleSupplementalError do
@moduledoc """
Raised when a supplemental module's dependencies are incompatible.
Indicates version mismatches or missing external library dependencies.
"""
defexception [:supplemental, :required, :available, :message]
@impl true
def exception(opts) do
supplemental = Keyword.fetch!(opts, :supplemental)
required = Keyword.fetch!(opts, :required)
available = Keyword.get(opts, :available, "not installed")
message =
"Supplemental #{inspect(supplemental)} requires #{required} " <>
"but found #{available}. " <>
"Install or upgrade the required dependency."
%__MODULE__{
supplemental: supplemental,
required: required,
available: available,
message: message
}
end
end
defmodule UnsupportedConstructError do
@moduledoc """
Raised when a MetaAST construct has no transformation path.
Indicates the construct is neither natively supported by the adapter
nor handled by any registered supplemental.
"""
defexception [:construct, :language, :message]
@impl true
def exception(opts) do
construct = Keyword.fetch!(opts, :construct)
language = Keyword.fetch!(opts, :language)
message =
"Construct #{inspect(construct)} is not supported in #{inspect(language)}. " <>
"No native adapter support or registered supplemental available."
%__MODULE__{
construct: construct,
language: language,
message: message
}
end
end
defmodule ConflictError do
@moduledoc """
Raised when multiple supplementals attempt to handle the same construct.
Indicates ambiguity in which supplemental should transform a construct.
"""
defexception [:construct, :language, :modules, :message]
@impl true
def exception(opts) do
construct = Keyword.fetch!(opts, :construct)
language = Keyword.fetch!(opts, :language)
modules = Keyword.fetch!(opts, :modules)
message =
"Multiple supplementals registered for construct #{inspect(construct)} " <>
"in language #{inspect(language)}: #{inspect(modules)}. " <>
"Only one supplemental per construct is allowed."
%__MODULE__{
construct: construct,
language: language,
modules: modules,
message: message
}
end
end
end