RustQ.Spec (rustq v0.11.1)

Copy Markdown View Source

Public helpers for lowering Elixir typespec forms into RustQ type metadata.

RustQ.Spec accepts both ordinary quoted typespec AST and Erlang/BEAM abstract typespec forms returned by the standard library Code.Typespec fetch helpers.

Summary

Functions

Builds type aliases from quoted or BEAM abstract type declarations.

Extracts aliases, function specs, and argument names from quoted module AST.

Extracts aliases, function specs, and argument names from an Elixir source file.

Converts structured RustQ.Syn.Type metadata into RustQ.Meta.Type metadata.

Normalizes a quoted or BEAM abstract typespec form to quoted AST.

Lowers a typespec type form to RustQ.Meta.Type metadata.

Functions

aliases(types)

@spec aliases([term()]) :: map()

Builds type aliases from quoted or BEAM abstract type declarations.

declarations(quoted)

@spec declarations(Macro.t()) :: %{
  aliases: %{optional({atom(), non_neg_integer()}) => RustQ.Meta.Type.t()},
  specs: [{atom(), [Macro.t()]}],
  defs: %{optional(atom()) => [atom()]}
}

Extracts aliases, function specs, and argument names from quoted module AST.

declarations_file!(path)

@spec declarations_file!(Path.t()) :: %{
  aliases: %{optional({atom(), non_neg_integer()}) => RustQ.Meta.Type.t()},
  specs: [{atom(), [Macro.t()]}],
  defs: %{optional(atom()) => [atom()]}
}

Extracts aliases, function specs, and argument names from an Elixir source file.

from_syn(type)

@spec from_syn(RustQ.Syn.type()) :: RustQ.Meta.Type.t()

Converts structured RustQ.Syn.Type metadata into RustQ.Meta.Type metadata.

normalize(ast)

@spec normalize(term()) :: Macro.t()

Normalizes a quoted or BEAM abstract typespec form to quoted AST.

type(spec, aliases \\ %{})

@spec type(term(), map()) :: RustQ.Meta.Type.t()

Lowers a typespec type form to RustQ.Meta.Type metadata.