docs: Add a :issue: role and use it in the CHANGELOG

This allows us to write the changelog reasonably simply.

The biggest downside is that pandoc won't be able to handle it anymore
when converting to markdown, but
sphinx-markdown-builder (https://github.com/codejamninja/sphinx-markdown-builder)
should be able to handle it.
This commit is contained in:
Fabian Homborg 2020-10-28 23:18:48 +01:00
parent 2e55e34544
commit f8289d69d8

View file

@ -11,6 +11,7 @@ import os.path
import pygments import pygments
import subprocess import subprocess
from sphinx.errors import SphinxError, SphinxWarning from sphinx.errors import SphinxError, SphinxWarning
from docutils import nodes, utils
# -- Helper functions -------------------------------------------------------- # -- Helper functions --------------------------------------------------------
@ -20,8 +21,29 @@ def strip_ext(path):
return os.path.splitext(path)[0] return os.path.splitext(path)[0]
# -- Load our Pygments lexer ------------------------------------------------- # A :issue: role to link to github issues.
# Used like :issue:`2364`
def issue_role(name, rawtext, text, lineno, inliner, options=None, content=None):
options = options or {}
config = inliner.document.settings.env.app.config
try:
issue_num = int(text.strip())
if issue_num <= 0:
raise ValueError
except ValueError:
msg = inliner.reporter.error(
'Invalid issue number: "%s"' % text, line=lineno)
prb = inliner.problematic(rawtext, rawtext, msg)
return [prb], [msg]
template=issue_url + "/{n}"
ref = template.format(n=issue_num)
issue_text = "#{issue_no}".format(issue_no=issue_num)
link = nodes.reference(text=issue_text, refuri=ref, **options)
return [link], []
# -- Load our extensions -------------------------------------------------
def setup(app): def setup(app):
# Our own pygments lexer
from sphinx.highlighting import lexers from sphinx.highlighting import lexers
this_dir = os.path.dirname(os.path.realpath(__file__)) this_dir = os.path.dirname(os.path.realpath(__file__))
@ -29,12 +51,16 @@ def setup(app):
os.path.join(this_dir, "fish_indent_lexer.py"), lexername="FishIndentLexer" os.path.join(this_dir, "fish_indent_lexer.py"), lexername="FishIndentLexer"
) )
lexers["fish-docs-samples"] = fish_indent_lexer lexers["fish-docs-samples"] = fish_indent_lexer
# add_css_file only appears in Sphinx 1.8.0 # add_css_file only appears in Sphinx 1.8.0
if hasattr(app, "add_css_file"): if hasattr(app, "add_css_file"):
app.add_css_file("custom.css") app.add_css_file("custom.css")
else: else:
app.add_stylesheet("custom.css") app.add_stylesheet("custom.css")
app.add_config_value("issue_url", default=None, rebuild="html")
app.add_role("issue", issue_role)
# The default language to assume # The default language to assume
highlight_language = "fish-docs-samples" highlight_language = "fish-docs-samples"
@ -55,6 +81,7 @@ highlight_language = "fish-docs-samples"
project = "fish-shell" project = "fish-shell"
copyright = "2020, fish-shell developers" copyright = "2020, fish-shell developers"
author = "fish-shell developers" author = "fish-shell developers"
issue_url = "https://github.com/fish-shell/fish-shell/issues"
# Parsing FISH-BUILD-VERSION-FILE is possible but hard to ensure that it is in the right place # Parsing FISH-BUILD-VERSION-FILE is possible but hard to ensure that it is in the right place
# fish_indent is guaranteed to be on PATH for the Pygments highlighter anyway # fish_indent is guaranteed to be on PATH for the Pygments highlighter anyway