RustQ.Spec (rustq v0.6.0)

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 def argument names from a source path or quoted module AST.

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(path)

@spec declarations(Path.t() | 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 def argument names from a source path or quoted module AST.

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.