Sphinx 8.0.1__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.

Files changed (424) hide show
  1. sphinx/__init__.py +6 -3
  2. sphinx/_cli/__init__.py +40 -20
  3. sphinx/_cli/util/colour.py +5 -4
  4. sphinx/_cli/util/errors.py +28 -11
  5. sphinx/application.py +361 -38
  6. sphinx/builders/__init__.py +229 -83
  7. sphinx/builders/_epub_base.py +118 -71
  8. sphinx/builders/changes.py +39 -21
  9. sphinx/builders/dirhtml.py +4 -4
  10. sphinx/builders/dummy.py +2 -5
  11. sphinx/builders/epub3.py +43 -22
  12. sphinx/builders/gettext.py +43 -25
  13. sphinx/builders/html/__init__.py +284 -218
  14. sphinx/builders/html/_assets.py +62 -26
  15. sphinx/builders/html/_build_info.py +76 -0
  16. sphinx/builders/html/transforms.py +11 -9
  17. sphinx/builders/latex/__init__.py +139 -81
  18. sphinx/builders/latex/constants.py +7 -7
  19. sphinx/builders/latex/nodes.py +3 -2
  20. sphinx/builders/latex/theming.py +7 -5
  21. sphinx/builders/latex/transforms.py +27 -19
  22. sphinx/builders/linkcheck.py +146 -72
  23. sphinx/builders/manpage.py +30 -13
  24. sphinx/builders/singlehtml.py +22 -14
  25. sphinx/builders/texinfo.py +67 -37
  26. sphinx/builders/text.py +5 -5
  27. sphinx/builders/xml.py +6 -9
  28. sphinx/cmd/build.py +282 -103
  29. sphinx/cmd/make_mode.py +106 -63
  30. sphinx/cmd/quickstart.py +341 -145
  31. sphinx/config.py +45 -12
  32. sphinx/deprecation.py +8 -2
  33. sphinx/directives/__init__.py +28 -19
  34. sphinx/directives/code.py +86 -56
  35. sphinx/directives/other.py +50 -36
  36. sphinx/directives/patches.py +29 -19
  37. sphinx/domains/__init__.py +20 -120
  38. sphinx/domains/_domains_container.py +281 -0
  39. sphinx/domains/_index.py +110 -0
  40. sphinx/domains/c/__init__.py +3 -3
  41. sphinx/domains/c/_parser.py +10 -6
  42. sphinx/domains/changeset.py +5 -3
  43. sphinx/domains/citation.py +5 -3
  44. sphinx/domains/cpp/__init__.py +9 -11
  45. sphinx/domains/cpp/_parser.py +8 -7
  46. sphinx/domains/index.py +3 -3
  47. sphinx/domains/javascript.py +12 -7
  48. sphinx/domains/math.py +2 -2
  49. sphinx/domains/python/__init__.py +10 -5
  50. sphinx/domains/python/_object.py +1 -1
  51. sphinx/domains/rst.py +5 -5
  52. sphinx/domains/std/__init__.py +16 -11
  53. sphinx/environment/__init__.py +206 -146
  54. sphinx/environment/adapters/asset.py +3 -2
  55. sphinx/environment/adapters/indexentries.py +74 -33
  56. sphinx/environment/adapters/toctree.py +100 -43
  57. sphinx/environment/collectors/__init__.py +19 -8
  58. sphinx/environment/collectors/asset.py +47 -15
  59. sphinx/environment/collectors/dependencies.py +8 -4
  60. sphinx/environment/collectors/metadata.py +7 -2
  61. sphinx/environment/collectors/title.py +7 -2
  62. sphinx/environment/collectors/toctree.py +54 -22
  63. sphinx/errors.py +4 -1
  64. sphinx/events.py +314 -7
  65. sphinx/ext/apidoc.py +42 -18
  66. sphinx/ext/autodoc/__init__.py +52 -24
  67. sphinx/ext/autodoc/importer.py +6 -9
  68. sphinx/ext/autosectionlabel.py +1 -2
  69. sphinx/ext/autosummary/__init__.py +3 -1
  70. sphinx/ext/autosummary/generate.py +28 -14
  71. sphinx/ext/coverage.py +7 -7
  72. sphinx/ext/doctest.py +4 -8
  73. sphinx/ext/duration.py +6 -5
  74. sphinx/ext/inheritance_diagram.py +1 -1
  75. sphinx/ext/intersphinx/_cli.py +6 -4
  76. sphinx/ext/intersphinx/_load.py +77 -32
  77. sphinx/ext/intersphinx/_resolve.py +173 -79
  78. sphinx/ext/intersphinx/_shared.py +7 -5
  79. sphinx/ext/linkcode.py +7 -1
  80. sphinx/ext/mathjax.py +1 -2
  81. sphinx/ext/napoleon/__init__.py +37 -24
  82. sphinx/ext/napoleon/docstring.py +202 -134
  83. sphinx/ext/todo.py +5 -3
  84. sphinx/highlighting.py +10 -3
  85. sphinx/io.py +1 -1
  86. sphinx/jinja2glue.py +27 -6
  87. sphinx/locale/__init__.py +6 -2
  88. sphinx/locale/ar/LC_MESSAGES/sphinx.js +8 -1
  89. sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
  90. sphinx/locale/ar/LC_MESSAGES/sphinx.po +2246 -2288
  91. sphinx/locale/bg/LC_MESSAGES/sphinx.js +4 -1
  92. sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
  93. sphinx/locale/bg/LC_MESSAGES/sphinx.po +2113 -2159
  94. sphinx/locale/bn/LC_MESSAGES/sphinx.js +4 -1
  95. sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
  96. sphinx/locale/bn/LC_MESSAGES/sphinx.po +2349 -2395
  97. sphinx/locale/ca/LC_MESSAGES/sphinx.js +4 -1
  98. sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
  99. sphinx/locale/ca/LC_MESSAGES/sphinx.po +2846 -2892
  100. sphinx/locale/cak/LC_MESSAGES/sphinx.js +4 -1
  101. sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
  102. sphinx/locale/cak/LC_MESSAGES/sphinx.po +2213 -2259
  103. sphinx/locale/cs/LC_MESSAGES/sphinx.js +6 -1
  104. sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
  105. sphinx/locale/cs/LC_MESSAGES/sphinx.po +2225 -2269
  106. sphinx/locale/cy/LC_MESSAGES/sphinx.js +6 -1
  107. sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
  108. sphinx/locale/cy/LC_MESSAGES/sphinx.po +2403 -2447
  109. sphinx/locale/da/LC_MESSAGES/sphinx.js +4 -1
  110. sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
  111. sphinx/locale/da/LC_MESSAGES/sphinx.po +2214 -2260
  112. sphinx/locale/de/LC_MESSAGES/sphinx.js +4 -1
  113. sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
  114. sphinx/locale/de/LC_MESSAGES/sphinx.po +2230 -2276
  115. sphinx/locale/de_DE/LC_MESSAGES/sphinx.js +4 -1
  116. sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
  117. sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +2113 -2159
  118. sphinx/locale/el/LC_MESSAGES/sphinx.js +4 -1
  119. sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
  120. sphinx/locale/el/LC_MESSAGES/sphinx.po +2619 -2665
  121. sphinx/locale/en_DE/LC_MESSAGES/sphinx.js +4 -1
  122. sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
  123. sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +2113 -2159
  124. sphinx/locale/en_FR/LC_MESSAGES/sphinx.js +4 -1
  125. sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
  126. sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +2113 -2159
  127. sphinx/locale/en_GB/LC_MESSAGES/sphinx.js +4 -1
  128. sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
  129. sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +2519 -2565
  130. sphinx/locale/en_HK/LC_MESSAGES/sphinx.js +4 -1
  131. sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
  132. sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +2113 -2159
  133. sphinx/locale/eo/LC_MESSAGES/sphinx.js +4 -1
  134. sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
  135. sphinx/locale/eo/LC_MESSAGES/sphinx.po +2232 -2278
  136. sphinx/locale/es/LC_MESSAGES/sphinx.js +5 -1
  137. sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
  138. sphinx/locale/es/LC_MESSAGES/sphinx.po +2516 -2561
  139. sphinx/locale/es_CO/LC_MESSAGES/sphinx.js +5 -1
  140. sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
  141. sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +2114 -2159
  142. sphinx/locale/et/LC_MESSAGES/sphinx.js +4 -1
  143. sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
  144. sphinx/locale/et/LC_MESSAGES/sphinx.po +2317 -2363
  145. sphinx/locale/eu/LC_MESSAGES/sphinx.js +4 -1
  146. sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
  147. sphinx/locale/eu/LC_MESSAGES/sphinx.po +2218 -2264
  148. sphinx/locale/fa/LC_MESSAGES/sphinx.js +4 -1
  149. sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
  150. sphinx/locale/fa/LC_MESSAGES/sphinx.po +2505 -2551
  151. sphinx/locale/fi/LC_MESSAGES/sphinx.js +4 -1
  152. sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
  153. sphinx/locale/fi/LC_MESSAGES/sphinx.po +2303 -2349
  154. sphinx/locale/fr/LC_MESSAGES/sphinx.js +6 -2
  155. sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
  156. sphinx/locale/fr/LC_MESSAGES/sphinx.po +2863 -2908
  157. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.js +5 -1
  158. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
  159. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +2114 -2159
  160. sphinx/locale/gl/LC_MESSAGES/sphinx.js +4 -1
  161. sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
  162. sphinx/locale/gl/LC_MESSAGES/sphinx.po +2571 -2617
  163. sphinx/locale/he/LC_MESSAGES/sphinx.js +5 -1
  164. sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
  165. sphinx/locale/he/LC_MESSAGES/sphinx.po +2307 -2352
  166. sphinx/locale/hi/LC_MESSAGES/sphinx.js +4 -1
  167. sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
  168. sphinx/locale/hi/LC_MESSAGES/sphinx.po +2580 -2626
  169. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.js +4 -1
  170. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
  171. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +2113 -2159
  172. sphinx/locale/hr/LC_MESSAGES/sphinx.js +5 -1
  173. sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
  174. sphinx/locale/hr/LC_MESSAGES/sphinx.po +2238 -2283
  175. sphinx/locale/hu/LC_MESSAGES/sphinx.js +4 -1
  176. sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
  177. sphinx/locale/hu/LC_MESSAGES/sphinx.po +2228 -2274
  178. sphinx/locale/id/LC_MESSAGES/sphinx.js +3 -1
  179. sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
  180. sphinx/locale/id/LC_MESSAGES/sphinx.po +2787 -2834
  181. sphinx/locale/is/LC_MESSAGES/sphinx.js +4 -1
  182. sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
  183. sphinx/locale/is/LC_MESSAGES/sphinx.po +2224 -2270
  184. sphinx/locale/it/LC_MESSAGES/sphinx.js +5 -1
  185. sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
  186. sphinx/locale/it/LC_MESSAGES/sphinx.po +2231 -2276
  187. sphinx/locale/ja/LC_MESSAGES/sphinx.js +3 -1
  188. sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
  189. sphinx/locale/ja/LC_MESSAGES/sphinx.po +2507 -2554
  190. sphinx/locale/ka/LC_MESSAGES/sphinx.js +4 -1
  191. sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
  192. sphinx/locale/ka/LC_MESSAGES/sphinx.po +2428 -2474
  193. sphinx/locale/ko/LC_MESSAGES/sphinx.js +3 -1
  194. sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
  195. sphinx/locale/ko/LC_MESSAGES/sphinx.po +2516 -2563
  196. sphinx/locale/lt/LC_MESSAGES/sphinx.js +6 -1
  197. sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
  198. sphinx/locale/lt/LC_MESSAGES/sphinx.po +2425 -2469
  199. sphinx/locale/lv/LC_MESSAGES/sphinx.js +5 -1
  200. sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
  201. sphinx/locale/lv/LC_MESSAGES/sphinx.po +2362 -2407
  202. sphinx/locale/mk/LC_MESSAGES/sphinx.js +4 -1
  203. sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
  204. sphinx/locale/mk/LC_MESSAGES/sphinx.po +2121 -2167
  205. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js +4 -1
  206. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
  207. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +2220 -2266
  208. sphinx/locale/ne/LC_MESSAGES/sphinx.js +4 -1
  209. sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
  210. sphinx/locale/ne/LC_MESSAGES/sphinx.po +2221 -2267
  211. sphinx/locale/nl/LC_MESSAGES/sphinx.js +4 -1
  212. sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
  213. sphinx/locale/nl/LC_MESSAGES/sphinx.po +2240 -2286
  214. sphinx/locale/pl/LC_MESSAGES/sphinx.js +6 -1
  215. sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
  216. sphinx/locale/pl/LC_MESSAGES/sphinx.po +2319 -2363
  217. sphinx/locale/pt/LC_MESSAGES/sphinx.js +5 -1
  218. sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
  219. sphinx/locale/pt/LC_MESSAGES/sphinx.po +2114 -2159
  220. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js +5 -1
  221. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
  222. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +2854 -2899
  223. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js +5 -1
  224. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
  225. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +2224 -2269
  226. sphinx/locale/ro/LC_MESSAGES/sphinx.js +5 -1
  227. sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
  228. sphinx/locale/ro/LC_MESSAGES/sphinx.po +2226 -2271
  229. sphinx/locale/ru/LC_MESSAGES/sphinx.js +8 -3
  230. sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
  231. sphinx/locale/ru/LC_MESSAGES/sphinx.po +2841 -2885
  232. sphinx/locale/si/LC_MESSAGES/sphinx.js +4 -1
  233. sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
  234. sphinx/locale/si/LC_MESSAGES/sphinx.po +2294 -2340
  235. sphinx/locale/sk/LC_MESSAGES/sphinx.js +6 -1
  236. sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
  237. sphinx/locale/sk/LC_MESSAGES/sphinx.po +2497 -2541
  238. sphinx/locale/sl/LC_MESSAGES/sphinx.js +6 -1
  239. sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
  240. sphinx/locale/sl/LC_MESSAGES/sphinx.po +2331 -2375
  241. sphinx/locale/sphinx.pot +2121 -2167
  242. sphinx/locale/sq/LC_MESSAGES/sphinx.js +4 -1
  243. sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
  244. sphinx/locale/sq/LC_MESSAGES/sphinx.po +2855 -2901
  245. sphinx/locale/sr/LC_MESSAGES/sphinx.js +5 -1
  246. sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
  247. sphinx/locale/sr/LC_MESSAGES/sphinx.po +2203 -2248
  248. sphinx/locale/sr@latin/LC_MESSAGES/sphinx.mo +0 -0
  249. sphinx/locale/sr_RS/LC_MESSAGES/sphinx.mo +0 -0
  250. sphinx/locale/sv/LC_MESSAGES/sphinx.js +4 -1
  251. sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
  252. sphinx/locale/sv/LC_MESSAGES/sphinx.po +2423 -2469
  253. sphinx/locale/te/LC_MESSAGES/sphinx.js +4 -1
  254. sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
  255. sphinx/locale/te/LC_MESSAGES/sphinx.po +2113 -2159
  256. sphinx/locale/tr/LC_MESSAGES/sphinx.js +4 -1
  257. sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
  258. sphinx/locale/tr/LC_MESSAGES/sphinx.po +2443 -2489
  259. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js +6 -1
  260. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
  261. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +2329 -2373
  262. sphinx/locale/ur/LC_MESSAGES/sphinx.js +4 -1
  263. sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
  264. sphinx/locale/ur/LC_MESSAGES/sphinx.po +2113 -2159
  265. sphinx/locale/vi/LC_MESSAGES/sphinx.js +3 -1
  266. sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
  267. sphinx/locale/vi/LC_MESSAGES/sphinx.po +2199 -2246
  268. sphinx/locale/yue/LC_MESSAGES/sphinx.js +3 -1
  269. sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
  270. sphinx/locale/yue/LC_MESSAGES/sphinx.po +2112 -2159
  271. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.js +3 -1
  272. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
  273. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +2112 -2159
  274. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +3 -1
  275. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
  276. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +2845 -2892
  277. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.js +3 -1
  278. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
  279. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +2112 -2159
  280. sphinx/parsers.py +3 -1
  281. sphinx/project.py +6 -2
  282. sphinx/pycode/__init__.py +11 -4
  283. sphinx/pycode/ast.py +58 -58
  284. sphinx/pycode/parser.py +49 -28
  285. sphinx/pygments_styles.py +49 -49
  286. sphinx/registry.py +8 -3
  287. sphinx/roles.py +133 -13
  288. sphinx/search/__init__.py +146 -87
  289. sphinx/search/da.py +2 -4
  290. sphinx/search/de.py +2 -4
  291. sphinx/search/en.py +4 -4
  292. sphinx/search/es.py +2 -4
  293. sphinx/search/fi.py +2 -4
  294. sphinx/search/fr.py +2 -4
  295. sphinx/search/hu.py +2 -4
  296. sphinx/search/it.py +2 -4
  297. sphinx/search/ja.py +55 -32
  298. sphinx/search/nl.py +2 -4
  299. sphinx/search/no.py +2 -4
  300. sphinx/search/pt.py +2 -4
  301. sphinx/search/ro.py +0 -2
  302. sphinx/search/ru.py +2 -4
  303. sphinx/search/sv.py +2 -4
  304. sphinx/search/tr.py +0 -2
  305. sphinx/search/zh.py +18 -13
  306. sphinx/templates/graphviz/graphviz.css +0 -7
  307. sphinx/testing/fixtures.py +6 -5
  308. sphinx/testing/path.py +7 -5
  309. sphinx/testing/util.py +63 -29
  310. sphinx/texinputs/sphinx.sty +107 -39
  311. sphinx/texinputs/sphinxlatexadmonitions.sty +51 -35
  312. sphinx/texinputs/sphinxlatexcontainers.sty +1 -1
  313. sphinx/texinputs/sphinxlatexgraphics.sty +3 -2
  314. sphinx/texinputs/sphinxlatexindbibtoc.sty +1 -1
  315. sphinx/texinputs/sphinxlatexlists.sty +1 -1
  316. sphinx/texinputs/sphinxlatexliterals.sty +4 -1
  317. sphinx/texinputs/sphinxlatexnumfig.sty +22 -9
  318. sphinx/texinputs/sphinxlatexobjects.sty +1 -1
  319. sphinx/texinputs/sphinxlatexshadowbox.sty +72 -10
  320. sphinx/texinputs/sphinxlatexstyleheadings.sty +7 -2
  321. sphinx/texinputs/sphinxlatexstylepage.sty +2 -8
  322. sphinx/texinputs/sphinxlatexstyletext.sty +2 -4
  323. sphinx/texinputs/sphinxlatextables.sty +1 -1
  324. sphinx/texinputs/sphinxoptionsgeometry.sty +1 -1
  325. sphinx/texinputs/sphinxoptionshyperref.sty +1 -1
  326. sphinx/themes/agogo/layout.html +1 -10
  327. sphinx/themes/agogo/static/agogo.css.jinja +0 -7
  328. sphinx/themes/basic/defindex.html +1 -8
  329. sphinx/themes/basic/domainindex.html +1 -9
  330. sphinx/themes/basic/genindex-single.html +1 -9
  331. sphinx/themes/basic/genindex-split.html +1 -9
  332. sphinx/themes/basic/genindex.html +1 -9
  333. sphinx/themes/basic/globaltoc.html +1 -9
  334. sphinx/themes/basic/layout.html +1 -9
  335. sphinx/themes/basic/localtoc.html +1 -9
  336. sphinx/themes/basic/page.html +1 -9
  337. sphinx/themes/basic/relations.html +1 -9
  338. sphinx/themes/basic/search.html +1 -9
  339. sphinx/themes/basic/searchbox.html +1 -9
  340. sphinx/themes/basic/searchfield.html +4 -10
  341. sphinx/themes/basic/sourcelink.html +1 -9
  342. sphinx/themes/basic/static/basic.css.jinja +2 -13
  343. sphinx/themes/basic/static/doctools.js +0 -7
  344. sphinx/themes/basic/static/language_data.js.jinja +0 -7
  345. sphinx/themes/basic/static/searchtools.js +25 -13
  346. sphinx/themes/bizstyle/layout.html +1 -9
  347. sphinx/themes/bizstyle/static/bizstyle.css.jinja +0 -7
  348. sphinx/themes/bizstyle/static/bizstyle.js.jinja +5 -11
  349. sphinx/themes/classic/layout.html +1 -9
  350. sphinx/themes/classic/static/classic.css.jinja +0 -7
  351. sphinx/themes/classic/static/sidebar.js.jinja +0 -6
  352. sphinx/themes/epub/epub-cover.html +1 -9
  353. sphinx/themes/epub/layout.html +1 -9
  354. sphinx/themes/epub/static/epub.css.jinja +0 -7
  355. sphinx/themes/haiku/layout.html +1 -9
  356. sphinx/themes/haiku/static/haiku.css.jinja +0 -6
  357. sphinx/themes/nature/static/nature.css.jinja +0 -7
  358. sphinx/themes/nonav/layout.html +1 -9
  359. sphinx/themes/nonav/static/nonav.css.jinja +0 -7
  360. sphinx/themes/pyramid/static/epub.css.jinja +0 -7
  361. sphinx/themes/pyramid/static/pyramid.css.jinja +0 -7
  362. sphinx/themes/scrolls/layout.html +1 -10
  363. sphinx/themes/scrolls/static/scrolls.css.jinja +0 -7
  364. sphinx/themes/sphinxdoc/static/sphinxdoc.css.jinja +2 -7
  365. sphinx/themes/traditional/static/traditional.css.jinja +0 -7
  366. sphinx/theming.py +18 -6
  367. sphinx/transforms/__init__.py +56 -35
  368. sphinx/transforms/compact_bullet_list.py +3 -2
  369. sphinx/transforms/i18n.py +132 -50
  370. sphinx/transforms/post_transforms/__init__.py +94 -43
  371. sphinx/transforms/post_transforms/code.py +7 -6
  372. sphinx/transforms/post_transforms/images.py +71 -54
  373. sphinx/transforms/references.py +1 -2
  374. sphinx/util/__init__.py +23 -194
  375. sphinx/util/_files.py +80 -0
  376. sphinx/util/_importer.py +27 -0
  377. sphinx/util/_io.py +1 -2
  378. sphinx/util/_lines.py +26 -0
  379. sphinx/util/_pathlib.py +5 -2
  380. sphinx/util/_serialise.py +53 -0
  381. sphinx/util/_timestamps.py +2 -1
  382. sphinx/util/_uri.py +16 -0
  383. sphinx/util/cfamily.py +48 -25
  384. sphinx/util/console.py +1 -0
  385. sphinx/util/display.py +1 -1
  386. sphinx/util/docfields.py +125 -45
  387. sphinx/util/docstrings.py +1 -1
  388. sphinx/util/docutils.py +118 -44
  389. sphinx/util/exceptions.py +11 -5
  390. sphinx/util/fileutil.py +53 -32
  391. sphinx/util/http_date.py +9 -7
  392. sphinx/util/i18n.py +49 -16
  393. sphinx/util/images.py +7 -6
  394. sphinx/util/inspect.py +29 -12
  395. sphinx/util/inventory.py +47 -29
  396. sphinx/util/logging.py +58 -85
  397. sphinx/util/matching.py +3 -3
  398. sphinx/util/math.py +1 -1
  399. sphinx/util/nodes.py +176 -108
  400. sphinx/util/osutil.py +13 -10
  401. sphinx/util/parallel.py +5 -4
  402. sphinx/util/parsing.py +5 -3
  403. sphinx/util/png.py +3 -3
  404. sphinx/util/requests.py +8 -4
  405. sphinx/util/rst.py +5 -3
  406. sphinx/util/tags.py +5 -2
  407. sphinx/util/template.py +26 -11
  408. sphinx/util/texescape.py +2 -2
  409. sphinx/util/typing.py +89 -38
  410. sphinx/versioning.py +3 -1
  411. sphinx/writers/html.py +22 -7
  412. sphinx/writers/html5.py +113 -64
  413. sphinx/writers/latex.py +408 -221
  414. sphinx/writers/manpage.py +25 -15
  415. sphinx/writers/texinfo.py +94 -82
  416. sphinx/writers/text.py +87 -53
  417. sphinx/writers/xml.py +5 -4
  418. sphinx-8.1.0.dist-info/LICENSE.rst +31 -0
  419. {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/METADATA +13 -11
  420. sphinx-8.1.0.dist-info/RECORD +598 -0
  421. sphinx-8.0.1.dist-info/LICENSE.rst +0 -67
  422. sphinx-8.0.1.dist-info/RECORD +0 -590
  423. {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/WHEEL +0 -0
  424. {sphinx-8.0.1.dist-info → sphinx-8.1.0.dist-info}/entry_points.txt +0 -0
@@ -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, ClassVar, NewType, TypeVar
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(pre: int, post: int = 0, what: str | None = None) -> Callable:
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=['module']))
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
- def process(app: Sphinx, what_: str, name: str, obj: Any, options: Any, lines: list[str],
193
- ) -> None:
194
- if what and what_ not in what:
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
- ) -> Callable:
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(app: Sphinx, what_: str, name: str, obj: Any, options: Any, lines: list[str],
225
- ) -> None:
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(self.modname, self.objpath, self.objtype,
419
- attrgetter=self.get_attr,
420
- warningiserror=self.config.autodoc_warningiserror)
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__', '???', 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, self.config.autodoc_warningiserror)
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(self.modname, self.objpath[:-1], 'class',
2459
- attrgetter=self.get_attr, # type: ignore[attr-defined]
2460
- warningiserror=self.config.autodoc_warningiserror)
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 exisitence of uninitialized instance attribute when failed to import
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(self.modname, self.objpath[:-1], 'class',
2513
- attrgetter=self.get_attr, # type: ignore[attr-defined]
2514
- warningiserror=self.config.autodoc_warningiserror)
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 exisitence of uninitialized instance attribute when failed to import
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.autodoc_attrgettrs.items():
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
 
@@ -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, warningiserror: bool = False) -> Any:
140
+ def import_module(modname: str) -> Any:
141
141
  """Call importlib.import_module(modname), convert exceptions to ImportError."""
142
142
  try:
143
- with logging.skip_warningiserror(not warningiserror):
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, warningiserror: bool = False) -> Any:
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
- with logging.skip_warningiserror(not warningiserror):
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, warningiserror=warningiserror)
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``.
@@ -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 = cast(StandardDomain, app.env.get_domain('std'))
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.get_domain('py').role('obj')
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.warningiserror = False
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 = [os.path.join(package_dir, 'ext', 'autosummary', 'templates')]
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 ('__all__' in dir(obj) and respect_module_all)
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('autodoc-skip-member', objtype, name, obj, False, {})
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, *, skip: Sequence[str], name: str, public_members: Sequence[str] | None = None
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(__('[autosummary] generating autosummary for: %s'), ', '.join(showed_sources))
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(find_autosummary_in_docstring(current_module, filename=filename))
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: ' '%(default)s)'),
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: ' '%(default)s)'),
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: ' '%(default)s)'),
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=__('Remove existing files in the output directory that were not generated'),
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 write(self, *ignored: Any) -> None:
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['c'].get_objects():
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 or self.app.warningiserror:
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 or self.app.warningiserror:
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 or self.app.warningiserror:
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 or self.app.warningiserror:
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, Iterable, Sequence
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 or self.app.warningiserror:
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 write(self, build_docnames: Iterable[str] | None, updated_docnames: Sequence[str],
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 build_docnames:
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, cast
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: list[str], otherdata: _DurationDomainData) -> None: # type: ignore[override]
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 = cast(DurationDomain, app.env.get_domain('duration'))
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 = cast(DurationDomain, app.env.get_domain('duration'))
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 = cast(DurationDomain, app.env.get_domain('duration'))
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.get_domain('py').role('class')
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)
@@ -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('Print out an inventory file.\n'
14
- 'Error: must specify local path or URL to an inventory file.',
15
- file=sys.stderr)
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)