Sphinx 8.1.2__py3-none-any.whl → 8.2.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 (328) hide show
  1. sphinx/__init__.py +8 -4
  2. sphinx/__main__.py +2 -0
  3. sphinx/_cli/__init__.py +2 -5
  4. sphinx/_cli/util/colour.py +34 -11
  5. sphinx/_cli/util/errors.py +128 -61
  6. sphinx/addnodes.py +51 -35
  7. sphinx/application.py +362 -230
  8. sphinx/builders/__init__.py +87 -64
  9. sphinx/builders/_epub_base.py +65 -56
  10. sphinx/builders/changes.py +17 -23
  11. sphinx/builders/dirhtml.py +8 -13
  12. sphinx/builders/epub3.py +70 -38
  13. sphinx/builders/gettext.py +93 -73
  14. sphinx/builders/html/__init__.py +240 -186
  15. sphinx/builders/html/_assets.py +9 -2
  16. sphinx/builders/html/_build_info.py +3 -0
  17. sphinx/builders/latex/__init__.py +64 -54
  18. sphinx/builders/latex/constants.py +14 -11
  19. sphinx/builders/latex/nodes.py +2 -0
  20. sphinx/builders/latex/theming.py +8 -9
  21. sphinx/builders/latex/transforms.py +7 -5
  22. sphinx/builders/linkcheck.py +193 -149
  23. sphinx/builders/manpage.py +17 -17
  24. sphinx/builders/singlehtml.py +28 -16
  25. sphinx/builders/texinfo.py +28 -21
  26. sphinx/builders/text.py +10 -15
  27. sphinx/builders/xml.py +10 -19
  28. sphinx/cmd/build.py +49 -119
  29. sphinx/cmd/make_mode.py +35 -31
  30. sphinx/cmd/quickstart.py +78 -62
  31. sphinx/config.py +265 -163
  32. sphinx/directives/__init__.py +51 -54
  33. sphinx/directives/admonitions.py +107 -0
  34. sphinx/directives/code.py +24 -19
  35. sphinx/directives/other.py +21 -42
  36. sphinx/directives/patches.py +28 -16
  37. sphinx/domains/__init__.py +54 -31
  38. sphinx/domains/_domains_container.py +22 -17
  39. sphinx/domains/_index.py +5 -8
  40. sphinx/domains/c/__init__.py +366 -245
  41. sphinx/domains/c/_ast.py +378 -256
  42. sphinx/domains/c/_ids.py +89 -31
  43. sphinx/domains/c/_parser.py +283 -214
  44. sphinx/domains/c/_symbol.py +269 -198
  45. sphinx/domains/changeset.py +39 -24
  46. sphinx/domains/citation.py +54 -24
  47. sphinx/domains/cpp/__init__.py +517 -362
  48. sphinx/domains/cpp/_ast.py +999 -682
  49. sphinx/domains/cpp/_ids.py +133 -65
  50. sphinx/domains/cpp/_parser.py +746 -588
  51. sphinx/domains/cpp/_symbol.py +692 -489
  52. sphinx/domains/index.py +10 -8
  53. sphinx/domains/javascript.py +152 -74
  54. sphinx/domains/math.py +50 -40
  55. sphinx/domains/python/__init__.py +402 -211
  56. sphinx/domains/python/_annotations.py +134 -61
  57. sphinx/domains/python/_object.py +155 -68
  58. sphinx/domains/rst.py +94 -49
  59. sphinx/domains/std/__init__.py +510 -249
  60. sphinx/environment/__init__.py +345 -61
  61. sphinx/environment/adapters/asset.py +7 -1
  62. sphinx/environment/adapters/indexentries.py +15 -20
  63. sphinx/environment/adapters/toctree.py +19 -9
  64. sphinx/environment/collectors/__init__.py +3 -1
  65. sphinx/environment/collectors/asset.py +18 -15
  66. sphinx/environment/collectors/dependencies.py +8 -10
  67. sphinx/environment/collectors/metadata.py +6 -4
  68. sphinx/environment/collectors/title.py +3 -1
  69. sphinx/environment/collectors/toctree.py +4 -4
  70. sphinx/errors.py +1 -3
  71. sphinx/events.py +4 -4
  72. sphinx/ext/apidoc/__init__.py +66 -0
  73. sphinx/ext/apidoc/__main__.py +9 -0
  74. sphinx/ext/apidoc/_cli.py +356 -0
  75. sphinx/ext/apidoc/_extension.py +262 -0
  76. sphinx/ext/apidoc/_generate.py +356 -0
  77. sphinx/ext/apidoc/_shared.py +99 -0
  78. sphinx/ext/autodoc/__init__.py +837 -483
  79. sphinx/ext/autodoc/directive.py +57 -21
  80. sphinx/ext/autodoc/importer.py +184 -67
  81. sphinx/ext/autodoc/mock.py +25 -10
  82. sphinx/ext/autodoc/preserve_defaults.py +17 -9
  83. sphinx/ext/autodoc/type_comment.py +56 -29
  84. sphinx/ext/autodoc/typehints.py +49 -26
  85. sphinx/ext/autosectionlabel.py +28 -11
  86. sphinx/ext/autosummary/__init__.py +281 -142
  87. sphinx/ext/autosummary/generate.py +121 -51
  88. sphinx/ext/coverage.py +152 -91
  89. sphinx/ext/doctest.py +169 -101
  90. sphinx/ext/duration.py +12 -6
  91. sphinx/ext/extlinks.py +33 -21
  92. sphinx/ext/githubpages.py +8 -8
  93. sphinx/ext/graphviz.py +175 -109
  94. sphinx/ext/ifconfig.py +11 -6
  95. sphinx/ext/imgconverter.py +48 -25
  96. sphinx/ext/imgmath.py +127 -97
  97. sphinx/ext/inheritance_diagram.py +177 -103
  98. sphinx/ext/intersphinx/__init__.py +22 -13
  99. sphinx/ext/intersphinx/__main__.py +3 -1
  100. sphinx/ext/intersphinx/_cli.py +18 -14
  101. sphinx/ext/intersphinx/_load.py +91 -82
  102. sphinx/ext/intersphinx/_resolve.py +108 -74
  103. sphinx/ext/intersphinx/_shared.py +2 -2
  104. sphinx/ext/linkcode.py +28 -12
  105. sphinx/ext/mathjax.py +60 -29
  106. sphinx/ext/napoleon/__init__.py +19 -7
  107. sphinx/ext/napoleon/docstring.py +229 -231
  108. sphinx/ext/todo.py +44 -49
  109. sphinx/ext/viewcode.py +105 -57
  110. sphinx/extension.py +3 -1
  111. sphinx/highlighting.py +13 -7
  112. sphinx/io.py +9 -13
  113. sphinx/jinja2glue.py +29 -26
  114. sphinx/locale/__init__.py +8 -9
  115. sphinx/locale/ar/LC_MESSAGES/sphinx.mo +0 -0
  116. sphinx/locale/ar/LC_MESSAGES/sphinx.po +2155 -2050
  117. sphinx/locale/bg/LC_MESSAGES/sphinx.mo +0 -0
  118. sphinx/locale/bg/LC_MESSAGES/sphinx.po +2045 -1940
  119. sphinx/locale/bn/LC_MESSAGES/sphinx.mo +0 -0
  120. sphinx/locale/bn/LC_MESSAGES/sphinx.po +2175 -2070
  121. sphinx/locale/ca/LC_MESSAGES/sphinx.js +3 -3
  122. sphinx/locale/ca/LC_MESSAGES/sphinx.mo +0 -0
  123. sphinx/locale/ca/LC_MESSAGES/sphinx.po +2690 -2585
  124. sphinx/locale/ca@valencia/LC_MESSAGES/sphinx.js +63 -0
  125. sphinx/locale/ca@valencia/LC_MESSAGES/sphinx.mo +0 -0
  126. sphinx/locale/ca@valencia/LC_MESSAGES/sphinx.po +4216 -0
  127. sphinx/locale/cak/LC_MESSAGES/sphinx.mo +0 -0
  128. sphinx/locale/cak/LC_MESSAGES/sphinx.po +2096 -1991
  129. sphinx/locale/cs/LC_MESSAGES/sphinx.mo +0 -0
  130. sphinx/locale/cs/LC_MESSAGES/sphinx.po +2248 -2143
  131. sphinx/locale/cy/LC_MESSAGES/sphinx.mo +0 -0
  132. sphinx/locale/cy/LC_MESSAGES/sphinx.po +2201 -2096
  133. sphinx/locale/da/LC_MESSAGES/sphinx.mo +0 -0
  134. sphinx/locale/da/LC_MESSAGES/sphinx.po +2282 -2177
  135. sphinx/locale/de/LC_MESSAGES/sphinx.mo +0 -0
  136. sphinx/locale/de/LC_MESSAGES/sphinx.po +2261 -2156
  137. sphinx/locale/de_DE/LC_MESSAGES/sphinx.mo +0 -0
  138. sphinx/locale/de_DE/LC_MESSAGES/sphinx.po +2045 -1940
  139. sphinx/locale/el/LC_MESSAGES/sphinx.mo +0 -0
  140. sphinx/locale/el/LC_MESSAGES/sphinx.po +2604 -2499
  141. sphinx/locale/en_DE/LC_MESSAGES/sphinx.mo +0 -0
  142. sphinx/locale/en_DE/LC_MESSAGES/sphinx.po +2045 -1940
  143. sphinx/locale/en_FR/LC_MESSAGES/sphinx.mo +0 -0
  144. sphinx/locale/en_FR/LC_MESSAGES/sphinx.po +2045 -1940
  145. sphinx/locale/en_GB/LC_MESSAGES/sphinx.mo +0 -0
  146. sphinx/locale/en_GB/LC_MESSAGES/sphinx.po +2631 -2526
  147. sphinx/locale/en_HK/LC_MESSAGES/sphinx.mo +0 -0
  148. sphinx/locale/en_HK/LC_MESSAGES/sphinx.po +2045 -1940
  149. sphinx/locale/eo/LC_MESSAGES/sphinx.mo +0 -0
  150. sphinx/locale/eo/LC_MESSAGES/sphinx.po +2078 -1973
  151. sphinx/locale/es/LC_MESSAGES/sphinx.mo +0 -0
  152. sphinx/locale/es/LC_MESSAGES/sphinx.po +2633 -2528
  153. sphinx/locale/es_CO/LC_MESSAGES/sphinx.mo +0 -0
  154. sphinx/locale/es_CO/LC_MESSAGES/sphinx.po +2045 -1940
  155. sphinx/locale/et/LC_MESSAGES/sphinx.mo +0 -0
  156. sphinx/locale/et/LC_MESSAGES/sphinx.po +2449 -2344
  157. sphinx/locale/eu/LC_MESSAGES/sphinx.mo +0 -0
  158. sphinx/locale/eu/LC_MESSAGES/sphinx.po +2241 -2136
  159. sphinx/locale/fa/LC_MESSAGES/sphinx.mo +0 -0
  160. sphinx/locale/fa/LC_MESSAGES/sphinx.po +504 -500
  161. sphinx/locale/fi/LC_MESSAGES/sphinx.mo +0 -0
  162. sphinx/locale/fi/LC_MESSAGES/sphinx.po +499 -495
  163. sphinx/locale/fr/LC_MESSAGES/sphinx.mo +0 -0
  164. sphinx/locale/fr/LC_MESSAGES/sphinx.po +513 -509
  165. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.mo +0 -0
  166. sphinx/locale/fr_FR/LC_MESSAGES/sphinx.po +499 -495
  167. sphinx/locale/gl/LC_MESSAGES/sphinx.mo +0 -0
  168. sphinx/locale/gl/LC_MESSAGES/sphinx.po +2644 -2539
  169. sphinx/locale/he/LC_MESSAGES/sphinx.mo +0 -0
  170. sphinx/locale/he/LC_MESSAGES/sphinx.po +499 -495
  171. sphinx/locale/hi/LC_MESSAGES/sphinx.mo +0 -0
  172. sphinx/locale/hi/LC_MESSAGES/sphinx.po +504 -500
  173. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.mo +0 -0
  174. sphinx/locale/hi_IN/LC_MESSAGES/sphinx.po +499 -495
  175. sphinx/locale/hr/LC_MESSAGES/sphinx.mo +0 -0
  176. sphinx/locale/hr/LC_MESSAGES/sphinx.po +501 -497
  177. sphinx/locale/hu/LC_MESSAGES/sphinx.mo +0 -0
  178. sphinx/locale/hu/LC_MESSAGES/sphinx.po +499 -495
  179. sphinx/locale/id/LC_MESSAGES/sphinx.mo +0 -0
  180. sphinx/locale/id/LC_MESSAGES/sphinx.po +2609 -2504
  181. sphinx/locale/is/LC_MESSAGES/sphinx.mo +0 -0
  182. sphinx/locale/is/LC_MESSAGES/sphinx.po +499 -495
  183. sphinx/locale/it/LC_MESSAGES/sphinx.mo +0 -0
  184. sphinx/locale/it/LC_MESSAGES/sphinx.po +2265 -2160
  185. sphinx/locale/ja/LC_MESSAGES/sphinx.mo +0 -0
  186. sphinx/locale/ja/LC_MESSAGES/sphinx.po +2621 -2516
  187. sphinx/locale/ka/LC_MESSAGES/sphinx.mo +0 -0
  188. sphinx/locale/ka/LC_MESSAGES/sphinx.po +2567 -2462
  189. sphinx/locale/ko/LC_MESSAGES/sphinx.mo +0 -0
  190. sphinx/locale/ko/LC_MESSAGES/sphinx.po +2631 -2526
  191. sphinx/locale/lt/LC_MESSAGES/sphinx.mo +0 -0
  192. sphinx/locale/lt/LC_MESSAGES/sphinx.po +2214 -2109
  193. sphinx/locale/lv/LC_MESSAGES/sphinx.mo +0 -0
  194. sphinx/locale/lv/LC_MESSAGES/sphinx.po +2218 -2113
  195. sphinx/locale/mk/LC_MESSAGES/sphinx.mo +0 -0
  196. sphinx/locale/mk/LC_MESSAGES/sphinx.po +2088 -1983
  197. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo +0 -0
  198. sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +2247 -2142
  199. sphinx/locale/ne/LC_MESSAGES/sphinx.mo +0 -0
  200. sphinx/locale/ne/LC_MESSAGES/sphinx.po +2227 -2122
  201. sphinx/locale/nl/LC_MESSAGES/sphinx.mo +0 -0
  202. sphinx/locale/nl/LC_MESSAGES/sphinx.po +2316 -2211
  203. sphinx/locale/pl/LC_MESSAGES/sphinx.js +2 -2
  204. sphinx/locale/pl/LC_MESSAGES/sphinx.mo +0 -0
  205. sphinx/locale/pl/LC_MESSAGES/sphinx.po +2442 -2336
  206. sphinx/locale/pt/LC_MESSAGES/sphinx.mo +0 -0
  207. sphinx/locale/pt/LC_MESSAGES/sphinx.po +2045 -1940
  208. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +0 -0
  209. sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +2657 -2552
  210. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo +0 -0
  211. sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +2243 -2138
  212. sphinx/locale/ro/LC_MESSAGES/sphinx.mo +0 -0
  213. sphinx/locale/ro/LC_MESSAGES/sphinx.po +2244 -2139
  214. sphinx/locale/ru/LC_MESSAGES/sphinx.js +1 -1
  215. sphinx/locale/ru/LC_MESSAGES/sphinx.mo +0 -0
  216. sphinx/locale/ru/LC_MESSAGES/sphinx.po +2660 -2555
  217. sphinx/locale/si/LC_MESSAGES/sphinx.mo +0 -0
  218. sphinx/locale/si/LC_MESSAGES/sphinx.po +2134 -2029
  219. sphinx/locale/sk/LC_MESSAGES/sphinx.mo +0 -0
  220. sphinx/locale/sk/LC_MESSAGES/sphinx.po +2614 -2509
  221. sphinx/locale/sl/LC_MESSAGES/sphinx.mo +0 -0
  222. sphinx/locale/sl/LC_MESSAGES/sphinx.po +2167 -2062
  223. sphinx/locale/sphinx.pot +2069 -1964
  224. sphinx/locale/sq/LC_MESSAGES/sphinx.mo +0 -0
  225. sphinx/locale/sq/LC_MESSAGES/sphinx.po +2661 -2556
  226. sphinx/locale/sr/LC_MESSAGES/sphinx.mo +0 -0
  227. sphinx/locale/sr/LC_MESSAGES/sphinx.po +2213 -2108
  228. sphinx/locale/sv/LC_MESSAGES/sphinx.mo +0 -0
  229. sphinx/locale/sv/LC_MESSAGES/sphinx.po +2229 -2124
  230. sphinx/locale/te/LC_MESSAGES/sphinx.mo +0 -0
  231. sphinx/locale/te/LC_MESSAGES/sphinx.po +2045 -1940
  232. sphinx/locale/tr/LC_MESSAGES/sphinx.mo +0 -0
  233. sphinx/locale/tr/LC_MESSAGES/sphinx.po +2608 -2503
  234. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +0 -0
  235. sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +2167 -2062
  236. sphinx/locale/ur/LC_MESSAGES/sphinx.mo +0 -0
  237. sphinx/locale/ur/LC_MESSAGES/sphinx.po +2045 -1940
  238. sphinx/locale/vi/LC_MESSAGES/sphinx.mo +0 -0
  239. sphinx/locale/vi/LC_MESSAGES/sphinx.po +2204 -2099
  240. sphinx/locale/yue/LC_MESSAGES/sphinx.mo +0 -0
  241. sphinx/locale/yue/LC_MESSAGES/sphinx.po +2045 -1940
  242. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.mo +0 -0
  243. sphinx/locale/zh_HK/LC_MESSAGES/sphinx.po +2045 -1940
  244. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +0 -0
  245. sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +2659 -2554
  246. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.mo +0 -0
  247. sphinx/locale/zh_TW.Big5/LC_MESSAGES/sphinx.po +2045 -1940
  248. sphinx/parsers.py +8 -7
  249. sphinx/project.py +2 -2
  250. sphinx/pycode/__init__.py +31 -21
  251. sphinx/pycode/ast.py +6 -3
  252. sphinx/pycode/parser.py +14 -8
  253. sphinx/pygments_styles.py +4 -5
  254. sphinx/registry.py +192 -92
  255. sphinx/roles.py +58 -7
  256. sphinx/search/__init__.py +75 -54
  257. sphinx/search/en.py +11 -13
  258. sphinx/search/fi.py +1 -1
  259. sphinx/search/ja.py +8 -6
  260. sphinx/search/nl.py +1 -1
  261. sphinx/search/zh.py +19 -21
  262. sphinx/testing/fixtures.py +26 -29
  263. sphinx/testing/path.py +26 -62
  264. sphinx/testing/restructuredtext.py +14 -8
  265. sphinx/testing/util.py +21 -19
  266. sphinx/texinputs/make.bat.jinja +50 -50
  267. sphinx/texinputs/sphinx.sty +4 -3
  268. sphinx/texinputs/sphinxlatexadmonitions.sty +1 -1
  269. sphinx/texinputs/sphinxlatexobjects.sty +29 -10
  270. sphinx/themes/basic/static/searchtools.js +8 -5
  271. sphinx/theming.py +49 -61
  272. sphinx/transforms/__init__.py +17 -38
  273. sphinx/transforms/compact_bullet_list.py +5 -3
  274. sphinx/transforms/i18n.py +8 -21
  275. sphinx/transforms/post_transforms/__init__.py +142 -93
  276. sphinx/transforms/post_transforms/code.py +5 -5
  277. sphinx/transforms/post_transforms/images.py +28 -24
  278. sphinx/transforms/references.py +3 -1
  279. sphinx/util/__init__.py +109 -60
  280. sphinx/util/_files.py +39 -23
  281. sphinx/util/_importer.py +4 -1
  282. sphinx/util/_inventory_file_reader.py +76 -0
  283. sphinx/util/_io.py +2 -2
  284. sphinx/util/_lines.py +6 -3
  285. sphinx/util/_pathlib.py +40 -2
  286. sphinx/util/build_phase.py +2 -0
  287. sphinx/util/cfamily.py +19 -14
  288. sphinx/util/console.py +44 -179
  289. sphinx/util/display.py +9 -10
  290. sphinx/util/docfields.py +140 -122
  291. sphinx/util/docstrings.py +1 -1
  292. sphinx/util/docutils.py +118 -77
  293. sphinx/util/fileutil.py +25 -26
  294. sphinx/util/http_date.py +2 -0
  295. sphinx/util/i18n.py +77 -64
  296. sphinx/util/images.py +8 -6
  297. sphinx/util/inspect.py +147 -38
  298. sphinx/util/inventory.py +215 -116
  299. sphinx/util/logging.py +33 -33
  300. sphinx/util/matching.py +12 -4
  301. sphinx/util/nodes.py +18 -13
  302. sphinx/util/osutil.py +38 -39
  303. sphinx/util/parallel.py +22 -13
  304. sphinx/util/parsing.py +2 -1
  305. sphinx/util/png.py +6 -2
  306. sphinx/util/requests.py +33 -2
  307. sphinx/util/rst.py +3 -2
  308. sphinx/util/tags.py +1 -1
  309. sphinx/util/template.py +18 -10
  310. sphinx/util/texescape.py +8 -6
  311. sphinx/util/typing.py +148 -122
  312. sphinx/versioning.py +3 -3
  313. sphinx/writers/html.py +3 -1
  314. sphinx/writers/html5.py +63 -52
  315. sphinx/writers/latex.py +83 -67
  316. sphinx/writers/manpage.py +19 -38
  317. sphinx/writers/texinfo.py +47 -47
  318. sphinx/writers/text.py +50 -32
  319. sphinx/writers/xml.py +11 -8
  320. {sphinx-8.1.2.dist-info → sphinx-8.2.0.dist-info}/LICENSE.rst +1 -1
  321. {sphinx-8.1.2.dist-info → sphinx-8.2.0.dist-info}/METADATA +25 -15
  322. sphinx-8.2.0.dist-info/RECORD +606 -0
  323. {sphinx-8.1.2.dist-info → sphinx-8.2.0.dist-info}/WHEEL +1 -1
  324. sphinx/builders/html/transforms.py +0 -90
  325. sphinx/ext/apidoc.py +0 -721
  326. sphinx/util/exceptions.py +0 -74
  327. sphinx-8.1.2.dist-info/RECORD +0 -598
  328. {sphinx-8.1.2.dist-info → sphinx-8.2.0.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,4 @@
1
- """
2
- Important note on ids
1
+ """Important note on ids
3
2
  ----------------------------------------------------------------------------
4
3
 
5
4
  Multiple id generation schemes are used due to backwards compatibility.
@@ -253,14 +252,22 @@ namespace_object:
253
252
  from __future__ import annotations
254
253
 
255
254
  import re
256
-
257
- udl_identifier_re = re.compile(r'''
258
- [a-zA-Z_][a-zA-Z0-9_]*\b # note, no word boundary in the beginning
259
- ''', re.VERBOSE)
260
- _string_re = re.compile(r"[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'"
261
- r'|"([^"\\]*(?:\\.[^"\\]*)*)")', re.DOTALL)
255
+ from typing import TYPE_CHECKING
256
+
257
+ if TYPE_CHECKING:
258
+ from collections.abc import Sequence, Set
259
+
260
+ udl_identifier_re = re.compile(
261
+ r'[a-zA-Z_][a-zA-Z0-9_]*\b' # note, no word boundary in the beginning
262
+ )
263
+ _string_re = re.compile(
264
+ r"[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'"
265
+ r'|"([^"\\]*(?:\\.[^"\\]*)*)")',
266
+ re.DOTALL,
267
+ )
262
268
  _visibility_re = re.compile(r'\b(public|private|protected)\b')
263
- _operator_re = re.compile(r'''
269
+ _operator_re = re.compile(
270
+ r"""
264
271
  \[\s*\]
265
272
  | \(\s*\)
266
273
  | \+\+ | --
@@ -269,33 +276,49 @@ _operator_re = re.compile(r'''
269
276
  | <=>
270
277
  | [!<>=/*%+|&^~-]=?
271
278
  | (\b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|xor|xor_eq)\b)
272
- ''', re.VERBOSE)
273
- _fold_operator_re = re.compile(r'''
279
+ """,
280
+ re.VERBOSE,
281
+ )
282
+ _fold_operator_re = re.compile(
283
+ r"""
274
284
  ->\* | \.\* | \,
275
285
  | (<<|>>)=? | && | \|\|
276
286
  | !=
277
287
  | [<>=/*%+|&^~-]=?
278
- ''', re.VERBOSE)
288
+ """,
289
+ re.VERBOSE,
290
+ )
279
291
  # see https://en.cppreference.com/w/cpp/keyword
280
- _keywords = [
281
- 'alignas', 'alignof', 'and', 'and_eq', 'asm', 'auto', 'bitand', 'bitor',
282
- 'bool', 'break', 'case', 'catch', 'char', 'char8_t', 'char16_t', 'char32_t',
283
- 'class', 'compl', 'concept', 'const', 'consteval', 'constexpr', 'constinit',
284
- 'const_cast', 'continue',
285
- 'decltype', 'default', 'delete', 'do', 'double', 'dynamic_cast', 'else',
286
- 'enum', 'explicit', 'export', 'extern', 'false', 'float', 'for', 'friend',
287
- 'goto', 'if', 'inline', 'int', 'long', 'mutable', 'namespace', 'new',
288
- 'noexcept', 'not', 'not_eq', 'nullptr', 'operator', 'or', 'or_eq',
289
- 'private', 'protected', 'public', 'register', 'reinterpret_cast',
290
- 'requires', 'return', 'short', 'signed', 'sizeof', 'static',
291
- 'static_assert', 'static_cast', 'struct', 'switch', 'template', 'this',
292
- 'thread_local', 'throw', 'true', 'try', 'typedef', 'typeid', 'typename',
293
- 'union', 'unsigned', 'using', 'virtual', 'void', 'volatile', 'wchar_t',
294
- 'while', 'xor', 'xor_eq',
295
- ]
296
-
297
-
298
- _simple_type_specifiers_re = re.compile(r"""
292
+ _keywords: Set[str] = frozenset({
293
+ 'alignas', 'alignof', 'and', 'and_eq', 'asm', 'auto',
294
+ 'bitand', 'bitor', 'bool', 'break',
295
+ 'case', 'catch', 'class', 'compl', 'concept', 'continue',
296
+ 'char', 'char8_t', 'char16_t', 'char32_t',
297
+ 'const', 'const_cast', 'consteval', 'constexpr', 'constinit',
298
+ 'decltype', 'default', 'delete', 'do', 'double', 'dynamic_cast',
299
+ 'else', 'enum', 'explicit', 'export', 'extern',
300
+ 'false', 'float', 'for', 'friend',
301
+ 'goto',
302
+ 'if', 'inline', 'int',
303
+ 'long',
304
+ 'mutable',
305
+ 'namespace', 'new', 'noexcept', 'not', 'not_eq', 'nullptr',
306
+ 'operator', 'or', 'or_eq',
307
+ 'private', 'protected', 'public',
308
+ 'register', 'reinterpret_cast', 'requires', 'return',
309
+ 'short', 'signed', 'sizeof', 'static',
310
+ 'static_assert', 'static_cast', 'struct', 'switch',
311
+ 'template', 'this', 'thread_local', 'throw',
312
+ 'true', 'try', 'typedef', 'typeid', 'typename',
313
+ 'union', 'unsigned', 'using',
314
+ 'virtual', 'void', 'volatile',
315
+ 'wchar_t', 'while',
316
+ 'xor', 'xor_eq',
317
+ }) # fmt: skip
318
+
319
+
320
+ _simple_type_specifiers_re = re.compile(
321
+ r"""
299
322
  \b(
300
323
  auto|void|bool
301
324
  |signed|unsigned
@@ -307,10 +330,12 @@ _simple_type_specifiers_re = re.compile(r"""
307
330
  |__float80|_Float64x|__float128|_Float128 # extension
308
331
  |_Complex|_Imaginary # extension
309
332
  )\b
310
- """, re.VERBOSE)
333
+ """,
334
+ re.VERBOSE,
335
+ )
311
336
 
312
337
  _max_id = 4
313
- _id_prefix = [None, '', '_CPPv2', '_CPPv3', '_CPPv4']
338
+ _id_prefix: Sequence[str] = ('', '', '_CPPv2', '_CPPv3', '_CPPv4')
314
339
  # Ids are used in lookup keys which are used across pickled files,
315
340
  # so when _max_id changes, make sure to update the ENV_VERSION.
316
341
 
@@ -433,8 +458,10 @@ _id_fundamental_v2 = {
433
458
  'float': 'f',
434
459
  'double': 'd',
435
460
  'long double': 'e',
436
- '__float80': 'e', '_Float64x': 'e',
437
- '__float128': 'g', '_Float128': 'g',
461
+ '__float80': 'e',
462
+ '_Float64x': 'e',
463
+ '__float128': 'g',
464
+ '_Float128': 'g',
438
465
  '_Complex float': 'Cf',
439
466
  '_Complex double': 'Cd',
440
467
  '_Complex long double': 'Ce',
@@ -456,38 +483,49 @@ _id_operator_v2 = {
456
483
  # '-(unary)' : 'ng',
457
484
  # '&(unary)' : 'ad',
458
485
  # '*(unary)' : 'de',
459
- '~': 'co', 'compl': 'co',
486
+ '~': 'co',
487
+ 'compl': 'co',
460
488
  '+': 'pl',
461
489
  '-': 'mi',
462
490
  '*': 'ml',
463
491
  '/': 'dv',
464
492
  '%': 'rm',
465
- '&': 'an', 'bitand': 'an',
466
- '|': 'or', 'bitor': 'or',
467
- '^': 'eo', 'xor': 'eo',
493
+ '&': 'an',
494
+ 'bitand': 'an',
495
+ '|': 'or',
496
+ 'bitor': 'or',
497
+ '^': 'eo',
498
+ 'xor': 'eo',
468
499
  '=': 'aS',
469
500
  '+=': 'pL',
470
501
  '-=': 'mI',
471
502
  '*=': 'mL',
472
503
  '/=': 'dV',
473
504
  '%=': 'rM',
474
- '&=': 'aN', 'and_eq': 'aN',
475
- '|=': 'oR', 'or_eq': 'oR',
476
- '^=': 'eO', 'xor_eq': 'eO',
505
+ '&=': 'aN',
506
+ 'and_eq': 'aN',
507
+ '|=': 'oR',
508
+ 'or_eq': 'oR',
509
+ '^=': 'eO',
510
+ 'xor_eq': 'eO',
477
511
  '<<': 'ls',
478
512
  '>>': 'rs',
479
513
  '<<=': 'lS',
480
514
  '>>=': 'rS',
481
515
  '==': 'eq',
482
- '!=': 'ne', 'not_eq': 'ne',
516
+ '!=': 'ne',
517
+ 'not_eq': 'ne',
483
518
  '<': 'lt',
484
519
  '>': 'gt',
485
520
  '<=': 'le',
486
521
  '>=': 'ge',
487
522
  '<=>': 'ss',
488
- '!': 'nt', 'not': 'nt',
489
- '&&': 'aa', 'and': 'aa',
490
- '||': 'oo', 'or': 'oo',
523
+ '!': 'nt',
524
+ 'not': 'nt',
525
+ '&&': 'aa',
526
+ 'and': 'aa',
527
+ '||': 'oo',
528
+ 'or': 'oo',
491
529
  '++': 'pp',
492
530
  '--': 'mm',
493
531
  ',': 'cm',
@@ -505,30 +543,60 @@ _id_operator_unary_v2 = {
505
543
  '&': 'ad',
506
544
  '+': 'ps',
507
545
  '-': 'ng',
508
- '!': 'nt', 'not': 'nt',
509
- '~': 'co', 'compl': 'co',
546
+ '!': 'nt',
547
+ 'not': 'nt',
548
+ '~': 'co',
549
+ 'compl': 'co',
510
550
  }
511
551
  _id_char_from_prefix: dict[str | None, str] = {
512
- None: 'c', 'u8': 'c',
513
- 'u': 'Ds', 'U': 'Di', 'L': 'w',
552
+ None: 'c',
553
+ 'u8': 'c',
554
+ 'u': 'Ds',
555
+ 'U': 'Di',
556
+ 'L': 'w',
514
557
  }
515
558
  # these are ordered by preceedence
516
- _expression_bin_ops = [
517
- ['||', 'or'],
518
- ['&&', 'and'],
519
- ['|', 'bitor'],
520
- ['^', 'xor'],
521
- ['&', 'bitand'],
522
- ['==', '!=', 'not_eq'],
523
- ['<=>', '<=', '>=', '<', '>'],
524
- ['<<', '>>'],
525
- ['+', '-'],
526
- ['*', '/', '%'],
527
- ['.*', '->*'],
559
+ _expression_bin_ops: Sequence[tuple[str, ...]] = [
560
+ ('||', 'or'),
561
+ ('&&', 'and'),
562
+ ('|', 'bitor'),
563
+ ('^', 'xor'),
564
+ ('&', 'bitand'),
565
+ ('==', '!=', 'not_eq'),
566
+ ('<=>', '<=', '>=', '<', '>'),
567
+ ('<<', '>>'),
568
+ ('+', '-'),
569
+ ('*', '/', '%'),
570
+ ('.*', '->*'),
571
+ ]
572
+ _expression_unary_ops: Sequence[str] = [
573
+ '++',
574
+ '--',
575
+ '*',
576
+ '&',
577
+ '+',
578
+ '-',
579
+ '!',
580
+ 'not',
581
+ '~',
582
+ 'compl',
583
+ ]
584
+ _expression_assignment_ops: Sequence[str] = [
585
+ '=',
586
+ '*=',
587
+ '/=',
588
+ '%=',
589
+ '+=',
590
+ '-=',
591
+ '>>=',
592
+ '<<=',
593
+ '&=',
594
+ 'and_eq',
595
+ '^=',
596
+ '|=',
597
+ 'xor_eq',
598
+ 'or_eq',
528
599
  ]
529
- _expression_unary_ops = ["++", "--", "*", "&", "+", "-", "!", "not", "~", "compl"]
530
- _expression_assignment_ops = ["=", "*=", "/=", "%=", "+=", "-=",
531
- ">>=", "<<=", "&=", "and_eq", "^=", "|=", "xor_eq", "or_eq"]
532
600
  _id_explicit_cast = {
533
601
  'dynamic_cast': 'dc',
534
602
  'static_cast': 'sc',