source/ext/seo_meta.py (30 lines of code) (raw):

# # Copyright (c) 2025. JetBrains s.r.o. # Use of this source code is governed by the MIT license that can be found in the LICENSE file. # import re import inspect import textwrap from pydoc import locate from jinja2.defaults import DEFAULT_FILTERS def shortdesc(fullname): obj = locate(fullname) if obj is None: return "" doc = inspect.getdoc(obj) or "" if not doc: return "" doc = textwrap.dedent(doc).strip() # Normalize indentation and strip leading/trailing spaces doc = doc.split("\n\n", 1)[0] # First paragraph doc = " ".join(doc.split()) # Collapse whitespace # --- Clean basic reST inline markup --- doc = re.sub(r"``([^`]*)``", r"\1", doc) # ``code`` -> code doc = re.sub(r"`([^`<]+)\s+<[^>]+>`__?", r"\1", doc) # `Text <url>`__, `Text <url>`_ -> Text doc = re.sub(r"`([^`]+)`_", r"\1", doc) # `ref`_ -> ref doc = re.sub(r":\w+:`([^`]+)`", r"\1", doc) # :role:`text` -> text # --- Keep only the first sentence --- doc = re.split(r'(?<=[.!?])\s', doc, 1)[0] # Split on first sentence-ending punctuation followed by whitespace # --- Special cases --- # Signature dump of the tilesets if doc.startswith("dict() -> new empty dictionary"): return "" return doc DEFAULT_FILTERS["shortdesc"] = shortdesc def setup(app): return { 'version': '0.1', 'parallel_read_safe': True, 'parallel_write_safe': True, }