# `Modkit.Mod`
[🔗](https://github.com/lud/modkit/blob/main/lib/modkit/mod.ex#L1)

# `as_test`

# `current_path`

# `group_by_file`

# `list_all`

# `local_root`

```elixir
@spec local_root([module()]) :: module() | nil
```

Returns the module that is a local root of all given modules. That is a common
prefix of all given modules that is also a module from the list.

For instance, modules `A` and `A.B` have a common prefix that is `A`, and `A`
is provided as an argument, so it will be returned.

But if only `A.B` and `A.C` are provided, the common prefix `A` will not be
returned since it is not one of the arguments.

### Examples

    iex> local_root([A, A.B])
    A

    iex> local_root([A.B, A.C, A])
    A

    iex> local_root([A.B, A.C])
    nil

    iex> local_root([])
    nil

# `local_root`

```elixir
@spec local_root(module(), module()) :: module() | nil
```

Given two module names, returns the module name that is a prefix of the other,
or `nil` if the two names are disjoint.

See `local_root/1`.

### Examples

    iex> local_root(A, A.B)
    A

    iex> local_root(A.B, A.C)
    nil

# `local_roots`

Returns the top module namespaces that are prefix to all other modules and
that is also a module from the list.

See `local_root/1`

### Examples

    iex> local_roots([A, A.B, X.Y, X])
    [A, X]

    iex> local_roots([A.B, A.C, A, X, X, X.Y, X.Y.Z])
    [A,X]

    iex> local_roots([A.B, A.C])
    [A.B, A.C]

    iex> local_roots([A.B.C1, A.B.C2])
    [A.B.C1, A.B.C2]

    iex> local_roots([A.B.C1, A.B.C2, A.B])
    [A.B]

---

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