coverage 7.16.1__tar.gz → 7.16.2__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 (403) hide show
  1. {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/codeql-analysis.yml +3 -3
  2. {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/quality.yml +1 -1
  3. {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/testsuite.yml +5 -0
  4. {coverage-7.16.1 → coverage-7.16.2}/.pre-commit-config.yaml +1 -1
  5. {coverage-7.16.1 → coverage-7.16.2}/CHANGES.rst +22 -0
  6. {coverage-7.16.1 → coverage-7.16.2}/Makefile +2 -2
  7. {coverage-7.16.1 → coverage-7.16.2}/PKG-INFO +7 -7
  8. {coverage-7.16.1 → coverage-7.16.2}/coverage/bytecode.py +6 -0
  9. {coverage-7.16.1 → coverage-7.16.2}/coverage/context.py +7 -0
  10. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/tracer.c +13 -0
  11. {coverage-7.16.1 → coverage-7.16.2}/coverage/debug.py +4 -7
  12. {coverage-7.16.1 → coverage-7.16.2}/coverage/files.py +4 -4
  13. {coverage-7.16.1 → coverage-7.16.2}/coverage/parser.py +1 -0
  14. {coverage-7.16.1 → coverage-7.16.2}/coverage/pytracer.py +16 -0
  15. {coverage-7.16.1 → coverage-7.16.2}/coverage/report_core.py +1 -0
  16. {coverage-7.16.1 → coverage-7.16.2}/coverage/types.py +11 -0
  17. {coverage-7.16.1 → coverage-7.16.2}/coverage/version.py +1 -1
  18. {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/PKG-INFO +7 -7
  19. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_combine.rst +25 -3
  20. {coverage-7.16.1 → coverage-7.16.2}/doc/conf.py +3 -3
  21. {coverage-7.16.1 → coverage-7.16.2}/doc/requirements.txt +134 -134
  22. {coverage-7.16.1 → coverage-7.16.2}/howto.txt +4 -9
  23. {coverage-7.16.1 → coverage-7.16.2}/pyproject.toml +1 -0
  24. {coverage-7.16.1 → coverage-7.16.2}/requirements/dev.txt +117 -117
  25. {coverage-7.16.1 → coverage-7.16.2}/requirements/kit.txt +12 -12
  26. {coverage-7.16.1 → coverage-7.16.2}/requirements/mypy.txt +144 -144
  27. {coverage-7.16.1 → coverage-7.16.2}/requirements/pip.txt +9 -9
  28. {coverage-7.16.1 → coverage-7.16.2}/requirements/pytest.in +2 -1
  29. {coverage-7.16.1 → coverage-7.16.2}/requirements/pytest.txt +83 -83
  30. {coverage-7.16.1 → coverage-7.16.2}/requirements/tox.txt +12 -12
  31. {coverage-7.16.1 → coverage-7.16.2}/tests/test_arcs.py +41 -0
  32. {coverage-7.16.1 → coverage-7.16.2}/tests/test_bytecode.py +2 -2
  33. {coverage-7.16.1 → coverage-7.16.2}/tests/test_context.py +50 -0
  34. {coverage-7.16.1 → coverage-7.16.2}/tests/test_debug.py +6 -1
  35. {coverage-7.16.1 → coverage-7.16.2}/tests/testenv.py +1 -1
  36. {coverage-7.16.1 → coverage-7.16.2}/.editorconfig +0 -0
  37. {coverage-7.16.1 → coverage-7.16.2}/.git-blame-ignore-revs +0 -0
  38. {coverage-7.16.1 → coverage-7.16.2}/.github/CODE_OF_CONDUCT.md +0 -0
  39. {coverage-7.16.1 → coverage-7.16.2}/.github/FUNDING.yml +0 -0
  40. {coverage-7.16.1 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  41. {coverage-7.16.1 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  42. {coverage-7.16.1 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  43. {coverage-7.16.1 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/support.md +0 -0
  44. {coverage-7.16.1 → coverage-7.16.2}/.github/SECURITY.md +0 -0
  45. {coverage-7.16.1 → coverage-7.16.2}/.github/dependabot.yml +0 -0
  46. {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/coverage.yml +0 -0
  47. {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/dependency-review.yml +0 -0
  48. {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/kit.yml +0 -0
  49. {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/publish.yml +0 -0
  50. {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/python-nightly.yml +0 -0
  51. {coverage-7.16.1 → coverage-7.16.2}/.github/zizmor.yml +0 -0
  52. {coverage-7.16.1 → coverage-7.16.2}/.gitignore +0 -0
  53. {coverage-7.16.1 → coverage-7.16.2}/.ignore +0 -0
  54. {coverage-7.16.1 → coverage-7.16.2}/.readthedocs.yaml +0 -0
  55. {coverage-7.16.1 → coverage-7.16.2}/CITATION.cff +0 -0
  56. {coverage-7.16.1 → coverage-7.16.2}/CONTRIBUTORS.txt +0 -0
  57. {coverage-7.16.1 → coverage-7.16.2}/LICENSE.txt +0 -0
  58. {coverage-7.16.1 → coverage-7.16.2}/MANIFEST.in +0 -0
  59. {coverage-7.16.1 → coverage-7.16.2}/NOTICE.txt +0 -0
  60. {coverage-7.16.1 → coverage-7.16.2}/README.rst +0 -0
  61. {coverage-7.16.1 → coverage-7.16.2}/__main__.py +0 -0
  62. {coverage-7.16.1 → coverage-7.16.2}/a1_coverage.pth +0 -0
  63. {coverage-7.16.1 → coverage-7.16.2}/ci/README.txt +0 -0
  64. {coverage-7.16.1 → coverage-7.16.2}/ci/comment_on_fixes.py +0 -0
  65. {coverage-7.16.1 → coverage-7.16.2}/ci/session.py +0 -0
  66. {coverage-7.16.1 → coverage-7.16.2}/ci/trigger_action.py +0 -0
  67. {coverage-7.16.1 → coverage-7.16.2}/ci/update_rtfd.py +0 -0
  68. {coverage-7.16.1 → coverage-7.16.2}/coverage/__init__.py +0 -0
  69. {coverage-7.16.1 → coverage-7.16.2}/coverage/__main__.py +0 -0
  70. {coverage-7.16.1 → coverage-7.16.2}/coverage/annotate.py +0 -0
  71. {coverage-7.16.1 → coverage-7.16.2}/coverage/cmdline.py +0 -0
  72. {coverage-7.16.1 → coverage-7.16.2}/coverage/collector.py +0 -0
  73. {coverage-7.16.1 → coverage-7.16.2}/coverage/config.py +0 -0
  74. {coverage-7.16.1 → coverage-7.16.2}/coverage/control.py +0 -0
  75. {coverage-7.16.1 → coverage-7.16.2}/coverage/core.py +0 -0
  76. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/datastack.c +0 -0
  77. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/datastack.h +0 -0
  78. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/filedisp.c +0 -0
  79. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/filedisp.h +0 -0
  80. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/module.c +0 -0
  81. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/stats.h +0 -0
  82. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/tracer.h +0 -0
  83. {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/util.h +0 -0
  84. {coverage-7.16.1 → coverage-7.16.2}/coverage/data.py +0 -0
  85. {coverage-7.16.1 → coverage-7.16.2}/coverage/disposition.py +0 -0
  86. {coverage-7.16.1 → coverage-7.16.2}/coverage/env.py +0 -0
  87. {coverage-7.16.1 → coverage-7.16.2}/coverage/exceptions.py +0 -0
  88. {coverage-7.16.1 → coverage-7.16.2}/coverage/execfile.py +0 -0
  89. {coverage-7.16.1 → coverage-7.16.2}/coverage/html.py +0 -0
  90. {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/coverage_html.js +0 -0
  91. {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/favicon_32.png +0 -0
  92. {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/index.html +0 -0
  93. {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/keybd_closed.png +0 -0
  94. {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/pyfile.html +0 -0
  95. {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/style.css +0 -0
  96. {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/style.scss +0 -0
  97. {coverage-7.16.1 → coverage-7.16.2}/coverage/inorout.py +0 -0
  98. {coverage-7.16.1 → coverage-7.16.2}/coverage/jsonreport.py +0 -0
  99. {coverage-7.16.1 → coverage-7.16.2}/coverage/lcovreport.py +0 -0
  100. {coverage-7.16.1 → coverage-7.16.2}/coverage/misc.py +0 -0
  101. {coverage-7.16.1 → coverage-7.16.2}/coverage/multiproc.py +0 -0
  102. {coverage-7.16.1 → coverage-7.16.2}/coverage/numbits.py +0 -0
  103. {coverage-7.16.1 → coverage-7.16.2}/coverage/patch.py +0 -0
  104. {coverage-7.16.1 → coverage-7.16.2}/coverage/phystokens.py +0 -0
  105. {coverage-7.16.1 → coverage-7.16.2}/coverage/plugin.py +0 -0
  106. {coverage-7.16.1 → coverage-7.16.2}/coverage/plugin_support.py +0 -0
  107. {coverage-7.16.1 → coverage-7.16.2}/coverage/pth_file.py +0 -0
  108. {coverage-7.16.1 → coverage-7.16.2}/coverage/py.typed +0 -0
  109. {coverage-7.16.1 → coverage-7.16.2}/coverage/python.py +0 -0
  110. {coverage-7.16.1 → coverage-7.16.2}/coverage/regions.py +0 -0
  111. {coverage-7.16.1 → coverage-7.16.2}/coverage/report.py +0 -0
  112. {coverage-7.16.1 → coverage-7.16.2}/coverage/results.py +0 -0
  113. {coverage-7.16.1 → coverage-7.16.2}/coverage/sqldata.py +0 -0
  114. {coverage-7.16.1 → coverage-7.16.2}/coverage/sqlitedb.py +0 -0
  115. {coverage-7.16.1 → coverage-7.16.2}/coverage/sysmon.py +0 -0
  116. {coverage-7.16.1 → coverage-7.16.2}/coverage/templite.py +0 -0
  117. {coverage-7.16.1 → coverage-7.16.2}/coverage/tomlconfig.py +0 -0
  118. {coverage-7.16.1 → coverage-7.16.2}/coverage/tracer.pyi +0 -0
  119. {coverage-7.16.1 → coverage-7.16.2}/coverage/xmlreport.py +0 -0
  120. {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/SOURCES.txt +0 -0
  121. {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/dependency_links.txt +0 -0
  122. {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/entry_points.txt +0 -0
  123. {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/not-zip-safe +0 -0
  124. {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/requires.txt +0 -0
  125. {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/top_level.txt +0 -0
  126. {coverage-7.16.1 → coverage-7.16.2}/doc/_static/coverage.css +0 -0
  127. {coverage-7.16.1 → coverage-7.16.2}/doc/api.rst +0 -0
  128. {coverage-7.16.1 → coverage-7.16.2}/doc/api_coverage.rst +0 -0
  129. {coverage-7.16.1 → coverage-7.16.2}/doc/api_coveragedata.rst +0 -0
  130. {coverage-7.16.1 → coverage-7.16.2}/doc/api_exceptions.rst +0 -0
  131. {coverage-7.16.1 → coverage-7.16.2}/doc/api_module.rst +0 -0
  132. {coverage-7.16.1 → coverage-7.16.2}/doc/api_plugin.rst +0 -0
  133. {coverage-7.16.1 → coverage-7.16.2}/doc/branch.rst +0 -0
  134. {coverage-7.16.1 → coverage-7.16.2}/doc/changes.rst +0 -0
  135. {coverage-7.16.1 → coverage-7.16.2}/doc/cog_helpers.py +0 -0
  136. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_annotate.rst +0 -0
  137. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_debug.rst +0 -0
  138. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_erase.rst +0 -0
  139. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_html.rst +0 -0
  140. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_json.rst +0 -0
  141. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_lcov.rst +0 -0
  142. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_report.rst +0 -0
  143. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_reporting.rst +0 -0
  144. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_run.rst +0 -0
  145. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_xml.rst +0 -0
  146. {coverage-7.16.1 → coverage-7.16.2}/doc/commands/index.rst +0 -0
  147. {coverage-7.16.1 → coverage-7.16.2}/doc/config.rst +0 -0
  148. {coverage-7.16.1 → coverage-7.16.2}/doc/contexts.rst +0 -0
  149. {coverage-7.16.1 → coverage-7.16.2}/doc/contributing.rst +0 -0
  150. {coverage-7.16.1 → coverage-7.16.2}/doc/dbschema.rst +0 -0
  151. {coverage-7.16.1 → coverage-7.16.2}/doc/dict.txt +0 -0
  152. {coverage-7.16.1 → coverage-7.16.2}/doc/excluding.rst +0 -0
  153. {coverage-7.16.1 → coverage-7.16.2}/doc/faq.rst +0 -0
  154. {coverage-7.16.1 → coverage-7.16.2}/doc/howitworks.rst +0 -0
  155. {coverage-7.16.1 → coverage-7.16.2}/doc/index.rst +0 -0
  156. {coverage-7.16.1 → coverage-7.16.2}/doc/install.rst +0 -0
  157. {coverage-7.16.1 → coverage-7.16.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
  158. {coverage-7.16.1 → coverage-7.16.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
  159. {coverage-7.16.1 → coverage-7.16.2}/doc/media/sleepy-snake-600.png +0 -0
  160. {coverage-7.16.1 → coverage-7.16.2}/doc/media/sleepy-snake-circle-150.png +0 -0
  161. {coverage-7.16.1 → coverage-7.16.2}/doc/messages.rst +0 -0
  162. {coverage-7.16.1 → coverage-7.16.2}/doc/migrating.rst +0 -0
  163. {coverage-7.16.1 → coverage-7.16.2}/doc/other.rst +0 -0
  164. {coverage-7.16.1 → coverage-7.16.2}/doc/plugins.rst +0 -0
  165. {coverage-7.16.1 → coverage-7.16.2}/doc/python-coverage.1.txt +0 -0
  166. {coverage-7.16.1 → coverage-7.16.2}/doc/requirements.in +0 -0
  167. {coverage-7.16.1 → coverage-7.16.2}/doc/sleepy.rst +0 -0
  168. {coverage-7.16.1 → coverage-7.16.2}/doc/source.rst +0 -0
  169. {coverage-7.16.1 → coverage-7.16.2}/doc/subprocess.rst +0 -0
  170. {coverage-7.16.1 → coverage-7.16.2}/doc/trouble.rst +0 -0
  171. {coverage-7.16.1 → coverage-7.16.2}/doc/whatsnew5x.rst +0 -0
  172. {coverage-7.16.1 → coverage-7.16.2}/igor.py +0 -0
  173. {coverage-7.16.1 → coverage-7.16.2}/lab/README.txt +0 -0
  174. {coverage-7.16.1 → coverage-7.16.2}/lab/branches.py +0 -0
  175. {coverage-7.16.1 → coverage-7.16.2}/lab/compare_times.sh +0 -0
  176. {coverage-7.16.1 → coverage-7.16.2}/lab/coverage-04.dtd +0 -0
  177. {coverage-7.16.1 → coverage-7.16.2}/lab/extract_code.py +0 -0
  178. {coverage-7.16.1 → coverage-7.16.2}/lab/goals.py +0 -0
  179. {coverage-7.16.1 → coverage-7.16.2}/lab/hack_pyc.py +0 -0
  180. {coverage-7.16.1 → coverage-7.16.2}/lab/notes/arcs-to-branches.txt +0 -0
  181. {coverage-7.16.1 → coverage-7.16.2}/lab/notes/bug1303.txt +0 -0
  182. {coverage-7.16.1 → coverage-7.16.2}/lab/notes/pypy-738-decorated-functions.txt +0 -0
  183. {coverage-7.16.1 → coverage-7.16.2}/lab/parse_all.py +0 -0
  184. {coverage-7.16.1 → coverage-7.16.2}/lab/parser.py +0 -0
  185. {coverage-7.16.1 → coverage-7.16.2}/lab/pick.py +0 -0
  186. {coverage-7.16.1 → coverage-7.16.2}/lab/platform_info.py +0 -0
  187. {coverage-7.16.1 → coverage-7.16.2}/lab/run_sysmon.py +0 -0
  188. {coverage-7.16.1 → coverage-7.16.2}/lab/run_trace.py +0 -0
  189. {coverage-7.16.1 → coverage-7.16.2}/lab/select_contexts.py +0 -0
  190. {coverage-7.16.1 → coverage-7.16.2}/lab/show_platform.py +0 -0
  191. {coverage-7.16.1 → coverage-7.16.2}/lab/show_pyc.py +0 -0
  192. {coverage-7.16.1 → coverage-7.16.2}/lab/treetopy.sh +0 -0
  193. {coverage-7.16.1 → coverage-7.16.2}/lab/warn_executed.py +0 -0
  194. {coverage-7.16.1 → coverage-7.16.2}/lab/warn_executed.toml +0 -0
  195. {coverage-7.16.1 → coverage-7.16.2}/metacov.ini +0 -0
  196. {coverage-7.16.1 → coverage-7.16.2}/requirements/dev.in +0 -0
  197. {coverage-7.16.1 → coverage-7.16.2}/requirements/kit.in +0 -0
  198. {coverage-7.16.1 → coverage-7.16.2}/requirements/light-threads.in +0 -0
  199. {coverage-7.16.1 → coverage-7.16.2}/requirements/light-threads.txt +0 -0
  200. {coverage-7.16.1 → coverage-7.16.2}/requirements/mypy.in +0 -0
  201. {coverage-7.16.1 → coverage-7.16.2}/requirements/pins.txt +0 -0
  202. {coverage-7.16.1 → coverage-7.16.2}/requirements/pip.in +0 -0
  203. {coverage-7.16.1 → coverage-7.16.2}/requirements/tox.in +0 -0
  204. {coverage-7.16.1 → coverage-7.16.2}/setup.cfg +0 -0
  205. {coverage-7.16.1 → coverage-7.16.2}/setup.py +0 -0
  206. {coverage-7.16.1 → coverage-7.16.2}/tests/__init__.py +0 -0
  207. {coverage-7.16.1 → coverage-7.16.2}/tests/conftest.py +0 -0
  208. {coverage-7.16.1 → coverage-7.16.2}/tests/coveragetest.py +0 -0
  209. {coverage-7.16.1 → coverage-7.16.2}/tests/covmodzip1.py +0 -0
  210. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/README.rst +0 -0
  211. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
  212. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
  213. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
  214. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
  215. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
  216. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
  217. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/mae/mae.py,cover +0 -0
  218. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
  219. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/a/a.py,cover +0 -0
  220. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
  221. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/b/b.py,cover +0 -0
  222. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/multi.py,cover +0 -0
  223. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/white/white.py,cover +0 -0
  224. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/Makefile +0 -0
  225. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/a/a_py.html +0 -0
  226. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/a/class_index.html +0 -0
  227. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/a/function_index.html +0 -0
  228. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/a/index.html +0 -0
  229. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/b_branch/b_py.html +0 -0
  230. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/b_branch/class_index.html +0 -0
  231. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/b_branch/function_index.html +0 -0
  232. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/b_branch/index.html +0 -0
  233. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/bom/bom_py.html +0 -0
  234. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/bom/class_index.html +0 -0
  235. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/bom/function_index.html +0 -0
  236. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/bom/index.html +0 -0
  237. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/contexts/class_index.html +0 -0
  238. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/contexts/function_index.html +0 -0
  239. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/contexts/index.html +0 -0
  240. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/contexts/two_tests_py.html +0 -0
  241. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/isolatin1/class_index.html +0 -0
  242. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/isolatin1/function_index.html +0 -0
  243. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/isolatin1/index.html +0 -0
  244. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/isolatin1/isolatin1_py.html +0 -0
  245. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/multiline/class_index.html +0 -0
  246. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/multiline/function_index.html +0 -0
  247. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/multiline/index.html +0 -0
  248. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/multiline/multiline_py.html +0 -0
  249. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/class_index.html +0 -0
  250. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/function_index.html +0 -0
  251. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/index.html +0 -0
  252. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/m1_py.html +0 -0
  253. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/m2_py.html +0 -0
  254. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/m3_py.html +0 -0
  255. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/main_py.html +0 -0
  256. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/class_index.html +0 -0
  257. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/function_index.html +0 -0
  258. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/index.html +0 -0
  259. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/m2_py.html +0 -0
  260. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/m3_py.html +0 -0
  261. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/main_py.html +0 -0
  262. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/class_index.html +0 -0
  263. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/function_index.html +0 -0
  264. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/index.html +0 -0
  265. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/m3_py.html +0 -0
  266. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/main_py.html +0 -0
  267. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/class_index.html +0 -0
  268. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/function_index.html +0 -0
  269. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/index.html +0 -0
  270. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/m1_py.html +0 -0
  271. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/m3_py.html +0 -0
  272. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/main_py.html +0 -0
  273. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/class_index.html +0 -0
  274. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/function_index.html +0 -0
  275. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/index.html +0 -0
  276. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/m1_py.html +0 -0
  277. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/main_py.html +0 -0
  278. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/blah_blah_other_py.html +0 -0
  279. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/class_index.html +0 -0
  280. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/function_index.html +0 -0
  281. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/here_py.html +0 -0
  282. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/index.html +0 -0
  283. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/partial/class_index.html +0 -0
  284. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/partial/function_index.html +0 -0
  285. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/partial/index.html +0 -0
  286. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/partial/partial_py.html +0 -0
  287. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/a_py.html +0 -0
  288. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/class_index.html +0 -0
  289. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/function_index.html +0 -0
  290. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/index.html +0 -0
  291. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/myextra.css +0 -0
  292. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/style.css +0 -0
  293. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
  294. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
  295. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
  296. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
  297. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/unicode/class_index.html +0 -0
  298. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/unicode/function_index.html +0 -0
  299. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/unicode/index.html +0 -0
  300. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/unicode/unicode_py.html +0 -0
  301. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/testing/getty/gettysburg.txt +0 -0
  302. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/testing/xml/output.xml +0 -0
  303. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/xml/x_xml/coverage.xml +0 -0
  304. {coverage-7.16.1 → coverage-7.16.2}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
  305. {coverage-7.16.1 → coverage-7.16.2}/tests/goldtest.py +0 -0
  306. {coverage-7.16.1 → coverage-7.16.2}/tests/helpers.py +0 -0
  307. {coverage-7.16.1 → coverage-7.16.2}/tests/hypo.py +0 -0
  308. {coverage-7.16.1 → coverage-7.16.2}/tests/js/index.html +0 -0
  309. {coverage-7.16.1 → coverage-7.16.2}/tests/js/tests.js +0 -0
  310. {coverage-7.16.1 → coverage-7.16.2}/tests/mixins.py +0 -0
  311. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/__init__.py +0 -0
  312. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/afile.odd.py +0 -0
  313. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/afile.py +0 -0
  314. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/__init__.py +0 -0
  315. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/bfile.odd.py +0 -0
  316. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/bfile.py +0 -0
  317. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/cc/__init__.py +0 -0
  318. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/cc/cfile.py +0 -0
  319. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb.odd/bfile.py +0 -0
  320. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/zfile.py +0 -0
  321. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/ambiguous/__init__.py +0 -0
  322. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
  323. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
  324. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/checkspec.py +0 -0
  325. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/covmod1.py +0 -0
  326. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/namespace_420/sub1/__init__.py +0 -0
  327. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/__init__.py +0 -0
  328. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/__main__.py +0 -0
  329. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/p1a.py +0 -0
  330. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/p1b.py +0 -0
  331. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/p1c.py +0 -0
  332. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/runmod2.py +0 -0
  333. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/sub/__init__.py +0 -0
  334. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/sub/__main__.py +0 -0
  335. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/sub/ps1a.py +0 -0
  336. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/sub/runmod3.py +0 -0
  337. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg2/__init__.py +0 -0
  338. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg2/p2a.py +0 -0
  339. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg2/p2b.py +0 -0
  340. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/plugins/__init__.py +0 -0
  341. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/plugins/a_plugin.py +0 -0
  342. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/plugins/another.py +0 -0
  343. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/process_test/__init__.py +0 -0
  344. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/process_test/try_execfile.py +0 -0
  345. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/runmod1.py +0 -0
  346. {coverage-7.16.1 → coverage-7.16.2}/tests/modules/usepkgs.py +0 -0
  347. {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
  348. {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/__init__.py +0 -0
  349. {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/othera.py +0 -0
  350. {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/otherb.py +0 -0
  351. {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/sub/__init__.py +0 -0
  352. {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/sub/osa.py +0 -0
  353. {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/sub/osb.py +0 -0
  354. {coverage-7.16.1 → coverage-7.16.2}/tests/osinfo.py +0 -0
  355. {coverage-7.16.1 → coverage-7.16.2}/tests/plugin1.py +0 -0
  356. {coverage-7.16.1 → coverage-7.16.2}/tests/plugin2.py +0 -0
  357. {coverage-7.16.1 → coverage-7.16.2}/tests/plugin_config.py +0 -0
  358. {coverage-7.16.1 → coverage-7.16.2}/tests/qunit/jquery.tmpl.min.js +0 -0
  359. {coverage-7.16.1 → coverage-7.16.2}/tests/select_plugin.py +0 -0
  360. {coverage-7.16.1 → coverage-7.16.2}/tests/strategies.py +0 -0
  361. {coverage-7.16.1 → coverage-7.16.2}/tests/stress_phystoken.tok +0 -0
  362. {coverage-7.16.1 → coverage-7.16.2}/tests/stress_phystoken_dos.tok +0 -0
  363. {coverage-7.16.1 → coverage-7.16.2}/tests/test_annotate.py +0 -0
  364. {coverage-7.16.1 → coverage-7.16.2}/tests/test_api.py +0 -0
  365. {coverage-7.16.1 → coverage-7.16.2}/tests/test_cmdline.py +0 -0
  366. {coverage-7.16.1 → coverage-7.16.2}/tests/test_collector.py +0 -0
  367. {coverage-7.16.1 → coverage-7.16.2}/tests/test_concurrency.py +0 -0
  368. {coverage-7.16.1 → coverage-7.16.2}/tests/test_config.py +0 -0
  369. {coverage-7.16.1 → coverage-7.16.2}/tests/test_core.py +0 -0
  370. {coverage-7.16.1 → coverage-7.16.2}/tests/test_coverage.py +0 -0
  371. {coverage-7.16.1 → coverage-7.16.2}/tests/test_data.py +0 -0
  372. {coverage-7.16.1 → coverage-7.16.2}/tests/test_execfile.py +0 -0
  373. {coverage-7.16.1 → coverage-7.16.2}/tests/test_filereporter.py +0 -0
  374. {coverage-7.16.1 → coverage-7.16.2}/tests/test_files.py +0 -0
  375. {coverage-7.16.1 → coverage-7.16.2}/tests/test_goldtest.py +0 -0
  376. {coverage-7.16.1 → coverage-7.16.2}/tests/test_html.py +0 -0
  377. {coverage-7.16.1 → coverage-7.16.2}/tests/test_json.py +0 -0
  378. {coverage-7.16.1 → coverage-7.16.2}/tests/test_lcov.py +0 -0
  379. {coverage-7.16.1 → coverage-7.16.2}/tests/test_misc.py +0 -0
  380. {coverage-7.16.1 → coverage-7.16.2}/tests/test_mixins.py +0 -0
  381. {coverage-7.16.1 → coverage-7.16.2}/tests/test_numbits.py +0 -0
  382. {coverage-7.16.1 → coverage-7.16.2}/tests/test_oddball.py +0 -0
  383. {coverage-7.16.1 → coverage-7.16.2}/tests/test_parser.py +0 -0
  384. {coverage-7.16.1 → coverage-7.16.2}/tests/test_phystokens.py +0 -0
  385. {coverage-7.16.1 → coverage-7.16.2}/tests/test_plugins.py +0 -0
  386. {coverage-7.16.1 → coverage-7.16.2}/tests/test_process.py +0 -0
  387. {coverage-7.16.1 → coverage-7.16.2}/tests/test_python.py +0 -0
  388. {coverage-7.16.1 → coverage-7.16.2}/tests/test_regions.py +0 -0
  389. {coverage-7.16.1 → coverage-7.16.2}/tests/test_report.py +0 -0
  390. {coverage-7.16.1 → coverage-7.16.2}/tests/test_report_common.py +0 -0
  391. {coverage-7.16.1 → coverage-7.16.2}/tests/test_report_core.py +0 -0
  392. {coverage-7.16.1 → coverage-7.16.2}/tests/test_results.py +0 -0
  393. {coverage-7.16.1 → coverage-7.16.2}/tests/test_setup.py +0 -0
  394. {coverage-7.16.1 → coverage-7.16.2}/tests/test_sqlitedb.py +0 -0
  395. {coverage-7.16.1 → coverage-7.16.2}/tests/test_sysmon.py +0 -0
  396. {coverage-7.16.1 → coverage-7.16.2}/tests/test_templite.py +0 -0
  397. {coverage-7.16.1 → coverage-7.16.2}/tests/test_testing.py +0 -0
  398. {coverage-7.16.1 → coverage-7.16.2}/tests/test_venv.py +0 -0
  399. {coverage-7.16.1 → coverage-7.16.2}/tests/test_version.py +0 -0
  400. {coverage-7.16.1 → coverage-7.16.2}/tests/test_xml.py +0 -0
  401. {coverage-7.16.1 → coverage-7.16.2}/tests/zipsrc/zip1/__init__.py +0 -0
  402. {coverage-7.16.1 → coverage-7.16.2}/tests/zipsrc/zip1/zip1.py +0 -0
  403. {coverage-7.16.1 → coverage-7.16.2}/tox.ini +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@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
58
+ uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
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@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
69
+ uses: github/codeql-action/autobuild@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
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@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
83
+ uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
@@ -185,7 +185,7 @@ jobs:
185
185
  persist-credentials: false
186
186
 
187
187
  - name: "Install uv"
188
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
188
+ uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
189
189
  with:
190
190
  enable-cache: false
191
191
 
@@ -168,9 +168,14 @@ jobs:
168
168
  name: "Tests successful"
169
169
  needs:
170
170
  - tests
171
+ # Without this, GitHub skips this job when `tests` doesn't succeed, so the
172
+ # gate reports "skipped" instead of failing. `allowed-skips` keeps the
173
+ # deliberate skips (-notests branches, no test-relevant files) passing.
174
+ if: always()
171
175
  runs-on: ubuntu-latest
172
176
  steps:
173
177
  - name: "Decide success or failure"
174
178
  uses: re-actors/alls-green@b5b5b37504aa4183270bd3d855c52a67f212be35 # v1.3.0
175
179
  with:
176
180
  jobs: ${{ toJSON(needs) }}
181
+ allowed-skips: tests
@@ -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.7
19
+ rev: v0.16.8
20
20
  hooks:
21
21
  - id: ruff-format
22
22
 
@@ -22,6 +22,28 @@ upgrading your version of coverage.py.
22
22
 
23
23
  .. start-releases
24
24
 
25
+ .. _changes_7-16-2:
26
+
27
+ Version 7.16.2 — 2026-09-27
28
+ ---------------------------
29
+
30
+ - Fix: on Python 3.14 and later, a ``for`` loop completing immediately before a
31
+ function return could mistakenly report an uncovered branch. This is now
32
+ fixed, closing `issue 2168`_.
33
+
34
+ - Fix: on Python 3.14 and later, the ``else`` clause of a ``try`` whose body is
35
+ a ``with`` statement could incorrectly be reported as covered when the
36
+ ``with`` raised. This is now fixed, closing `issue 2289`_.
37
+
38
+ - Fix: with ``dynamic_context = test_function``, test methods written as
39
+ ``@staticmethod`` or ``@classmethod`` were not given a context of their own.
40
+ Now they are, on Python 3.11 and later. Closes `issue 1923`_.
41
+
42
+ .. _issue 1923: https://github.com/coveragepy/coveragepy/issues/1923
43
+ .. _issue 2168: https://github.com/coveragepy/coveragepy/issues/2168
44
+ .. _issue 2289: https://github.com/coveragepy/coveragepy/issues/2289
45
+
46
+
25
47
  .. _changes_7-16-1:
26
48
 
27
49
  Version 7.16.1 — 2026-09-13
@@ -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
211
+ .PHONY: release_version edit_for_release cheats relbranch relcommit
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
@@ -228,7 +228,7 @@ cheats: #- Create some useful snippets for releasing.
228
228
  relbranch: # Create the branch for releasing (see howto.txt).
229
229
  git switch -c nedbat/release-$$(date +%Y%m%d-%H%M%S)
230
230
 
231
- relcommit1: # Commit the first release changes (see howto.txt).
231
+ relcommit: # Commit the release changes (see howto.txt).
232
232
  git commit -am "docs: prep for $$(python setup.py --version)"
233
233
 
234
234
  kit: #- Make a source distribution and some wheels.
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coverage
3
- Version: 7.16.1
3
+ Version: 7.16.2
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.16.1
9
+ Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.2
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
@@ -83,7 +83,7 @@ Coverage.py runs on these versions of Python:
83
83
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
84
84
  `GitHub`_.
85
85
 
86
- .. _Read the Docs: https://coverage.readthedocs.io/en/7.16.1/
86
+ .. _Read the Docs: https://coverage.readthedocs.io/en/7.16.2/
87
87
  .. _GitHub: https://github.com/coveragepy/coveragepy
88
88
 
89
89
 
@@ -112,7 +112,7 @@ Getting Started
112
112
  Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
113
113
  of the docs.
114
114
 
115
- .. _Quick Start section: https://coverage.readthedocs.io/en/7.16.1/#quick-start
115
+ .. _Quick Start section: https://coverage.readthedocs.io/en/7.16.2/#quick-start
116
116
 
117
117
 
118
118
  Change history
@@ -120,7 +120,7 @@ Change history
120
120
 
121
121
  The complete history of changes is on the `change history page`_.
122
122
 
123
- .. _change history page: https://coverage.readthedocs.io/en/7.16.1/changes.html
123
+ .. _change history page: https://coverage.readthedocs.io/en/7.16.2/changes.html
124
124
 
125
125
 
126
126
  Code of Conduct
@@ -139,7 +139,7 @@ Contributing
139
139
  Found a bug? Want to help improve the code or documentation? See the
140
140
  `Contributing section`_ of the docs.
141
141
 
142
- .. _Contributing section: https://coverage.readthedocs.io/en/7.16.1/contributing.html
142
+ .. _Contributing section: https://coverage.readthedocs.io/en/7.16.2/contributing.html
143
143
 
144
144
 
145
145
  Security
@@ -167,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
167
167
  :target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
168
168
  :alt: Quality check status
169
169
  .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
170
- :target: https://coverage.readthedocs.io/en/7.16.1/
170
+ :target: https://coverage.readthedocs.io/en/7.16.2/
171
171
  :alt: Documentation
172
172
  .. |kit| image:: https://img.shields.io/pypi/v/coverage
173
173
  :target: https://pypi.org/project/coverage/
@@ -106,6 +106,10 @@ RETURNS = op_set(
106
106
  "RETURN_GENERATOR",
107
107
  )
108
108
 
109
+ # Opcodes that do not fall through. The bytecode after them belongs to
110
+ # another path (for example the swallowed-exception side of a with).
111
+ NO_FALL_THROUGH = op_set("RERAISE")
112
+
109
113
 
110
114
  # CACHE doesn't exist in Python 3.10, but the branch resolver is only used
111
115
  # on 3.14+, so a placeholder value is fine.
@@ -203,6 +207,8 @@ class BranchArcResolver:
203
207
  return None
204
208
  if op in RETURNS:
205
209
  return (from_line, -self.code.co_firstlineno)
210
+ if op in NO_FALL_THROUGH:
211
+ return None
206
212
  ext_arg = 0
207
213
  offset += 2
208
214
  return None
@@ -6,6 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
  from collections.abc import Sequence
9
+ from inspect import CO_OPTIMIZED # pylint: disable=no-name-in-module
9
10
  from types import FrameType
10
11
 
11
12
  from coverage.types import TShouldStartContextFn
@@ -63,6 +64,12 @@ def qualname_from_frame(frame: FrameType) -> str | None:
63
64
  if method is None:
64
65
  func = frame.f_globals.get(fname)
65
66
  if func is None:
67
+ # Static and class methods have no `self` and aren't in the module
68
+ # globals, but the code object knows its own qualified name.
69
+ # PYVERSIONS: co_qualname is 3.11+
70
+ qualname = getattr(co, "co_qualname", None)
71
+ if qualname and co.co_flags & CO_OPTIMIZED and "<locals>" not in qualname:
72
+ return f"{frame.f_globals.get('__name__')}.{qualname}"
66
73
  return None
67
74
  return f"{func.__module__}.{fname}"
68
75
 
@@ -771,6 +771,19 @@ CTracer_handle_return(CTracer *self, PyFrameObject *frame)
771
771
  real_return = !(is_yield || is_yield_from);
772
772
  #endif
773
773
  if (real_return) {
774
+ #if PY_VERSION_HEX >= 0x030E0000
775
+ /* Python 3.14 can report a new line only on the return event. */
776
+ int return_line = PyFrame_GetLineNumber(frame);
777
+ if (
778
+ self->pcur_entry->file_tracer == Py_None &&
779
+ return_line != self->pcur_entry->last_line
780
+ ) {
781
+ if (CTracer_record_pair(self, self->pcur_entry->last_line, return_line) < 0) {
782
+ goto error;
783
+ }
784
+ self->pcur_entry->last_line = return_line;
785
+ }
786
+ #endif
774
787
  int first = MyFrame_BorrowCode(frame)->co_firstlineno;
775
788
  if (CTracer_record_pair(self, self->pcur_entry->last_line, -first) < 0) {
776
789
  goto error;
@@ -373,15 +373,12 @@ def filter_text(text: str, filters: Iterable[Callable[[str], str]]) -> str:
373
373
  run.
374
374
 
375
375
  """
376
- clean_text = text.rstrip()
377
- ending = text[len(clean_text) :]
378
- text = clean_text
379
376
  for filter_fn in filters:
380
377
  lines = []
381
- for line in text.splitlines():
382
- lines.extend(filter_fn(line).splitlines())
383
- text = "\n".join(lines)
384
- return text + ending
378
+ for line in text.splitlines(keepends=True):
379
+ lines.extend(filter_fn(line).splitlines(keepends=True))
380
+ text = "".join(lines)
381
+ return text
385
382
 
386
383
 
387
384
  class CwdTracker:
@@ -237,7 +237,7 @@ class Matcher(abc.ABC):
237
237
  return f"<{self.__class__.__name__} {self.name} {self.strs!r}>"
238
238
 
239
239
  @abc.abstractmethod
240
- def match(self, s: str) -> bool:
240
+ def match(self, s: str, /) -> bool:
241
241
  """Does this string match?"""
242
242
 
243
243
  def info(self) -> list[str]:
@@ -270,7 +270,7 @@ class TreeMatcher(Matcher):
270
270
  debug(f" Normalized {p!r} to {ap!r}")
271
271
  self.paths.append(ap)
272
272
 
273
- def match(self, fpath: str) -> bool: # pylint: disable=arguments-renamed
273
+ def match(self, fpath: str, /) -> bool:
274
274
  """Does `fpath` indicate a file in one of our trees?"""
275
275
  fpath = abs_file(fpath)
276
276
  for p in self.paths:
@@ -297,7 +297,7 @@ class ModuleMatcher(Matcher):
297
297
  self.modules = list(module_names)
298
298
  super().__init__(self.modules, name=name, caption=caption, debug=debug)
299
299
 
300
- def match(self, module_name: str) -> bool: # pylint: disable=arguments-renamed
300
+ def match(self, module_name: str, /) -> bool:
301
301
  """Does `module_name` indicate a module in one of our packages?"""
302
302
  if not module_name:
303
303
  return False
@@ -327,7 +327,7 @@ class GlobMatcher(Matcher):
327
327
  super().__init__(self.pats, name=name, caption=caption, debug=debug)
328
328
  self.re = globs_to_regex(self.pats, case_insensitive=env.WINDOWS)
329
329
 
330
- def match(self, fpath: str) -> bool: # pylint: disable=arguments-renamed
330
+ def match(self, fpath: str, /) -> bool:
331
331
  """Does `fpath` match one of our file name patterns?"""
332
332
  return self.re.match(fpath) is not None
333
333
 
@@ -529,6 +529,7 @@ class TAddArcFn(Protocol):
529
529
  10" or "exit from function 'fooey'."
530
530
 
531
531
  """
532
+ ...
532
533
 
533
534
 
534
535
  TArcFragments = dict[TArc, list[tuple[str | None, str | None]]]
@@ -40,6 +40,9 @@ set_TArc = set[TArc]
40
40
  # PYVERSIONS: RESUME is new in Python3.11
41
41
  RESUME = dis.opmap.get("RESUME")
42
42
  RETURN_VALUE = dis.opmap["RETURN_VALUE"]
43
+ # PyPy attributes the exception-handler PUSH_EXC_INFO to the try/else line.
44
+ # That instruction is not the else body. Skip it so the else line stays missing.
45
+ PUSH_EXC_INFO = dis.opmap.get("PUSH_EXC_INFO")
43
46
  if RESUME is None:
44
47
  YIELD_VALUE = dis.opmap["YIELD_VALUE"]
45
48
  YIELD_FROM = dis.opmap["YIELD_FROM"]
@@ -257,6 +260,15 @@ class PyTracer(Tracer):
257
260
  elif event == "line":
258
261
  # Record an executed line.
259
262
  if self.cur_file_data is not None:
263
+ if PUSH_EXC_INFO is not None:
264
+ lasti = frame.f_lasti
265
+ code = frame.f_code.co_code
266
+ if (
267
+ isinstance(lasti, int)
268
+ and 0 <= lasti < len(code)
269
+ and code[lasti] == PUSH_EXC_INFO
270
+ ):
271
+ return self._cached_bound_method_trace
260
272
  flineno: TLineNo = frame.f_lineno
261
273
 
262
274
  if self.trace_arcs:
@@ -292,6 +304,10 @@ class PyTracer(Tracer):
292
304
  else:
293
305
  real_return = True
294
306
  if real_return:
307
+ # Python 3.14 can report a new line only on the return event.
308
+ if env.PYVERSION >= (3, 14) and frame.f_lineno != self.last_line:
309
+ cast(set_TArc, self.cur_file_data).add((self.last_line, frame.f_lineno))
310
+ self.last_line = frame.f_lineno
295
311
  first = frame.f_code.co_firstlineno
296
312
  cast(set_TArc, self.cur_file_data).add((self.last_line, -first))
297
313
 
@@ -27,6 +27,7 @@ class Reporter(Protocol):
27
27
 
28
28
  def report(self, morfs: TMorfs, outfile: IO[str]) -> float:
29
29
  """Generate a report of `morfs`, written to `outfile`."""
30
+ ...
30
31
 
31
32
 
32
33
  def render_report(
@@ -100,18 +100,23 @@ class Tracer(Protocol):
100
100
 
101
101
  def start(self) -> TTraceFn | None:
102
102
  """Start this tracer, return a trace function if based on sys.settrace."""
103
+ ...
103
104
 
104
105
  def stop(self) -> None:
105
106
  """Stop this tracer."""
107
+ ...
106
108
 
107
109
  def activity(self) -> bool:
108
110
  """Has there been any activity?"""
111
+ ...
109
112
 
110
113
  def reset_activity(self) -> None:
111
114
  """Reset the activity() flag."""
115
+ ...
112
116
 
113
117
  def get_stats(self) -> dict[str, int] | None:
114
118
  """Return a dictionary of statistics, or None."""
119
+ ...
115
120
 
116
121
 
117
122
  ## Coverage
@@ -143,6 +148,7 @@ class TConfigurable(Protocol):
143
148
  Returns the value of the option.
144
149
 
145
150
  """
151
+ ...
146
152
 
147
153
  def set_option(self, option_name: str, value: TConfigValueIn | TConfigSectionIn) -> None:
148
154
  """Set an option in the configuration.
@@ -154,6 +160,7 @@ class TConfigurable(Protocol):
154
160
  `value` is the new value for the option.
155
161
 
156
162
  """
163
+ ...
157
164
 
158
165
 
159
166
  class TPluginConfig(Protocol):
@@ -161,6 +168,7 @@ class TPluginConfig(Protocol):
161
168
 
162
169
  def get_plugin_options(self, plugin: str) -> TConfigSectionOut:
163
170
  """Get the options for a plugin."""
171
+ ...
164
172
 
165
173
 
166
174
  ## Parsing
@@ -185,9 +193,11 @@ class TDebugCtl(Protocol):
185
193
 
186
194
  def should(self, option: str) -> bool:
187
195
  """Decide whether to output debug information in category `option`."""
196
+ ...
188
197
 
189
198
  def write(self, msg: str) -> None:
190
199
  """Write a line of debug output."""
200
+ ...
191
201
 
192
202
 
193
203
  class TWritable(Protocol):
@@ -195,3 +205,4 @@ class TWritable(Protocol):
195
205
 
196
206
  def write(self, msg: str) -> None:
197
207
  """Write a message."""
208
+ ...
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
 
9
9
  # version_info: same semantics as sys.version_info.
10
10
  # _dev: the .devN suffix if any.
11
- version_info = (7, 16, 1, "final", 0)
11
+ version_info = (7, 16, 2, "final", 0)
12
12
  _dev = 0
13
13
 
14
14
 
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coverage
3
- Version: 7.16.1
3
+ Version: 7.16.2
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.16.1
9
+ Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.2
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
@@ -83,7 +83,7 @@ Coverage.py runs on these versions of Python:
83
83
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
84
84
  `GitHub`_.
85
85
 
86
- .. _Read the Docs: https://coverage.readthedocs.io/en/7.16.1/
86
+ .. _Read the Docs: https://coverage.readthedocs.io/en/7.16.2/
87
87
  .. _GitHub: https://github.com/coveragepy/coveragepy
88
88
 
89
89
 
@@ -112,7 +112,7 @@ Getting Started
112
112
  Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
113
113
  of the docs.
114
114
 
115
- .. _Quick Start section: https://coverage.readthedocs.io/en/7.16.1/#quick-start
115
+ .. _Quick Start section: https://coverage.readthedocs.io/en/7.16.2/#quick-start
116
116
 
117
117
 
118
118
  Change history
@@ -120,7 +120,7 @@ Change history
120
120
 
121
121
  The complete history of changes is on the `change history page`_.
122
122
 
123
- .. _change history page: https://coverage.readthedocs.io/en/7.16.1/changes.html
123
+ .. _change history page: https://coverage.readthedocs.io/en/7.16.2/changes.html
124
124
 
125
125
 
126
126
  Code of Conduct
@@ -139,7 +139,7 @@ Contributing
139
139
  Found a bug? Want to help improve the code or documentation? See the
140
140
  `Contributing section`_ of the docs.
141
141
 
142
- .. _Contributing section: https://coverage.readthedocs.io/en/7.16.1/contributing.html
142
+ .. _Contributing section: https://coverage.readthedocs.io/en/7.16.2/contributing.html
143
143
 
144
144
 
145
145
  Security
@@ -167,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
167
167
  :target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
168
168
  :alt: Quality check status
169
169
  .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
170
- :target: https://coverage.readthedocs.io/en/7.16.1/
170
+ :target: https://coverage.readthedocs.io/en/7.16.2/
171
171
  :alt: Documentation
172
172
  .. |kit| image:: https://img.shields.io/pypi/v/coverage
173
173
  :target: https://pypi.org/project/coverage/
@@ -37,9 +37,9 @@ so that every data file is distinct::
37
37
 
38
38
  You can also define a new data file name with the ``[run] data_file`` option.
39
39
 
40
- Once you have created a number of these files, you can copy them all to a
41
- single directory, and use the **combine** command to combine them into one
42
- .coverage data file::
40
+ Once you have created a number of separate data files, you can also copy them
41
+ all to a single directory, and use the **combine** command to combine them into
42
+ one .coverage data file::
43
43
 
44
44
  $ coverage combine
45
45
 
@@ -99,6 +99,28 @@ want to keep those files, use the ``--keep`` command-line option.
99
99
  .. [[[end]]] (sum: ARyg8KB1fE)
100
100
 
101
101
 
102
+ Parallel test runners
103
+ .....................
104
+
105
+ If independent test runners use coverage.py concurrently in the same working
106
+ directory, give each runner a different *base* data file name. This is
107
+ important with tools such as ``tox --parallel``: coverage's parallel mode makes
108
+ the individual measurement files unique, but separate tox environments can
109
+ still combine or erase files using the same base name at the same time.
110
+
111
+ You can use tox settings to give each tox environment a distinct base coverage
112
+ data file name so their combine steps won't collide::
113
+
114
+ [testenv]
115
+ setenv =
116
+ COVERAGE_FILE = {toxinidir}/.coverage.{envname}
117
+
118
+ Each environment can run coverage in parallel, and combine their data files
119
+ into a distinct data file. After the test-running tox environments have
120
+ finished, a final second-level combining environment can combine those files
121
+ using their common ``.coverage`` prefix, as described above.
122
+
123
+
102
124
  .. _cmd_combine_remapping:
103
125
 
104
126
  Re-mapping paths
@@ -69,11 +69,11 @@ project = "Coverage.py"
69
69
  # @@@ editable
70
70
  copyright = "2009–2026, Ned Batchelder" # pylint: disable=redefined-builtin
71
71
  # The short X.Y.Z version.
72
- version = "7.16.1"
72
+ version = "7.16.2"
73
73
  # The full version, including alpha/beta/rc tags.
74
- release = "7.16.1"
74
+ release = "7.16.2"
75
75
  # The date of release, in "monthname day, year" format.
76
- release_date = "September 13, 2026"
76
+ release_date = "September 27, 2026"
77
77
  # @@@ end
78
78
 
79
79
  rst_epilog = f"""