summary refs log tree commit diff
path: root/pkgs/tools/nix/nixos-render-docs
diff options
context:
space:
mode:
authorpennae <github@quasiparticle.net>2023-02-18 20:36:29 +0100
committerpennae <github@quasiparticle.net>2023-02-21 18:26:40 +0100
commitba201144605ed4ba83d165a37c3660ef2b49b193 (patch)
tree4b4909ada7b09db23ed249067c8bcab4c9b17a29 /pkgs/tools/nix/nixos-render-docs
parent7b0824c0031dd65e1abd6d88ca537a90d4dfbe23 (diff)
downloadnixpkgs-ba201144605ed4ba83d165a37c3660ef2b49b193.tar
nixpkgs-ba201144605ed4ba83d165a37c3660ef2b49b193.tar.gz
nixpkgs-ba201144605ed4ba83d165a37c3660ef2b49b193.tar.bz2
nixpkgs-ba201144605ed4ba83d165a37c3660ef2b49b193.tar.lz
nixpkgs-ba201144605ed4ba83d165a37c3660ef2b49b193.tar.xz
nixpkgs-ba201144605ed4ba83d165a37c3660ef2b49b193.tar.zst
nixpkgs-ba201144605ed4ba83d165a37c3660ef2b49b193.zip
nixos-render-docs: check heading continuity
while not technically necessary for correct rendering of *contents* we
do need to disallow heading levels being skipped to build a correct
TOC. treating headings that have skipped a number of levels to actually
be headings that many levels up only gets confusing, and inserting
artifical intermediate headings suffers from problems, such as which ids
to use and what to call them.
Diffstat (limited to 'pkgs/tools/nix/nixos-render-docs')
-rw-r--r--pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py
index d7cf449a417..c6842db606f 100644
--- a/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py
+++ b/pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs/manual_structure.py
@@ -27,3 +27,14 @@ def check_titles(kind: TocEntryType, tokens: Sequence[Token]) -> None:
             f"{kind}, but found a second in line {t.map[0] + 1}. "
             "please remove all such headings except the first or demote the subsequent headings.",
             t)
+
+    last_heading_level = 0
+    for token in tokens:
+        if token.type != 'heading_open':
+            continue
+        level = int(token.tag[1:]) # because tag = h1..h6
+        if level > last_heading_level + 1:
+            assert token.map
+            raise RuntimeError(f"heading in line {token.map[0] + 1} skips one or more heading levels, "
+                               "which is currently not allowed")
+        last_heading_level = level