# `MobDev.SecurityScan.Formatter`
[🔗](https://github.com/genericjam/mob_dev/blob/master/lib/mob_dev/security_scan/formatter.ex#L1)

Render a `Report` for human or machine consumers.

  * `terminal/1` — pretty ANSI-coloured output for `mix mob.security_scan`
  * `json/1` — machine-readable for `--json`
  * `markdown/1` — for `--write-report SECURITY_SCAN.md`

The formatter never raises; missing optional fields render as
blank, not crashes. Callers control output destination (IO,
File.write/2, etc.).

# `json`

```elixir
@spec json(MobDev.SecurityScan.Report.t()) :: String.t()
```

Render the report as JSON-encodable data.

# `markdown`

```elixir
@spec markdown(MobDev.SecurityScan.Report.t()) :: String.t()
```

Render the report as a Markdown document for `--write-report PATH`.
Designed to be checked into a repo and diffed across runs as
patch-lag evidence — fewer findings over time = receipts.

# `terminal`

```elixir
@spec terminal(MobDev.SecurityScan.Report.t()) :: String.t()
```

Render the report as ANSI-coloured terminal text.

---

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