docs: remove Sphinx 1.x compatibility code

In general, the Use_SSI workaround is no longer needed, and neither is
the pre-1.6 logging shim for kerneldoc.

Signed-off-by: John Snow <jsnow@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-id: 20240703175235.239004-3-jsnow@redhat.com
[rebased on top of origin/master. --js]
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2024-07-03 13:52:35 -04:00
parent fe791b7fcc
commit dd23f9ec51
4 changed files with 19 additions and 101 deletions

View file

@ -24,16 +24,10 @@ from docutils import nodes
from docutils.statemachine import ViewList from docutils.statemachine import ViewList
from docutils.parsers.rst import directives, Directive from docutils.parsers.rst import directives, Directive
from sphinx.errors import ExtensionError from sphinx.errors import ExtensionError
from sphinx.util.docutils import switch_source_input
from sphinx.util.nodes import nested_parse_with_titles from sphinx.util.nodes import nested_parse_with_titles
import sphinx import sphinx
# Sphinx up to 1.6 uses AutodocReporter; 1.7 and later
# use switch_source_input. Check borrowed from kerneldoc.py.
Use_SSI = sphinx.__version__[:3] >= '1.7'
if Use_SSI:
from sphinx.util.docutils import switch_source_input
else:
from sphinx.ext.autodoc import AutodocReporter
__version__ = '1.0' __version__ = '1.0'
@ -185,16 +179,9 @@ class HxtoolDocDirective(Directive):
# of title_styles and section_level that kerneldoc.py does, # of title_styles and section_level that kerneldoc.py does,
# because nested_parse_with_titles() does that for us. # because nested_parse_with_titles() does that for us.
def do_parse(self, result, node): def do_parse(self, result, node):
if Use_SSI: with switch_source_input(self.state, result):
with switch_source_input(self.state, result): nested_parse_with_titles(self.state, result, node)
nested_parse_with_titles(self.state, result, node)
else:
save = self.state.memo.reporter
self.state.memo.reporter = AutodocReporter(result, self.state.memo.reporter)
try:
nested_parse_with_titles(self.state, result, node)
finally:
self.state.memo.reporter = save
def setup(app): def setup(app):
""" Register hxtool-doc directive with Sphinx""" """ Register hxtool-doc directive with Sphinx"""

View file

@ -38,20 +38,14 @@ from docutils import nodes, statemachine
from docutils.statemachine import ViewList from docutils.statemachine import ViewList
from docutils.parsers.rst import directives, Directive from docutils.parsers.rst import directives, Directive
#
# AutodocReporter is only good up to Sphinx 1.7
#
import sphinx import sphinx
from sphinx.util import logging
from sphinx.util.docutils import switch_source_input
Use_SSI = sphinx.__version__[:3] >= '1.7'
if Use_SSI:
from sphinx.util.docutils import switch_source_input
else:
from sphinx.ext.autodoc import AutodocReporter
import kernellog
__version__ = '1.0' __version__ = '1.0'
logger = logging.getLogger('kerneldoc')
class KernelDocDirective(Directive): class KernelDocDirective(Directive):
"""Extract kernel-doc comments from the specified file""" """Extract kernel-doc comments from the specified file"""
@ -111,8 +105,7 @@ class KernelDocDirective(Directive):
cmd += [filename] cmd += [filename]
try: try:
kernellog.verbose(env.app, logger.verbose('calling kernel-doc \'%s\'' % (" ".join(cmd)))
'calling kernel-doc \'%s\'' % (" ".join(cmd)))
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate() out, err = p.communicate()
@ -122,8 +115,10 @@ class KernelDocDirective(Directive):
if p.returncode != 0: if p.returncode != 0:
sys.stderr.write(err) sys.stderr.write(err)
kernellog.warn(env.app, logger.warning(
'kernel-doc \'%s\' failed with return code %d' % (" ".join(cmd), p.returncode)) 'kernel-doc \'%s\' failed with return code %d' %
(" ".join(cmd), p.returncode)
)
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))] return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
elif env.config.kerneldoc_verbosity > 0: elif env.config.kerneldoc_verbosity > 0:
sys.stderr.write(err) sys.stderr.write(err)
@ -149,22 +144,13 @@ class KernelDocDirective(Directive):
return node.children return node.children
except Exception as e: # pylint: disable=W0703 except Exception as e: # pylint: disable=W0703
kernellog.warn(env.app, 'kernel-doc \'%s\' processing failed with: %s' % logger.warning('kernel-doc \'%s\' processing failed with: %s' %
(" ".join(cmd), str(e))) (" ".join(cmd), str(e)))
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))] return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
def do_parse(self, result, node): def do_parse(self, result, node):
if Use_SSI: with switch_source_input(self.state, result):
with switch_source_input(self.state, result): self.state.nested_parse(result, 0, node, match_titles=1)
self.state.nested_parse(result, 0, node, match_titles=1)
else:
save = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
self.state.memo.reporter = AutodocReporter(result, self.state.memo.reporter)
self.state.memo.title_styles, self.state.memo.section_level = [], 0
try:
self.state.nested_parse(result, 0, node, match_titles=1)
finally:
self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = save
def setup(app): def setup(app):

View file

@ -1,28 +0,0 @@
# SPDX-License-Identifier: GPL-2.0
#
# Sphinx has deprecated its older logging interface, but the replacement
# only goes back to 1.6. So here's a wrapper layer to keep around for
# as long as we support 1.4.
#
import sphinx
if sphinx.__version__[:3] >= '1.6':
UseLogging = True
from sphinx.util import logging
logger = logging.getLogger('kerneldoc')
else:
UseLogging = False
def warn(app, message):
if UseLogging:
logger.warning(message)
else:
app.warn(message)
def verbose(app, message):
if UseLogging:
logger.verbose(message)
else:
app.verbose(message)

View file

@ -35,22 +35,11 @@ from qapi.error import QAPIError, QAPISemError
from qapi.gen import QAPISchemaVisitor from qapi.gen import QAPISchemaVisitor
from qapi.schema import QAPISchema from qapi.schema import QAPISchema
import sphinx
from sphinx.errors import ExtensionError from sphinx.errors import ExtensionError
from sphinx.util.docutils import switch_source_input
from sphinx.util.nodes import nested_parse_with_titles from sphinx.util.nodes import nested_parse_with_titles
# Sphinx up to 1.6 uses AutodocReporter; 1.7 and later
# use switch_source_input. Check borrowed from kerneldoc.py.
USE_SSI = sphinx.__version__[:3] >= "1.7"
if USE_SSI:
from sphinx.util.docutils import switch_source_input
else:
from sphinx.ext.autodoc import ( # pylint: disable=no-name-in-module
AutodocReporter,
)
__version__ = "1.0" __version__ = "1.0"
@ -539,24 +528,8 @@ class QAPIDocDirective(Directive):
subheadings (titles) without confusing the rendering of subheadings (titles) without confusing the rendering of
anything else. anything else.
""" """
# This is from kerneldoc.py -- it works around an API change in with switch_source_input(self.state, rstlist):
# Sphinx between 1.6 and 1.7. Unlike kerneldoc.py, we use nested_parse_with_titles(self.state, rstlist, node)
# sphinx.util.nodes.nested_parse_with_titles() rather than the
# plain self.state.nested_parse(), and so we can drop the saving
# of title_styles and section_level that kerneldoc.py does,
# because nested_parse_with_titles() does that for us.
if USE_SSI:
with switch_source_input(self.state, rstlist):
nested_parse_with_titles(self.state, rstlist, node)
else:
save = self.state.memo.reporter
self.state.memo.reporter = AutodocReporter(
rstlist, self.state.memo.reporter
)
try:
nested_parse_with_titles(self.state, rstlist, node)
finally:
self.state.memo.reporter = save
def setup(app): def setup(app):