# `Reach.MacroFact`
[🔗](https://github.com/elixir-vibe/reach/blob/v2.8.4/lib/reach/macro_fact.ex#L1)

Source-level facts for macro and DSL declarations.

# `location`

```elixir
@type location() :: %{
  optional(:file) =&gt; String.t(),
  optional(:line) =&gt; non_neg_integer(),
  optional(:column) =&gt; non_neg_integer() | nil
}
```

# `t`

```elixir
@type t() :: %Reach.MacroFact{
  arity: non_neg_integer() | nil,
  call_module: module() | nil,
  confidence: atom() | nil,
  data: map(),
  framework: atom() | nil,
  generated?: boolean(),
  kind: atom(),
  name: atom() | nil,
  nesting: [atom()],
  owner_module: module() | nil,
  source: location() | nil,
  target: term()
}
```

# `at_source`

# `by_framework`

# `by_kind`

# `by_owner`

# `collect_ast`

```elixir
@spec collect_ast(
  Macro.t(),
  keyword()
) :: [t()]
```

Collects source-level macro/DSL declaration facts from quoted Elixir AST.

# `collect_file`

```elixir
@spec collect_file(
  Path.t(),
  keyword()
) :: {:ok, [t()]} | {:error, term()}
```

Reads and collects macro/DSL facts from a source file.

# `collect_project`

```elixir
@spec collect_project(
  map(),
  keyword()
) :: [t()]
```

Collects macro/DSL facts from all source files in a project.

# `collect_source`

```elixir
@spec collect_source(
  String.t(),
  keyword()
) :: {:ok, [t()]} | {:error, term()}
```

Parses and collects macro/DSL facts from an Elixir source string.

# `explained_callbacks`

# `family`

# `kinds`

---

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