Visualize.Audit.Citations (Visualize v0.8.1)

Copy Markdown View Source

Every citation of a specification section names a heading that exists (spec/12 §3, #648).

A citation is spec/NN §id, its long form spec/NN-slug.md §id, or a specification document's link form [NN-slug](NN-slug.md) §id. A list or a range continues it — spec/08 §1.9, §7.3, spec/09 §4.3.8–4.3.9 — and every id in it is of that one document. An id is a heading's decimal number, and in spec/13 its D-N as well. A heading inside a code fence is an example and resolves nothing.

A renumbered chapter leaves its citations pointing at headings that moved, and nothing else notices: spec/06 §9.4 named the force simulation's timer discipline for as long as §8.5 held it.

Summary

Functions

The unresolved citations in one file's text, as file:line: … strings, against the ids of each document by its two-digit number. A file that is not text has none.

The section ids a specification document's headings give, outside code fences.

Problems across root's spec, lib, test and specs trees; [] when every citation resolves.

Functions

check(text, file, headings)

@spec check(String.t(), String.t(), %{required(String.t()) => MapSet.t(String.t())}) ::
  [String.t()]

The unresolved citations in one file's text, as file:line: … strings, against the ids of each document by its two-digit number. A file that is not text has none.

ids(markdown)

@spec ids(String.t()) :: MapSet.t(String.t())

The section ids a specification document's headings give, outside code fences.

iex> Visualize.Audit.Citations.ids("## 1. One\n### 1.1 Sub\n```\n## 9. Example\n```\n")
MapSet.new(["1", "1.1"])

run(root)

@spec run(String.t()) :: [String.t()]

Problems across root's spec, lib, test and specs trees; [] when every citation resolves.