coverage 7.16.0__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 (408) hide show
  1. {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/codeql-analysis.yml +3 -3
  2. {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/coverage.yml +22 -4
  3. {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/kit.yml +5 -5
  4. {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/python-nightly.yml +1 -1
  5. {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/quality.yml +8 -8
  6. {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/testsuite.yml +9 -4
  7. {coverage-7.16.0 → coverage-7.16.2}/.pre-commit-config.yaml +1 -1
  8. {coverage-7.16.0 → coverage-7.16.2}/.readthedocs.yaml +1 -1
  9. {coverage-7.16.0 → coverage-7.16.2}/CHANGES.rst +39 -0
  10. {coverage-7.16.0 → coverage-7.16.2}/MANIFEST.in +2 -2
  11. {coverage-7.16.0 → coverage-7.16.2}/Makefile +16 -16
  12. {coverage-7.16.0 → coverage-7.16.2}/PKG-INFO +8 -12
  13. {coverage-7.16.0 → coverage-7.16.2}/README.rst +1 -5
  14. {coverage-7.16.0 → coverage-7.16.2}/coverage/bytecode.py +6 -0
  15. {coverage-7.16.0 → coverage-7.16.2}/coverage/context.py +7 -0
  16. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/tracer.c +13 -0
  17. {coverage-7.16.0 → coverage-7.16.2}/coverage/debug.py +4 -7
  18. {coverage-7.16.0 → coverage-7.16.2}/coverage/files.py +4 -4
  19. {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/coverage_html.js +11 -8
  20. {coverage-7.16.0 → coverage-7.16.2}/coverage/parser.py +30 -8
  21. {coverage-7.16.0 → coverage-7.16.2}/coverage/pytracer.py +16 -0
  22. {coverage-7.16.0 → coverage-7.16.2}/coverage/report_core.py +1 -0
  23. {coverage-7.16.0 → coverage-7.16.2}/coverage/sqldata.py +7 -0
  24. {coverage-7.16.0 → coverage-7.16.2}/coverage/types.py +11 -0
  25. {coverage-7.16.0 → coverage-7.16.2}/coverage/version.py +1 -1
  26. {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/PKG-INFO +8 -12
  27. {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/SOURCES.txt +9 -9
  28. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_combine.rst +25 -3
  29. {coverage-7.16.0 → coverage-7.16.2}/doc/conf.py +3 -3
  30. {coverage-7.16.0 → coverage-7.16.2}/doc/contributing.rst +25 -8
  31. {coverage-7.16.0 → coverage-7.16.2}/doc/index.rst +1 -1
  32. {coverage-7.16.0 → coverage-7.16.2}/doc/requirements.in +2 -2
  33. coverage-7.16.2/doc/requirements.txt +883 -0
  34. {coverage-7.16.0 → coverage-7.16.2}/howto.txt +4 -9
  35. {coverage-7.16.0 → coverage-7.16.2}/pyproject.toml +7 -0
  36. {coverage-7.16.0 → coverage-7.16.2}/requirements/dev.in +3 -2
  37. coverage-7.16.0/requirements/dev.pip → coverage-7.16.2/requirements/dev.txt +495 -375
  38. {coverage-7.16.0 → coverage-7.16.2}/requirements/kit.in +2 -2
  39. coverage-7.16.2/requirements/kit.txt +542 -0
  40. {coverage-7.16.0 → coverage-7.16.2}/requirements/light-threads.in +1 -1
  41. coverage-7.16.0/requirements/light-threads.pip → coverage-7.16.2/requirements/light-threads.txt +42 -42
  42. {coverage-7.16.0 → coverage-7.16.2}/requirements/mypy.in +1 -1
  43. coverage-7.16.2/requirements/mypy.txt +612 -0
  44. {coverage-7.16.0 → coverage-7.16.2}/requirements/pip.in +2 -2
  45. coverage-7.16.0/requirements/pip.pip → coverage-7.16.2/requirements/pip.txt +12 -12
  46. {coverage-7.16.0 → coverage-7.16.2}/requirements/pytest.in +5 -3
  47. coverage-7.16.2/requirements/pytest.txt +340 -0
  48. {coverage-7.16.0 → coverage-7.16.2}/requirements/tox.in +2 -2
  49. coverage-7.16.0/requirements/tox.pip → coverage-7.16.2/requirements/tox.txt +18 -18
  50. coverage-7.16.2/tests/js/index.html +25 -0
  51. {coverage-7.16.0 → coverage-7.16.2}/tests/js/tests.js +36 -19
  52. {coverage-7.16.0 → coverage-7.16.2}/tests/test_arcs.py +41 -0
  53. {coverage-7.16.0 → coverage-7.16.2}/tests/test_bytecode.py +2 -2
  54. {coverage-7.16.0 → coverage-7.16.2}/tests/test_context.py +50 -0
  55. {coverage-7.16.0 → coverage-7.16.2}/tests/test_coverage.py +31 -0
  56. {coverage-7.16.0 → coverage-7.16.2}/tests/test_data.py +18 -0
  57. {coverage-7.16.0 → coverage-7.16.2}/tests/test_debug.py +6 -1
  58. {coverage-7.16.0 → coverage-7.16.2}/tests/test_parser.py +63 -0
  59. {coverage-7.16.0 → coverage-7.16.2}/tests/testenv.py +1 -1
  60. {coverage-7.16.0 → coverage-7.16.2}/tox.ini +7 -7
  61. coverage-7.16.0/doc/requirements.pip +0 -828
  62. coverage-7.16.0/requirements/kit.pip +0 -542
  63. coverage-7.16.0/requirements/mypy.pip +0 -436
  64. coverage-7.16.0/requirements/pytest.pip +0 -171
  65. coverage-7.16.0/tests/js/index.html +0 -43
  66. {coverage-7.16.0 → coverage-7.16.2}/.editorconfig +0 -0
  67. {coverage-7.16.0 → coverage-7.16.2}/.git-blame-ignore-revs +0 -0
  68. {coverage-7.16.0 → coverage-7.16.2}/.github/CODE_OF_CONDUCT.md +0 -0
  69. {coverage-7.16.0 → coverage-7.16.2}/.github/FUNDING.yml +0 -0
  70. {coverage-7.16.0 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  71. {coverage-7.16.0 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  72. {coverage-7.16.0 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  73. {coverage-7.16.0 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/support.md +0 -0
  74. {coverage-7.16.0 → coverage-7.16.2}/.github/SECURITY.md +0 -0
  75. {coverage-7.16.0 → coverage-7.16.2}/.github/dependabot.yml +0 -0
  76. {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/dependency-review.yml +0 -0
  77. {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/publish.yml +0 -0
  78. {coverage-7.16.0 → coverage-7.16.2}/.github/zizmor.yml +0 -0
  79. {coverage-7.16.0 → coverage-7.16.2}/.gitignore +0 -0
  80. {coverage-7.16.0 → coverage-7.16.2}/.ignore +0 -0
  81. {coverage-7.16.0 → coverage-7.16.2}/CITATION.cff +0 -0
  82. {coverage-7.16.0 → coverage-7.16.2}/CONTRIBUTORS.txt +0 -0
  83. {coverage-7.16.0 → coverage-7.16.2}/LICENSE.txt +0 -0
  84. {coverage-7.16.0 → coverage-7.16.2}/NOTICE.txt +0 -0
  85. {coverage-7.16.0 → coverage-7.16.2}/__main__.py +0 -0
  86. {coverage-7.16.0 → coverage-7.16.2}/a1_coverage.pth +0 -0
  87. {coverage-7.16.0 → coverage-7.16.2}/ci/README.txt +0 -0
  88. {coverage-7.16.0 → coverage-7.16.2}/ci/comment_on_fixes.py +0 -0
  89. {coverage-7.16.0 → coverage-7.16.2}/ci/session.py +0 -0
  90. {coverage-7.16.0 → coverage-7.16.2}/ci/trigger_action.py +0 -0
  91. {coverage-7.16.0 → coverage-7.16.2}/ci/update_rtfd.py +0 -0
  92. {coverage-7.16.0 → coverage-7.16.2}/coverage/__init__.py +0 -0
  93. {coverage-7.16.0 → coverage-7.16.2}/coverage/__main__.py +0 -0
  94. {coverage-7.16.0 → coverage-7.16.2}/coverage/annotate.py +0 -0
  95. {coverage-7.16.0 → coverage-7.16.2}/coverage/cmdline.py +0 -0
  96. {coverage-7.16.0 → coverage-7.16.2}/coverage/collector.py +0 -0
  97. {coverage-7.16.0 → coverage-7.16.2}/coverage/config.py +0 -0
  98. {coverage-7.16.0 → coverage-7.16.2}/coverage/control.py +0 -0
  99. {coverage-7.16.0 → coverage-7.16.2}/coverage/core.py +0 -0
  100. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/datastack.c +0 -0
  101. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/datastack.h +0 -0
  102. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/filedisp.c +0 -0
  103. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/filedisp.h +0 -0
  104. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/module.c +0 -0
  105. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/stats.h +0 -0
  106. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/tracer.h +0 -0
  107. {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/util.h +0 -0
  108. {coverage-7.16.0 → coverage-7.16.2}/coverage/data.py +0 -0
  109. {coverage-7.16.0 → coverage-7.16.2}/coverage/disposition.py +0 -0
  110. {coverage-7.16.0 → coverage-7.16.2}/coverage/env.py +0 -0
  111. {coverage-7.16.0 → coverage-7.16.2}/coverage/exceptions.py +0 -0
  112. {coverage-7.16.0 → coverage-7.16.2}/coverage/execfile.py +0 -0
  113. {coverage-7.16.0 → coverage-7.16.2}/coverage/html.py +0 -0
  114. {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/favicon_32.png +0 -0
  115. {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/index.html +0 -0
  116. {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/keybd_closed.png +0 -0
  117. {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/pyfile.html +0 -0
  118. {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/style.css +0 -0
  119. {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/style.scss +0 -0
  120. {coverage-7.16.0 → coverage-7.16.2}/coverage/inorout.py +0 -0
  121. {coverage-7.16.0 → coverage-7.16.2}/coverage/jsonreport.py +0 -0
  122. {coverage-7.16.0 → coverage-7.16.2}/coverage/lcovreport.py +0 -0
  123. {coverage-7.16.0 → coverage-7.16.2}/coverage/misc.py +0 -0
  124. {coverage-7.16.0 → coverage-7.16.2}/coverage/multiproc.py +0 -0
  125. {coverage-7.16.0 → coverage-7.16.2}/coverage/numbits.py +0 -0
  126. {coverage-7.16.0 → coverage-7.16.2}/coverage/patch.py +0 -0
  127. {coverage-7.16.0 → coverage-7.16.2}/coverage/phystokens.py +0 -0
  128. {coverage-7.16.0 → coverage-7.16.2}/coverage/plugin.py +0 -0
  129. {coverage-7.16.0 → coverage-7.16.2}/coverage/plugin_support.py +0 -0
  130. {coverage-7.16.0 → coverage-7.16.2}/coverage/pth_file.py +0 -0
  131. {coverage-7.16.0 → coverage-7.16.2}/coverage/py.typed +0 -0
  132. {coverage-7.16.0 → coverage-7.16.2}/coverage/python.py +0 -0
  133. {coverage-7.16.0 → coverage-7.16.2}/coverage/regions.py +0 -0
  134. {coverage-7.16.0 → coverage-7.16.2}/coverage/report.py +0 -0
  135. {coverage-7.16.0 → coverage-7.16.2}/coverage/results.py +0 -0
  136. {coverage-7.16.0 → coverage-7.16.2}/coverage/sqlitedb.py +0 -0
  137. {coverage-7.16.0 → coverage-7.16.2}/coverage/sysmon.py +0 -0
  138. {coverage-7.16.0 → coverage-7.16.2}/coverage/templite.py +0 -0
  139. {coverage-7.16.0 → coverage-7.16.2}/coverage/tomlconfig.py +0 -0
  140. {coverage-7.16.0 → coverage-7.16.2}/coverage/tracer.pyi +0 -0
  141. {coverage-7.16.0 → coverage-7.16.2}/coverage/xmlreport.py +0 -0
  142. {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/dependency_links.txt +0 -0
  143. {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/entry_points.txt +0 -0
  144. {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/not-zip-safe +0 -0
  145. {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/requires.txt +0 -0
  146. {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/top_level.txt +0 -0
  147. {coverage-7.16.0 → coverage-7.16.2}/doc/_static/coverage.css +0 -0
  148. {coverage-7.16.0 → coverage-7.16.2}/doc/api.rst +0 -0
  149. {coverage-7.16.0 → coverage-7.16.2}/doc/api_coverage.rst +0 -0
  150. {coverage-7.16.0 → coverage-7.16.2}/doc/api_coveragedata.rst +0 -0
  151. {coverage-7.16.0 → coverage-7.16.2}/doc/api_exceptions.rst +0 -0
  152. {coverage-7.16.0 → coverage-7.16.2}/doc/api_module.rst +0 -0
  153. {coverage-7.16.0 → coverage-7.16.2}/doc/api_plugin.rst +0 -0
  154. {coverage-7.16.0 → coverage-7.16.2}/doc/branch.rst +0 -0
  155. {coverage-7.16.0 → coverage-7.16.2}/doc/changes.rst +0 -0
  156. {coverage-7.16.0 → coverage-7.16.2}/doc/cog_helpers.py +0 -0
  157. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_annotate.rst +0 -0
  158. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_debug.rst +0 -0
  159. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_erase.rst +0 -0
  160. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_html.rst +0 -0
  161. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_json.rst +0 -0
  162. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_lcov.rst +0 -0
  163. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_report.rst +0 -0
  164. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_reporting.rst +0 -0
  165. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_run.rst +0 -0
  166. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_xml.rst +0 -0
  167. {coverage-7.16.0 → coverage-7.16.2}/doc/commands/index.rst +0 -0
  168. {coverage-7.16.0 → coverage-7.16.2}/doc/config.rst +0 -0
  169. {coverage-7.16.0 → coverage-7.16.2}/doc/contexts.rst +0 -0
  170. {coverage-7.16.0 → coverage-7.16.2}/doc/dbschema.rst +0 -0
  171. {coverage-7.16.0 → coverage-7.16.2}/doc/dict.txt +0 -0
  172. {coverage-7.16.0 → coverage-7.16.2}/doc/excluding.rst +0 -0
  173. {coverage-7.16.0 → coverage-7.16.2}/doc/faq.rst +0 -0
  174. {coverage-7.16.0 → coverage-7.16.2}/doc/howitworks.rst +0 -0
  175. {coverage-7.16.0 → coverage-7.16.2}/doc/install.rst +0 -0
  176. {coverage-7.16.0 → coverage-7.16.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
  177. {coverage-7.16.0 → coverage-7.16.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
  178. {coverage-7.16.0 → coverage-7.16.2}/doc/media/sleepy-snake-600.png +0 -0
  179. {coverage-7.16.0 → coverage-7.16.2}/doc/media/sleepy-snake-circle-150.png +0 -0
  180. {coverage-7.16.0 → coverage-7.16.2}/doc/messages.rst +0 -0
  181. {coverage-7.16.0 → coverage-7.16.2}/doc/migrating.rst +0 -0
  182. {coverage-7.16.0 → coverage-7.16.2}/doc/other.rst +0 -0
  183. {coverage-7.16.0 → coverage-7.16.2}/doc/plugins.rst +0 -0
  184. {coverage-7.16.0 → coverage-7.16.2}/doc/python-coverage.1.txt +0 -0
  185. {coverage-7.16.0 → coverage-7.16.2}/doc/sleepy.rst +0 -0
  186. {coverage-7.16.0 → coverage-7.16.2}/doc/source.rst +0 -0
  187. {coverage-7.16.0 → coverage-7.16.2}/doc/subprocess.rst +0 -0
  188. {coverage-7.16.0 → coverage-7.16.2}/doc/trouble.rst +0 -0
  189. {coverage-7.16.0 → coverage-7.16.2}/doc/whatsnew5x.rst +0 -0
  190. {coverage-7.16.0 → coverage-7.16.2}/igor.py +0 -0
  191. {coverage-7.16.0 → coverage-7.16.2}/lab/README.txt +0 -0
  192. {coverage-7.16.0 → coverage-7.16.2}/lab/branches.py +0 -0
  193. {coverage-7.16.0 → coverage-7.16.2}/lab/compare_times.sh +0 -0
  194. {coverage-7.16.0 → coverage-7.16.2}/lab/coverage-04.dtd +0 -0
  195. {coverage-7.16.0 → coverage-7.16.2}/lab/extract_code.py +0 -0
  196. {coverage-7.16.0 → coverage-7.16.2}/lab/goals.py +0 -0
  197. {coverage-7.16.0 → coverage-7.16.2}/lab/hack_pyc.py +0 -0
  198. {coverage-7.16.0 → coverage-7.16.2}/lab/notes/arcs-to-branches.txt +0 -0
  199. {coverage-7.16.0 → coverage-7.16.2}/lab/notes/bug1303.txt +0 -0
  200. {coverage-7.16.0 → coverage-7.16.2}/lab/notes/pypy-738-decorated-functions.txt +0 -0
  201. {coverage-7.16.0 → coverage-7.16.2}/lab/parse_all.py +0 -0
  202. {coverage-7.16.0 → coverage-7.16.2}/lab/parser.py +0 -0
  203. {coverage-7.16.0 → coverage-7.16.2}/lab/pick.py +0 -0
  204. {coverage-7.16.0 → coverage-7.16.2}/lab/platform_info.py +0 -0
  205. {coverage-7.16.0 → coverage-7.16.2}/lab/run_sysmon.py +0 -0
  206. {coverage-7.16.0 → coverage-7.16.2}/lab/run_trace.py +0 -0
  207. {coverage-7.16.0 → coverage-7.16.2}/lab/select_contexts.py +0 -0
  208. {coverage-7.16.0 → coverage-7.16.2}/lab/show_platform.py +0 -0
  209. {coverage-7.16.0 → coverage-7.16.2}/lab/show_pyc.py +0 -0
  210. {coverage-7.16.0 → coverage-7.16.2}/lab/treetopy.sh +0 -0
  211. {coverage-7.16.0 → coverage-7.16.2}/lab/warn_executed.py +0 -0
  212. {coverage-7.16.0 → coverage-7.16.2}/lab/warn_executed.toml +0 -0
  213. {coverage-7.16.0 → coverage-7.16.2}/metacov.ini +0 -0
  214. /coverage-7.16.0/requirements/pins.pip → /coverage-7.16.2/requirements/pins.txt +0 -0
  215. {coverage-7.16.0 → coverage-7.16.2}/setup.cfg +0 -0
  216. {coverage-7.16.0 → coverage-7.16.2}/setup.py +0 -0
  217. {coverage-7.16.0 → coverage-7.16.2}/tests/__init__.py +0 -0
  218. {coverage-7.16.0 → coverage-7.16.2}/tests/conftest.py +0 -0
  219. {coverage-7.16.0 → coverage-7.16.2}/tests/coveragetest.py +0 -0
  220. {coverage-7.16.0 → coverage-7.16.2}/tests/covmodzip1.py +0 -0
  221. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/README.rst +0 -0
  222. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
  223. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
  224. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
  225. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
  226. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
  227. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
  228. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/mae/mae.py,cover +0 -0
  229. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
  230. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/a/a.py,cover +0 -0
  231. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
  232. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/b/b.py,cover +0 -0
  233. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/multi.py,cover +0 -0
  234. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/white/white.py,cover +0 -0
  235. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/Makefile +0 -0
  236. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/a/a_py.html +0 -0
  237. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/a/class_index.html +0 -0
  238. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/a/function_index.html +0 -0
  239. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/a/index.html +0 -0
  240. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/b_branch/b_py.html +0 -0
  241. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/b_branch/class_index.html +0 -0
  242. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/b_branch/function_index.html +0 -0
  243. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/b_branch/index.html +0 -0
  244. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/bom/bom_py.html +0 -0
  245. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/bom/class_index.html +0 -0
  246. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/bom/function_index.html +0 -0
  247. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/bom/index.html +0 -0
  248. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/contexts/class_index.html +0 -0
  249. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/contexts/function_index.html +0 -0
  250. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/contexts/index.html +0 -0
  251. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/contexts/two_tests_py.html +0 -0
  252. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/isolatin1/class_index.html +0 -0
  253. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/isolatin1/function_index.html +0 -0
  254. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/isolatin1/index.html +0 -0
  255. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/isolatin1/isolatin1_py.html +0 -0
  256. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/multiline/class_index.html +0 -0
  257. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/multiline/function_index.html +0 -0
  258. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/multiline/index.html +0 -0
  259. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/multiline/multiline_py.html +0 -0
  260. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/class_index.html +0 -0
  261. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/function_index.html +0 -0
  262. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/index.html +0 -0
  263. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/m1_py.html +0 -0
  264. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/m2_py.html +0 -0
  265. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/m3_py.html +0 -0
  266. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/main_py.html +0 -0
  267. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/class_index.html +0 -0
  268. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/function_index.html +0 -0
  269. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/index.html +0 -0
  270. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/m2_py.html +0 -0
  271. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/m3_py.html +0 -0
  272. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/main_py.html +0 -0
  273. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/class_index.html +0 -0
  274. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/function_index.html +0 -0
  275. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/index.html +0 -0
  276. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/m3_py.html +0 -0
  277. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/main_py.html +0 -0
  278. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/class_index.html +0 -0
  279. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/function_index.html +0 -0
  280. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/index.html +0 -0
  281. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/m1_py.html +0 -0
  282. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/m3_py.html +0 -0
  283. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/main_py.html +0 -0
  284. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/class_index.html +0 -0
  285. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/function_index.html +0 -0
  286. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/index.html +0 -0
  287. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/m1_py.html +0 -0
  288. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/main_py.html +0 -0
  289. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/blah_blah_other_py.html +0 -0
  290. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/class_index.html +0 -0
  291. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/function_index.html +0 -0
  292. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/here_py.html +0 -0
  293. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/index.html +0 -0
  294. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/partial/class_index.html +0 -0
  295. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/partial/function_index.html +0 -0
  296. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/partial/index.html +0 -0
  297. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/partial/partial_py.html +0 -0
  298. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/a_py.html +0 -0
  299. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/class_index.html +0 -0
  300. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/function_index.html +0 -0
  301. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/index.html +0 -0
  302. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/myextra.css +0 -0
  303. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/style.css +0 -0
  304. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
  305. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
  306. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
  307. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
  308. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/unicode/class_index.html +0 -0
  309. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/unicode/function_index.html +0 -0
  310. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/unicode/index.html +0 -0
  311. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/unicode/unicode_py.html +0 -0
  312. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/testing/getty/gettysburg.txt +0 -0
  313. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/testing/xml/output.xml +0 -0
  314. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/xml/x_xml/coverage.xml +0 -0
  315. {coverage-7.16.0 → coverage-7.16.2}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
  316. {coverage-7.16.0 → coverage-7.16.2}/tests/goldtest.py +0 -0
  317. {coverage-7.16.0 → coverage-7.16.2}/tests/helpers.py +0 -0
  318. {coverage-7.16.0 → coverage-7.16.2}/tests/hypo.py +0 -0
  319. {coverage-7.16.0 → coverage-7.16.2}/tests/mixins.py +0 -0
  320. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/__init__.py +0 -0
  321. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/afile.odd.py +0 -0
  322. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/afile.py +0 -0
  323. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/__init__.py +0 -0
  324. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/bfile.odd.py +0 -0
  325. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/bfile.py +0 -0
  326. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/cc/__init__.py +0 -0
  327. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/cc/cfile.py +0 -0
  328. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb.odd/bfile.py +0 -0
  329. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/zfile.py +0 -0
  330. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/ambiguous/__init__.py +0 -0
  331. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
  332. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
  333. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/checkspec.py +0 -0
  334. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/covmod1.py +0 -0
  335. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/namespace_420/sub1/__init__.py +0 -0
  336. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/__init__.py +0 -0
  337. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/__main__.py +0 -0
  338. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/p1a.py +0 -0
  339. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/p1b.py +0 -0
  340. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/p1c.py +0 -0
  341. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/runmod2.py +0 -0
  342. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/sub/__init__.py +0 -0
  343. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/sub/__main__.py +0 -0
  344. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/sub/ps1a.py +0 -0
  345. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/sub/runmod3.py +0 -0
  346. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg2/__init__.py +0 -0
  347. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg2/p2a.py +0 -0
  348. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg2/p2b.py +0 -0
  349. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/plugins/__init__.py +0 -0
  350. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/plugins/a_plugin.py +0 -0
  351. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/plugins/another.py +0 -0
  352. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/process_test/__init__.py +0 -0
  353. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/process_test/try_execfile.py +0 -0
  354. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/runmod1.py +0 -0
  355. {coverage-7.16.0 → coverage-7.16.2}/tests/modules/usepkgs.py +0 -0
  356. {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
  357. {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/__init__.py +0 -0
  358. {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/othera.py +0 -0
  359. {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/otherb.py +0 -0
  360. {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/sub/__init__.py +0 -0
  361. {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/sub/osa.py +0 -0
  362. {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/sub/osb.py +0 -0
  363. {coverage-7.16.0 → coverage-7.16.2}/tests/osinfo.py +0 -0
  364. {coverage-7.16.0 → coverage-7.16.2}/tests/plugin1.py +0 -0
  365. {coverage-7.16.0 → coverage-7.16.2}/tests/plugin2.py +0 -0
  366. {coverage-7.16.0 → coverage-7.16.2}/tests/plugin_config.py +0 -0
  367. {coverage-7.16.0 → coverage-7.16.2}/tests/qunit/jquery.tmpl.min.js +0 -0
  368. {coverage-7.16.0 → coverage-7.16.2}/tests/select_plugin.py +0 -0
  369. {coverage-7.16.0 → coverage-7.16.2}/tests/strategies.py +0 -0
  370. {coverage-7.16.0 → coverage-7.16.2}/tests/stress_phystoken.tok +0 -0
  371. {coverage-7.16.0 → coverage-7.16.2}/tests/stress_phystoken_dos.tok +0 -0
  372. {coverage-7.16.0 → coverage-7.16.2}/tests/test_annotate.py +0 -0
  373. {coverage-7.16.0 → coverage-7.16.2}/tests/test_api.py +0 -0
  374. {coverage-7.16.0 → coverage-7.16.2}/tests/test_cmdline.py +0 -0
  375. {coverage-7.16.0 → coverage-7.16.2}/tests/test_collector.py +0 -0
  376. {coverage-7.16.0 → coverage-7.16.2}/tests/test_concurrency.py +0 -0
  377. {coverage-7.16.0 → coverage-7.16.2}/tests/test_config.py +0 -0
  378. {coverage-7.16.0 → coverage-7.16.2}/tests/test_core.py +0 -0
  379. {coverage-7.16.0 → coverage-7.16.2}/tests/test_execfile.py +0 -0
  380. {coverage-7.16.0 → coverage-7.16.2}/tests/test_filereporter.py +0 -0
  381. {coverage-7.16.0 → coverage-7.16.2}/tests/test_files.py +0 -0
  382. {coverage-7.16.0 → coverage-7.16.2}/tests/test_goldtest.py +0 -0
  383. {coverage-7.16.0 → coverage-7.16.2}/tests/test_html.py +0 -0
  384. {coverage-7.16.0 → coverage-7.16.2}/tests/test_json.py +0 -0
  385. {coverage-7.16.0 → coverage-7.16.2}/tests/test_lcov.py +0 -0
  386. {coverage-7.16.0 → coverage-7.16.2}/tests/test_misc.py +0 -0
  387. {coverage-7.16.0 → coverage-7.16.2}/tests/test_mixins.py +0 -0
  388. {coverage-7.16.0 → coverage-7.16.2}/tests/test_numbits.py +0 -0
  389. {coverage-7.16.0 → coverage-7.16.2}/tests/test_oddball.py +0 -0
  390. {coverage-7.16.0 → coverage-7.16.2}/tests/test_phystokens.py +0 -0
  391. {coverage-7.16.0 → coverage-7.16.2}/tests/test_plugins.py +0 -0
  392. {coverage-7.16.0 → coverage-7.16.2}/tests/test_process.py +0 -0
  393. {coverage-7.16.0 → coverage-7.16.2}/tests/test_python.py +0 -0
  394. {coverage-7.16.0 → coverage-7.16.2}/tests/test_regions.py +0 -0
  395. {coverage-7.16.0 → coverage-7.16.2}/tests/test_report.py +0 -0
  396. {coverage-7.16.0 → coverage-7.16.2}/tests/test_report_common.py +0 -0
  397. {coverage-7.16.0 → coverage-7.16.2}/tests/test_report_core.py +0 -0
  398. {coverage-7.16.0 → coverage-7.16.2}/tests/test_results.py +0 -0
  399. {coverage-7.16.0 → coverage-7.16.2}/tests/test_setup.py +0 -0
  400. {coverage-7.16.0 → coverage-7.16.2}/tests/test_sqlitedb.py +0 -0
  401. {coverage-7.16.0 → coverage-7.16.2}/tests/test_sysmon.py +0 -0
  402. {coverage-7.16.0 → coverage-7.16.2}/tests/test_templite.py +0 -0
  403. {coverage-7.16.0 → coverage-7.16.2}/tests/test_testing.py +0 -0
  404. {coverage-7.16.0 → coverage-7.16.2}/tests/test_venv.py +0 -0
  405. {coverage-7.16.0 → coverage-7.16.2}/tests/test_version.py +0 -0
  406. {coverage-7.16.0 → coverage-7.16.2}/tests/test_xml.py +0 -0
  407. {coverage-7.16.0 → coverage-7.16.2}/tests/zipsrc/zip1/__init__.py +0 -0
  408. {coverage-7.16.0 → coverage-7.16.2}/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@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
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@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
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@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
83
+ uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
@@ -57,7 +57,7 @@ jobs:
57
57
  - ".github/workflows/coverage.yml"
58
58
  - "tox.ini"
59
59
  - "metacov.ini"
60
- - "requirements/*.pip"
60
+ - "requirements/*.txt"
61
61
  - "tests/gold/**"
62
62
 
63
63
  coverage:
@@ -133,7 +133,7 @@ jobs:
133
133
  # 3.10 on Windows. Commenting out the cache here fixed it. Someday
134
134
  # try using the cache again.
135
135
  #cache: pip
136
- #cache-dependency-path: 'requirements/*.pip'
136
+ #cache-dependency-path: 'requirements/*.txt'
137
137
 
138
138
  - name: "Show environment"
139
139
  run: |
@@ -146,7 +146,7 @@ jobs:
146
146
  - name: "Install dependencies"
147
147
  run: |
148
148
  set -xe
149
- python -m pip install -r requirements/tox.pip
149
+ python -m pip install -r requirements/tox.txt
150
150
 
151
151
  - name: "Run tox coverage for ${{ matrix.python-version }}"
152
152
  env:
@@ -184,6 +184,7 @@ jobs:
184
184
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
185
185
  with:
186
186
  persist-credentials: false
187
+ fetch-depth: 200
187
188
 
188
189
  - name: "Set up Python"
189
190
  uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
@@ -193,7 +194,7 @@ jobs:
193
194
  # 3.10 on Windows. Commenting out the cache here fixed it. Someday
194
195
  # try using the cache again.
195
196
  #cache: pip
196
- #cache-dependency-path: 'requirements/*.pip'
197
+ #cache-dependency-path: 'requirements/*.txt'
197
198
 
198
199
  - name: "Show environment"
199
200
  run: |
@@ -206,6 +207,7 @@ jobs:
206
207
  run: |
207
208
  set -xe
208
209
  python -m pip install -e .
210
+ python -m pip install -r requirements/pytest.txt
209
211
  python igor.py zip_mods
210
212
 
211
213
  - name: "Download coverage data"
@@ -266,6 +268,22 @@ jobs:
266
268
  exit 1
267
269
  fi
268
270
 
271
+ - name: "Check coverage on changed lines"
272
+ # Changed code must be fully covered, unless the PR is labeled with "missing-coverage-ok".
273
+ if: github.event_name == 'pull_request'
274
+ env:
275
+ BASE_REF: ${{ github.event.pull_request.base.ref }}
276
+ FAIL_UNDER: ${{ contains(github.event.pull_request.labels.*.name, 'missing-coverage-ok') && '0' || '100' }}
277
+ run: |
278
+ git fetch origin "${BASE_REF}"
279
+ diff-cover coverage.xml \
280
+ --compare-branch "origin/${BASE_REF}" \
281
+ --fail-under="${FAIL_UNDER}" \
282
+ --format markdown:report.md \
283
+ || status=$?
284
+ cat report.md >> "$GITHUB_STEP_SUMMARY"
285
+ exit "${status:-0}"
286
+
269
287
  publish:
270
288
  name: "Publish coverage report"
271
289
  needs: combine
@@ -192,7 +192,7 @@ jobs:
192
192
  with:
193
193
  python-version: "${{ matrix.cipy }}"
194
194
  cache: pip
195
- cache-dependency-path: 'requirements/*.pip'
195
+ cache-dependency-path: 'requirements/*.txt'
196
196
 
197
197
  # Rust toolchain is not currently installed on windows arm64 images.
198
198
  # We need it for nh3, needed by readme-renderer, needed by twine.
@@ -208,11 +208,11 @@ jobs:
208
208
 
209
209
  - name: "Install tools"
210
210
  run: |
211
- python -m pip install -r requirements/kit.pip
211
+ python -m pip install -r requirements/kit.txt
212
212
 
213
213
  - name: "Set up QEMU"
214
214
  if: ${{ matrix.arch == 'riscv64' }}
215
- uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0
215
+ uses: docker/setup-qemu-action@1f40c72289eff860ee54a304f1438e3cff362e0a # v4.3.0
216
216
 
217
217
  - name: "Show environment"
218
218
  run: |
@@ -257,11 +257,11 @@ jobs:
257
257
  with:
258
258
  python-version: "3.11" # PYVERSIONS: the kit-building version
259
259
  cache: pip
260
- cache-dependency-path: 'requirements/*.pip'
260
+ cache-dependency-path: 'requirements/*.txt'
261
261
 
262
262
  - name: "Install tools"
263
263
  run: |
264
- python -m pip install -r requirements/kit.pip
264
+ python -m pip install -r requirements/kit.txt
265
265
 
266
266
  - name: "Build non-binary artifacts"
267
267
  env:
@@ -110,7 +110,7 @@ jobs:
110
110
 
111
111
  - name: "Install dependencies"
112
112
  run: |
113
- python -m pip install -r requirements/tox.pip
113
+ python -m pip install -r requirements/tox.txt
114
114
 
115
115
  - name: "Run tox"
116
116
  run: |
@@ -58,7 +58,7 @@ jobs:
58
58
  workflow:
59
59
  - ".github/workflows/quality.yml"
60
60
  - "tox.ini"
61
- - "requirements/*.pip"
61
+ - "requirements/*.txt"
62
62
 
63
63
  lint:
64
64
  name: "Pylint etc"
@@ -84,11 +84,11 @@ jobs:
84
84
  with:
85
85
  python-version: "3.10" # Minimum of PYVERSIONS
86
86
  cache: pip
87
- cache-dependency-path: 'requirements/*.pip'
87
+ cache-dependency-path: 'requirements/*.txt'
88
88
 
89
89
  - name: "Install dependencies"
90
90
  run: |
91
- python -m pip install -r requirements/tox.pip
91
+ python -m pip install -r requirements/tox.txt
92
92
 
93
93
  - name: "Tox lint"
94
94
  run: |
@@ -114,11 +114,11 @@ jobs:
114
114
  with:
115
115
  python-version: "3.10" # Minimum of PYVERSIONS
116
116
  cache: pip
117
- cache-dependency-path: 'requirements/*.pip'
117
+ cache-dependency-path: 'requirements/*.txt'
118
118
 
119
119
  - name: "Install dependencies"
120
120
  run: |
121
- python -m pip install -r requirements/tox.pip
121
+ python -m pip install -r requirements/tox.txt
122
122
 
123
123
  - name: "Tox mypy"
124
124
  run: |
@@ -149,7 +149,7 @@ jobs:
149
149
  with:
150
150
  python-version: "3.12" # Doc version from PYVERSIONS
151
151
  cache: pip
152
- cache-dependency-path: 'requirements/*.pip'
152
+ cache-dependency-path: 'requirements/*.txt'
153
153
 
154
154
  - name: "Show environment"
155
155
  run: |
@@ -161,7 +161,7 @@ jobs:
161
161
  - name: "Install dependencies"
162
162
  run: |
163
163
  set -xe
164
- python -m pip install -r requirements/tox.pip
164
+ python -m pip install -r requirements/tox.txt
165
165
 
166
166
  - name: "Tox doc"
167
167
  run: |
@@ -185,7 +185,7 @@ jobs:
185
185
  persist-credentials: false
186
186
 
187
187
  - name: "Install uv"
188
- uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
188
+ uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
189
189
  with:
190
190
  enable-cache: false
191
191
 
@@ -55,7 +55,7 @@ jobs:
55
55
  - "**.c"
56
56
  - ".github/workflows/testsuite.yml"
57
57
  - "tox.ini"
58
- - "requirements/*.pip"
58
+ - "requirements/*.txt"
59
59
  - "tests/gold/**"
60
60
 
61
61
  tests:
@@ -129,7 +129,7 @@ jobs:
129
129
  # 3.10 on Windows. Commenting out the cache here fixed it. Someday
130
130
  # try using the cache again.
131
131
  #cache: pip
132
- #cache-dependency-path: 'requirements/*.pip'
132
+ #cache-dependency-path: 'requirements/*.txt'
133
133
 
134
134
  - name: "Show environment"
135
135
  run: |
@@ -149,7 +149,7 @@ jobs:
149
149
  - name: "Install dependencies"
150
150
  run: |
151
151
  set -xe
152
- python -m pip install -r requirements/tox.pip
152
+ python -m pip install -r requirements/tox.txt
153
153
 
154
154
  - name: "Run tox for ${{ matrix.python-version }}"
155
155
  run: |
@@ -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
- uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
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.4
19
+ rev: v0.16.8
20
20
  hooks:
21
21
  - id: ruff-format
22
22
 
@@ -21,6 +21,6 @@ formats: []
21
21
 
22
22
  python:
23
23
  install:
24
- - requirements: doc/requirements.pip
24
+ - requirements: doc/requirements.txt
25
25
  - method: pip
26
26
  path: .
@@ -22,6 +22,45 @@ 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
+
47
+ .. _changes_7-16-1:
48
+
49
+ Version 7.16.1 — 2026-09-13
50
+ ---------------------------
51
+
52
+ - Fix: when the body of an irrefutable ``case`` (like ``case _:``) is entirely
53
+ excluded, the ``case`` line is now excluded too, just as an excluded
54
+ ``else:`` body removes the ``else:`` line. Previously the ``case`` line was
55
+ left behind and reported as missing. Closes `issue 1563`_ with `pull 2269`_.
56
+
57
+ - Fix: using :meth:`.CoverageData.update` twice on an in-memory database would
58
+ fail, as described in `issue 2279`_. This is now fixed.
59
+
60
+ .. _issue 1563: https://github.com/coveragepy/coveragepy/issues/1563
61
+ .. _pull 2269: https://github.com/coveragepy/coveragepy/pull/2269
62
+ .. _issue 2279: https://github.com/coveragepy/coveragepy/issues/2279
63
+
25
64
  .. _changes_7-16-0:
26
65
 
27
66
  Version 7.16.0 — 2026-08-28
@@ -36,12 +36,12 @@ recursive-include .github *
36
36
  recursive-include coverage *.pyi
37
37
  recursive-include coverage/ctracer *.c *.h
38
38
 
39
- recursive-include doc *.py *.in *.pip *.rst *.txt *.png
39
+ recursive-include doc *.py *.in *.rst *.txt *.png
40
40
  recursive-include doc/_static *
41
41
  prune doc/_build
42
42
  prune doc/_spell
43
43
 
44
- recursive-include requirements *.in *.pip
44
+ recursive-include requirements *.in *.txt
45
45
 
46
46
  recursive-include tests *.py *.tok
47
47
  recursive-include tests/gold *
@@ -75,7 +75,7 @@ venv: .venv #- Create a virtualenv in .venv.
75
75
  $(VENV)
76
76
 
77
77
  install: venv #- Install the developer tools.
78
- $(INSTALL_R) requirements/dev.pip
78
+ $(INSTALL_R) requirements/dev.txt
79
79
 
80
80
 
81
81
  ### Tests and quality checks
@@ -112,11 +112,11 @@ metahtml: #- Produce meta-coverage HTML reports.
112
112
 
113
113
  # When updating requirements, a few rules to follow:
114
114
  #
115
- # 1) Don't install more than one .pip file at once. Always use pip-compile to
116
- # combine .in files onto a single .pip file that can be installed where needed.
115
+ # 1) Don't install more than one .txt file at once. Always use pip-compile to
116
+ # combine .in files onto a single .txt file that can be installed where needed.
117
117
  #
118
118
  # 2) Check manual pins before `make upgrade` to see if they can be removed. Look
119
- # in requirements/pins.pip, and search for "windows" in .in files to find pins
119
+ # in requirements/pins.txt, and search for "windows" in .in files to find pins
120
120
  # and extra requirements that have been needed, but might be obsolete.
121
121
 
122
122
  .PHONY: upgrade upgrade_one _upgrade diff_upgrade
@@ -135,24 +135,24 @@ PIP_COMPILE = uv pip compile -q --universal --generate-hashes ${COMPILE_OPTS}
135
135
  # Limit to packages that were released more than 10 days ago.
136
136
  # https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns
137
137
  upgrade: export UV_EXCLUDE_NEWER=P10D
138
- upgrade: #- Update the *.pip files with the latest packages satisfying *.in files.
138
+ upgrade: #- Update the *.txt files with the latest packages satisfying *.in files.
139
139
  $(MAKE) _upgrade COMPILE_OPTS="--upgrade"
140
140
 
141
141
  # Upgrade just one package, with no cooldown.
142
- upgrade_one: #- Update the *.pip files for one package. `make upgrade_one package=...`
142
+ upgrade_one: #- Update the *.txt files for one package. `make upgrade_one package=...`
143
143
  @test -n "$(package)" || { echo "\nUsage: make upgrade_one package=...\n"; exit 1; }
144
144
  $(MAKE) _upgrade COMPILE_OPTS="--upgrade-package $(package)"
145
145
 
146
146
  _upgrade: export UV_CUSTOM_COMPILE_COMMAND=make upgrade
147
147
  _upgrade: $(DOCBIN) $(KITBIN)
148
- $(PIP_COMPILE) -o requirements/pip.pip requirements/pip.in
149
- $(PIP_COMPILE) -o requirements/pytest.pip requirements/pytest.in
150
- $(PIP_COMPILE) -p $(KITBIN)/python3 -o requirements/kit.pip requirements/kit.in
151
- $(PIP_COMPILE) -o requirements/tox.pip requirements/tox.in
152
- $(PIP_COMPILE) -o requirements/dev.pip requirements/dev.in
153
- $(PIP_COMPILE) -o requirements/light-threads.pip requirements/light-threads.in
154
- $(PIP_COMPILE) -o requirements/mypy.pip requirements/mypy.in
155
- $(PIP_COMPILE) -p $(DOCBIN)/python3 -o doc/requirements.pip doc/requirements.in
148
+ $(PIP_COMPILE) -o requirements/pip.txt requirements/pip.in
149
+ $(PIP_COMPILE) -o requirements/pytest.txt requirements/pytest.in
150
+ $(PIP_COMPILE) -p $(KITBIN)/python3 -o requirements/kit.txt requirements/kit.in
151
+ $(PIP_COMPILE) -o requirements/tox.txt requirements/tox.in
152
+ $(PIP_COMPILE) -o requirements/dev.txt requirements/dev.in
153
+ $(PIP_COMPILE) -o requirements/light-threads.txt requirements/light-threads.in
154
+ $(PIP_COMPILE) -o requirements/mypy.txt requirements/mypy.in
155
+ $(PIP_COMPILE) -p $(DOCBIN)/python3 -o doc/requirements.txt doc/requirements.in
156
156
  PYTHONWARNDEFAULTENCODING= pre-commit autoupdate
157
157
 
158
158
  diff_upgrade: #- Summarize the last `make upgrade`.
@@ -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.0
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.0
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
@@ -68,7 +68,6 @@ Code coverage measurement for Python.
68
68
  | |kit| |license| |versions|
69
69
  | |test-status| |quality-status| |docs| |metacov|
70
70
  | |tidelift| |sponsor| |stars| |mastodon-coveragepy| |mastodon-nedbat|
71
- |bluesky-nedbat|
72
71
 
73
72
  Coverage.py measures code coverage, typically during test execution. It uses
74
73
  the code analysis tools and tracing hooks provided in the Python standard
@@ -78,13 +77,13 @@ Coverage.py runs on these versions of Python:
78
77
 
79
78
  .. PYVERSIONS
80
79
 
81
- * Python 3.10 through 3.15 rc1, including free-threading.
80
+ * Python 3.10 through 3.15 rc2, including free-threading.
82
81
  * PyPy3 versions 3.10 and 3.11.
83
82
 
84
83
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
85
84
  `GitHub`_.
86
85
 
87
- .. _Read the Docs: https://coverage.readthedocs.io/en/7.16.0/
86
+ .. _Read the Docs: https://coverage.readthedocs.io/en/7.16.2/
88
87
  .. _GitHub: https://github.com/coveragepy/coveragepy
89
88
 
90
89
 
@@ -113,7 +112,7 @@ Getting Started
113
112
  Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
114
113
  of the docs.
115
114
 
116
- .. _Quick Start section: https://coverage.readthedocs.io/en/7.16.0/#quick-start
115
+ .. _Quick Start section: https://coverage.readthedocs.io/en/7.16.2/#quick-start
117
116
 
118
117
 
119
118
  Change history
@@ -121,7 +120,7 @@ Change history
121
120
 
122
121
  The complete history of changes is on the `change history page`_.
123
122
 
124
- .. _change history page: https://coverage.readthedocs.io/en/7.16.0/changes.html
123
+ .. _change history page: https://coverage.readthedocs.io/en/7.16.2/changes.html
125
124
 
126
125
 
127
126
  Code of Conduct
@@ -140,7 +139,7 @@ Contributing
140
139
  Found a bug? Want to help improve the code or documentation? See the
141
140
  `Contributing section`_ of the docs.
142
141
 
143
- .. _Contributing section: https://coverage.readthedocs.io/en/7.16.0/contributing.html
142
+ .. _Contributing section: https://coverage.readthedocs.io/en/7.16.2/contributing.html
144
143
 
145
144
 
146
145
  Security
@@ -168,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
168
167
  :target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
169
168
  :alt: Quality check status
170
169
  .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
171
- :target: https://coverage.readthedocs.io/en/7.16.0/
170
+ :target: https://coverage.readthedocs.io/en/7.16.2/
172
171
  :alt: Documentation
173
172
  .. |kit| image:: https://img.shields.io/pypi/v/coverage
174
173
  :target: https://pypi.org/project/coverage/
@@ -194,9 +193,6 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
194
193
  .. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&label=@coveragepy&query=followers_count&url=https%3A%2F%2Fhachyderm.io%2Fapi%2Fv1%2Faccounts%2Flookup%3Facct=coveragepy
195
194
  :target: https://hachyderm.io/@coveragepy
196
195
  :alt: coveragepy on Mastodon
197
- .. |bluesky-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&color=96a3b0&labelColor=3686f7&logo=icloud&logoColor=white&label=@nedbat&url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor=nedbat.com&query=followersCount
198
- :target: https://bsky.app/profile/nedbat.com
199
- :alt: nedbat on Bluesky
200
196
  .. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub
201
197
  :target: https://github.com/sponsors/nedbat
202
198
  :alt: Sponsor me on GitHub
@@ -16,7 +16,6 @@ Code coverage measurement for Python.
16
16
  | |kit| |license| |versions|
17
17
  | |test-status| |quality-status| |docs| |metacov|
18
18
  | |tidelift| |sponsor| |stars| |mastodon-coveragepy| |mastodon-nedbat|
19
- |bluesky-nedbat|
20
19
 
21
20
  Coverage.py measures code coverage, typically during test execution. It uses
22
21
  the code analysis tools and tracing hooks provided in the Python standard
@@ -26,7 +25,7 @@ Coverage.py runs on these versions of Python:
26
25
 
27
26
  .. PYVERSIONS
28
27
 
29
- * Python 3.10 through 3.15 rc1, including free-threading.
28
+ * Python 3.10 through 3.15 rc2, including free-threading.
30
29
  * PyPy3 versions 3.10 and 3.11.
31
30
 
32
31
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
@@ -142,9 +141,6 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
142
141
  .. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&label=@coveragepy&query=followers_count&url=https%3A%2F%2Fhachyderm.io%2Fapi%2Fv1%2Faccounts%2Flookup%3Facct=coveragepy
143
142
  :target: https://hachyderm.io/@coveragepy
144
143
  :alt: coveragepy on Mastodon
145
- .. |bluesky-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&color=96a3b0&labelColor=3686f7&logo=icloud&logoColor=white&label=@nedbat&url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor=nedbat.com&query=followersCount
146
- :target: https://bsky.app/profile/nedbat.com
147
- :alt: nedbat on Bluesky
148
144
  .. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub
149
145
  :target: https://github.com/sponsors/nedbat
150
146
  :alt: Sponsor me on GitHub
@@ -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