[llvm] [docs] Check for absolute self-documentation links (PR #222504)

Aiden Grossman via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 12 14:35:37 PDT 2026


================
@@ -0,0 +1,152 @@
+# -*- coding: utf-8 -*-
+
+"""Check for absolute links to documents in the current Sphinx project."""
+
+import io
+import sys
+import tempfile
+from pathlib import Path
+from typing import Collection, Dict, Optional, Sequence, Tuple
+from urllib.parse import unquote, urlsplit
+
+from llvm_sphinx.help import venv_help
+
+try:
+    from docutils import nodes
+    from sphinx.application import Sphinx
+    from sphinx.util import logging
+except ImportError as err:
+    print(venv_help(err), file=sys.stderr)
+    raise
+
+__version__ = "1.0"
+
+logger = logging.getLogger("llvm_sphinx.ext.absolute_links")
+
+
+def setup(app: Sphinx) -> Dict[str, object]:
+    app.add_config_value("llvm_sphinx_doc_url_prefixes", (), "env", [list, tuple])
+    app.connect("doctree-read", check_absolute_doc_links)
+    return {
+        "version": __version__,
+        "parallel_read_safe": True,
+        "parallel_write_safe": True,
+    }
+
+
+def _url_prefix_parts(prefix: str) -> Optional[Tuple[str, str]]:
+    try:
+        parsed = urlsplit(prefix)
+        port = parsed.port
+    except ValueError:
+        return None
+    if parsed.scheme not in ("http", "https") or not parsed.hostname:
+        return None
+    if port not in (None, 80, 443):
+        return None
+    path = parsed.path
+    if not path.endswith("/"):
+        path += "/"
+    return parsed.hostname.lower(), path
+
+
+def _docname_from_url(
+    uri: str, prefixes: Sequence[str], found_docs: Collection[str]
+) -> Optional[str]:
----------------
boomanaiden154 wrote:

Prefer `str | none` for `Optional` which is supported form Python 3.8 forward with `from __future__ import annotations`.

https://github.com/llvm/llvm-project/pull/222504


More information about the llvm-commits mailing list