# `Emerge.Engine.Tree`
[🔗](https://github.com/emerge-elixir/emerge/blob/v0.2.1/lib/emerge/engine/tree.ex#L1)

Utilities for working with Emerge.Engine.Element trees.

# `id_state`

```elixir
@type id_state() :: %{explicit_seen: term()}
```

# `assign_ids`

```elixir
@spec assign_ids(Emerge.Engine.Element.t(), id_state()) ::
  {Emerge.Engine.Element.t(), id_state()}
```

Assign ids to elements missing an id.

# `assign_ids_with_prev`

```elixir
@spec assign_ids_with_prev(
  Emerge.Engine.Element.t(),
  Emerge.Engine.Element.t() | nil,
  id_state()
) ::
  {Emerge.Engine.Element.t(), id_state()}
```

Assign ids using a previous tree (compatibility wrapper).

# `attrs_hash`

```elixir
@spec attrs_hash(map()) :: non_neg_integer()
```

Compute a hash of attributes excluding volatile fields.

# `default_id_state`

# `merge_nearby_attrs`

Merge nearby mounts back into an attrs map.

# `nearby_children`

Return nearby mounted children in canonical order.

# `nearby_slots`

Return the fixed nearby slot tag order used across encoding.

# `runtime_attrs`

Return the list of runtime-only attributes.

# `split_nearby_attrs`

Split nearby mount attrs from ordinary attrs.

# `strip_nearby_attrs`

Drop nearby mounts from an attrs map.

# `strip_runtime_attrs`

Drop runtime-only attributes from an attrs map.

---

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