coverage 7.15.3__tar.gz → 7.15.4__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.
- {coverage-7.15.3 → coverage-7.15.4}/.github/workflows/kit.yml +19 -5
- {coverage-7.15.3 → coverage-7.15.4}/.github/workflows/publish.yml +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/.pre-commit-config.yaml +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/CHANGES.rst +23 -0
- {coverage-7.15.3 → coverage-7.15.4}/PKG-INFO +8 -8
- {coverage-7.15.3 → coverage-7.15.4}/README.rst +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/coverage/cmdline.py +1 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/collector.py +1 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/config.py +1 -5
- {coverage-7.15.3 → coverage-7.15.4}/coverage/control.py +1 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/env.py +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/coverage/exceptions.py +0 -18
- {coverage-7.15.3 → coverage-7.15.4}/coverage/html.py +1 -10
- {coverage-7.15.3 → coverage-7.15.4}/coverage/htmlfiles/index.html +4 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/htmlfiles/pyfile.html +4 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/inorout.py +1 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/lcovreport.py +18 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/parser.py +2 -2
- {coverage-7.15.3 → coverage-7.15.4}/coverage/plugin.py +1 -2
- {coverage-7.15.3 → coverage-7.15.4}/coverage/plugin_support.py +1 -5
- {coverage-7.15.3 → coverage-7.15.4}/coverage/pytracer.py +1 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/sqlitedb.py +1 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/sysmon.py +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/coverage/templite.py +0 -4
- {coverage-7.15.3 → coverage-7.15.4}/coverage/tomlconfig.py +0 -2
- {coverage-7.15.3 → coverage-7.15.4}/coverage/tracer.pyi +2 -2
- {coverage-7.15.3 → coverage-7.15.4}/coverage/version.py +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/coverage.egg-info/PKG-INFO +8 -8
- {coverage-7.15.3 → coverage-7.15.4}/doc/conf.py +3 -3
- {coverage-7.15.3 → coverage-7.15.4}/doc/index.rst +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/doc/requirements.pip +228 -228
- {coverage-7.15.3 → coverage-7.15.4}/pyproject.toml +17 -12
- {coverage-7.15.3 → coverage-7.15.4}/requirements/dev.pip +191 -186
- {coverage-7.15.3 → coverage-7.15.4}/requirements/kit.pip +15 -15
- {coverage-7.15.3 → coverage-7.15.4}/requirements/light-threads.pip +127 -128
- {coverage-7.15.3 → coverage-7.15.4}/requirements/mypy.pip +63 -59
- {coverage-7.15.3 → coverage-7.15.4}/requirements/pip.pip +12 -12
- {coverage-7.15.3 → coverage-7.15.4}/requirements/pytest.pip +63 -59
- {coverage-7.15.3 → coverage-7.15.4}/requirements/tox.pip +26 -25
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/b_branch/b_py.html +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/bom/bom_py.html +2 -2
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/contexts/two_tests_py.html +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/isolatin1/isolatin1_py.html +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/multiline/multiline_py.html +3 -3
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/other/blah_blah_other_py.html +2 -2
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/partial/partial_py.html +2 -2
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/unicode/unicode_py.html +2 -2
- {coverage-7.15.3 → coverage-7.15.4}/tests/hypo.py +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/tests/mixins.py +0 -1
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/process_test/try_execfile.py +3 -3
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_arcs.py +1 -1
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_data.py +1 -4
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_html.py +47 -10
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_lcov.py +25 -0
- {coverage-7.15.3 → coverage-7.15.4}/.editorconfig +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.git-blame-ignore-revs +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/CODE_OF_CONDUCT.md +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/FUNDING.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/ISSUE_TEMPLATE/support.md +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/SECURITY.md +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/dependabot.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/workflows/codeql-analysis.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/workflows/coverage.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/workflows/dependency-review.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/workflows/python-nightly.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/workflows/quality.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/workflows/testsuite.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.github/zizmor.yml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.ignore +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/.readthedocs.yaml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/CITATION.cff +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/CONTRIBUTORS.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/LICENSE.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/MANIFEST.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/Makefile +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/NOTICE.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/__main__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/a1_coverage.pth +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/ci/README.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/ci/comment_on_fixes.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/ci/session.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/ci/trigger_action.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/ci/update_rtfd.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/__main__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/annotate.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/bytecode.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/context.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/core.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/datastack.c +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/datastack.h +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/filedisp.c +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/filedisp.h +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/module.c +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/stats.h +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/tracer.c +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/tracer.h +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/ctracer/util.h +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/data.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/debug.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/disposition.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/execfile.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/files.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/htmlfiles/coverage_html.js +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/htmlfiles/favicon_32.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/htmlfiles/keybd_closed.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/htmlfiles/style.css +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/htmlfiles/style.scss +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/jsonreport.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/misc.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/multiproc.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/numbits.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/patch.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/phystokens.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/pth_file.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/py.typed +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/python.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/regions.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/report.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/report_core.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/results.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/sqldata.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/types.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage/xmlreport.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage.egg-info/SOURCES.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage.egg-info/dependency_links.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage.egg-info/entry_points.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage.egg-info/not-zip-safe +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage.egg-info/requires.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/coverage.egg-info/top_level.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/_static/coverage.css +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/api.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/api_coverage.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/api_coveragedata.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/api_exceptions.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/api_module.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/api_plugin.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/branch.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/changes.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/cog_helpers.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_annotate.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_combine.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_debug.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_erase.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_html.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_json.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_lcov.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_report.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_reporting.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_run.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/cmd_xml.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/commands/index.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/config.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/contexts.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/contributing.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/dbschema.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/dict.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/excluding.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/faq.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/howitworks.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/install.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/media/sleepy-snake-600.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/media/sleepy-snake-circle-150.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/messages.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/migrating.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/other.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/plugins.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/python-coverage.1.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/requirements.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/sample_html/favicon_32_cb_c827f16f.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/sample_html/keybd_closed_cb_900cfef5.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/sleepy.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/source.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/subprocess.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/trouble.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/doc/whatsnew5x.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/howto.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/igor.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/README.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/branches.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/compare_times.sh +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/coverage-04.dtd +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/extract_code.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/goals.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/hack_pyc.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/notes/arcs-to-branches.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/notes/bug1303.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/notes/pypy-738-decorated-functions.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/parse_all.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/parser.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/pick.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/platform_info.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/run_sysmon.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/run_trace.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/select_contexts.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/show_platform.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/show_pyc.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/treetopy.sh +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/warn_executed.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/lab/warn_executed.toml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/metacov.ini +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/requirements/dev.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/requirements/kit.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/requirements/light-threads.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/requirements/mypy.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/requirements/pins.pip +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/requirements/pip.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/requirements/pytest.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/requirements/tox.in +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/setup.cfg +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/setup.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/conftest.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/coveragetest.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/covmodzip1.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/README.rst +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/mae/mae.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/multi/a/a.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/multi/b/b.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/multi/multi.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/annotate/white/white.py,cover +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/Makefile +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/a/a_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/a/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/a/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/a/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/b_branch/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/b_branch/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/b_branch/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/bom/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/bom/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/bom/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/contexts/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/contexts/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/contexts/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/isolatin1/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/isolatin1/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/isolatin1/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/multiline/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/multiline/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/multiline/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_1/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_1/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_1/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_1/m1_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_1/m2_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_1/m3_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_1/main_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_2/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_2/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_2/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_2/m2_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_2/m3_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_2/main_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_3/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_3/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_3/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_3/m3_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_3/main_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_4/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_4/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_4/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_4/m1_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_4/m3_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_4/main_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_5/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_5/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_5/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_5/m1_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/omit_5/main_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/other/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/other/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/other/here_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/other/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/partial/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/partial/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/partial/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/styled/a_py.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/styled/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/styled/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/styled/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/styled/myextra.css +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/styled/style.css +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/unicode/class_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/unicode/function_index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/html/unicode/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/testing/getty/gettysburg.txt +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/testing/xml/output.xml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/xml/x_xml/coverage.xml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/goldtest.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/helpers.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/js/index.html +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/js/tests.js +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/afile.odd.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/afile.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/bb/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/bb/bfile.odd.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/bb/bfile.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/bb/cc/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/bb/cc/cfile.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/bb.odd/bfile.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/aa/zfile.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/ambiguous/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/checkspec.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/covmod1.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/namespace_420/sub1/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/__main__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/p1a.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/p1b.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/p1c.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/runmod2.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/sub/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/sub/__main__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/sub/ps1a.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg1/sub/runmod3.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg2/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg2/p2a.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/pkg2/p2b.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/plugins/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/plugins/a_plugin.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/plugins/another.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/process_test/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/runmod1.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/modules/usepkgs.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/moremodules/othermods/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/moremodules/othermods/othera.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/moremodules/othermods/otherb.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/moremodules/othermods/sub/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/moremodules/othermods/sub/osa.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/moremodules/othermods/sub/osb.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/osinfo.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/plugin1.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/plugin2.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/plugin_config.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/qunit/jquery.tmpl.min.js +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/select_plugin.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/strategies.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/stress_phystoken.tok +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/stress_phystoken_dos.tok +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_annotate.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_api.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_bytecode.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_cmdline.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_collector.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_concurrency.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_config.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_context.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_core.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_coverage.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_debug.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_execfile.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_filereporter.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_files.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_goldtest.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_json.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_misc.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_mixins.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_numbits.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_oddball.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_parser.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_phystokens.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_plugins.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_process.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_python.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_regions.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_report.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_report_common.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_report_core.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_results.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_setup.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_sqlitedb.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_sysmon.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_templite.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_testing.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_venv.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_version.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/test_xml.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/testenv.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/zipsrc/zip1/__init__.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tests/zipsrc/zip1/zip1.py +0 -0
- {coverage-7.15.3 → coverage-7.15.4}/tox.ini +0 -0
|
@@ -36,7 +36,7 @@ env:
|
|
|
36
36
|
PIP_DISABLE_PIP_VERSION_CHECK: 1
|
|
37
37
|
# PYVERSIONS: changing the list of versions will change the number of
|
|
38
38
|
# expected distributions. This must match the same number in publish.yml.
|
|
39
|
-
EXPECTED:
|
|
39
|
+
EXPECTED: 121
|
|
40
40
|
|
|
41
41
|
permissions:
|
|
42
42
|
contents: read
|
|
@@ -79,13 +79,13 @@ jobs:
|
|
|
79
79
|
# # of Python: https://cibuildwheel.readthedocs.io/en/stable/options/#enable
|
|
80
80
|
# # When changing this, also adjust SHIPPING_WHEELS in env.py.
|
|
81
81
|
#
|
|
82
|
-
# pys = ["cp310", "cp311", "cp312", "cp313", "cp314"]
|
|
82
|
+
# pys = ["cp310", "cp311", "cp312", "cp313", "cp314", "cp315"]
|
|
83
83
|
# cipy = "3.11" # PYVERSIONS, default for cibuildwheel
|
|
84
84
|
#
|
|
85
85
|
# # Some OS/arch combinations need overrides for the Python versions:
|
|
86
86
|
# os_arch_pys = {
|
|
87
87
|
# # ("macos", "arm64"): ["cp38", "cp39", "cp310", "cp311", "cp312"],
|
|
88
|
-
# ("windows", "ARM64"): ["cp311", "cp312", "cp313", "cp314"],
|
|
88
|
+
# ("windows", "ARM64"): ["cp311", "cp312", "cp313", "cp314", "cp315"],
|
|
89
89
|
# }
|
|
90
90
|
#
|
|
91
91
|
# #----- ^^^ ---------------------- ^^^ -----
|
|
@@ -117,51 +117,61 @@ jobs:
|
|
|
117
117
|
- {"os": "ubuntu", "py": "cp312", "arch": "x86_64", "cipy": "3.11"}
|
|
118
118
|
- {"os": "ubuntu", "py": "cp313", "arch": "x86_64", "cipy": "3.11"}
|
|
119
119
|
- {"os": "ubuntu", "py": "cp314", "arch": "x86_64", "cipy": "3.11"}
|
|
120
|
+
- {"os": "ubuntu", "py": "cp315", "arch": "x86_64", "cipy": "3.11"}
|
|
120
121
|
- {"os": "ubuntu", "py": "cp310", "arch": "i686", "cipy": "3.11"}
|
|
121
122
|
- {"os": "ubuntu", "py": "cp311", "arch": "i686", "cipy": "3.11"}
|
|
122
123
|
- {"os": "ubuntu", "py": "cp312", "arch": "i686", "cipy": "3.11"}
|
|
123
124
|
- {"os": "ubuntu", "py": "cp313", "arch": "i686", "cipy": "3.11"}
|
|
124
125
|
- {"os": "ubuntu", "py": "cp314", "arch": "i686", "cipy": "3.11"}
|
|
126
|
+
- {"os": "ubuntu", "py": "cp315", "arch": "i686", "cipy": "3.11"}
|
|
125
127
|
- {"os": "ubuntu", "py": "cp310", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
|
|
126
128
|
- {"os": "ubuntu", "py": "cp311", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
|
|
127
129
|
- {"os": "ubuntu", "py": "cp312", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
|
|
128
130
|
- {"os": "ubuntu", "py": "cp313", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
|
|
129
131
|
- {"os": "ubuntu", "py": "cp314", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
|
|
132
|
+
- {"os": "ubuntu", "py": "cp315", "arch": "aarch64", "cipy": "3.11", "os-version": "22.04-arm"}
|
|
130
133
|
- {"os": "ubuntu", "py": "cp310", "arch": "riscv64", "cipy": "3.11"}
|
|
131
134
|
- {"os": "ubuntu", "py": "cp311", "arch": "riscv64", "cipy": "3.11"}
|
|
132
135
|
- {"os": "ubuntu", "py": "cp312", "arch": "riscv64", "cipy": "3.11"}
|
|
133
136
|
- {"os": "ubuntu", "py": "cp313", "arch": "riscv64", "cipy": "3.11"}
|
|
134
137
|
- {"os": "ubuntu", "py": "cp314", "arch": "riscv64", "cipy": "3.11"}
|
|
138
|
+
- {"os": "ubuntu", "py": "cp315", "arch": "riscv64", "cipy": "3.11"}
|
|
135
139
|
- {"os": "ubuntu", "py": "cp310", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
|
|
136
140
|
- {"os": "ubuntu", "py": "cp311", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
|
|
137
141
|
- {"os": "ubuntu", "py": "cp312", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
|
|
138
142
|
- {"os": "ubuntu", "py": "cp313", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
|
|
139
143
|
- {"os": "ubuntu", "py": "cp314", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
|
|
144
|
+
- {"os": "ubuntu", "py": "cp315", "arch": "ppc64le", "cipy": "3.11", "os-version": "24.04-ppc64le"}
|
|
140
145
|
- {"os": "macos", "py": "cp310", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
|
|
141
146
|
- {"os": "macos", "py": "cp311", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
|
|
142
147
|
- {"os": "macos", "py": "cp312", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
|
|
143
148
|
- {"os": "macos", "py": "cp313", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
|
|
144
149
|
- {"os": "macos", "py": "cp314", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
|
|
150
|
+
- {"os": "macos", "py": "cp315", "arch": "arm64", "cipy": "3.11", "os-version": "14"}
|
|
145
151
|
- {"os": "macos", "py": "cp310", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
|
|
146
152
|
- {"os": "macos", "py": "cp311", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
|
|
147
153
|
- {"os": "macos", "py": "cp312", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
|
|
148
154
|
- {"os": "macos", "py": "cp313", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
|
|
149
155
|
- {"os": "macos", "py": "cp314", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
|
|
156
|
+
- {"os": "macos", "py": "cp315", "arch": "x86_64", "cipy": "3.11", "os-version": "14"}
|
|
150
157
|
- {"os": "windows", "py": "cp310", "arch": "x86", "cipy": "3.11"}
|
|
151
158
|
- {"os": "windows", "py": "cp311", "arch": "x86", "cipy": "3.11"}
|
|
152
159
|
- {"os": "windows", "py": "cp312", "arch": "x86", "cipy": "3.11"}
|
|
153
160
|
- {"os": "windows", "py": "cp313", "arch": "x86", "cipy": "3.11"}
|
|
154
161
|
- {"os": "windows", "py": "cp314", "arch": "x86", "cipy": "3.11"}
|
|
162
|
+
- {"os": "windows", "py": "cp315", "arch": "x86", "cipy": "3.11"}
|
|
155
163
|
- {"os": "windows", "py": "cp310", "arch": "AMD64", "cipy": "3.11"}
|
|
156
164
|
- {"os": "windows", "py": "cp311", "arch": "AMD64", "cipy": "3.11"}
|
|
157
165
|
- {"os": "windows", "py": "cp312", "arch": "AMD64", "cipy": "3.11"}
|
|
158
166
|
- {"os": "windows", "py": "cp313", "arch": "AMD64", "cipy": "3.11"}
|
|
159
167
|
- {"os": "windows", "py": "cp314", "arch": "AMD64", "cipy": "3.11"}
|
|
168
|
+
- {"os": "windows", "py": "cp315", "arch": "AMD64", "cipy": "3.11"}
|
|
160
169
|
- {"os": "windows", "py": "cp311", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
|
|
161
170
|
- {"os": "windows", "py": "cp312", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
|
|
162
171
|
- {"os": "windows", "py": "cp313", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
|
|
163
172
|
- {"os": "windows", "py": "cp314", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
|
|
164
|
-
|
|
173
|
+
- {"os": "windows", "py": "cp315", "arch": "ARM64", "cipy": "3.11", "os-version": "11-arm"}
|
|
174
|
+
# [[[end]]] (sum: N6DRns0iG/)
|
|
165
175
|
# ^^^^^^^^^^^^^^^
|
|
166
176
|
# If a check fails and points to this checksum line, it means you edited
|
|
167
177
|
# the matrix directly instead of editing the Python code in the comment
|
|
@@ -204,12 +214,16 @@ jobs:
|
|
|
204
214
|
if: ${{ matrix.arch == 'riscv64' }}
|
|
205
215
|
uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0
|
|
206
216
|
|
|
217
|
+
- name: "Show environment"
|
|
218
|
+
run: |
|
|
219
|
+
python -VV
|
|
220
|
+
python -m site
|
|
221
|
+
|
|
207
222
|
- name: "Build binary wheels"
|
|
208
223
|
env:
|
|
209
224
|
CIBW_BUILD: ${{ matrix.py }}*-*
|
|
210
225
|
CIBW_ARCHS: ${{ matrix.arch }}
|
|
211
226
|
CIBW_ENVIRONMENT: PIP_DISABLE_PIP_VERSION_CHECK=1
|
|
212
|
-
CIBW_ENABLE: cpython-prerelease
|
|
213
227
|
CIBW_TEST_COMMAND: python -c "from coverage.tracer import CTracer; print('CTracer OK!')"
|
|
214
228
|
run: |
|
|
215
229
|
python -m cibuildwheel --output-dir wheelhouse
|
|
@@ -22,6 +22,29 @@ upgrading your version of coverage.py.
|
|
|
22
22
|
|
|
23
23
|
.. start-releases
|
|
24
24
|
|
|
25
|
+
.. _changes_7-15-4:
|
|
26
|
+
|
|
27
|
+
Version 7.15.4 — 2026-08-06
|
|
28
|
+
---------------------------
|
|
29
|
+
|
|
30
|
+
- Fix: in the HTML report, a source file name containing a double quote (legal
|
|
31
|
+
on POSIX) wasn't escaped where it's dropped into the ``href`` of the index
|
|
32
|
+
and prev/next links, so it could close the attribute early and inject markup.
|
|
33
|
+
Page URLs are now escaped. Thanks, `Rajath Mohare <pull 2227_>`_.
|
|
34
|
+
|
|
35
|
+
- Fix: the LCOV report wrote file names and other fields into its
|
|
36
|
+
line-oriented records without neutralizing control characters. A measured
|
|
37
|
+
file whose name contained a newline (legal on POSIX) could forge extra
|
|
38
|
+
records, inflating the coverage seen by tools that read the report. Control
|
|
39
|
+
characters in a field are now replaced. Thanks, `Rajath Mohare <pull
|
|
40
|
+
2226_>`_.
|
|
41
|
+
|
|
42
|
+
- Wheels are now provided for Python 3.15.
|
|
43
|
+
|
|
44
|
+
.. _pull 2226: https://github.com/coveragepy/coveragepy/pull/2226
|
|
45
|
+
.. _pull 2227: https://github.com/coveragepy/coveragepy/pull/2227
|
|
46
|
+
|
|
47
|
+
|
|
25
48
|
.. _changes_7-15-3:
|
|
26
49
|
|
|
27
50
|
Version 7.15.3 — 2026-08-02
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coverage
|
|
3
|
-
Version: 7.15.
|
|
3
|
+
Version: 7.15.4
|
|
4
4
|
Summary: Code coverage measurement for Python
|
|
5
5
|
Home-page: https://github.com/coveragepy/coveragepy
|
|
6
6
|
Author: Ned Batchelder and 263 others
|
|
7
7
|
Author-email: ned@nedbatchelder.com
|
|
8
8
|
License: Apache-2.0
|
|
9
|
-
Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.
|
|
9
|
+
Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.4
|
|
10
10
|
Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
|
|
11
11
|
Project-URL: Issues, https://github.com/coveragepy/coveragepy/issues
|
|
12
12
|
Project-URL: Mastodon, https://hachyderm.io/@coveragepy
|
|
@@ -78,13 +78,13 @@ Coverage.py runs on these versions of Python:
|
|
|
78
78
|
|
|
79
79
|
.. PYVERSIONS
|
|
80
80
|
|
|
81
|
-
* Python 3.10 through 3.15
|
|
81
|
+
* Python 3.10 through 3.15 rc1, including free-threading.
|
|
82
82
|
* PyPy3 versions 3.10 and 3.11.
|
|
83
83
|
|
|
84
84
|
Documentation is on `Read the Docs`_. Code repository and issue tracker are on
|
|
85
85
|
`GitHub`_.
|
|
86
86
|
|
|
87
|
-
.. _Read the Docs: https://coverage.readthedocs.io/en/7.15.
|
|
87
|
+
.. _Read the Docs: https://coverage.readthedocs.io/en/7.15.4/
|
|
88
88
|
.. _GitHub: https://github.com/coveragepy/coveragepy
|
|
89
89
|
|
|
90
90
|
|
|
@@ -113,7 +113,7 @@ Getting Started
|
|
|
113
113
|
Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
|
|
114
114
|
of the docs.
|
|
115
115
|
|
|
116
|
-
.. _Quick Start section: https://coverage.readthedocs.io/en/7.15.
|
|
116
|
+
.. _Quick Start section: https://coverage.readthedocs.io/en/7.15.4/#quick-start
|
|
117
117
|
|
|
118
118
|
|
|
119
119
|
Change history
|
|
@@ -121,7 +121,7 @@ Change history
|
|
|
121
121
|
|
|
122
122
|
The complete history of changes is on the `change history page`_.
|
|
123
123
|
|
|
124
|
-
.. _change history page: https://coverage.readthedocs.io/en/7.15.
|
|
124
|
+
.. _change history page: https://coverage.readthedocs.io/en/7.15.4/changes.html
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
Code of Conduct
|
|
@@ -140,7 +140,7 @@ Contributing
|
|
|
140
140
|
Found a bug? Want to help improve the code or documentation? See the
|
|
141
141
|
`Contributing section`_ of the docs.
|
|
142
142
|
|
|
143
|
-
.. _Contributing section: https://coverage.readthedocs.io/en/7.15.
|
|
143
|
+
.. _Contributing section: https://coverage.readthedocs.io/en/7.15.4/contributing.html
|
|
144
144
|
|
|
145
145
|
|
|
146
146
|
Security
|
|
@@ -168,7 +168,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
|
|
|
168
168
|
:target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
|
|
169
169
|
:alt: Quality check status
|
|
170
170
|
.. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
|
|
171
|
-
:target: https://coverage.readthedocs.io/en/7.15.
|
|
171
|
+
:target: https://coverage.readthedocs.io/en/7.15.4/
|
|
172
172
|
:alt: Documentation
|
|
173
173
|
.. |kit| image:: https://img.shields.io/pypi/v/coverage
|
|
174
174
|
:target: https://pypi.org/project/coverage/
|
|
@@ -26,7 +26,7 @@ Coverage.py runs on these versions of Python:
|
|
|
26
26
|
|
|
27
27
|
.. PYVERSIONS
|
|
28
28
|
|
|
29
|
-
* Python 3.10 through 3.15
|
|
29
|
+
* Python 3.10 through 3.15 rc1, including free-threading.
|
|
30
30
|
* PyPy3 versions 3.10 and 3.11.
|
|
31
31
|
|
|
32
32
|
Documentation is on `Read the Docs`_. Code repository and issue tracker are on
|
|
@@ -432,8 +432,6 @@ class CoverageOptionParser(optparse.OptionParser):
|
|
|
432
432
|
class OptionParserError(Exception):
|
|
433
433
|
"""Used to stop the optparse error handler ending the process."""
|
|
434
434
|
|
|
435
|
-
pass
|
|
436
|
-
|
|
437
435
|
def parse_args_ok(self, args: list[str]) -> tuple[bool, optparse.Values | None, list[str]]:
|
|
438
436
|
"""Call optparse.parse_args, but return a triple:
|
|
439
437
|
|
|
@@ -753,8 +751,7 @@ def show_help(
|
|
|
753
751
|
# coverage-3.5-script.py. argv[0] is the .py file, but we want to
|
|
754
752
|
# get back to the original form.
|
|
755
753
|
auto_suffix = "-script.py"
|
|
756
|
-
|
|
757
|
-
program_name = program_name[: -len(auto_suffix)]
|
|
754
|
+
program_name = program_name.removesuffix(auto_suffix)
|
|
758
755
|
|
|
759
756
|
help_params = dict(coverage.__dict__)
|
|
760
757
|
help_params["__url__"] = __url__
|
|
@@ -148,10 +148,7 @@ class Collector:
|
|
|
148
148
|
|
|
149
149
|
if self.concur_id_func and not hasattr(core.tracer_class, "concur_id_func"):
|
|
150
150
|
raise ConfigError(
|
|
151
|
-
"Can't support concurrency={} with {}, only threads are supported."
|
|
152
|
-
tried,
|
|
153
|
-
self.tracer_name(),
|
|
154
|
-
),
|
|
151
|
+
f"Can't support concurrency={tried} with {self.tracer_name()}, only threads are supported.",
|
|
155
152
|
)
|
|
156
153
|
|
|
157
154
|
if do_threading or not concurrency:
|
|
@@ -344,11 +344,7 @@ class CoverageConfig(TConfigurable, TPluginConfig):
|
|
|
344
344
|
if real_section:
|
|
345
345
|
for unknown in set(cp.options(section)) - options:
|
|
346
346
|
warn(
|
|
347
|
-
"Unrecognized option '[{}] {}=' in config file {}"
|
|
348
|
-
real_section,
|
|
349
|
-
unknown,
|
|
350
|
-
filename,
|
|
351
|
-
),
|
|
347
|
+
f"Unrecognized option '[{real_section}] {unknown}=' in config file {filename}",
|
|
352
348
|
)
|
|
353
349
|
|
|
354
350
|
# [paths] is special
|
|
@@ -1048,10 +1048,7 @@ class Coverage(TConfigurable):
|
|
|
1048
1048
|
file_reporter = plugin.file_reporter(mapped_morf)
|
|
1049
1049
|
if file_reporter is None:
|
|
1050
1050
|
raise PluginError(
|
|
1051
|
-
"Plugin {!r} did not provide a file reporter for {!r}."
|
|
1052
|
-
plugin._coverage_plugin_name,
|
|
1053
|
-
morf,
|
|
1054
|
-
),
|
|
1051
|
+
f"Plugin {plugin._coverage_plugin_name!r} did not provide a file reporter for {morf!r}.",
|
|
1055
1052
|
)
|
|
1056
1053
|
|
|
1057
1054
|
if file_reporter == "python":
|
|
@@ -49,7 +49,7 @@ FREE_THREADED = bool(sysconfig.get_config_var("Py_GIL_DISABLED"))
|
|
|
49
49
|
|
|
50
50
|
# Do we ship compiled coveragepy wheels for this version?
|
|
51
51
|
SHIPPING_WHEELS = (
|
|
52
|
-
CPYTHON and PYVERSION[:2] <= (3,
|
|
52
|
+
CPYTHON and PYVERSION[:2] <= (3, 15) and not (FREE_THREADED and PYVERSION[:2] == (3, 13))
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
# Should we default to sys.monitoring?
|
|
@@ -30,44 +30,30 @@ class CoverageException(Exception):
|
|
|
30
30
|
class ConfigError(CoverageException):
|
|
31
31
|
"""A problem with a config file, or a value in one."""
|
|
32
32
|
|
|
33
|
-
pass
|
|
34
|
-
|
|
35
33
|
|
|
36
34
|
class DataError(CoverageException):
|
|
37
35
|
"""An error in using a data file."""
|
|
38
36
|
|
|
39
|
-
pass
|
|
40
|
-
|
|
41
37
|
|
|
42
38
|
class NoDataError(CoverageException):
|
|
43
39
|
"""We didn't have data to work with."""
|
|
44
40
|
|
|
45
|
-
pass
|
|
46
|
-
|
|
47
41
|
|
|
48
42
|
class NoSource(CoverageException):
|
|
49
43
|
"""We couldn't find the source for a module."""
|
|
50
44
|
|
|
51
|
-
pass
|
|
52
|
-
|
|
53
45
|
|
|
54
46
|
class NoCode(NoSource):
|
|
55
47
|
"""We couldn't find any code at all."""
|
|
56
48
|
|
|
57
|
-
pass
|
|
58
|
-
|
|
59
49
|
|
|
60
50
|
class NotPython(CoverageException):
|
|
61
51
|
"""A source file turned out not to be parsable Python."""
|
|
62
52
|
|
|
63
|
-
pass
|
|
64
|
-
|
|
65
53
|
|
|
66
54
|
class PluginError(CoverageException):
|
|
67
55
|
"""A plugin misbehaved."""
|
|
68
56
|
|
|
69
|
-
pass
|
|
70
|
-
|
|
71
57
|
|
|
72
58
|
class _ExceptionDuringRun(CoverageException):
|
|
73
59
|
"""An exception happened while running customer code.
|
|
@@ -76,10 +62,6 @@ class _ExceptionDuringRun(CoverageException):
|
|
|
76
62
|
|
|
77
63
|
"""
|
|
78
64
|
|
|
79
|
-
pass
|
|
80
|
-
|
|
81
65
|
|
|
82
66
|
class CoverageWarning(Warning):
|
|
83
67
|
"""A warning from Coverage.py."""
|
|
84
|
-
|
|
85
|
-
pass
|
|
@@ -15,6 +15,7 @@ import re
|
|
|
15
15
|
import string
|
|
16
16
|
from collections.abc import Iterable
|
|
17
17
|
from dataclasses import dataclass, field
|
|
18
|
+
from html import escape
|
|
18
19
|
from typing import TYPE_CHECKING, Any
|
|
19
20
|
|
|
20
21
|
import coverage
|
|
@@ -849,16 +850,6 @@ class IncrementalChecker:
|
|
|
849
850
|
# Helpers for templates and generating HTML
|
|
850
851
|
|
|
851
852
|
|
|
852
|
-
def escape(t: str) -> str:
|
|
853
|
-
"""HTML-escape the text in `t`.
|
|
854
|
-
|
|
855
|
-
This is only suitable for HTML text, not attributes.
|
|
856
|
-
|
|
857
|
-
"""
|
|
858
|
-
# Convert HTML special chars into HTML entities.
|
|
859
|
-
return t.replace("&", "&").replace("<", "<")
|
|
860
|
-
|
|
861
|
-
|
|
862
853
|
def pair(ratio: tuple[int, int]) -> str:
|
|
863
854
|
"""Format a pair of numbers so JavaScript can read them in an attribute."""
|
|
864
855
|
return "{} {}".format(*ratio)
|
|
@@ -120,9 +120,9 @@
|
|
|
120
120
|
<tbody>
|
|
121
121
|
{% for region in regions %}
|
|
122
122
|
<tr class="region">
|
|
123
|
-
<td class="name"><a href="{{region.url}}">{{region.file|escape|pretty_file}}</a></td>
|
|
123
|
+
<td class="name"><a href="{{region.url|escape}}">{{region.file|escape|pretty_file}}</a></td>
|
|
124
124
|
{% if region_noun %}
|
|
125
|
-
<td class="name"><a href="{{region.url}}">{{region.description}}</a></td>
|
|
125
|
+
<td class="name"><a href="{{region.url|escape}}">{{region.description}}</a></td>
|
|
126
126
|
{% endif %}
|
|
127
127
|
<td class="spacer"> </td>
|
|
128
128
|
{% if has_arcs %}
|
|
@@ -187,8 +187,8 @@
|
|
|
187
187
|
</p>
|
|
188
188
|
</div>
|
|
189
189
|
<aside class="hidden">
|
|
190
|
-
<a id="prevFileLink" class="nav" href="{{ final_html }}"></a>
|
|
191
|
-
<a id="nextFileLink" class="nav" href="{{ first_html }}"></a>
|
|
190
|
+
<a id="prevFileLink" class="nav" href="{{ final_html|escape }}"></a>
|
|
191
|
+
<a id="nextFileLink" class="nav" href="{{ first_html|escape }}"></a>
|
|
192
192
|
<button type="button" class="button_prev_file" data-shortcut="["></button>
|
|
193
193
|
<button type="button" class="button_next_file" data-shortcut="]"></button>
|
|
194
194
|
<button type="button" class="button_show_hide_help" data-shortcut="?"></button>
|
|
@@ -83,9 +83,9 @@
|
|
|
83
83
|
</h2>
|
|
84
84
|
|
|
85
85
|
<p class="text">
|
|
86
|
-
<a id="prevFileLink" class="nav" href="{{ prev_html }}">« prev</a>
|
|
86
|
+
<a id="prevFileLink" class="nav" href="{{ prev_html|escape }}">« prev</a>
|
|
87
87
|
<a id="indexLink" class="nav" href="index.html">^ index</a>
|
|
88
|
-
<a id="nextFileLink" class="nav" href="{{ next_html }}">» next</a>
|
|
88
|
+
<a id="nextFileLink" class="nav" href="{{ next_html|escape }}">» next</a>
|
|
89
89
|
|
|
90
90
|
<a class="nav" href="{{__url__}}">coverage.py v{{__version__}}</a>,
|
|
91
91
|
created at {{ time_stamp }}
|
|
@@ -135,9 +135,9 @@
|
|
|
135
135
|
<footer>
|
|
136
136
|
<div class="content">
|
|
137
137
|
<p>
|
|
138
|
-
<a class="nav" href="{{ prev_html }}">« prev</a>
|
|
138
|
+
<a class="nav" href="{{ prev_html|escape }}">« prev</a>
|
|
139
139
|
<a class="nav" href="index.html">^ index</a>
|
|
140
|
-
<a class="nav" href="{{ next_html }}">» next</a>
|
|
140
|
+
<a class="nav" href="{{ next_html|escape }}">» next</a>
|
|
141
141
|
|
|
142
142
|
<a class="nav" href="{{__url__}}">coverage.py v{{__version__}}</a>,
|
|
143
143
|
created at {{ time_stamp }}
|
|
@@ -539,10 +539,7 @@ class InOrOut:
|
|
|
539
539
|
warned.add(filename)
|
|
540
540
|
elif self.debug and self.debug.should("trace"):
|
|
541
541
|
self.debug.write(
|
|
542
|
-
"Didn't trace already imported file {!r}: {}"
|
|
543
|
-
disp.original_filename,
|
|
544
|
-
disp.reason,
|
|
545
|
-
),
|
|
542
|
+
f"Didn't trace already imported file {disp.original_filename!r}: {disp.reason}",
|
|
546
543
|
)
|
|
547
544
|
|
|
548
545
|
def warn_unimported_source(self) -> None:
|
|
@@ -19,6 +19,19 @@ if TYPE_CHECKING:
|
|
|
19
19
|
from coverage import Coverage
|
|
20
20
|
|
|
21
21
|
|
|
22
|
+
def lcov_field(text: str) -> str:
|
|
23
|
+
"""Make `text` safe to write as a field in a single LCOV record.
|
|
24
|
+
|
|
25
|
+
LCOV records are newline-delimited and the format has no escaping, so a
|
|
26
|
+
value carrying a newline (a legal character in a POSIX file name) would
|
|
27
|
+
spill into fabricated records. Replace any control characters, which can't
|
|
28
|
+
appear in a valid one-line field, and leave printable text untouched.
|
|
29
|
+
"""
|
|
30
|
+
if text.isprintable():
|
|
31
|
+
return text
|
|
32
|
+
return "".join(ch if ch.isprintable() else "?" for ch in text)
|
|
33
|
+
|
|
34
|
+
|
|
22
35
|
def line_hash(line: str) -> str:
|
|
23
36
|
"""Produce a hash of a source line for use in the LCOV file."""
|
|
24
37
|
# The LCOV file format optionally allows each line to be MD5ed as a
|
|
@@ -97,8 +110,9 @@ def lcov_functions(
|
|
|
97
110
|
hit = int(analysis.numbers.n_executed > 0)
|
|
98
111
|
functions_hit += hit
|
|
99
112
|
|
|
100
|
-
|
|
101
|
-
outfile.write(f"
|
|
113
|
+
name = lcov_field(region.name)
|
|
114
|
+
outfile.write(f"FN:{first_line},{last_line},{name}\n")
|
|
115
|
+
outfile.write(f"FNDA:{hit},{name}\n")
|
|
102
116
|
|
|
103
117
|
outfile.write(f"FNF:{functions_found}\n")
|
|
104
118
|
outfile.write(f"FNH:{functions_hit}\n")
|
|
@@ -145,7 +159,7 @@ def lcov_arcs(
|
|
|
145
159
|
destinations.sort(key=lambda d: (d[0] < 0, d))
|
|
146
160
|
|
|
147
161
|
for dst, hit in destinations:
|
|
148
|
-
branch = fr.arc_description(line, dst)
|
|
162
|
+
branch = lcov_field(fr.arc_description(line, dst))
|
|
149
163
|
outfile.write(f"BRDA:{line},0,{branch},{hit}\n")
|
|
150
164
|
|
|
151
165
|
# Summary of the branch coverage.
|
|
@@ -207,7 +221,7 @@ class LcovReporter:
|
|
|
207
221
|
if self.config.skip_empty:
|
|
208
222
|
return
|
|
209
223
|
|
|
210
|
-
outfile.write(f"SF:{rel_fname}\n")
|
|
224
|
+
outfile.write(f"SF:{lcov_field(rel_fname)}\n")
|
|
211
225
|
|
|
212
226
|
lines = sorted(analysis.statements)
|
|
213
227
|
if self.config.lcov_line_checksums:
|
|
@@ -13,7 +13,7 @@ import token
|
|
|
13
13
|
import tokenize
|
|
14
14
|
from collections.abc import Callable, Iterable, Sequence
|
|
15
15
|
from dataclasses import dataclass
|
|
16
|
-
from typing import
|
|
16
|
+
from typing import Protocol, cast
|
|
17
17
|
|
|
18
18
|
from coverage import env
|
|
19
19
|
from coverage.bytecode import ByteParser
|
|
@@ -521,7 +521,7 @@ class TAddArcFn(Protocol):
|
|
|
521
521
|
"""
|
|
522
522
|
|
|
523
523
|
|
|
524
|
-
TArcFragments = dict[TArc, list[tuple[
|
|
524
|
+
TArcFragments = dict[TArc, list[tuple[str | None, str | None]]]
|
|
525
525
|
|
|
526
526
|
|
|
527
527
|
class Block:
|
|
@@ -237,7 +237,6 @@ class CoveragePlugin:
|
|
|
237
237
|
methods on the `config` object.
|
|
238
238
|
|
|
239
239
|
"""
|
|
240
|
-
pass
|
|
241
240
|
|
|
242
241
|
def sys_info(self) -> Iterable[tuple[str, Any]]:
|
|
243
242
|
"""Get a list of information useful for debugging.
|
|
@@ -607,7 +606,7 @@ class FileReporter(CoveragePluginBase):
|
|
|
607
606
|
"""
|
|
608
607
|
return []
|
|
609
608
|
|
|
610
|
-
def __eq__(self, other:
|
|
609
|
+
def __eq__(self, other: object) -> bool:
|
|
611
610
|
return isinstance(other, FileReporter) and self.filename == other.filename
|
|
612
611
|
|
|
613
612
|
def __lt__(self, other: Any) -> bool:
|
|
@@ -226,11 +226,7 @@ class DebugFileTracerWrapper(FileTracer):
|
|
|
226
226
|
def dynamic_source_filename(self, filename: str, frame: FrameType) -> str | None:
|
|
227
227
|
dyn = self.tracer.dynamic_source_filename(filename, frame)
|
|
228
228
|
self.debug.write(
|
|
229
|
-
"dynamic_source_filename({!r}, {}) --> {!r}"
|
|
230
|
-
filename,
|
|
231
|
-
self._show_frame(frame),
|
|
232
|
-
dyn,
|
|
233
|
-
)
|
|
229
|
+
f"dynamic_source_filename({filename!r}, {self._show_frame(frame)}) --> {dyn!r}"
|
|
234
230
|
)
|
|
235
231
|
return dyn
|
|
236
232
|
|
|
@@ -130,10 +130,7 @@ class PyTracer(Tracer):
|
|
|
130
130
|
f.write(f"{marker} {self.id}[{len(self.data_stack)}]")
|
|
131
131
|
if 0: # if you want thread ids..
|
|
132
132
|
f.write( # type: ignore[unreachable]
|
|
133
|
-
".{:x}.{:x}"
|
|
134
|
-
self.thread.ident,
|
|
135
|
-
self.threading.current_thread().ident,
|
|
136
|
-
)
|
|
133
|
+
f".{self.thread.ident:x}.{self.threading.current_thread().ident:x}"
|
|
137
134
|
)
|
|
138
135
|
f.write(" {}".format(" ".join(map(str, args))))
|
|
139
136
|
if 0: # if you want callers..
|
|
@@ -212,10 +212,7 @@ class SqliteDb:
|
|
|
212
212
|
"""Same as :meth:`python:sqlite3.Connection.executescript`."""
|
|
213
213
|
if self.debug.should("sql"):
|
|
214
214
|
self.debug.write(
|
|
215
|
-
"Executing script with {} chars: {}"
|
|
216
|
-
len(script),
|
|
217
|
-
clipped_repr(script, 100),
|
|
218
|
-
)
|
|
215
|
+
f"Executing script with {len(script)} chars: {clipped_repr(script, 100)}"
|
|
219
216
|
)
|
|
220
217
|
assert self.con is not None
|
|
221
218
|
self.con.executescript(script).close()
|
|
@@ -110,7 +110,7 @@ if LOG: # pragma: debugging
|
|
|
110
110
|
try:
|
|
111
111
|
print(f"{pid}:{tslug}: {msg}", file=f, flush=True)
|
|
112
112
|
except UnicodeError:
|
|
113
|
-
print(f"{pid}:{tslug}: {
|
|
113
|
+
print(f"{pid}:{tslug}: {msg!a}", file=f, flush=True)
|
|
114
114
|
|
|
115
115
|
def arg_repr(arg: Any) -> str:
|
|
116
116
|
"""Make a customized repr for logged values."""
|
|
@@ -20,14 +20,10 @@ from typing import Any, NoReturn, cast
|
|
|
20
20
|
class TempliteSyntaxError(ValueError):
|
|
21
21
|
"""Raised when a template has a syntax error."""
|
|
22
22
|
|
|
23
|
-
pass
|
|
24
|
-
|
|
25
23
|
|
|
26
24
|
class TempliteValueError(ValueError):
|
|
27
25
|
"""Raised when an expression won't evaluate in a template."""
|
|
28
26
|
|
|
29
|
-
pass
|
|
30
|
-
|
|
31
27
|
|
|
32
28
|
class CodeBuilder:
|
|
33
29
|
"""Build source code conveniently."""
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
"""Typing information for the constructs from our .c files."""
|
|
5
5
|
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any
|
|
7
7
|
|
|
8
8
|
from coverage.types import TFileDisposition, TTraceData, TTraceFn, Tracer
|
|
9
9
|
|
|
@@ -37,7 +37,7 @@ class CTracer(Tracer):
|
|
|
37
37
|
warn: Any
|
|
38
38
|
def __init__(self) -> None: ...
|
|
39
39
|
def activity(self) -> bool: ...
|
|
40
|
-
def get_stats(self) ->
|
|
40
|
+
def get_stats(self) -> dict[str, int]: ...
|
|
41
41
|
def reset_activity(self) -> Any: ...
|
|
42
42
|
def start(self) -> TTraceFn: ...
|
|
43
43
|
def stop(self) -> None: ...
|