Sphinx 8.0.2__py3-none-any.whl → 8.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Sphinx might be problematic. Click here for more details.
- sphinx/__init__.py +6 -3
- sphinx/_cli/__init__.py +40 -20
- sphinx/_cli/util/colour.py +5 -4
- sphinx/_cli/util/errors.py +28 -11
- sphinx/application.py +361 -38
- sphinx/builders/__init__.py +229 -83
- sphinx/builders/_epub_base.py +118 -71
- sphinx/builders/changes.py +39 -21
- sphinx/builders/dirhtml.py +4 -4
- sphinx/builders/dummy.py +2 -5
- sphinx/builders/epub3.py +43 -22
- sphinx/builders/gettext.py +43 -25
- sphinx/builders/html/__init__.py +284 -218
- sphinx/builders/html/_assets.py +62 -26
- sphinx/builders/html/_build_info.py +76 -0
- sphinx/builders/html/transforms.py +11 -9
- sphinx/builders/latex/__init__.py +139 -81
- sphinx/builders/latex/constants.py +7 -7
- sphinx/builders/latex/nodes.py +3 -2
- sphinx/builders/latex/theming.py +7 -5
- sphinx/builders/latex/transforms.py +27 -19
- sphinx/builders/linkcheck.py +146 -72
- sphinx/builders/manpage.py +30 -13
- sphinx/builders/singlehtml.py +22 -14
- sphinx/builders/texinfo.py +67 -37
- sphinx/builders/text.py +5 -5
- sphinx/builders/xml.py +6 -9
- sphinx/cmd/build.py +282 -103
- sphinx/cmd/make_mode.py +106 -63
- sphinx/cmd/quickstart.py +341 -145
- sphinx/config.py +45 -12
- sphinx/deprecation.py +8 -2
- sphinx/directives/__init__.py +28 -19
- sphinx/directives/code.py +86 -56
- sphinx/directives/other.py +50 -36
- sphinx/directives/patches.py +29 -19
- sphinx/domains/__init__.py +20 -120
- sphinx/domains/_domains_container.py +281 -0
- sphinx/domains/_index.py +110 -0
- sphinx/domains/c/__init__.py +3 -3
- sphinx/domains/c/_parser.py +10 -6
- sphinx/domains/changeset.py +5 -3
- sphinx/domains/citation.py +5 -3
- sphinx/domains/cpp/__init__.py +9 -11
- sphinx/domains/cpp/_parser.py +8 -7
- sphinx/domains/index.py +3 -3
- sphinx/domains/javascript.py +12 -7
- sphinx/domains/math.py +2 -2
- sphinx/domains/python/__init__.py +10 -5
- sphinx/domains/python/_object.py +1 -1
- sphinx/domains/rst.py +5 -5
- sphinx/domains/std/__init__.py +16 -11
- sphinx/environment/__init__.py +206 -146
- sphinx/environment/adapters/asset.py +3 -2
- sphinx/environment/adapters/indexentries.py +74 -33
- sphinx/environment/adapters/toctree.py +100 -43
- sphinx/environment/collectors/__init__.py +19 -8
- sphinx/environment/collectors/asset.py +47 -15
- sphinx/environment/collectors/dependencies.py +8 -4
- sphinx/environment/collectors/metadata.py +7 -2
- sphinx/environment/collectors/title.py +7 -2
- sphinx/environment/collectors/toctree.py +54 -22
- sphinx/errors.py +4 -1
- sphinx/events.py +314 -7
- sphinx/ext/apidoc.py +42 -18
- sphinx/ext/autodoc/__init__.py +52 -24
- sphinx/ext/autodoc/importer.py +6 -9
- sphinx/ext/autosectionlabel.py +1 -2
- sphinx/ext/autosummary/__init__.py +3 -1
- sphinx/ext/autosummary/generate.py +28 -14
- sphinx/ext/coverage.py +7 -7
- sphinx/ext/doctest.py +4 -8
- sphinx/ext/duration.py +6 -5
- sphinx/ext/inheritance_diagram.py +1 -1
- sphinx/ext/intersphinx/_cli.py +6 -4
- sphinx/ext/intersphinx/_load.py +77 -32
- sphinx/ext/intersphinx/_resolve.py +173 -79
- sphinx/ext/intersphinx/_shared.py +7 -5
- sphinx/ext/linkcode.py +7 -1
- sphinx/ext/mathjax.py +1 -2
- sphinx/ext/napoleon/__init__.py +37 -24
- sphinx/ext/napoleon/docstring.py +202 -134
- sphinx/ext/todo.py +5 -3
- sphinx/highlighting.py +9 -2
- sphinx/io.py +1 -1
- sphinx/jinja2glue.py +27 -6
- sphinx/locale/__init__.py +6 -2
- sphinx/locale/ar/LC_MESSAGES/sphinx.js +8 -1
- sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ar/LC_MESSAGES/sphinx.po +2246 -2288
- sphinx/locale/bg/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bg/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/bn/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/bn/LC_MESSAGES/sphinx.po +2349 -2395
- sphinx/locale/ca/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ca/LC_MESSAGES/sphinx.po +2846 -2892
- sphinx/locale/cak/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cak/LC_MESSAGES/sphinx.po +2213 -2259
- sphinx/locale/cs/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cs/LC_MESSAGES/sphinx.po +2225 -2269
- sphinx/locale/cy/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/cy/LC_MESSAGES/sphinx.po +2403 -2447
- sphinx/locale/da/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/da/LC_MESSAGES/sphinx.po +2214 -2260
- sphinx/locale/de/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de/LC_MESSAGES/sphinx.po +2230 -2276
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/el/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/el/LC_MESSAGES/sphinx.po +2619 -2665
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +2519 -2565
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/eo/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eo/LC_MESSAGES/sphinx.po +2232 -2278
- sphinx/locale/es/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es/LC_MESSAGES/sphinx.po +2516 -2561
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/et/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/et/LC_MESSAGES/sphinx.po +2317 -2363
- sphinx/locale/eu/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/eu/LC_MESSAGES/sphinx.po +2218 -2264
- sphinx/locale/fa/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fa/LC_MESSAGES/sphinx.po +2505 -2551
- sphinx/locale/fi/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fi/LC_MESSAGES/sphinx.po +2303 -2349
- sphinx/locale/fr/LC_MESSAGES/sphinx.js +6 -2
- sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr/LC_MESSAGES/sphinx.po +2863 -2908
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/gl/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/gl/LC_MESSAGES/sphinx.po +2571 -2617
- sphinx/locale/he/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/he/LC_MESSAGES/sphinx.po +2307 -2352
- sphinx/locale/hi/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi/LC_MESSAGES/sphinx.po +2580 -2626
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/hr/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hr/LC_MESSAGES/sphinx.po +2238 -2283
- sphinx/locale/hu/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/hu/LC_MESSAGES/sphinx.po +2228 -2274
- sphinx/locale/id/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/id/LC_MESSAGES/sphinx.po +2787 -2834
- sphinx/locale/is/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/is/LC_MESSAGES/sphinx.po +2224 -2270
- sphinx/locale/it/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/it/LC_MESSAGES/sphinx.po +2231 -2276
- sphinx/locale/ja/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ja/LC_MESSAGES/sphinx.po +2507 -2554
- sphinx/locale/ka/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ka/LC_MESSAGES/sphinx.po +2428 -2474
- sphinx/locale/ko/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ko/LC_MESSAGES/sphinx.po +2516 -2563
- sphinx/locale/lt/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lt/LC_MESSAGES/sphinx.po +2425 -2469
- sphinx/locale/lv/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/lv/LC_MESSAGES/sphinx.po +2362 -2407
- sphinx/locale/mk/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/mk/LC_MESSAGES/sphinx.po +2121 -2167
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +2220 -2266
- sphinx/locale/ne/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ne/LC_MESSAGES/sphinx.po +2221 -2267
- sphinx/locale/nl/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/nl/LC_MESSAGES/sphinx.po +2240 -2286
- sphinx/locale/pl/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pl/LC_MESSAGES/sphinx.po +2319 -2363
- sphinx/locale/pt/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt/LC_MESSAGES/sphinx.po +2114 -2159
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +2854 -2899
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +2224 -2269
- sphinx/locale/ro/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ro/LC_MESSAGES/sphinx.po +2226 -2271
- sphinx/locale/ru/LC_MESSAGES/sphinx.js +8 -3
- sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ru/LC_MESSAGES/sphinx.po +2841 -2885
- sphinx/locale/si/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/si/LC_MESSAGES/sphinx.po +2294 -2340
- sphinx/locale/sk/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sk/LC_MESSAGES/sphinx.po +2497 -2541
- sphinx/locale/sl/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sl/LC_MESSAGES/sphinx.po +2331 -2375
- sphinx/locale/sphinx.pot +2121 -2167
- sphinx/locale/sq/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sq/LC_MESSAGES/sphinx.po +2855 -2901
- sphinx/locale/sr/LC_MESSAGES/sphinx.js +5 -1
- sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sr/LC_MESSAGES/sphinx.po +2203 -2248
- sphinx/locale/sr@latin/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sr_RS/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sv/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/sv/LC_MESSAGES/sphinx.po +2423 -2469
- sphinx/locale/te/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/te/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/tr/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/tr/LC_MESSAGES/sphinx.po +2443 -2489
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js +6 -1
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +2329 -2373
- sphinx/locale/ur/LC_MESSAGES/sphinx.js +4 -1
- sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/ur/LC_MESSAGES/sphinx.po +2113 -2159
- sphinx/locale/vi/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/vi/LC_MESSAGES/sphinx.po +2199 -2246
- sphinx/locale/yue/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/yue/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +2845 -2892
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.js +3 -1
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
- sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +2112 -2159
- sphinx/parsers.py +3 -1
- sphinx/project.py +6 -2
- sphinx/pycode/__init__.py +11 -4
- sphinx/pycode/ast.py +58 -58
- sphinx/pycode/parser.py +49 -28
- sphinx/pygments_styles.py +49 -49
- sphinx/registry.py +8 -3
- sphinx/roles.py +133 -13
- sphinx/search/__init__.py +146 -87
- sphinx/search/da.py +2 -4
- sphinx/search/de.py +2 -4
- sphinx/search/en.py +4 -4
- sphinx/search/es.py +2 -4
- sphinx/search/fi.py +2 -4
- sphinx/search/fr.py +2 -4
- sphinx/search/hu.py +2 -4
- sphinx/search/it.py +2 -4
- sphinx/search/ja.py +55 -32
- sphinx/search/nl.py +2 -4
- sphinx/search/no.py +2 -4
- sphinx/search/pt.py +2 -4
- sphinx/search/ro.py +0 -2
- sphinx/search/ru.py +2 -4
- sphinx/search/sv.py +2 -4
- sphinx/search/tr.py +0 -2
- sphinx/search/zh.py +18 -13
- sphinx/templates/graphviz/graphviz.css +0 -7
- sphinx/testing/fixtures.py +6 -5
- sphinx/testing/path.py +7 -5
- sphinx/testing/util.py +63 -29
- sphinx/texinputs/sphinx.sty +107 -39
- sphinx/texinputs/sphinxlatexadmonitions.sty +51 -35
- sphinx/texinputs/sphinxlatexcontainers.sty +1 -1
- sphinx/texinputs/sphinxlatexgraphics.sty +3 -2
- sphinx/texinputs/sphinxlatexindbibtoc.sty +1 -1
- sphinx/texinputs/sphinxlatexlists.sty +1 -1
- sphinx/texinputs/sphinxlatexliterals.sty +4 -1
- sphinx/texinputs/sphinxlatexnumfig.sty +22 -9
- sphinx/texinputs/sphinxlatexobjects.sty +1 -1
- sphinx/texinputs/sphinxlatexshadowbox.sty +72 -10
- sphinx/texinputs/sphinxlatexstyleheadings.sty +7 -2
- sphinx/texinputs/sphinxlatexstylepage.sty +2 -8
- sphinx/texinputs/sphinxlatexstyletext.sty +2 -4
- sphinx/texinputs/sphinxlatextables.sty +1 -1
- sphinx/texinputs/sphinxoptionsgeometry.sty +1 -1
- sphinx/texinputs/sphinxoptionshyperref.sty +1 -1
- sphinx/themes/agogo/layout.html +1 -10
- sphinx/themes/agogo/static/agogo.css.jinja +0 -7
- sphinx/themes/basic/defindex.html +1 -8
- sphinx/themes/basic/domainindex.html +1 -9
- sphinx/themes/basic/genindex-single.html +1 -9
- sphinx/themes/basic/genindex-split.html +1 -9
- sphinx/themes/basic/genindex.html +1 -9
- sphinx/themes/basic/globaltoc.html +1 -9
- sphinx/themes/basic/layout.html +1 -9
- sphinx/themes/basic/localtoc.html +1 -9
- sphinx/themes/basic/page.html +1 -9
- sphinx/themes/basic/relations.html +1 -9
- sphinx/themes/basic/search.html +1 -9
- sphinx/themes/basic/searchbox.html +1 -9
- sphinx/themes/basic/searchfield.html +4 -10
- sphinx/themes/basic/sourcelink.html +1 -9
- sphinx/themes/basic/static/basic.css.jinja +2 -13
- sphinx/themes/basic/static/doctools.js +0 -7
- sphinx/themes/basic/static/language_data.js.jinja +0 -7
- sphinx/themes/basic/static/searchtools.js +25 -13
- sphinx/themes/bizstyle/layout.html +1 -9
- sphinx/themes/bizstyle/static/bizstyle.css.jinja +0 -7
- sphinx/themes/bizstyle/static/bizstyle.js.jinja +5 -11
- sphinx/themes/classic/layout.html +1 -9
- sphinx/themes/classic/static/classic.css.jinja +0 -7
- sphinx/themes/classic/static/sidebar.js.jinja +0 -6
- sphinx/themes/epub/epub-cover.html +1 -9
- sphinx/themes/epub/layout.html +1 -9
- sphinx/themes/epub/static/epub.css.jinja +0 -7
- sphinx/themes/haiku/layout.html +1 -9
- sphinx/themes/haiku/static/haiku.css.jinja +0 -6
- sphinx/themes/nature/static/nature.css.jinja +0 -7
- sphinx/themes/nonav/layout.html +1 -9
- sphinx/themes/nonav/static/nonav.css.jinja +0 -7
- sphinx/themes/pyramid/static/epub.css.jinja +0 -7
- sphinx/themes/pyramid/static/pyramid.css.jinja +0 -7
- sphinx/themes/scrolls/layout.html +1 -10
- sphinx/themes/scrolls/static/scrolls.css.jinja +0 -7
- sphinx/themes/sphinxdoc/static/sphinxdoc.css.jinja +2 -7
- sphinx/themes/traditional/static/traditional.css.jinja +0 -7
- sphinx/theming.py +18 -6
- sphinx/transforms/__init__.py +56 -35
- sphinx/transforms/compact_bullet_list.py +3 -2
- sphinx/transforms/i18n.py +132 -50
- sphinx/transforms/post_transforms/__init__.py +94 -43
- sphinx/transforms/post_transforms/code.py +7 -6
- sphinx/transforms/post_transforms/images.py +71 -54
- sphinx/transforms/references.py +1 -2
- sphinx/util/__init__.py +23 -194
- sphinx/util/_files.py +80 -0
- sphinx/util/_importer.py +27 -0
- sphinx/util/_io.py +1 -2
- sphinx/util/_lines.py +26 -0
- sphinx/util/_pathlib.py +5 -2
- sphinx/util/_serialise.py +53 -0
- sphinx/util/_timestamps.py +2 -1
- sphinx/util/_uri.py +16 -0
- sphinx/util/cfamily.py +48 -25
- sphinx/util/console.py +1 -0
- sphinx/util/display.py +1 -1
- sphinx/util/docfields.py +125 -45
- sphinx/util/docstrings.py +1 -1
- sphinx/util/docutils.py +118 -44
- sphinx/util/exceptions.py +11 -5
- sphinx/util/fileutil.py +53 -32
- sphinx/util/http_date.py +9 -7
- sphinx/util/i18n.py +49 -16
- sphinx/util/images.py +7 -6
- sphinx/util/inspect.py +29 -12
- sphinx/util/inventory.py +47 -29
- sphinx/util/logging.py +58 -85
- sphinx/util/matching.py +3 -3
- sphinx/util/math.py +1 -1
- sphinx/util/nodes.py +176 -108
- sphinx/util/osutil.py +13 -10
- sphinx/util/parallel.py +5 -4
- sphinx/util/parsing.py +5 -3
- sphinx/util/png.py +3 -3
- sphinx/util/requests.py +8 -4
- sphinx/util/rst.py +5 -3
- sphinx/util/tags.py +5 -2
- sphinx/util/template.py +26 -11
- sphinx/util/texescape.py +2 -2
- sphinx/util/typing.py +89 -38
- sphinx/versioning.py +3 -1
- sphinx/writers/html.py +22 -7
- sphinx/writers/html5.py +113 -64
- sphinx/writers/latex.py +408 -221
- sphinx/writers/manpage.py +25 -15
- sphinx/writers/texinfo.py +94 -82
- sphinx/writers/text.py +87 -53
- sphinx/writers/xml.py +5 -4
- sphinx-8.1.0.dist-info/LICENSE.rst +31 -0
- {sphinx-8.0.2.dist-info → sphinx-8.1.0.dist-info}/METADATA +13 -11
- sphinx-8.1.0.dist-info/RECORD +598 -0
- sphinx-8.0.2.dist-info/LICENSE.rst +0 -67
- sphinx-8.0.2.dist-info/RECORD +0 -590
- {sphinx-8.0.2.dist-info → sphinx-8.1.0.dist-info}/WHEEL +0 -0
- {sphinx-8.0.2.dist-info → sphinx-8.1.0.dist-info}/entry_points.txt +0 -0
sphinx/ext/autodoc/__init__.py
CHANGED
|
@@ -11,7 +11,7 @@ import functools
|
|
|
11
11
|
import operator
|
|
12
12
|
import re
|
|
13
13
|
from inspect import Parameter, Signature
|
|
14
|
-
from typing import TYPE_CHECKING, Any,
|
|
14
|
+
from typing import TYPE_CHECKING, Any, NewType, TypeVar
|
|
15
15
|
|
|
16
16
|
from docutils.statemachine import StringList
|
|
17
17
|
|
|
@@ -42,11 +42,19 @@ from sphinx.util.typing import (
|
|
|
42
42
|
if TYPE_CHECKING:
|
|
43
43
|
from collections.abc import Callable, Iterator, Sequence
|
|
44
44
|
from types import ModuleType
|
|
45
|
+
from typing import ClassVar, Literal, TypeAlias
|
|
45
46
|
|
|
46
47
|
from sphinx.application import Sphinx
|
|
47
48
|
from sphinx.environment import BuildEnvironment
|
|
48
49
|
from sphinx.ext.autodoc.directive import DocumenterBridge
|
|
49
50
|
|
|
51
|
+
_AutodocObjType = Literal[
|
|
52
|
+
'module', 'class', 'exception', 'function', 'method', 'attribute'
|
|
53
|
+
]
|
|
54
|
+
_AutodocProcessDocstringListener: TypeAlias = Callable[
|
|
55
|
+
[Sphinx, _AutodocObjType, str, Any, dict[str, bool], list[str]], None
|
|
56
|
+
]
|
|
57
|
+
|
|
50
58
|
logger = logging.getLogger(__name__)
|
|
51
59
|
|
|
52
60
|
|
|
@@ -177,7 +185,9 @@ def merge_members_option(options: dict) -> None:
|
|
|
177
185
|
|
|
178
186
|
# Some useful event listener factories for autodoc-process-docstring.
|
|
179
187
|
|
|
180
|
-
def cut_lines(
|
|
188
|
+
def cut_lines(
|
|
189
|
+
pre: int, post: int = 0, what: str | list[str] | None = None
|
|
190
|
+
) -> _AutodocProcessDocstringListener:
|
|
181
191
|
"""Return a listener that removes the first *pre* and last *post*
|
|
182
192
|
lines of every docstring. If *what* is a sequence of strings,
|
|
183
193
|
only docstrings of a type in *what* will be processed.
|
|
@@ -185,13 +195,21 @@ def cut_lines(pre: int, post: int = 0, what: str | None = None) -> Callable:
|
|
|
185
195
|
Use like this (e.g. in the ``setup()`` function of :file:`conf.py`)::
|
|
186
196
|
|
|
187
197
|
from sphinx.ext.autodoc import cut_lines
|
|
188
|
-
app.connect('autodoc-process-docstring', cut_lines(4, what=
|
|
198
|
+
app.connect('autodoc-process-docstring', cut_lines(4, what={'module'}))
|
|
189
199
|
|
|
190
200
|
This can (and should) be used in place of :confval:`automodule_skip_lines`.
|
|
191
201
|
"""
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
202
|
+
what_unique = frozenset(what or ())
|
|
203
|
+
|
|
204
|
+
def process(
|
|
205
|
+
app: Sphinx,
|
|
206
|
+
what_: _AutodocObjType,
|
|
207
|
+
name: str,
|
|
208
|
+
obj: Any,
|
|
209
|
+
options: dict[str, bool],
|
|
210
|
+
lines: list[str],
|
|
211
|
+
) -> None:
|
|
212
|
+
if what_ not in what_unique:
|
|
195
213
|
return
|
|
196
214
|
del lines[:pre]
|
|
197
215
|
if post:
|
|
@@ -210,7 +228,7 @@ def between(
|
|
|
210
228
|
what: Sequence[str] | None = None,
|
|
211
229
|
keepempty: bool = False,
|
|
212
230
|
exclude: bool = False,
|
|
213
|
-
) ->
|
|
231
|
+
) -> _AutodocProcessDocstringListener:
|
|
214
232
|
"""Return a listener that either keeps, or if *exclude* is True excludes,
|
|
215
233
|
lines between lines that match the *marker* regular expression. If no line
|
|
216
234
|
matches, the resulting docstring would be empty, so no change will be made
|
|
@@ -221,8 +239,14 @@ def between(
|
|
|
221
239
|
"""
|
|
222
240
|
marker_re = re.compile(marker)
|
|
223
241
|
|
|
224
|
-
def process(
|
|
225
|
-
|
|
242
|
+
def process(
|
|
243
|
+
app: Sphinx,
|
|
244
|
+
what_: _AutodocObjType,
|
|
245
|
+
name: str,
|
|
246
|
+
obj: Any,
|
|
247
|
+
options: dict[str, bool],
|
|
248
|
+
lines: list[str],
|
|
249
|
+
) -> None:
|
|
226
250
|
if what and what_ not in what:
|
|
227
251
|
return
|
|
228
252
|
deleted = 0
|
|
@@ -247,7 +271,7 @@ def between(
|
|
|
247
271
|
|
|
248
272
|
# This class is used only in ``sphinx.ext.autodoc.directive``,
|
|
249
273
|
# But we define this class here to keep compatibility (see #4538)
|
|
250
|
-
class Options(dict):
|
|
274
|
+
class Options(dict[str, Any]):
|
|
251
275
|
"""A dict/attribute hybrid that returns None on nonexisting keys."""
|
|
252
276
|
|
|
253
277
|
def copy(self) -> Options:
|
|
@@ -415,9 +439,10 @@ class Documenter:
|
|
|
415
439
|
"""
|
|
416
440
|
with mock(self.config.autodoc_mock_imports):
|
|
417
441
|
try:
|
|
418
|
-
ret = import_object(
|
|
419
|
-
|
|
420
|
-
|
|
442
|
+
ret = import_object(
|
|
443
|
+
self.modname, self.objpath, self.objtype,
|
|
444
|
+
attrgetter=self.get_attr,
|
|
445
|
+
)
|
|
421
446
|
self.module, self.parent, self.object_name, self.object = ret
|
|
422
447
|
if ismock(self.object):
|
|
423
448
|
self.object = undecorate(self.object)
|
|
@@ -1076,7 +1101,8 @@ class ModuleDocumenter(Documenter):
|
|
|
1076
1101
|
else:
|
|
1077
1102
|
logger.warning(__('missing attribute mentioned in :members: option: '
|
|
1078
1103
|
'module %s, attribute %s'),
|
|
1079
|
-
safe_getattr(self.object, '__name__', '???'
|
|
1104
|
+
safe_getattr(self.object, '__name__', '???'),
|
|
1105
|
+
name,
|
|
1080
1106
|
type='autodoc')
|
|
1081
1107
|
return False, ret
|
|
1082
1108
|
|
|
@@ -1960,7 +1986,7 @@ class UninitializedGlobalVariableMixin(DataDocumenterMixinBase):
|
|
|
1960
1986
|
# annotation only instance variable (PEP-526)
|
|
1961
1987
|
try:
|
|
1962
1988
|
with mock(self.config.autodoc_mock_imports):
|
|
1963
|
-
parent = import_module(self.modname
|
|
1989
|
+
parent = import_module(self.modname)
|
|
1964
1990
|
annotations = get_type_hints(parent, None,
|
|
1965
1991
|
self.config.autodoc_type_aliases,
|
|
1966
1992
|
include_extras=True)
|
|
@@ -2455,9 +2481,10 @@ class RuntimeInstanceAttributeMixin(DataDocumenterMixinBase):
|
|
|
2455
2481
|
except ImportError as exc:
|
|
2456
2482
|
try:
|
|
2457
2483
|
with mock(self.config.autodoc_mock_imports):
|
|
2458
|
-
ret = import_object(
|
|
2459
|
-
|
|
2460
|
-
|
|
2484
|
+
ret = import_object(
|
|
2485
|
+
self.modname, self.objpath[:-1], 'class',
|
|
2486
|
+
attrgetter=self.get_attr, # type: ignore[attr-defined]
|
|
2487
|
+
)
|
|
2461
2488
|
parent = ret[3]
|
|
2462
2489
|
if self.is_runtime_instance_attribute(parent):
|
|
2463
2490
|
self.object = self.RUNTIME_INSTANCE_ATTRIBUTE
|
|
@@ -2502,16 +2529,17 @@ class UninitializedInstanceAttributeMixin(DataDocumenterMixinBase):
|
|
|
2502
2529
|
return self.objpath[-1] in annotations
|
|
2503
2530
|
|
|
2504
2531
|
def import_object(self, raiseerror: bool = False) -> bool:
|
|
2505
|
-
"""Check the
|
|
2532
|
+
"""Check the existence of uninitialized instance attribute when failed to import
|
|
2506
2533
|
the attribute.
|
|
2507
2534
|
"""
|
|
2508
2535
|
try:
|
|
2509
2536
|
return super().import_object(raiseerror=True) # type: ignore[misc]
|
|
2510
2537
|
except ImportError as exc:
|
|
2511
2538
|
try:
|
|
2512
|
-
ret = import_object(
|
|
2513
|
-
|
|
2514
|
-
|
|
2539
|
+
ret = import_object(
|
|
2540
|
+
self.modname, self.objpath[:-1], 'class',
|
|
2541
|
+
attrgetter=self.get_attr, # type: ignore[attr-defined]
|
|
2542
|
+
)
|
|
2515
2543
|
parent = ret[3]
|
|
2516
2544
|
if self.is_uninitialized_instance_attribute(parent):
|
|
2517
2545
|
self.object = UNINITIALIZED_ATTR
|
|
@@ -2722,7 +2750,7 @@ class PropertyDocumenter(DocstringStripSignatureMixin, # type: ignore[misc]
|
|
|
2722
2750
|
return False
|
|
2723
2751
|
|
|
2724
2752
|
def import_object(self, raiseerror: bool = False) -> bool:
|
|
2725
|
-
"""Check the
|
|
2753
|
+
"""Check the existence of uninitialized instance attribute when failed to import
|
|
2726
2754
|
the attribute.
|
|
2727
2755
|
"""
|
|
2728
2756
|
ret = super().import_object(raiseerror)
|
|
@@ -2795,7 +2823,7 @@ class PropertyDocumenter(DocstringStripSignatureMixin, # type: ignore[misc]
|
|
|
2795
2823
|
|
|
2796
2824
|
def autodoc_attrgetter(app: Sphinx, obj: Any, name: str, *defargs: Any) -> Any:
|
|
2797
2825
|
"""Alternative getattr() for types"""
|
|
2798
|
-
for typ, func in app.registry.
|
|
2826
|
+
for typ, func in app.registry.autodoc_attrgetters.items():
|
|
2799
2827
|
if isinstance(obj, typ):
|
|
2800
2828
|
return func(obj, name, *defargs)
|
|
2801
2829
|
|
sphinx/ext/autodoc/importer.py
CHANGED
|
@@ -137,24 +137,22 @@ def unmangle(subject: Any, name: str) -> str | None:
|
|
|
137
137
|
return name
|
|
138
138
|
|
|
139
139
|
|
|
140
|
-
def import_module(modname: str
|
|
140
|
+
def import_module(modname: str) -> Any:
|
|
141
141
|
"""Call importlib.import_module(modname), convert exceptions to ImportError."""
|
|
142
142
|
try:
|
|
143
|
-
|
|
144
|
-
return importlib.import_module(modname)
|
|
143
|
+
return importlib.import_module(modname)
|
|
145
144
|
except BaseException as exc:
|
|
146
145
|
# Importing modules may cause any side effects, including
|
|
147
146
|
# SystemExit, so we need to catch all errors.
|
|
148
147
|
raise ImportError(exc, traceback.format_exc()) from exc
|
|
149
148
|
|
|
150
149
|
|
|
151
|
-
def _reload_module(module: ModuleType
|
|
150
|
+
def _reload_module(module: ModuleType) -> Any:
|
|
152
151
|
"""
|
|
153
152
|
Call importlib.reload(module), convert exceptions to ImportError
|
|
154
153
|
"""
|
|
155
154
|
try:
|
|
156
|
-
|
|
157
|
-
return importlib.reload(module)
|
|
155
|
+
return importlib.reload(module)
|
|
158
156
|
except BaseException as exc:
|
|
159
157
|
# Importing modules may cause any side effects, including
|
|
160
158
|
# SystemExit, so we need to catch all errors.
|
|
@@ -162,8 +160,7 @@ def _reload_module(module: ModuleType, warningiserror: bool = False) -> Any:
|
|
|
162
160
|
|
|
163
161
|
|
|
164
162
|
def import_object(modname: str, objpath: list[str], objtype: str = '',
|
|
165
|
-
attrgetter: Callable[[Any, str], Any] = safe_getattr
|
|
166
|
-
warningiserror: bool = False) -> Any:
|
|
163
|
+
attrgetter: Callable[[Any, str], Any] = safe_getattr) -> Any:
|
|
167
164
|
if objpath:
|
|
168
165
|
logger.debug('[autodoc] from %s import %s', modname, '.'.join(objpath))
|
|
169
166
|
else:
|
|
@@ -176,7 +173,7 @@ def import_object(modname: str, objpath: list[str], objtype: str = '',
|
|
|
176
173
|
while module is None:
|
|
177
174
|
try:
|
|
178
175
|
original_module_names = frozenset(sys.modules)
|
|
179
|
-
module = import_module(modname
|
|
176
|
+
module = import_module(modname)
|
|
180
177
|
if os.environ.get('SPHINX_AUTODOC_RELOAD_MODULES'):
|
|
181
178
|
new_modules = [m for m in sys.modules if m not in original_module_names]
|
|
182
179
|
# Try reloading modules with ``typing.TYPE_CHECKING == True``.
|
sphinx/ext/autosectionlabel.py
CHANGED
|
@@ -7,7 +7,6 @@ from typing import TYPE_CHECKING, cast
|
|
|
7
7
|
from docutils import nodes
|
|
8
8
|
|
|
9
9
|
import sphinx
|
|
10
|
-
from sphinx.domains.std import StandardDomain
|
|
11
10
|
from sphinx.locale import __
|
|
12
11
|
from sphinx.util import logging
|
|
13
12
|
from sphinx.util.nodes import clean_astext
|
|
@@ -31,7 +30,7 @@ def get_node_depth(node: Node) -> int:
|
|
|
31
30
|
|
|
32
31
|
|
|
33
32
|
def register_sections_as_label(app: Sphinx, document: Node) -> None:
|
|
34
|
-
domain =
|
|
33
|
+
domain = app.env.domains.standard_domain
|
|
35
34
|
for node in document.findall(nodes.section):
|
|
36
35
|
if (app.config.autosectionlabel_maxdepth and
|
|
37
36
|
get_node_depth(node) >= app.config.autosectionlabel_maxdepth):
|
|
@@ -151,6 +151,8 @@ def autosummary_table_visit_html(self: HTML5Translator, node: autosummary_table)
|
|
|
151
151
|
# -- autodoc integration -------------------------------------------------------
|
|
152
152
|
|
|
153
153
|
class FakeApplication:
|
|
154
|
+
verbosity = 0
|
|
155
|
+
|
|
154
156
|
def __init__(self) -> None:
|
|
155
157
|
self.doctreedir = None
|
|
156
158
|
self.events = None
|
|
@@ -754,7 +756,7 @@ class AutoLink(SphinxRole):
|
|
|
754
756
|
"""
|
|
755
757
|
|
|
756
758
|
def run(self) -> tuple[list[Node], list[system_message]]:
|
|
757
|
-
pyobj_role = self.env.
|
|
759
|
+
pyobj_role = self.env.domains.python_domain.role('obj')
|
|
758
760
|
assert pyobj_role is not None
|
|
759
761
|
objects, errors = pyobj_role('obj', self.rawtext, self.text, self.lineno,
|
|
760
762
|
self.inliner, self.options, self.content)
|
|
@@ -71,7 +71,7 @@ class DummyApplication:
|
|
|
71
71
|
self.translator = translator
|
|
72
72
|
self.verbosity = 0
|
|
73
73
|
self._warncount = 0
|
|
74
|
-
self.
|
|
74
|
+
self._exception_on_warning = False
|
|
75
75
|
|
|
76
76
|
self.config.add('autosummary_context', {}, 'env', ())
|
|
77
77
|
self.config.add('autosummary_filename_map', {}, 'env', ())
|
|
@@ -131,7 +131,9 @@ class AutosummaryRenderer:
|
|
|
131
131
|
msg = 'Expected a Sphinx application object!'
|
|
132
132
|
raise ValueError(msg)
|
|
133
133
|
|
|
134
|
-
system_templates_path = [
|
|
134
|
+
system_templates_path = [
|
|
135
|
+
os.path.join(package_dir, 'ext', 'autosummary', 'templates')
|
|
136
|
+
]
|
|
135
137
|
loader = SphinxTemplateLoader(
|
|
136
138
|
app.srcdir, app.config.templates_path, system_templates_path
|
|
137
139
|
)
|
|
@@ -297,7 +299,9 @@ def generate_autosummary_content(
|
|
|
297
299
|
ns['members'] = scanner.scan(imported_members)
|
|
298
300
|
|
|
299
301
|
respect_module_all = not app.config.autosummary_ignore_module_all
|
|
300
|
-
imported_members = imported_members or (
|
|
302
|
+
imported_members = imported_members or (
|
|
303
|
+
'__all__' in dir(obj) and respect_module_all
|
|
304
|
+
)
|
|
301
305
|
|
|
302
306
|
ns['functions'], ns['all_functions'] = _get_members(
|
|
303
307
|
doc, app, obj, {'function'}, imported=imported_members
|
|
@@ -378,7 +382,9 @@ def generate_autosummary_content(
|
|
|
378
382
|
|
|
379
383
|
def _skip_member(app: Sphinx, obj: Any, name: str, objtype: str) -> bool:
|
|
380
384
|
try:
|
|
381
|
-
return app.emit_firstresult(
|
|
385
|
+
return app.emit_firstresult(
|
|
386
|
+
'autodoc-skip-member', objtype, name, obj, False, {}
|
|
387
|
+
)
|
|
382
388
|
except Exception as exc:
|
|
383
389
|
logger.warning(
|
|
384
390
|
__(
|
|
@@ -465,7 +471,11 @@ def _get_module_attrs(name: str, members: Any) -> tuple[list[str], list[str]]:
|
|
|
465
471
|
|
|
466
472
|
|
|
467
473
|
def _get_modules(
|
|
468
|
-
obj: Any,
|
|
474
|
+
obj: Any,
|
|
475
|
+
*,
|
|
476
|
+
skip: Sequence[str],
|
|
477
|
+
name: str,
|
|
478
|
+
public_members: Sequence[str] | None = None,
|
|
469
479
|
) -> tuple[list[str], list[str]]:
|
|
470
480
|
items: list[str] = []
|
|
471
481
|
public: list[str] = []
|
|
@@ -511,7 +521,9 @@ def generate_autosummary_docs(
|
|
|
511
521
|
showed_sources = sorted(sources)
|
|
512
522
|
if len(showed_sources) > 20:
|
|
513
523
|
showed_sources = showed_sources[:10] + ['...'] + showed_sources[-10:]
|
|
514
|
-
logger.info(
|
|
524
|
+
logger.info(
|
|
525
|
+
__('[autosummary] generating autosummary for: %s'), ', '.join(showed_sources)
|
|
526
|
+
)
|
|
515
527
|
|
|
516
528
|
if output_dir:
|
|
517
529
|
logger.info(__('[autosummary] writing to %s'), output_dir)
|
|
@@ -710,9 +722,7 @@ def find_autosummary_in_lines(
|
|
|
710
722
|
|
|
711
723
|
m = autosummary_item_re.match(line)
|
|
712
724
|
if m:
|
|
713
|
-
name = m.group(1).strip()
|
|
714
|
-
if name.startswith('~'):
|
|
715
|
-
name = name[1:]
|
|
725
|
+
name = m.group(1).strip().removeprefix('~')
|
|
716
726
|
if current_module and not name.startswith(current_module + '.'):
|
|
717
727
|
name = f'{current_module}.{name}'
|
|
718
728
|
documented.append(AutosummaryEntry(name, toctree, template, recursive))
|
|
@@ -736,7 +746,9 @@ def find_autosummary_in_lines(
|
|
|
736
746
|
if m:
|
|
737
747
|
current_module = m.group(1).strip()
|
|
738
748
|
# recurse into the automodule docstring
|
|
739
|
-
documented.extend(
|
|
749
|
+
documented.extend(
|
|
750
|
+
find_autosummary_in_docstring(current_module, filename=filename)
|
|
751
|
+
)
|
|
740
752
|
continue
|
|
741
753
|
|
|
742
754
|
m = module_re.match(line)
|
|
@@ -789,7 +801,7 @@ The format of the autosummary directive is documented in the
|
|
|
789
801
|
action='store',
|
|
790
802
|
dest='suffix',
|
|
791
803
|
default='rst',
|
|
792
|
-
help=__('default suffix for files (default:
|
|
804
|
+
help=__('default suffix for files (default: %(default)s)'),
|
|
793
805
|
)
|
|
794
806
|
parser.add_argument(
|
|
795
807
|
'-t',
|
|
@@ -797,7 +809,7 @@ The format of the autosummary directive is documented in the
|
|
|
797
809
|
action='store',
|
|
798
810
|
dest='templates',
|
|
799
811
|
default=None,
|
|
800
|
-
help=__('custom template directory (default:
|
|
812
|
+
help=__('custom template directory (default: %(default)s)'),
|
|
801
813
|
)
|
|
802
814
|
parser.add_argument(
|
|
803
815
|
'-i',
|
|
@@ -805,7 +817,7 @@ The format of the autosummary directive is documented in the
|
|
|
805
817
|
action='store_true',
|
|
806
818
|
dest='imported_members',
|
|
807
819
|
default=False,
|
|
808
|
-
help=__('document imported members (default:
|
|
820
|
+
help=__('document imported members (default: %(default)s)'),
|
|
809
821
|
)
|
|
810
822
|
parser.add_argument(
|
|
811
823
|
'-a',
|
|
@@ -823,7 +835,9 @@ The format of the autosummary directive is documented in the
|
|
|
823
835
|
action='store_true',
|
|
824
836
|
dest='remove_old',
|
|
825
837
|
default=False,
|
|
826
|
-
help=__(
|
|
838
|
+
help=__(
|
|
839
|
+
'Remove existing files in the output directory that were not generated'
|
|
840
|
+
),
|
|
827
841
|
)
|
|
828
842
|
|
|
829
843
|
return parser
|
sphinx/ext/coverage.py
CHANGED
|
@@ -192,7 +192,7 @@ class CoverageBuilder(Builder):
|
|
|
192
192
|
def get_outdated_docs(self) -> str:
|
|
193
193
|
return 'coverage overview'
|
|
194
194
|
|
|
195
|
-
def
|
|
195
|
+
def write_documents(self, _docnames: Set[str]) -> None:
|
|
196
196
|
self.py_undoc: dict[str, dict[str, Any]] = {}
|
|
197
197
|
self.py_undocumented: dict[str, Set[str]] = {}
|
|
198
198
|
self.py_documented: dict[str, Set[str]] = {}
|
|
@@ -205,7 +205,7 @@ class CoverageBuilder(Builder):
|
|
|
205
205
|
|
|
206
206
|
def build_c_coverage(self) -> None:
|
|
207
207
|
c_objects = {}
|
|
208
|
-
for obj in self.env.domains
|
|
208
|
+
for obj in self.env.domains.c_domain.get_objects():
|
|
209
209
|
c_objects[obj[2]] = obj[1]
|
|
210
210
|
for filename in self.c_sourcefiles:
|
|
211
211
|
undoc: set[tuple[str, str]] = set()
|
|
@@ -241,7 +241,7 @@ class CoverageBuilder(Builder):
|
|
|
241
241
|
for typ, name in sorted(undoc):
|
|
242
242
|
op.write(' * %-50s [%9s]\n' % (name, typ))
|
|
243
243
|
if self.config.coverage_show_missing_items:
|
|
244
|
-
if self.app.quiet
|
|
244
|
+
if self.app.quiet:
|
|
245
245
|
logger.warning(__('undocumented c api: %s [%s] in file %s'),
|
|
246
246
|
name, typ, filename)
|
|
247
247
|
else:
|
|
@@ -423,7 +423,7 @@ class CoverageBuilder(Builder):
|
|
|
423
423
|
op.write('Functions:\n')
|
|
424
424
|
op.writelines(' * %s\n' % x for x in undoc['funcs'])
|
|
425
425
|
if self.config.coverage_show_missing_items:
|
|
426
|
-
if self.app.quiet
|
|
426
|
+
if self.app.quiet:
|
|
427
427
|
for func in undoc['funcs']:
|
|
428
428
|
logger.warning(
|
|
429
429
|
__('undocumented python function: %s :: %s'),
|
|
@@ -440,7 +440,7 @@ class CoverageBuilder(Builder):
|
|
|
440
440
|
if not methods:
|
|
441
441
|
op.write(' * %s\n' % class_name)
|
|
442
442
|
if self.config.coverage_show_missing_items:
|
|
443
|
-
if self.app.quiet
|
|
443
|
+
if self.app.quiet:
|
|
444
444
|
logger.warning(
|
|
445
445
|
__('undocumented python class: %s :: %s'),
|
|
446
446
|
name, class_name)
|
|
@@ -452,10 +452,10 @@ class CoverageBuilder(Builder):
|
|
|
452
452
|
op.write(' * %s -- missing methods:\n\n' % class_name)
|
|
453
453
|
op.writelines(' - %s\n' % x for x in methods)
|
|
454
454
|
if self.config.coverage_show_missing_items:
|
|
455
|
-
if self.app.quiet
|
|
455
|
+
if self.app.quiet:
|
|
456
456
|
for meth in methods:
|
|
457
457
|
logger.warning(
|
|
458
|
-
__('undocumented python method:'
|
|
458
|
+
__('undocumented python method:'
|
|
459
459
|
' %s :: %s :: %s'),
|
|
460
460
|
name, class_name, meth)
|
|
461
461
|
else:
|
sphinx/ext/doctest.py
CHANGED
|
@@ -27,7 +27,7 @@ from sphinx.util.docutils import SphinxDirective
|
|
|
27
27
|
from sphinx.util.osutil import relpath
|
|
28
28
|
|
|
29
29
|
if TYPE_CHECKING:
|
|
30
|
-
from collections.abc import Callable,
|
|
30
|
+
from collections.abc import Callable, Set
|
|
31
31
|
|
|
32
32
|
from docutils.nodes import Element, Node, TextElement
|
|
33
33
|
|
|
@@ -322,7 +322,7 @@ class DocTestBuilder(Builder):
|
|
|
322
322
|
self.outfile.write(text)
|
|
323
323
|
|
|
324
324
|
def _warn_out(self, text: str) -> None:
|
|
325
|
-
if self.app.quiet
|
|
325
|
+
if self.app.quiet:
|
|
326
326
|
logger.warning(text)
|
|
327
327
|
else:
|
|
328
328
|
logger.info(text, nonl=True)
|
|
@@ -355,13 +355,9 @@ Doctest summary
|
|
|
355
355
|
if self.total_failures or self.setup_failures or self.cleanup_failures:
|
|
356
356
|
self.app.statuscode = 1
|
|
357
357
|
|
|
358
|
-
def
|
|
359
|
-
method: str = 'update') -> None:
|
|
360
|
-
if build_docnames is None:
|
|
361
|
-
build_docnames = sorted(self.env.all_docs)
|
|
362
|
-
|
|
358
|
+
def write_documents(self, docnames: Set[str]) -> None:
|
|
363
359
|
logger.info(bold('running tests...'))
|
|
364
|
-
for docname in
|
|
360
|
+
for docname in sorted(docnames):
|
|
365
361
|
# no need to resolve the doctree
|
|
366
362
|
doctree = self.env.get_doctree(docname)
|
|
367
363
|
self.test_doc(docname, doctree)
|
sphinx/ext/duration.py
CHANGED
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import time
|
|
6
6
|
from itertools import islice
|
|
7
7
|
from operator import itemgetter
|
|
8
|
-
from typing import TYPE_CHECKING
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
9
|
|
|
10
10
|
import sphinx
|
|
11
11
|
from sphinx.domains import Domain
|
|
@@ -13,6 +13,7 @@ from sphinx.locale import __
|
|
|
13
13
|
from sphinx.util import logging
|
|
14
14
|
|
|
15
15
|
if TYPE_CHECKING:
|
|
16
|
+
from collections.abc import Set
|
|
16
17
|
from typing import TypedDict
|
|
17
18
|
|
|
18
19
|
from docutils import nodes
|
|
@@ -43,7 +44,7 @@ class DurationDomain(Domain):
|
|
|
43
44
|
def clear_doc(self, docname: str) -> None:
|
|
44
45
|
self.reading_durations.pop(docname, None)
|
|
45
46
|
|
|
46
|
-
def merge_domaindata(self, docnames:
|
|
47
|
+
def merge_domaindata(self, docnames: Set[str], otherdata: _DurationDomainData) -> None: # type: ignore[override]
|
|
47
48
|
other_reading_durations = otherdata.get('reading_durations', {})
|
|
48
49
|
docnames_set = frozenset(docnames)
|
|
49
50
|
for docname, duration in other_reading_durations.items():
|
|
@@ -56,7 +57,7 @@ def on_builder_inited(app: Sphinx) -> None:
|
|
|
56
57
|
|
|
57
58
|
This clears the results of the last build.
|
|
58
59
|
"""
|
|
59
|
-
domain =
|
|
60
|
+
domain = app.env.domains['duration']
|
|
60
61
|
domain.clear()
|
|
61
62
|
|
|
62
63
|
|
|
@@ -69,13 +70,13 @@ def on_doctree_read(app: Sphinx, doctree: nodes.document) -> None:
|
|
|
69
70
|
"""Record a reading duration."""
|
|
70
71
|
started_at = app.env.temp_data['started_at']
|
|
71
72
|
duration = time.monotonic() - started_at
|
|
72
|
-
domain =
|
|
73
|
+
domain = app.env.domains['duration']
|
|
73
74
|
domain.note_reading_duration(duration)
|
|
74
75
|
|
|
75
76
|
|
|
76
77
|
def on_build_finished(app: Sphinx, error: Exception) -> None:
|
|
77
78
|
"""Display duration ranking on the current build."""
|
|
78
|
-
domain =
|
|
79
|
+
domain = app.env.domains['duration']
|
|
79
80
|
if not domain.reading_durations:
|
|
80
81
|
return
|
|
81
82
|
durations = sorted(domain.reading_durations.items(), key=itemgetter(1), reverse=True)
|
|
@@ -359,7 +359,7 @@ class InheritanceDiagram(SphinxDirective):
|
|
|
359
359
|
node = inheritance_diagram()
|
|
360
360
|
node.document = self.state.document
|
|
361
361
|
class_names = self.arguments[0].split()
|
|
362
|
-
class_role = self.env.
|
|
362
|
+
class_role = self.env.domains.python_domain.role('class')
|
|
363
363
|
# Store the original content for use as a hash
|
|
364
364
|
node['parts'] = self.options.get('parts', 0)
|
|
365
365
|
node['content'] = ', '.join(class_names)
|
sphinx/ext/intersphinx/_cli.py
CHANGED
|
@@ -10,9 +10,11 @@ from sphinx.ext.intersphinx._load import _fetch_inventory
|
|
|
10
10
|
def inspect_main(argv: list[str], /) -> int:
|
|
11
11
|
"""Debug functionality to print out an inventory"""
|
|
12
12
|
if len(argv) < 1:
|
|
13
|
-
print(
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
print(
|
|
14
|
+
'Print out an inventory file.\n'
|
|
15
|
+
'Error: must specify local path or URL to an inventory file.',
|
|
16
|
+
file=sys.stderr,
|
|
17
|
+
)
|
|
16
18
|
return 1
|
|
17
19
|
|
|
18
20
|
class MockConfig:
|
|
@@ -27,7 +29,7 @@ def inspect_main(argv: list[str], /) -> int:
|
|
|
27
29
|
target_uri='',
|
|
28
30
|
inv_location=filename,
|
|
29
31
|
config=MockConfig(), # type: ignore[arg-type]
|
|
30
|
-
srcdir='' # type: ignore[arg-type]
|
|
32
|
+
srcdir='', # type: ignore[arg-type]
|
|
31
33
|
)
|
|
32
34
|
for key in sorted(inv_data or {}):
|
|
33
35
|
print(key)
|