# `Mutare.Mutators.AtomLiteral`
[🔗](https://github.com/foxbenjaminfox/mutare/blob/v0.2.1/lib/mutare/mutators/atom_literal.ex#L1)

Replaces a literal atom with `:mutare`. The replacement is omitted when the original atom is already `:mutare`.

The following atoms are excluded:

  * `true` and `false`, handled by `Mutare.Mutators.BooleanLiteral`; and `nil`, left unmutated
  * `:ok`/`:error`, `:cont`/`:halt`, and `:lt`/`:gt`, which are handled by `Mutare.Mutators.ConventionAtom`
  * block keys such as `do:`, `else:`, and `rescue:`
  * struct field names and `for` options such as `into:`, `uniq:`, and `reduce:`

Ordinary atom values, data map and keyword keys, and atoms in `case`, `receive`, and `fn` patterns remain eligible. Keys in a trailing call-options list are also mutated by default. Configure `{Mutare.Mutators.AtomLiteral, call_option_keys: false}` to exclude those keys.

`:infinity` in a known **timeout/duration position** (e.g. the `Task.await/2` or `GenServer.stop/3` timeout) is left unmutated. This family reuses `Mutare.Mutators.IntegerLiteral`'s timeout table (via `c:Mutare.Mutator.argument_marks/1`) so both families use the same timeout positions, and skips `:infinity` when the `:timeout` mark is present. A *non-duration* sibling atom in the same call still mutates: `GenServer.stop(s, :normal, :infinity)` mutates the `:normal` reason but not the `:infinity` timeout.

Project-specific timeout positions come from the `argument_marks:` option (declared with the
`:timeout` label, as documented on `Mutare.Mutators.IntegerLiteral`); `:infinity` at such a
position is left alone the same way. To keep an atom position out of every family whatever its
value — a mode or an action name — route it `:raw` in `call_routes:` (see `Mutare.CallRouting`).

Interpolated quoted atoms (`:"a#{x}b"`) are mutated as a whole to the sentinel — their runtime value can never statically be `:mutare`, so the swap always applies — while the expressions inside the interpolation stay eligible for their own mutations, mirroring how `Mutare.Mutators.StringLiteral` treats interpolated strings.

---

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