In short, the issue is that show-inheritance defaults to not fully qualifying the name of any base classes that are in the same file as the derived class, while imported-members just copies the documentation of imported members wholesale. As a result, if an __init__.py imports a derived class but not a base class, the reference target will not be found for the base class in the __init__.py's documentation.
#411 would fix this, but this is a separate issue.
Alternatively, having show-inheritance always fully qualify the names of base classes (possibly using a ~ prefix for classes in the same file) would also fix this.
Minimal reproduction
src/testproject/__init__.py:
"""It's a module."""
from testproject.classes import MySubclass
__all__ = ["MySubclass"]
src/testproject/classes.py
"""Some classes."""
class MyBase:
"""A base class."""
class MySubclass(MyBase):
"""A subclass."""
docs/src/conf.py
from pathlib import Path
PROJECT_ROOT = Path(__file__).parents[2]
extensions = [
"autoapi.extension",
]
autoapi_dirs = [(PROJECT_ROOT / "src" / "testproject").as_posix()]
autoapi_options = [
"imported-members",
"show-inheritance",
]
docs/src/index.rst
Run uv run --isolated --with sphinx --with sphinx-autoapi -m sphinx -b html --nitpicky docs/src docs/build; see the warning [...]\docs\src\autoapi\testproject\index.rst:28: WARNING: py:obj reference target not found: MyBase [ref.obj].
Note that the generated documentation for MySubclass is
.. py:class:: MySubclass
Bases: :py:obj:`MyBase`
A subclass.
This should probably use :py:obj:`~testproject.classes.MyBase` instead.
In short, the issue is that
show-inheritancedefaults to not fully qualifying the name of any base classes that are in the same file as the derived class, whileimported-membersjust copies the documentation of imported members wholesale. As a result, if an__init__.pyimports a derived class but not a base class, the reference target will not be found for the base class in the__init__.py's documentation.#411 would fix this, but this is a separate issue.
Alternatively, having
show-inheritancealways fully qualify the names of base classes (possibly using a~prefix for classes in the same file) would also fix this.Minimal reproduction
src/testproject/__init__.py:src/testproject/classes.pydocs/src/conf.pydocs/src/index.rst.. toctree::Run
uv run --isolated --with sphinx --with sphinx-autoapi -m sphinx -b html --nitpicky docs/src docs/build; see the warning[...]\docs\src\autoapi\testproject\index.rst:28: WARNING: py:obj reference target not found: MyBase [ref.obj].Note that the generated documentation for
MySubclassisThis should probably use
:py:obj:`~testproject.classes.MyBase`instead.