Merge pull request #10406 from AA-Turner/apidoc-duplicates

Ensure submodules are unique in `sphinx.ext.apidoc`
This commit is contained in:
Takeshi KOMIYA 2022-05-01 19:02:37 +09:00 committed by GitHub
commit 2f29f0a96e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 0 deletions

View File

@ -72,6 +72,8 @@ Features added
Bugs fixed Bugs fixed
---------- ----------
* #10200: apidoc: Duplicated submodules are shown for modules having both .pyx
and .so files
* #10279: autodoc: Default values for keyword only arguments in overloaded * #10279: autodoc: Default values for keyword only arguments in overloaded
functions are rendered as a string literal functions are rendered as a string literal
* #10280: autodoc: :confval:`autodoc_docstring_signature` unexpectedly generates * #10280: autodoc: :confval:`autodoc_docstring_signature` unexpectedly generates

View File

@ -117,6 +117,7 @@ def create_package_file(root: str, master_package: str, subroot: str, py_files:
submodules = [sub.split('.')[0] for sub in py_files submodules = [sub.split('.')[0] for sub in py_files
if not is_skipped_module(path.join(root, sub), opts, excludes) and if not is_skipped_module(path.join(root, sub), opts, excludes) and
not is_initpy(sub)] not is_initpy(sub)]
submodules = sorted(set(submodules))
submodules = [module_join(master_package, subroot, modname) submodules = [module_join(master_package, subroot, modname)
for modname in submodules] for modname in submodules]
options = copy(OPTIONS) options = copy(OPTIONS)

View File

@ -4,6 +4,7 @@ from collections import namedtuple
import pytest import pytest
import sphinx.ext.apidoc
from sphinx.ext.apidoc import main as apidoc_main from sphinx.ext.apidoc import main as apidoc_main
from sphinx.testing.path import path from sphinx.testing.path import path
@ -639,3 +640,31 @@ def test_namespace_package_file(tempdir):
" :members:\n" " :members:\n"
" :undoc-members:\n" " :undoc-members:\n"
" :show-inheritance:\n") " :show-inheritance:\n")
def test_no_duplicates(rootdir, tempdir):
"""Make sure that a ".pyx" and ".so" don't cause duplicate listings.
We can't use pytest.mark.apidoc here as we use a different set of arguments
to apidoc_main
"""
original_suffixes = sphinx.ext.apidoc.PY_SUFFIXES
try:
# Ensure test works on Windows
sphinx.ext.apidoc.PY_SUFFIXES += ('.so',)
package = rootdir / 'test-apidoc-duplicates' / 'fish_licence'
outdir = tempdir / 'out'
apidoc_main(['-o', outdir, "-T", package, "--implicit-namespaces"])
# Ensure the module has been documented
assert (outdir / 'fish_licence.rst').isfile()
# Ensure the submodule only appears once
text = (outdir / 'fish_licence.rst').read_text(encoding="utf-8")
count_submodules = text.count(r'fish\_licence.halibut module')
assert count_submodules == 1
finally:
sphinx.ext.apidoc.PY_SUFFIXES = original_suffixes