1from docutils import nodes 2 3 4def setup(app): 5 app.add_role( 6 "pr", autolink("https://github.com/python/typing_extensions/pull/{}", "PR #") 7 ) 8 app.add_role( 9 "pr-cpy", autolink("https://github.com/python/cpython/pull/{}", "CPython PR #") 10 ) 11 app.add_role( 12 "issue", 13 autolink("https://github.com/python/typing_extensions/issues/{}", "issue #"), 14 ) 15 app.add_role( 16 "issue-cpy", 17 autolink("https://github.com/python/cpython/issues/{}", "CPython issue #"), 18 ) 19 20 21def autolink(pattern: str, prefix: str): 22 def role(name, rawtext, text: str, lineno, inliner, options=None, content=None): 23 if options is None: 24 options = {} 25 url = pattern.format(text) 26 node = nodes.reference(rawtext, f"{prefix}{text}", refuri=url, **options) 27 return [node], [] 28 29 return role 30