coverage 7.15.3__tar.gz → 7.16.0__tar.gz

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.
Files changed (412) hide show
  1. {coverage-7.15.3 → coverage-7.16.0}/.github/workflows/codeql-analysis.yml +3 -3
  2. {coverage-7.15.3 → coverage-7.16.0}/.github/workflows/coverage.yml +1 -1
  3. {coverage-7.15.3 → coverage-7.16.0}/.github/workflows/kit.yml +20 -6
  4. {coverage-7.15.3 → coverage-7.16.0}/.github/workflows/publish.yml +5 -5
  5. {coverage-7.15.3 → coverage-7.16.0}/.github/workflows/quality.yml +3 -2
  6. {coverage-7.15.3 → coverage-7.16.0}/.github/workflows/testsuite.yml +1 -1
  7. coverage-7.16.0/.gitignore +59 -0
  8. {coverage-7.15.3 → coverage-7.16.0}/.pre-commit-config.yaml +1 -1
  9. {coverage-7.15.3 → coverage-7.16.0}/CHANGES.rst +78 -0
  10. {coverage-7.15.3 → coverage-7.16.0}/MANIFEST.in +1 -0
  11. {coverage-7.15.3 → coverage-7.16.0}/Makefile +2 -6
  12. {coverage-7.15.3 → coverage-7.16.0}/PKG-INFO +8 -8
  13. {coverage-7.15.3 → coverage-7.16.0}/README.rst +1 -1
  14. {coverage-7.15.3 → coverage-7.16.0}/ci/comment_on_fixes.py +0 -1
  15. {coverage-7.15.3 → coverage-7.16.0}/coverage/__init__.py +3 -0
  16. {coverage-7.15.3 → coverage-7.16.0}/coverage/annotate.py +7 -3
  17. {coverage-7.15.3 → coverage-7.16.0}/coverage/cmdline.py +3 -6
  18. {coverage-7.15.3 → coverage-7.16.0}/coverage/collector.py +5 -8
  19. {coverage-7.15.3 → coverage-7.16.0}/coverage/config.py +32 -29
  20. {coverage-7.15.3 → coverage-7.16.0}/coverage/control.py +33 -31
  21. {coverage-7.15.3 → coverage-7.16.0}/coverage/debug.py +2 -2
  22. {coverage-7.15.3 → coverage-7.16.0}/coverage/env.py +1 -1
  23. {coverage-7.15.3 → coverage-7.16.0}/coverage/exceptions.py +0 -18
  24. {coverage-7.15.3 → coverage-7.16.0}/coverage/files.py +1 -1
  25. {coverage-7.15.3 → coverage-7.16.0}/coverage/html.py +5 -13
  26. {coverage-7.15.3 → coverage-7.16.0}/coverage/htmlfiles/index.html +4 -4
  27. {coverage-7.15.3 → coverage-7.16.0}/coverage/htmlfiles/pyfile.html +4 -4
  28. {coverage-7.15.3 → coverage-7.16.0}/coverage/inorout.py +1 -4
  29. {coverage-7.15.3 → coverage-7.16.0}/coverage/lcovreport.py +18 -4
  30. {coverage-7.15.3 → coverage-7.16.0}/coverage/misc.py +8 -0
  31. {coverage-7.15.3 → coverage-7.16.0}/coverage/parser.py +21 -19
  32. {coverage-7.15.3 → coverage-7.16.0}/coverage/plugin.py +4 -5
  33. {coverage-7.15.3 → coverage-7.16.0}/coverage/plugin_support.py +1 -5
  34. {coverage-7.15.3 → coverage-7.16.0}/coverage/pytracer.py +2 -5
  35. {coverage-7.15.3 → coverage-7.16.0}/coverage/results.py +5 -4
  36. {coverage-7.15.3 → coverage-7.16.0}/coverage/sqldata.py +43 -21
  37. {coverage-7.15.3 → coverage-7.16.0}/coverage/sqlitedb.py +1 -4
  38. {coverage-7.15.3 → coverage-7.16.0}/coverage/sysmon.py +3 -3
  39. {coverage-7.15.3 → coverage-7.16.0}/coverage/templite.py +0 -4
  40. {coverage-7.15.3 → coverage-7.16.0}/coverage/tomlconfig.py +9 -4
  41. {coverage-7.15.3 → coverage-7.16.0}/coverage/tracer.pyi +3 -3
  42. {coverage-7.15.3 → coverage-7.16.0}/coverage/types.py +4 -4
  43. {coverage-7.15.3 → coverage-7.16.0}/coverage/version.py +1 -1
  44. {coverage-7.15.3 → coverage-7.16.0}/coverage.egg-info/PKG-INFO +8 -8
  45. {coverage-7.15.3 → coverage-7.16.0}/coverage.egg-info/SOURCES.txt +1 -2
  46. {coverage-7.15.3 → coverage-7.16.0}/doc/api_coveragedata.rst +1 -1
  47. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_lcov.rst +1 -1
  48. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_run.rst +1 -1
  49. {coverage-7.15.3 → coverage-7.16.0}/doc/conf.py +4 -4
  50. {coverage-7.15.3 → coverage-7.16.0}/doc/config.rst +18 -18
  51. {coverage-7.15.3 → coverage-7.16.0}/doc/contexts.rst +1 -1
  52. {coverage-7.15.3 → coverage-7.16.0}/doc/dbschema.rst +1 -1
  53. {coverage-7.15.3 → coverage-7.16.0}/doc/excluding.rst +2 -2
  54. {coverage-7.15.3 → coverage-7.16.0}/doc/index.rst +1 -1
  55. {coverage-7.15.3 → coverage-7.16.0}/doc/plugins.rst +1 -1
  56. {coverage-7.15.3 → coverage-7.16.0}/doc/requirements.in +2 -2
  57. coverage-7.16.0/doc/requirements.pip +828 -0
  58. {coverage-7.15.3 → coverage-7.16.0}/howto.txt +3 -5
  59. {coverage-7.15.3 → coverage-7.16.0}/pyproject.toml +34 -12
  60. coverage-7.16.0/requirements/dev.pip +994 -0
  61. coverage-7.16.0/requirements/kit.pip +542 -0
  62. coverage-7.16.0/requirements/light-threads.pip +290 -0
  63. coverage-7.16.0/requirements/mypy.pip +436 -0
  64. coverage-7.16.0/requirements/pip.pip +36 -0
  65. {coverage-7.15.3 → coverage-7.16.0}/requirements/pytest.pip +66 -62
  66. {coverage-7.15.3 → coverage-7.16.0}/requirements/tox.pip +29 -29
  67. {coverage-7.15.3 → coverage-7.16.0}/setup.py +1 -2
  68. {coverage-7.15.3 → coverage-7.16.0}/tests/conftest.py +0 -3
  69. {coverage-7.15.3 → coverage-7.16.0}/tests/coveragetest.py +3 -7
  70. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/b_branch/b_py.html +1 -1
  71. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/bom/bom_py.html +2 -2
  72. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/contexts/two_tests_py.html +1 -1
  73. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/isolatin1/isolatin1_py.html +1 -1
  74. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/multiline/multiline_py.html +3 -3
  75. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/other/blah_blah_other_py.html +2 -2
  76. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/partial/partial_py.html +2 -2
  77. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/unicode/unicode_py.html +2 -2
  78. {coverage-7.15.3 → coverage-7.16.0}/tests/goldtest.py +0 -1
  79. {coverage-7.15.3 → coverage-7.16.0}/tests/helpers.py +2 -3
  80. {coverage-7.15.3 → coverage-7.16.0}/tests/hypo.py +7 -1
  81. {coverage-7.15.3 → coverage-7.16.0}/tests/mixins.py +0 -2
  82. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/p1a.py +2 -1
  83. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/process_test/try_execfile.py +3 -4
  84. coverage-7.16.0/tests/modules/usepkgs.py +14 -0
  85. {coverage-7.15.3 → coverage-7.16.0}/tests/osinfo.py +0 -1
  86. {coverage-7.15.3 → coverage-7.16.0}/tests/plugin1.py +0 -1
  87. {coverage-7.15.3 → coverage-7.16.0}/tests/plugin2.py +0 -1
  88. {coverage-7.15.3 → coverage-7.16.0}/tests/test_annotate.py +12 -1
  89. {coverage-7.15.3 → coverage-7.16.0}/tests/test_api.py +11 -9
  90. {coverage-7.15.3 → coverage-7.16.0}/tests/test_arcs.py +3 -4
  91. {coverage-7.15.3 → coverage-7.16.0}/tests/test_bytecode.py +1 -3
  92. {coverage-7.15.3 → coverage-7.16.0}/tests/test_cmdline.py +15 -5
  93. {coverage-7.15.3 → coverage-7.16.0}/tests/test_collector.py +0 -1
  94. {coverage-7.15.3 → coverage-7.16.0}/tests/test_concurrency.py +6 -9
  95. {coverage-7.15.3 → coverage-7.16.0}/tests/test_config.py +20 -2
  96. {coverage-7.15.3 → coverage-7.16.0}/tests/test_context.py +0 -2
  97. {coverage-7.15.3 → coverage-7.16.0}/tests/test_core.py +0 -1
  98. {coverage-7.15.3 → coverage-7.16.0}/tests/test_coverage.py +0 -1
  99. {coverage-7.15.3 → coverage-7.16.0}/tests/test_data.py +65 -14
  100. {coverage-7.15.3 → coverage-7.16.0}/tests/test_debug.py +1 -3
  101. {coverage-7.15.3 → coverage-7.16.0}/tests/test_execfile.py +2 -4
  102. {coverage-7.15.3 → coverage-7.16.0}/tests/test_filereporter.py +0 -1
  103. {coverage-7.15.3 → coverage-7.16.0}/tests/test_files.py +11 -3
  104. {coverage-7.15.3 → coverage-7.16.0}/tests/test_goldtest.py +2 -3
  105. {coverage-7.15.3 → coverage-7.16.0}/tests/test_html.py +53 -19
  106. {coverage-7.15.3 → coverage-7.16.0}/tests/test_json.py +4 -8
  107. {coverage-7.15.3 → coverage-7.16.0}/tests/test_lcov.py +25 -1
  108. {coverage-7.15.3 → coverage-7.16.0}/tests/test_misc.py +9 -5
  109. {coverage-7.15.3 → coverage-7.16.0}/tests/test_mixins.py +1 -2
  110. {coverage-7.15.3 → coverage-7.16.0}/tests/test_numbits.py +9 -12
  111. {coverage-7.15.3 → coverage-7.16.0}/tests/test_oddball.py +0 -1
  112. {coverage-7.15.3 → coverage-7.16.0}/tests/test_parser.py +0 -1
  113. {coverage-7.15.3 → coverage-7.16.0}/tests/test_phystokens.py +2 -4
  114. {coverage-7.15.3 → coverage-7.16.0}/tests/test_plugins.py +2 -5
  115. {coverage-7.15.3 → coverage-7.16.0}/tests/test_process.py +5 -6
  116. {coverage-7.15.3 → coverage-7.16.0}/tests/test_python.py +0 -1
  117. {coverage-7.15.3 → coverage-7.16.0}/tests/test_regions.py +0 -1
  118. {coverage-7.15.3 → coverage-7.16.0}/tests/test_report.py +2 -4
  119. {coverage-7.15.3 → coverage-7.16.0}/tests/test_report_common.py +0 -1
  120. {coverage-7.15.3 → coverage-7.16.0}/tests/test_report_core.py +1 -2
  121. {coverage-7.15.3 → coverage-7.16.0}/tests/test_results.py +6 -3
  122. {coverage-7.15.3 → coverage-7.16.0}/tests/test_setup.py +0 -2
  123. {coverage-7.15.3 → coverage-7.16.0}/tests/test_sqlitedb.py +0 -1
  124. {coverage-7.15.3 → coverage-7.16.0}/tests/test_sysmon.py +0 -1
  125. {coverage-7.15.3 → coverage-7.16.0}/tests/test_templite.py +8 -9
  126. {coverage-7.15.3 → coverage-7.16.0}/tests/test_testing.py +1 -3
  127. {coverage-7.15.3 → coverage-7.16.0}/tests/test_venv.py +3 -6
  128. {coverage-7.15.3 → coverage-7.16.0}/tests/test_version.py +0 -1
  129. {coverage-7.15.3 → coverage-7.16.0}/tests/test_xml.py +1 -3
  130. {coverage-7.15.3 → coverage-7.16.0}/tox.ini +1 -1
  131. coverage-7.15.3/doc/requirements.pip +0 -750
  132. coverage-7.15.3/requirements/dev.pip +0 -911
  133. coverage-7.15.3/requirements/kit.pip +0 -463
  134. coverage-7.15.3/requirements/light-threads.pip +0 -289
  135. coverage-7.15.3/requirements/mypy.pip +0 -364
  136. coverage-7.15.3/requirements/pip.pip +0 -38
  137. coverage-7.15.3/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
  138. coverage-7.15.3/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
  139. coverage-7.15.3/tests/modules/usepkgs.py +0 -8
  140. {coverage-7.15.3 → coverage-7.16.0}/.editorconfig +0 -0
  141. {coverage-7.15.3 → coverage-7.16.0}/.git-blame-ignore-revs +0 -0
  142. {coverage-7.15.3 → coverage-7.16.0}/.github/CODE_OF_CONDUCT.md +0 -0
  143. {coverage-7.15.3 → coverage-7.16.0}/.github/FUNDING.yml +0 -0
  144. {coverage-7.15.3 → coverage-7.16.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  145. {coverage-7.15.3 → coverage-7.16.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  146. {coverage-7.15.3 → coverage-7.16.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  147. {coverage-7.15.3 → coverage-7.16.0}/.github/ISSUE_TEMPLATE/support.md +0 -0
  148. {coverage-7.15.3 → coverage-7.16.0}/.github/SECURITY.md +0 -0
  149. {coverage-7.15.3 → coverage-7.16.0}/.github/dependabot.yml +0 -0
  150. {coverage-7.15.3 → coverage-7.16.0}/.github/workflows/dependency-review.yml +0 -0
  151. {coverage-7.15.3 → coverage-7.16.0}/.github/workflows/python-nightly.yml +0 -0
  152. {coverage-7.15.3 → coverage-7.16.0}/.github/zizmor.yml +0 -0
  153. {coverage-7.15.3 → coverage-7.16.0}/.ignore +0 -0
  154. {coverage-7.15.3 → coverage-7.16.0}/.readthedocs.yaml +0 -0
  155. {coverage-7.15.3 → coverage-7.16.0}/CITATION.cff +0 -0
  156. {coverage-7.15.3 → coverage-7.16.0}/CONTRIBUTORS.txt +0 -0
  157. {coverage-7.15.3 → coverage-7.16.0}/LICENSE.txt +0 -0
  158. {coverage-7.15.3 → coverage-7.16.0}/NOTICE.txt +0 -0
  159. {coverage-7.15.3 → coverage-7.16.0}/__main__.py +1 -1
  160. {coverage-7.15.3 → coverage-7.16.0}/a1_coverage.pth +0 -0
  161. {coverage-7.15.3 → coverage-7.16.0}/ci/README.txt +0 -0
  162. {coverage-7.15.3 → coverage-7.16.0}/ci/session.py +0 -0
  163. {coverage-7.15.3 → coverage-7.16.0}/ci/trigger_action.py +0 -0
  164. {coverage-7.15.3 → coverage-7.16.0}/ci/update_rtfd.py +0 -0
  165. {coverage-7.15.3 → coverage-7.16.0}/coverage/__main__.py +0 -0
  166. {coverage-7.15.3 → coverage-7.16.0}/coverage/bytecode.py +0 -0
  167. {coverage-7.15.3 → coverage-7.16.0}/coverage/context.py +0 -0
  168. {coverage-7.15.3 → coverage-7.16.0}/coverage/core.py +0 -0
  169. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/datastack.c +0 -0
  170. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/datastack.h +0 -0
  171. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/filedisp.c +0 -0
  172. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/filedisp.h +0 -0
  173. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/module.c +0 -0
  174. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/stats.h +0 -0
  175. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/tracer.c +0 -0
  176. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/tracer.h +0 -0
  177. {coverage-7.15.3 → coverage-7.16.0}/coverage/ctracer/util.h +0 -0
  178. {coverage-7.15.3 → coverage-7.16.0}/coverage/data.py +0 -0
  179. {coverage-7.15.3 → coverage-7.16.0}/coverage/disposition.py +0 -0
  180. {coverage-7.15.3 → coverage-7.16.0}/coverage/execfile.py +0 -0
  181. {coverage-7.15.3 → coverage-7.16.0}/coverage/htmlfiles/coverage_html.js +0 -0
  182. {coverage-7.15.3 → coverage-7.16.0}/coverage/htmlfiles/favicon_32.png +0 -0
  183. {coverage-7.15.3 → coverage-7.16.0}/coverage/htmlfiles/keybd_closed.png +0 -0
  184. {coverage-7.15.3 → coverage-7.16.0}/coverage/htmlfiles/style.css +0 -0
  185. {coverage-7.15.3 → coverage-7.16.0}/coverage/htmlfiles/style.scss +0 -0
  186. {coverage-7.15.3 → coverage-7.16.0}/coverage/jsonreport.py +0 -0
  187. {coverage-7.15.3 → coverage-7.16.0}/coverage/multiproc.py +0 -0
  188. {coverage-7.15.3 → coverage-7.16.0}/coverage/numbits.py +0 -0
  189. {coverage-7.15.3 → coverage-7.16.0}/coverage/patch.py +0 -0
  190. {coverage-7.15.3 → coverage-7.16.0}/coverage/phystokens.py +0 -0
  191. {coverage-7.15.3 → coverage-7.16.0}/coverage/pth_file.py +0 -0
  192. {coverage-7.15.3 → coverage-7.16.0}/coverage/py.typed +0 -0
  193. {coverage-7.15.3 → coverage-7.16.0}/coverage/python.py +0 -0
  194. {coverage-7.15.3 → coverage-7.16.0}/coverage/regions.py +1 -1
  195. {coverage-7.15.3 → coverage-7.16.0}/coverage/report.py +0 -0
  196. {coverage-7.15.3 → coverage-7.16.0}/coverage/report_core.py +0 -0
  197. {coverage-7.15.3 → coverage-7.16.0}/coverage/xmlreport.py +0 -0
  198. {coverage-7.15.3 → coverage-7.16.0}/coverage.egg-info/dependency_links.txt +0 -0
  199. {coverage-7.15.3 → coverage-7.16.0}/coverage.egg-info/entry_points.txt +0 -0
  200. {coverage-7.15.3 → coverage-7.16.0}/coverage.egg-info/not-zip-safe +0 -0
  201. {coverage-7.15.3 → coverage-7.16.0}/coverage.egg-info/requires.txt +0 -0
  202. {coverage-7.15.3 → coverage-7.16.0}/coverage.egg-info/top_level.txt +0 -0
  203. {coverage-7.15.3 → coverage-7.16.0}/doc/_static/coverage.css +0 -0
  204. {coverage-7.15.3 → coverage-7.16.0}/doc/api.rst +0 -0
  205. {coverage-7.15.3 → coverage-7.16.0}/doc/api_coverage.rst +0 -0
  206. {coverage-7.15.3 → coverage-7.16.0}/doc/api_exceptions.rst +0 -0
  207. {coverage-7.15.3 → coverage-7.16.0}/doc/api_module.rst +0 -0
  208. {coverage-7.15.3 → coverage-7.16.0}/doc/api_plugin.rst +0 -0
  209. {coverage-7.15.3 → coverage-7.16.0}/doc/branch.rst +0 -0
  210. {coverage-7.15.3 → coverage-7.16.0}/doc/changes.rst +0 -0
  211. {coverage-7.15.3 → coverage-7.16.0}/doc/cog_helpers.py +0 -0
  212. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_annotate.rst +0 -0
  213. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_combine.rst +0 -0
  214. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_debug.rst +0 -0
  215. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_erase.rst +0 -0
  216. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_html.rst +0 -0
  217. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_json.rst +0 -0
  218. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_report.rst +0 -0
  219. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_reporting.rst +0 -0
  220. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/cmd_xml.rst +0 -0
  221. {coverage-7.15.3 → coverage-7.16.0}/doc/commands/index.rst +0 -0
  222. {coverage-7.15.3 → coverage-7.16.0}/doc/contributing.rst +0 -0
  223. {coverage-7.15.3 → coverage-7.16.0}/doc/dict.txt +0 -0
  224. {coverage-7.15.3 → coverage-7.16.0}/doc/faq.rst +0 -0
  225. {coverage-7.15.3 → coverage-7.16.0}/doc/howitworks.rst +0 -0
  226. {coverage-7.15.3 → coverage-7.16.0}/doc/install.rst +0 -0
  227. {coverage-7.15.3 → coverage-7.16.0}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
  228. {coverage-7.15.3 → coverage-7.16.0}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
  229. {coverage-7.15.3 → coverage-7.16.0}/doc/media/sleepy-snake-600.png +0 -0
  230. {coverage-7.15.3 → coverage-7.16.0}/doc/media/sleepy-snake-circle-150.png +0 -0
  231. {coverage-7.15.3 → coverage-7.16.0}/doc/messages.rst +0 -0
  232. {coverage-7.15.3 → coverage-7.16.0}/doc/migrating.rst +0 -0
  233. {coverage-7.15.3 → coverage-7.16.0}/doc/other.rst +0 -0
  234. {coverage-7.15.3 → coverage-7.16.0}/doc/python-coverage.1.txt +0 -0
  235. {coverage-7.15.3 → coverage-7.16.0}/doc/sleepy.rst +0 -0
  236. {coverage-7.15.3 → coverage-7.16.0}/doc/source.rst +0 -0
  237. {coverage-7.15.3 → coverage-7.16.0}/doc/subprocess.rst +0 -0
  238. {coverage-7.15.3 → coverage-7.16.0}/doc/trouble.rst +0 -0
  239. {coverage-7.15.3 → coverage-7.16.0}/doc/whatsnew5x.rst +0 -0
  240. {coverage-7.15.3 → coverage-7.16.0}/igor.py +0 -0
  241. {coverage-7.15.3 → coverage-7.16.0}/lab/README.txt +0 -0
  242. {coverage-7.15.3 → coverage-7.16.0}/lab/branches.py +0 -0
  243. {coverage-7.15.3 → coverage-7.16.0}/lab/compare_times.sh +0 -0
  244. {coverage-7.15.3 → coverage-7.16.0}/lab/coverage-04.dtd +0 -0
  245. {coverage-7.15.3 → coverage-7.16.0}/lab/extract_code.py +0 -0
  246. {coverage-7.15.3 → coverage-7.16.0}/lab/goals.py +0 -0
  247. {coverage-7.15.3 → coverage-7.16.0}/lab/hack_pyc.py +0 -0
  248. {coverage-7.15.3 → coverage-7.16.0}/lab/notes/arcs-to-branches.txt +0 -0
  249. {coverage-7.15.3 → coverage-7.16.0}/lab/notes/bug1303.txt +0 -0
  250. {coverage-7.15.3 → coverage-7.16.0}/lab/notes/pypy-738-decorated-functions.txt +0 -0
  251. {coverage-7.15.3 → coverage-7.16.0}/lab/parse_all.py +0 -0
  252. {coverage-7.15.3 → coverage-7.16.0}/lab/parser.py +0 -0
  253. {coverage-7.15.3 → coverage-7.16.0}/lab/pick.py +0 -0
  254. {coverage-7.15.3 → coverage-7.16.0}/lab/platform_info.py +0 -0
  255. {coverage-7.15.3 → coverage-7.16.0}/lab/run_sysmon.py +0 -0
  256. {coverage-7.15.3 → coverage-7.16.0}/lab/run_trace.py +0 -0
  257. {coverage-7.15.3 → coverage-7.16.0}/lab/select_contexts.py +0 -0
  258. {coverage-7.15.3 → coverage-7.16.0}/lab/show_platform.py +0 -0
  259. {coverage-7.15.3 → coverage-7.16.0}/lab/show_pyc.py +0 -0
  260. {coverage-7.15.3 → coverage-7.16.0}/lab/treetopy.sh +0 -0
  261. {coverage-7.15.3 → coverage-7.16.0}/lab/warn_executed.py +0 -0
  262. {coverage-7.15.3 → coverage-7.16.0}/lab/warn_executed.toml +0 -0
  263. {coverage-7.15.3 → coverage-7.16.0}/metacov.ini +0 -0
  264. {coverage-7.15.3 → coverage-7.16.0}/requirements/dev.in +0 -0
  265. {coverage-7.15.3 → coverage-7.16.0}/requirements/kit.in +0 -0
  266. {coverage-7.15.3 → coverage-7.16.0}/requirements/light-threads.in +0 -0
  267. {coverage-7.15.3 → coverage-7.16.0}/requirements/mypy.in +0 -0
  268. {coverage-7.15.3 → coverage-7.16.0}/requirements/pins.pip +0 -0
  269. {coverage-7.15.3 → coverage-7.16.0}/requirements/pip.in +0 -0
  270. {coverage-7.15.3 → coverage-7.16.0}/requirements/pytest.in +0 -0
  271. {coverage-7.15.3 → coverage-7.16.0}/requirements/tox.in +0 -0
  272. {coverage-7.15.3 → coverage-7.16.0}/setup.cfg +0 -0
  273. {coverage-7.15.3 → coverage-7.16.0}/tests/__init__.py +0 -0
  274. {coverage-7.15.3 → coverage-7.16.0}/tests/covmodzip1.py +0 -0
  275. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/README.rst +0 -0
  276. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
  277. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
  278. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
  279. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
  280. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
  281. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
  282. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/mae/mae.py,cover +0 -0
  283. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
  284. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/multi/a/a.py,cover +0 -0
  285. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
  286. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/multi/b/b.py,cover +0 -0
  287. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/multi/multi.py,cover +0 -0
  288. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/annotate/white/white.py,cover +0 -0
  289. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/Makefile +0 -0
  290. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/a/a_py.html +0 -0
  291. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/a/class_index.html +0 -0
  292. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/a/function_index.html +0 -0
  293. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/a/index.html +0 -0
  294. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/b_branch/class_index.html +0 -0
  295. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/b_branch/function_index.html +0 -0
  296. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/b_branch/index.html +0 -0
  297. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/bom/class_index.html +0 -0
  298. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/bom/function_index.html +0 -0
  299. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/bom/index.html +0 -0
  300. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/contexts/class_index.html +0 -0
  301. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/contexts/function_index.html +0 -0
  302. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/contexts/index.html +0 -0
  303. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/isolatin1/class_index.html +0 -0
  304. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/isolatin1/function_index.html +0 -0
  305. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/isolatin1/index.html +0 -0
  306. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/multiline/class_index.html +0 -0
  307. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/multiline/function_index.html +0 -0
  308. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/multiline/index.html +0 -0
  309. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_1/class_index.html +0 -0
  310. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_1/function_index.html +0 -0
  311. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_1/index.html +0 -0
  312. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_1/m1_py.html +0 -0
  313. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_1/m2_py.html +0 -0
  314. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_1/m3_py.html +0 -0
  315. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_1/main_py.html +0 -0
  316. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_2/class_index.html +0 -0
  317. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_2/function_index.html +0 -0
  318. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_2/index.html +0 -0
  319. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_2/m2_py.html +0 -0
  320. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_2/m3_py.html +0 -0
  321. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_2/main_py.html +0 -0
  322. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_3/class_index.html +0 -0
  323. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_3/function_index.html +0 -0
  324. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_3/index.html +0 -0
  325. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_3/m3_py.html +0 -0
  326. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_3/main_py.html +0 -0
  327. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_4/class_index.html +0 -0
  328. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_4/function_index.html +0 -0
  329. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_4/index.html +0 -0
  330. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_4/m1_py.html +0 -0
  331. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_4/m3_py.html +0 -0
  332. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_4/main_py.html +0 -0
  333. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_5/class_index.html +0 -0
  334. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_5/function_index.html +0 -0
  335. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_5/index.html +0 -0
  336. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_5/m1_py.html +0 -0
  337. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/omit_5/main_py.html +0 -0
  338. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/other/class_index.html +0 -0
  339. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/other/function_index.html +0 -0
  340. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/other/here_py.html +0 -0
  341. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/other/index.html +0 -0
  342. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/partial/class_index.html +0 -0
  343. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/partial/function_index.html +0 -0
  344. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/partial/index.html +0 -0
  345. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/styled/a_py.html +0 -0
  346. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/styled/class_index.html +0 -0
  347. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/styled/function_index.html +0 -0
  348. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/styled/index.html +0 -0
  349. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/styled/myextra.css +0 -0
  350. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/styled/style.css +0 -0
  351. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
  352. {coverage-7.15.3/doc/sample_html → coverage-7.16.0/tests/gold/html/support}/favicon_32_cb_c827f16f.png +0 -0
  353. {coverage-7.15.3/doc/sample_html → coverage-7.16.0/tests/gold/html/support}/keybd_closed_cb_900cfef5.png +0 -0
  354. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
  355. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/unicode/class_index.html +0 -0
  356. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/unicode/function_index.html +0 -0
  357. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/html/unicode/index.html +0 -0
  358. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/testing/getty/gettysburg.txt +0 -0
  359. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/testing/xml/output.xml +0 -0
  360. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/xml/x_xml/coverage.xml +0 -0
  361. {coverage-7.15.3 → coverage-7.16.0}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
  362. {coverage-7.15.3 → coverage-7.16.0}/tests/js/index.html +0 -0
  363. {coverage-7.15.3 → coverage-7.16.0}/tests/js/tests.js +0 -0
  364. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/__init__.py +0 -0
  365. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/afile.odd.py +0 -0
  366. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/afile.py +0 -0
  367. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/bb/__init__.py +0 -0
  368. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/bb/bfile.odd.py +0 -0
  369. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/bb/bfile.py +0 -0
  370. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/bb/cc/__init__.py +0 -0
  371. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/bb/cc/cfile.py +0 -0
  372. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/bb.odd/bfile.py +0 -0
  373. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/aa/zfile.py +0 -0
  374. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/ambiguous/__init__.py +0 -0
  375. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
  376. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
  377. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/checkspec.py +0 -0
  378. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/covmod1.py +0 -0
  379. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/namespace_420/sub1/__init__.py +0 -0
  380. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/__init__.py +0 -0
  381. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/__main__.py +0 -0
  382. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/p1b.py +0 -0
  383. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/p1c.py +0 -0
  384. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/runmod2.py +0 -0
  385. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/sub/__init__.py +0 -0
  386. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/sub/__main__.py +0 -0
  387. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/sub/ps1a.py +0 -0
  388. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg1/sub/runmod3.py +0 -0
  389. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg2/__init__.py +0 -0
  390. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg2/p2a.py +0 -0
  391. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/pkg2/p2b.py +0 -0
  392. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/plugins/__init__.py +0 -0
  393. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/plugins/a_plugin.py +0 -0
  394. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/plugins/another.py +0 -0
  395. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/process_test/__init__.py +0 -0
  396. {coverage-7.15.3 → coverage-7.16.0}/tests/modules/runmod1.py +0 -0
  397. {coverage-7.15.3 → coverage-7.16.0}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
  398. {coverage-7.15.3 → coverage-7.16.0}/tests/moremodules/othermods/__init__.py +0 -0
  399. {coverage-7.15.3 → coverage-7.16.0}/tests/moremodules/othermods/othera.py +0 -0
  400. {coverage-7.15.3 → coverage-7.16.0}/tests/moremodules/othermods/otherb.py +0 -0
  401. {coverage-7.15.3 → coverage-7.16.0}/tests/moremodules/othermods/sub/__init__.py +0 -0
  402. {coverage-7.15.3 → coverage-7.16.0}/tests/moremodules/othermods/sub/osa.py +0 -0
  403. {coverage-7.15.3 → coverage-7.16.0}/tests/moremodules/othermods/sub/osb.py +0 -0
  404. {coverage-7.15.3 → coverage-7.16.0}/tests/plugin_config.py +0 -0
  405. {coverage-7.15.3 → coverage-7.16.0}/tests/qunit/jquery.tmpl.min.js +0 -0
  406. {coverage-7.15.3 → coverage-7.16.0}/tests/select_plugin.py +0 -0
  407. {coverage-7.15.3 → coverage-7.16.0}/tests/strategies.py +0 -0
  408. {coverage-7.15.3 → coverage-7.16.0}/tests/stress_phystoken.tok +0 -0
  409. {coverage-7.15.3 → coverage-7.16.0}/tests/stress_phystoken_dos.tok +0 -0
  410. {coverage-7.15.3 → coverage-7.16.0}/tests/testenv.py +0 -0
  411. {coverage-7.15.3 → coverage-7.16.0}/tests/zipsrc/zip1/__init__.py +0 -0
  412. {coverage-7.15.3 → coverage-7.16.0}/tests/zipsrc/zip1/zip1.py +0 -0
@@ -55,7 +55,7 @@ jobs:
55
55
 
56
56
  # Initializes the CodeQL tools for scanning.
57
57
  - name: Initialize CodeQL
58
- uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
58
+ uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
59
59
  with:
60
60
  languages: ${{ matrix.language }}
61
61
  # If you wish to specify custom queries, you can do so here or in a config file.
@@ -66,7 +66,7 @@ jobs:
66
66
  # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
67
67
  # If this step fails, then you should remove it and run the build manually (see below)
68
68
  - name: Autobuild
69
- uses: github/codeql-action/autobuild@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
69
+ uses: github/codeql-action/autobuild@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
70
70
 
71
71
  # ℹ️ Command-line programs to run using the OS shell.
72
72
  # 📚 https://git.io/JvXDl
@@ -80,4 +80,4 @@ jobs:
80
80
  # make release
81
81
 
82
82
  - name: Perform CodeQL Analysis
83
- uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
83
+ uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
@@ -44,7 +44,7 @@ jobs:
44
44
  persist-credentials: false
45
45
 
46
46
  - name: "Examine changed files"
47
- uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
47
+ uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3
48
48
  id: filter
49
49
  with:
50
50
  filters: |
@@ -36,7 +36,7 @@ env:
36
36
  PIP_DISABLE_PIP_VERSION_CHECK: 1
37
37
  # PYVERSIONS: changing the list of versions will change the number of
38
38
  # expected distributions. This must match the same number in publish.yml.
39
- EXPECTED: 91
39
+ EXPECTED: 121
40
40
 
41
41
  permissions:
42
42
  contents: read
@@ -79,13 +79,13 @@ jobs:
79
79
  # # of Python: https://cibuildwheel.readthedocs.io/en/stable/options/#enable
80
80
  # # When changing this, also adjust SHIPPING_WHEELS in env.py.
81
81
  #
82
- # pys = ["cp310", "cp311", "cp312", "cp313", "cp314"]
82
+ # pys = ["cp310", "cp311", "cp312", "cp313", "cp314", "cp315"]
83
83
  # cipy = "3.11" # PYVERSIONS, default for cibuildwheel
84
84
  #
85
85
  # # Some OS/arch combinations need overrides for the Python versions:
86
86
  # os_arch_pys = {
87
87
  # # ("macos", "arm64"): ["cp38", "cp39", "cp310", "cp311", "cp312"],
88
- # ("windows", "ARM64"): ["cp311", "cp312", "cp313", "cp314"],
88
+ # ("windows", "ARM64"): ["cp311", "cp312", "cp313", "cp314", "cp315"],
89
89
  # }
90
90
  #
91
91
  # #----- ^^^ ---------------------- ^^^ -----
@@ -117,51 +117,61 @@ jobs:
117
117
  - {"os": "ubuntu", "py": "cp312", "arch": "x86_64", "cipy": "3.11"}
118
118
  - {"os": "ubuntu", "py": "cp313", "arch": "x86_64", "cipy": "3.11"}
119
119
  - {"os": "ubuntu", "py": "cp314", "arch": "x86_64", "cipy": "3.11"}
120
+ - {"os": "ubuntu", "py": "cp315", "arch": "x86_64", "cipy": "3.11"}
120
121
  - {"os": "ubuntu", "py": "cp310", "arch": "i686", "cipy": "3.11"}
121
122
  - {"os": "ubuntu", "py": "cp311", "arch": "i686", "cipy": "3.11"}
122
123
  - {"os": "ubuntu", "py": "cp312", "arch": "i686", "cipy": "3.11"}
123
124
  - {"os": "ubuntu", "py": "cp313", "arch": "i686", "cipy": "3.11"}
124
125
  - {"os": "ubuntu", "py": "cp314", "arch": "i686", "cipy": "3.11"}
126
+ - {"os": "ubuntu", "py": "cp315", "arch": "i686", "cipy": "3.11"}
125
127
  - {"os": "ubuntu", "py": "cp310", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
126
128
  - {"os": "ubuntu", "py": "cp311", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
127
129
  - {"os": "ubuntu", "py": "cp312", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
128
130
  - {"os": "ubuntu", "py": "cp313", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
129
131
  - {"os": "ubuntu", "py": "cp314", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
132
+ - {"os": "ubuntu", "py": "cp315", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
130
133
  - {"os": "ubuntu", "py": "cp310", "arch": "riscv64", "cipy": "3.11"}
131
134
  - {"os": "ubuntu", "py": "cp311", "arch": "riscv64", "cipy": "3.11"}
132
135
  - {"os": "ubuntu", "py": "cp312", "arch": "riscv64", "cipy": "3.11"}
133
136
  - {"os": "ubuntu", "py": "cp313", "arch": "riscv64", "cipy": "3.11"}
134
137
  - {"os": "ubuntu", "py": "cp314", "arch": "riscv64", "cipy": "3.11"}
138
+ - {"os": "ubuntu", "py": "cp315", "arch": "riscv64", "cipy": "3.11"}
135
139
  - {"os": "ubuntu", "py": "cp310", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
136
140
  - {"os": "ubuntu", "py": "cp311", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
137
141
  - {"os": "ubuntu", "py": "cp312", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
138
142
  - {"os": "ubuntu", "py": "cp313", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
139
143
  - {"os": "ubuntu", "py": "cp314", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
144
+ - {"os": "ubuntu", "py": "cp315", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
140
145
  - {"os": "macos", "py": "cp310", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
141
146
  - {"os": "macos", "py": "cp311", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
142
147
  - {"os": "macos", "py": "cp312", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
143
148
  - {"os": "macos", "py": "cp313", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
144
149
  - {"os": "macos", "py": "cp314", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
150
+ - {"os": "macos", "py": "cp315", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
145
151
  - {"os": "macos", "py": "cp310", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
146
152
  - {"os": "macos", "py": "cp311", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
147
153
  - {"os": "macos", "py": "cp312", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
148
154
  - {"os": "macos", "py": "cp313", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
149
155
  - {"os": "macos", "py": "cp314", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
156
+ - {"os": "macos", "py": "cp315", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
150
157
  - {"os": "windows", "py": "cp310", "arch": "x86", "cipy": "3.11"}
151
158
  - {"os": "windows", "py": "cp311", "arch": "x86", "cipy": "3.11"}
152
159
  - {"os": "windows", "py": "cp312", "arch": "x86", "cipy": "3.11"}
153
160
  - {"os": "windows", "py": "cp313", "arch": "x86", "cipy": "3.11"}
154
161
  - {"os": "windows", "py": "cp314", "arch": "x86", "cipy": "3.11"}
162
+ - {"os": "windows", "py": "cp315", "arch": "x86", "cipy": "3.11"}
155
163
  - {"os": "windows", "py": "cp310", "arch": "AMD64", "cipy": "3.11"}
156
164
  - {"os": "windows", "py": "cp311", "arch": "AMD64", "cipy": "3.11"}
157
165
  - {"os": "windows", "py": "cp312", "arch": "AMD64", "cipy": "3.11"}
158
166
  - {"os": "windows", "py": "cp313", "arch": "AMD64", "cipy": "3.11"}
159
167
  - {"os": "windows", "py": "cp314", "arch": "AMD64", "cipy": "3.11"}
168
+ - {"os": "windows", "py": "cp315", "arch": "AMD64", "cipy": "3.11"}
160
169
  - {"os": "windows", "py": "cp311", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
161
170
  - {"os": "windows", "py": "cp312", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
162
171
  - {"os": "windows", "py": "cp313", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
163
172
  - {"os": "windows", "py": "cp314", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
164
- # [[[end]]] (sum: AhCqn9SafY)
173
+ - {"os": "windows", "py": "cp315", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
174
+ # [[[end]]] (sum: N6DRns0iG/)
165
175
  # ^^^^^^^^^^^^^^^
166
176
  # If a check fails and points to this checksum line, it means you edited
167
177
  # the matrix directly instead of editing the Python code in the comment
@@ -204,12 +214,16 @@ jobs:
204
214
  if: ${{ matrix.arch == 'riscv64' }}
205
215
  uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0
206
216
 
217
+ - name: "Show environment"
218
+ run: |
219
+ python -VV
220
+ python -m site
221
+
207
222
  - name: "Build binary wheels"
208
223
  env:
209
224
  CIBW_BUILD: ${{ matrix.py }}*-*
210
225
  CIBW_ARCHS: ${{ matrix.arch }}
211
226
  CIBW_ENVIRONMENT: PIP_DISABLE_PIP_VERSION_CHECK=1
212
- CIBW_ENABLE: cpython-prerelease
213
227
  CIBW_TEST_COMMAND: python -c "from coverage.tracer import CTracer; print('CTracer OK!')"
214
228
  run: |
215
229
  python -m cibuildwheel --output-dir wheelhouse
@@ -295,7 +309,7 @@ jobs:
295
309
  files=$(find coverage-* 2>/dev/null | wc -l) && [ "$files" -eq "$EXPECTED" ] || exit 1
296
310
 
297
311
  - name: "Sign artifacts"
298
- uses: sigstore/gh-action-sigstore-python@5b79a39c381910c090341a2c9b0bf022c8b387e1 # v3.4.0
312
+ uses: sigstore/gh-action-sigstore-python@790bc6befb9d733738f18d8f895854b453640ec9 # v3.5.0
299
313
  with:
300
314
  inputs: coverage-*.*
301
315
 
@@ -17,7 +17,7 @@ defaults:
17
17
  env:
18
18
  # PYVERSIONS: changing the list of versions will change the number of
19
19
  # expected distributions. This must match the same number in kit.yml.
20
- EXPECTED: 91
20
+ EXPECTED: 121
21
21
 
22
22
  permissions:
23
23
  contents: read
@@ -86,12 +86,12 @@ jobs:
86
86
  files=$(find dist/* 2>/dev/null | wc -l) && [ "$files" -eq "$EXPECTED" ] || exit 1
87
87
 
88
88
  - name: "Generate attestations"
89
- uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
89
+ uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
90
90
  with:
91
91
  subject-path: "dist/*"
92
92
 
93
93
  - name: "Publish dists to Test PyPI"
94
- uses: pypa/gh-action-pypi-publish@ba38be9e461d3875417946c167d0b5f3d385a247 # v1.14.1
94
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
95
95
  with:
96
96
  repository-url: https://test.pypi.org/legacy/
97
97
 
@@ -127,9 +127,9 @@ jobs:
127
127
  files=$(find dist/* 2>/dev/null | wc -l) && [ "$files" -eq "$EXPECTED" ] || exit 1
128
128
 
129
129
  - name: "Generate attestations"
130
- uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
130
+ uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
131
131
  with:
132
132
  subject-path: "dist/*"
133
133
 
134
134
  - name: "Publish dists to PyPI"
135
- uses: pypa/gh-action-pypi-publish@ba38be9e461d3875417946c167d0b5f3d385a247 # v1.14.1
135
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -43,7 +43,7 @@ jobs:
43
43
  persist-credentials: false
44
44
 
45
45
  - name: "Examine changed files"
46
- uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
46
+ uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3
47
47
  id: filter
48
48
  with:
49
49
  filters: |
@@ -52,6 +52,7 @@ jobs:
52
52
  docs:
53
53
  - "doc/**"
54
54
  - "coverage/**.py"
55
+ - "*.rst"
55
56
  actions:
56
57
  - ".github/workflows/**"
57
58
  workflow:
@@ -184,7 +185,7 @@ jobs:
184
185
  persist-credentials: false
185
186
 
186
187
  - name: "Install uv"
187
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
188
+ uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
188
189
  with:
189
190
  enable-cache: false
190
191
 
@@ -43,7 +43,7 @@ jobs:
43
43
  persist-credentials: false
44
44
 
45
45
  - name: "Examine changed files"
46
- uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
46
+ uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3
47
47
  id: filter
48
48
  with:
49
49
  filters: |
@@ -0,0 +1,59 @@
1
+ # Files that can appear anywhere in the tree.
2
+ *.pyc
3
+ *.pyo
4
+ *$py.class
5
+ *.pyd
6
+ *.so
7
+ *.bak
8
+ .coverage
9
+ .coverage.*
10
+ .metacov
11
+ .metacov.*
12
+ *.swp
13
+
14
+ # Data files we should ignore in the root, but need for gold files.
15
+ /coverage.xml
16
+ /coverage.json
17
+ /coverage.lcov
18
+
19
+ # Stuff generated by editors.
20
+ .idea/
21
+ .vscode/
22
+ .vimtags
23
+
24
+ # Stuff in the root.
25
+ build
26
+ *.egg-info
27
+ cheats.txt
28
+ dist
29
+ htmlcov
30
+ MANIFEST
31
+ setuptools-*.egg
32
+ .tox
33
+ .noseids
34
+ .cache
35
+ .pytest_cache
36
+ .hypothesis
37
+ .ruby-version
38
+ .venv
39
+
40
+ # Stuff in the test directory.
41
+ covmain.zip
42
+ zipmods.zip
43
+ zip1.zip
44
+ tests/actual
45
+
46
+ # Stuff in the doc directory.
47
+ doc/_build
48
+ doc/_spell
49
+ doc/sample_html
50
+ doc/sample_html_beta
51
+
52
+ # Build intermediaries.
53
+ tmp
54
+ a1_coverage.pth
55
+
56
+ # OS junk
57
+ .DS_Store
58
+
59
+ !.github
@@ -16,7 +16,7 @@ repos:
16
16
  exclude: "stress_phystoken|\\.py,cover$"
17
17
 
18
18
  - repo: https://github.com/astral-sh/ruff-pre-commit
19
- rev: v0.16.0
19
+ rev: v0.16.4
20
20
  hooks:
21
21
  - id: ruff-format
22
22
 
@@ -22,6 +22,84 @@ upgrading your version of coverage.py.
22
22
 
23
23
  .. start-releases
24
24
 
25
+ .. _changes_7-16-0:
26
+
27
+ Version 7.16.0 — 2026-08-28
28
+ ---------------------------
29
+
30
+ - When combining files, now path separator slashes will automatically be
31
+ converted to the local file system style. This makes it less necessary to
32
+ define ``[paths]`` configuration to combine data across operating systems.
33
+ Fixes `issue 2266`_.
34
+
35
+ - The :meth:`.Coverage.switch_context` method now returns the previous context.
36
+
37
+ - Fix: previously, a ``[paths]`` pattern would be replaced everywhere in a file
38
+ path when it was only meant to be replaced once, in the leading portion of
39
+ the path. This is now fixed, in `pull 2268`_.
40
+
41
+ - Fixes to validation of options and configuration settings:
42
+
43
+ - Negative precision settings now always cause useful error messages (`pull
44
+ 2261`_).
45
+
46
+ - An invalid regex in the ``--contexts`` option (or the ``[report]
47
+ contexts`` setting) reported a confusing "Couldn't use data file ...:
48
+ user-defined function raised exception" error. Now it raises a proper
49
+ configuration error naming the bad regex, like other regex settings do
50
+ (`pull 2262`_).
51
+
52
+ - Non-string values in TOML configuration settings now produce a helpful
53
+ error message instead of a traceback. This affects list settings whose
54
+ elements aren't strings (like ``omit``, ``exclude_lines``, or a ``[paths]``
55
+ entry), file settings like ``data_file``, and any wrong-typed value in the
56
+ ``[paths]`` section (`pull 2263`_).
57
+
58
+ - ``coverage run`` refuses run-affecting command-line options like
59
+ ``--branch`` alongside ``--concurrency=multiprocessing``, since they can't
60
+ reach the subprocesses. The check only recognized ``multiprocessing`` as
61
+ the entire option value, so ``--concurrency=multiprocessing,thread``
62
+ slipped through and failed later with "Can't combine statement coverage
63
+ data with branch data". Each named concurrency library is now properly
64
+ considered (`pull 2270`_).
65
+
66
+ - Fix: ``coverage annotate -d DIR`` raised an ``AssertionError`` if any
67
+ measured file had an extension other than ``.py``, such as a ``.pyw`` file on
68
+ Windows. The original extension is now restored on the annotated copy (`pull
69
+ 2265`_).
70
+
71
+ .. _pull 2261: https://github.com/coveragepy/coveragepy/pull/2261
72
+ .. _pull 2262: https://github.com/coveragepy/coveragepy/pull/2262
73
+ .. _pull 2263: https://github.com/coveragepy/coveragepy/pull/2263
74
+ .. _pull 2265: https://github.com/coveragepy/coveragepy/pull/2265
75
+ .. _issue 2266: https://github.com/coveragepy/coveragepy/issues/2266
76
+ .. _pull 2268: https://github.com/coveragepy/coveragepy/pull/2268
77
+ .. _pull 2270: https://github.com/coveragepy/coveragepy/pull/2270
78
+
79
+
80
+ .. _changes_7-15-4:
81
+
82
+ Version 7.15.4 — 2026-08-06
83
+ ---------------------------
84
+
85
+ - Fix: in the HTML report, a source file name containing a double quote (legal
86
+ on POSIX) wasn't escaped where it's dropped into the ``href`` of the index
87
+ and prev/next links, so it could close the attribute early and inject markup.
88
+ Page URLs are now escaped. Thanks, `Rajath Mohare <pull 2227_>`_.
89
+
90
+ - Fix: the LCOV report wrote file names and other fields into its
91
+ line-oriented records without neutralizing control characters. A measured
92
+ file whose name contained a newline (legal on POSIX) could forge extra
93
+ records, inflating the coverage seen by tools that read the report. Control
94
+ characters in a field are now replaced. Thanks, `Rajath Mohare <pull
95
+ 2226_>`_.
96
+
97
+ - Wheels are now provided for Python 3.15.
98
+
99
+ .. _pull 2226: https://github.com/coveragepy/coveragepy/pull/2226
100
+ .. _pull 2227: https://github.com/coveragepy/coveragepy/pull/2227
101
+
102
+
25
103
  .. _changes_7-15-3:
26
104
 
27
105
  Version 7.15.3 — 2026-08-02
@@ -10,6 +10,7 @@
10
10
 
11
11
  include .editorconfig
12
12
  include .git-blame-ignore-revs
13
+ include .gitignore
13
14
  include .ignore
14
15
  include .pre-commit-config.yaml
15
16
  include .readthedocs.yaml
@@ -58,7 +58,7 @@ clean: debug_clean _clean_platform #- Remove artifacts of test execution, instal
58
58
  @rm -f .tox/*/lib/*/site-packages/a0_metacov.pth
59
59
  @rm -f */.coverage */*/.coverage */*/*/.coverage */*/*/*/.coverage */*/*/*/*/.coverage */*/*/*/*/*/.coverage
60
60
  @rm -f tests/covmain.zip tests/zipmods.zip tests/zip1.zip
61
- @rm -rf doc/_build doc/_spell doc/sample_html_beta
61
+ @rm -rf doc/_build doc/_spell doc/sample_html doc/sample_html_beta
62
62
  @rm -rf tmp
63
63
  @rm -rf a1_coverage.pth
64
64
  @rm -rf .*cache */.*cache */*/.*cache */*/*/.*cache .hypothesis
@@ -208,7 +208,7 @@ sample_html_beta: _sample_cog_html #- Generate sample HTML report for a beta rel
208
208
 
209
209
  ### Kitting: making releases
210
210
 
211
- .PHONY: release_version edit_for_release cheats relbranch relcommit1 relcommit2
211
+ .PHONY: release_version edit_for_release cheats relbranch relcommit1
212
212
  .PHONY: kit pypi_upload test_upload build_kits update_rtd
213
213
  .PHONY: _check_github_auth download_kits
214
214
  .PHONY: tag bump_version
@@ -231,10 +231,6 @@ relbranch: # Create the branch for releasing (see howto.txt).
231
231
  relcommit1: # Commit the first release changes (see howto.txt).
232
232
  git commit -am "docs: prep for $$(python setup.py --version)"
233
233
 
234
- relcommit2: # Commit the latest sample HTML report (see howto.txt).
235
- git add doc/sample_html
236
- git commit -am "docs: sample HTML for $$(python setup.py --version)"
237
-
238
234
  kit: #- Make a source distribution and some wheels.
239
235
  @# Makes sdist and binary wheel for current Python version and platform:
240
236
  python -m build
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coverage
3
- Version: 7.15.3
3
+ Version: 7.16.0
4
4
  Summary: Code coverage measurement for Python
5
5
  Home-page: https://github.com/coveragepy/coveragepy
6
6
  Author: Ned Batchelder and 263 others
7
7
  Author-email: ned@nedbatchelder.com
8
8
  License: Apache-2.0
9
- Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.3
9
+ Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.0
10
10
  Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
11
11
  Project-URL: Issues, https://github.com/coveragepy/coveragepy/issues
12
12
  Project-URL: Mastodon, https://hachyderm.io/@coveragepy
@@ -78,13 +78,13 @@ Coverage.py runs on these versions of Python:
78
78
 
79
79
  .. PYVERSIONS
80
80
 
81
- * Python 3.10 through 3.15 beta, including free-threading.
81
+ * Python 3.10 through 3.15 rc1, including free-threading.
82
82
  * PyPy3 versions 3.10 and 3.11.
83
83
 
84
84
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
85
85
  `GitHub`_.
86
86
 
87
- .. _Read the Docs: https://coverage.readthedocs.io/en/7.15.3/
87
+ .. _Read the Docs: https://coverage.readthedocs.io/en/7.16.0/
88
88
  .. _GitHub: https://github.com/coveragepy/coveragepy
89
89
 
90
90
 
@@ -113,7 +113,7 @@ Getting Started
113
113
  Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
114
114
  of the docs.
115
115
 
116
- .. _Quick Start section: https://coverage.readthedocs.io/en/7.15.3/#quick-start
116
+ .. _Quick Start section: https://coverage.readthedocs.io/en/7.16.0/#quick-start
117
117
 
118
118
 
119
119
  Change history
@@ -121,7 +121,7 @@ Change history
121
121
 
122
122
  The complete history of changes is on the `change history page`_.
123
123
 
124
- .. _change history page: https://coverage.readthedocs.io/en/7.15.3/changes.html
124
+ .. _change history page: https://coverage.readthedocs.io/en/7.16.0/changes.html
125
125
 
126
126
 
127
127
  Code of Conduct
@@ -140,7 +140,7 @@ Contributing
140
140
  Found a bug? Want to help improve the code or documentation? See the
141
141
  `Contributing section`_ of the docs.
142
142
 
143
- .. _Contributing section: https://coverage.readthedocs.io/en/7.15.3/contributing.html
143
+ .. _Contributing section: https://coverage.readthedocs.io/en/7.16.0/contributing.html
144
144
 
145
145
 
146
146
  Security
@@ -168,7 +168,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
168
168
  :target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
169
169
  :alt: Quality check status
170
170
  .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
171
- :target: https://coverage.readthedocs.io/en/7.15.3/
171
+ :target: https://coverage.readthedocs.io/en/7.16.0/
172
172
  :alt: Documentation
173
173
  .. |kit| image:: https://img.shields.io/pypi/v/coverage
174
174
  :target: https://pypi.org/project/coverage/
@@ -26,7 +26,7 @@ Coverage.py runs on these versions of Python:
26
26
 
27
27
  .. PYVERSIONS
28
28
 
29
- * Python 3.10 through 3.15 beta, including free-threading.
29
+ * Python 3.10 through 3.15 rc1, including free-threading.
30
30
  * PyPy3 versions 3.10 and 3.11.
31
31
 
32
32
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
@@ -7,7 +7,6 @@ import re
7
7
  import sys
8
8
 
9
9
  from scriv.scriv import Scriv
10
-
11
10
  from session import get_session
12
11
 
13
12
  scriv = Scriv()
@@ -15,6 +15,9 @@ from __future__ import annotations
15
15
  # We import names as themselves to indicate that. Pylint sees it as pointless,
16
16
  # so disable its warning.
17
17
  # pylint: disable=useless-import-alias
18
+ #
19
+ # Keep ruff from changing the imports in this file.
20
+ # ruff: noqa: I001
18
21
 
19
22
  from coverage.version import (
20
23
  __version__ as __version__,
@@ -75,9 +75,13 @@ class AnnotateReporter:
75
75
 
76
76
  if self.directory:
77
77
  ensure_dir(self.directory)
78
- dest_file = os.path.join(self.directory, flat_rootname(fr.relative_filename()))
79
- assert dest_file.endswith("_py")
80
- dest_file = dest_file[:-3] + ".py"
78
+ rel_fname = fr.relative_filename()
79
+ dest_file = os.path.join(self.directory, flat_rootname(rel_fname))
80
+ # flat_rootname turned the dot of the extension into an underscore.
81
+ # Put the original extension back, whatever it is: .py, .pyw, or
82
+ # something a plugin measures.
83
+ ext = os.path.splitext(rel_fname)[1]
84
+ dest_file = dest_file[: len(dest_file) - len(ext)] + ext
81
85
  else:
82
86
  dest_file = fr.filename
83
87
  dest_file += ",cover"
@@ -24,7 +24,7 @@ from coverage.control import DEFAULT_DATAFILE
24
24
  from coverage.core import CTRACER_FILE
25
25
  from coverage.data import CoverageData, combinable_files, debug_data_file
26
26
  from coverage.debug import info_header, short_stack, write_formatted_info
27
- from coverage.exceptions import NoSource, CoverageException, _ExceptionDuringRun
27
+ from coverage.exceptions import CoverageException, NoSource, _ExceptionDuringRun
28
28
  from coverage.execfile import PyRunner
29
29
  from coverage.results import display_covered, should_fail_under
30
30
  from coverage.version import __url__
@@ -432,8 +432,6 @@ class CoverageOptionParser(optparse.OptionParser):
432
432
  class OptionParserError(Exception):
433
433
  """Used to stop the optparse error handler ending the process."""
434
434
 
435
- pass
436
-
437
435
  def parse_args_ok(self, args: list[str]) -> tuple[bool, optparse.Values | None, list[str]]:
438
436
  """Call optparse.parse_args, but return a triple:
439
437
 
@@ -753,8 +751,7 @@ def show_help(
753
751
  # coverage-3.5-script.py. argv[0] is the .py file, but we want to
754
752
  # get back to the original form.
755
753
  auto_suffix = "-script.py"
756
- if program_name.endswith(auto_suffix):
757
- program_name = program_name[: -len(auto_suffix)]
754
+ program_name = program_name.removesuffix(auto_suffix)
758
755
 
759
756
  help_params = dict(coverage.__dict__)
760
757
  help_params["__url__"] = __url__
@@ -1020,7 +1017,7 @@ class CoverageScript:
1020
1017
  show_help("Can't append to data files in parallel mode.")
1021
1018
  return ERR
1022
1019
 
1023
- if options.concurrency == "multiprocessing":
1020
+ if "multiprocessing" in (options.concurrency or "").split(","):
1024
1021
  # Can't set other run-affecting command line options with
1025
1022
  # multiprocessing.
1026
1023
  for opt_name in ["branch", "include", "omit", "pylib", "source", "timid"]:
@@ -11,7 +11,7 @@ import os
11
11
  import sys
12
12
  from collections.abc import Callable, Collection, Mapping
13
13
  from types import FrameType
14
- from typing import Any, TypeVar, cast
14
+ from typing import Any, ClassVar, TypeVar, cast
15
15
 
16
16
  from coverage import env
17
17
  from coverage.core import Core
@@ -57,7 +57,7 @@ class Collector:
57
57
  # The stack of active Collectors. Collectors are added here when started,
58
58
  # and popped when stopped. Collectors on the stack are paused when not
59
59
  # the top, and resumed when they become the top again.
60
- _collectors: list[Collector] = []
60
+ _collectors: ClassVar[list[Collector]] = []
61
61
 
62
62
  def __init__(
63
63
  self,
@@ -148,10 +148,7 @@ class Collector:
148
148
 
149
149
  if self.concur_id_func and not hasattr(core.tracer_class, "concur_id_func"):
150
150
  raise ConfigError(
151
- "Can't support concurrency={} with {}, only threads are supported.".format(
152
- tried,
153
- self.tracer_name(),
154
- ),
151
+ f"Can't support concurrency={tried} with {self.tracer_name()}, only threads are supported.",
155
152
  )
156
153
 
157
154
  if do_threading or not concurrency:
@@ -388,7 +385,7 @@ class Collector:
388
385
  """
389
386
  return any(tracer.activity() for tracer in self.tracers)
390
387
 
391
- def switch_context(self, new_context: str | None) -> None:
388
+ def switch_context(self, new_context: str | None) -> str | None:
392
389
  """Switch to a new dynamic context."""
393
390
  context: str | None
394
391
  self.flush_data()
@@ -398,7 +395,7 @@ class Collector:
398
395
  context += "|" + new_context
399
396
  else:
400
397
  context = new_context
401
- self.covdata.set_context(context)
398
+ return self.covdata.set_context(context)
402
399
 
403
400
  def disable_plugin(self, disposition: TFileDisposition) -> None:
404
401
  """Disable the plugin mentioned in `disposition`."""