From c46e9d5acf7b9171af754d255d71050782275636 Mon Sep 17 00:00:00 2001 From: Casey Brooks Date: Fri, 26 Dec 2025 18:33:04 +0000 Subject: [PATCH] fix(viewcode): respect epub toggle --- sphinx/ext/viewcode.py | 4 ++++ tests/test_ext_viewcode.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py index a7d52a91cb7..e9fe225fb35 100644 --- a/sphinx/ext/viewcode.py +++ b/sphinx/ext/viewcode.py @@ -179,6 +179,10 @@ def should_generate_module_page(app: Sphinx, modname: str) -> bool: def collect_pages(app: Sphinx) -> Generator[Tuple[str, Dict[str, Any], str], None, None]: + if (app.builder.name.startswith('epub') and + not app.builder.env.config.viewcode_enable_epub): + return + env = app.builder.env if not hasattr(env, '_viewcode_modules'): return diff --git a/tests/test_ext_viewcode.py b/tests/test_ext_viewcode.py index 79864095b51..8cc63ec499f 100644 --- a/tests/test_ext_viewcode.py +++ b/tests/test_ext_viewcode.py @@ -102,3 +102,22 @@ def find_source(app, modname): assert result.count('href="_modules/not_a_package/submodule.html#not_a_package.submodule.Class3.class_attr"') == 1 assert result.count('This is the class attribute class_attr') == 1 + + +@pytest.mark.sphinx(buildername='epub', testroot='ext-viewcode', freshenv=True) +def test_epub_pages_disabled(app, status, warning): + app.builder.build_all() + + modules_dir = app.outdir / '_modules' + assert not modules_dir.exists() + + +@pytest.mark.sphinx(buildername='epub', testroot='ext-viewcode', freshenv=True, + confoverrides={'viewcode_enable_epub': True}) +def test_epub_pages_enabled(app, status, warning): + app.builder.build_all() + + modules_dir = app.outdir / '_modules' + assert (modules_dir / 'index.xhtml').isfile() + assert (modules_dir / 'spam' / 'mod1.xhtml').isfile() + assert (modules_dir / 'spam' / 'mod2.xhtml').isfile()