[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