fune/docs/_addons/bzlink.py
Anastasios Bithas ea71af5809 Bug 1650197 - Add an extension to autolink bug xxxxxxx strings in docs to bugzilla hyperlinks r=sylvestre DONTBUILD
An extension is created that uses SphinxTransform to convert bug xxxxxxx strings that exist in docs to reference links that redirect to the appropriate bug in bugzilla

Differential Revision: https://phabricator.services.mozilla.com/D137385
2022-01-31 15:12:40 +00:00

62 lines
2.2 KiB
Python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from sphinx.transforms import SphinxTransform
from docutils.nodes import reference, Text, paragraph
import re
class ConvertBugsToLinks(SphinxTransform):
# Convert text entries in paragraphs that are in the style of "bug xxxxx"
# to a hyperlink that leads to the appropriate bugzilla bug link.
default_priority = 400
bz_url = "https://bugzilla.mozilla.org/show_bug.cgi?id={0}"
bz_reg = r"bug[' '][0-9]\d*"
def apply(self):
def check_if_paragraph(o):
return isinstance(o, paragraph)
def check_if_text(o):
return (
not isinstance(o.parent, reference)
and isinstance(o, Text)
and re.search(self.bz_reg, o, re.IGNORECASE)
)
changed = True
while changed:
changed = self.textToReferences(check_if_paragraph, check_if_text)
return
def textToReferences(self, check_if_paragraph, check_if_text):
# Analyses the document and replaces from the paragraph nodes
# the Text element(s) that contain bz_reg matching strings.
# Whevever the matching strings are more than one and
# a correction is made, the function returns True.
for node in self.document.traverse(check_if_paragraph):
for text in node.traverse(check_if_text):
bugs = re.findall(self.bz_reg, text, re.IGNORECASE)
if len(bugs) == 0:
continue
bug = bugs[0]
txtparts = text.split(bug, 1)
new_ref = reference(
bug,
bug,
refuri=self.bz_url.format(bug.split()[1]),
)
txt_0 = Text(txtparts[0])
txt_1 = Text(txtparts[1])
text.parent.replace(text, [txt_0, new_ref, txt_1])
if len(bugs) > 1:
return True
return False
def setup(app):
app.add_transform(ConvertBugsToLinks)
return