# `Tptp.Checks.NoDynamicAtoms`
[🔗](https://github.com/jcschuster/tptp/blob/v0.1.3/checks/no_dynamic_atoms.ex#L1)

## Basics

> #### This check is disabled by default. {: .neutral}
>
> [Learn how to enable it](`e:credo:config_file.html#checks`) via `.credo.exs`.

This check has a base priority of `high` and works with any version of Elixir.

## Explanation

Atoms are never garbage collected and the VM's table holds around a million
of them. This library reads other people's files — tens of thousands of them
in a corpus run — so turning a functor, a formula name or a role into an atom
is a denial-of-service waiting to happen, not merely a leak.

Every atom this library uses is created at compile time: node kinds and token
categories come from the generated grammar, and the `:==` vocabularies come
from `Tptp.Bnf.Vocabulary`. Where input must reach an atom at all, use
`String.to_existing_atom/1` inside a closed vocabulary and handle the
`ArgumentError`.

    # not this
    String.to_atom(functor)

    # this
    Tptp.Bnf.Vocabulary.formula_role?(role)

## Check-Specific Parameters

*There are no specific parameters for this check.*

## General Parameters

Like with all checks, [general params](`e:credo:check_params.html`) can be applied.

Parameters can be configured via the [`.credo.exs` config file](`e:credo:config_file.html`).

# `forbidden`

```elixir
@spec forbidden() :: [{module(), atom()}]
```

The calls this check refuses, as `{module, function}` pairs.

Exposed so the test suite can assert that each one names a function that exists.
A misspelling here is invisible in the worst way: the check goes on reporting no
issues, which is what a clean tree looks like. `String.to_charlist_atom` sat in
this list until 2026-09-09 and could never have fired.

`:erlang.binary_to_term/1` is here because it creates atoms from a serialised
term. `Module.concat/1,2` creates them too and is deliberately absent: its uses
in this repository are all over compile-time alias AST, and a check that flags
its own implementation teaches contributors to ignore it.

---

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