# `ExAST.Symbols`
[🔗](https://github.com/elixir-vibe/ex_ast/blob/v0.11.0/lib/ex_ast/symbols.ex#L1)

Extracts lightweight definition and reference facts from Elixir source or AST.

# `mfa_tuple`

```elixir
@type mfa_tuple() :: {module(), atom(), non_neg_integer()}
```

# `symbol_target`

```elixir
@type symbol_target() ::
  String.t()
  | mfa_tuple()
  | {String.t() | nil, atom() | String.t(), non_neg_integer()}
  | ExAST.Symbol.Definition.t()
  | ExAST.Symbol.Reference.t()
```

# `definitions`

```elixir
@spec definitions(String.t() | Macro.t()) :: [ExAST.Symbol.Definition.t()]
```

# `matches?`

```elixir
@spec matches?(
  ExAST.Symbol.Definition.t() | ExAST.Symbol.Reference.t(),
  symbol_target()
) :: boolean()
```

Returns true when a symbol matches a qualified-name string or MFA tuple.

# `mfa`

```elixir
@spec mfa(symbol_target()) :: mfa_tuple() | nil
```

Returns an MFA tuple when the target has a resolvable BEAM module.

# `qualified_name`

```elixir
@spec qualified_name(symbol_target()) :: String.t()
```

Normalizes a symbol, MFA tuple, or qualified-name string to a qualified-name string.

# `references`

```elixir
@spec references(String.t() | Macro.t()) :: [ExAST.Symbol.Reference.t()]
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
