From 797b66619700f65b644807f52c92d675214770a0 Mon Sep 17 00:00:00 2001 From: Brendan <2bndy5@gmail.com> Date: Thu, 17 Aug 2023 19:54:12 -0700 Subject: [PATCH] fix compatibility with Sphinx v7.2.0 fixes #277 along with other problems found with v7.2.0 changes. --- .github/workflows/build.yml | 1 + noxfile.py | 4 +- sphinx_immaterial/__init__.py | 43 +++++++++++++++---- .../python/type_annotation_transforms.py | 3 +- sphinx_immaterial/postprocess_html.py | 2 +- 5 files changed, 41 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 19c7c2db2..8bed8c02d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -148,6 +148,7 @@ jobs: - 'sphinx4' - 'sphinx5' - 'sphinx6' + - 'sphinx7' node-version: - '16.x' runs-on: ${{ matrix.os }} diff --git a/noxfile.py b/noxfile.py index ed06ce884..648cd42bc 100644 --- a/noxfile.py +++ b/noxfile.py @@ -200,7 +200,9 @@ def docs(session: nox.Session, builder: str): @nox.session(python=SUPPORTED_PY_VER) @nox.parametrize( - "sphinx", [">=4.5,<5", ">=5,<6", ">=6,<7"], ids=["sphinx4", "sphinx5", "sphinx6"] + "sphinx", + [">=4.5,<5", ">=5,<6", ">=6,<7", ">=7,<8"], + ids=["sphinx4", "sphinx5", "sphinx6", "sphinx7"], ) def tests(session: nox.Session, sphinx: str): """Run unit tests and collect code coverage analysis.""" diff --git a/sphinx_immaterial/__init__.py b/sphinx_immaterial/__init__.py index a7c4c0aa8..f8aa67840 100644 --- a/sphinx_immaterial/__init__.py +++ b/sphinx_immaterial/__init__.py @@ -15,6 +15,7 @@ import sphinx.util.matching import sphinx.util.docutils import sphinx.writers.html5 +from sphinx import version_info from . import html_translator_mixin from .apidoc import apidoc_formatting @@ -22,6 +23,9 @@ from . import nav_adapt from . import sections # pylint: disable=unused-import +if version_info < (7, 2): + import sphinx.builders.html._assets + logger = sphinx.util.logging.getLogger(__name__) @@ -44,7 +48,10 @@ def _get_html_builder(base_builder: Type[sphinx.builders.html.StandaloneHTMLBuil """Returns a modified HTML translator.""" class CustomHTMLBuilder(base_builder): # type: ignore - css_files: List[sphinx.builders.html.Stylesheet] + if version_info < (7, 2): + css_files: List[sphinx.builders.html.Stylesheet] + else: + _css_files: List[sphinx.builders.html._assets._CascadingStyleSheet] theme: sphinx.theming.Theme templates: sphinx.jinja2glue.BuiltinTemplateLoader @@ -71,9 +78,14 @@ def init_js_files(self): if nav_adapt.READTHEDOCS is None: excluded_scripts.add("_static/jquery.js") excluded_scripts.add("_static/_sphinx_javascript_frameworks_compat.js") - self.script_files: List[sphinx.builders.html.JavaScript] = [ - x for x in self.script_files if x.filename not in excluded_scripts - ] + if version_info < (7, 2): + self.script_files: List[sphinx.builders.html.JavaScript] = [ + x for x in self.script_files if x.filename not in excluded_scripts + ] + else: + self._js_files: List[sphinx.builders.html._assets._JavaScript] = [ + x for x in self._js_files if x.filename not in excluded_scripts + ] def init_css_files(self): super().init_css_files() @@ -87,11 +99,24 @@ def init_css_files(self): "_static/basic.css", ] ) - self.css_files = [ - x - for x in cast(List[sphinx.builders.html.Stylesheet], self.css_files) - if x.filename not in excluded - ] + if version_info < (7, 2): + self.css_files = [ + x + for x in cast( + List[sphinx.builders.html.Stylesheet], + self._css_files, + ) + if x.filename not in excluded + ] + else: + self._css_files = [ + x + for x in cast( + List[sphinx.builders.html._assets._CascadingStyleSheet], + self._css_files, + ) + if x.filename not in excluded + ] def gen_additional_pages(self): # Prevent the search.html page from being written since this theme provides diff --git a/sphinx_immaterial/apidoc/python/type_annotation_transforms.py b/sphinx_immaterial/apidoc/python/type_annotation_transforms.py index fbfe4d5d7..9d86fde67 100644 --- a/sphinx_immaterial/apidoc/python/type_annotation_transforms.py +++ b/sphinx_immaterial/apidoc/python/type_annotation_transforms.py @@ -352,9 +352,10 @@ def _monkey_patch_python_domain_to_transform_xref_titles(): def type_to_xref( target: str, env: sphinx.environment.BuildEnvironment, + *args, suppress_prefix: bool = False, ) -> sphinx.addnodes.pending_xref: - node = orig_type_to_xref(target, env, suppress_prefix) + node = orig_type_to_xref(target, env, *args, suppress_prefix=suppress_prefix) if ( not suppress_prefix and len(node.children) == 1 diff --git a/sphinx_immaterial/postprocess_html.py b/sphinx_immaterial/postprocess_html.py index 642c74b96..4f57ba899 100644 --- a/sphinx_immaterial/postprocess_html.py +++ b/sphinx_immaterial/postprocess_html.py @@ -38,7 +38,7 @@ def create_sitemap(app: sphinx.application.Sphinx, exception): ): return - filename = app.outdir + "/sitemap.xml" + filename = str(app.outdir) + "/sitemap.xml" print( "Generating sitemap for {0} pages in " "{1}".format(len(sitemap_links), sphinx.util.console.colorize("blue", filename))