# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt

# Settings to use when using coverage.py to measure itself, known as
# meta-coverage.  This gets intricate because we need to keep the coverage
# measurement happening in the tests separate from our own coverage measurement
# of coverage.py itself.

[run]
branch = true
data_file = ${COVERAGE_METAFILE-.metacov}
parallel = true
relative_files = true
source =
    ${COVERAGE_HOME-.}/coverage
    ${COVERAGE_HOME-.}/tests
# $set_env.py: COVERAGE_DYNCTX - Set to 'test_function' for who-tests-what
dynamic_context = ${COVERAGE_DYNCTX-none}
# $set_env.py: COVERAGE_CONTEXT - Static context for this run (or $ENV_VAR like $TOX_ENV_NAME)
context = ${COVERAGE_CONTEXT-none}

[report]
# We set different pragmas so our code won't be confused with test code, and
# we use different pragmas for different reasons that the lines won't be
# measured.
exclude_lines =
    pragma: not covered

    # Lines in test code that aren't covered: we are nested inside ourselves.
    # Sometimes this is used as a comment:
    #
    #       cov.start()
    #       blah()              # pragma: nested
    #       cov.stop()          # pragma: nested
    #
    # In order to exclude a series of lines, sometimes it's used as a constant
    # condition, which might be too cute:
    #
    #       cov.start()
    #       if "pragma: nested":
    #           blah()
    #           cov.stop()
    #
    pragma: nested
    cov.stop\(\)
    with cov.collect\(\):

    # Lines that are only executed when we are debugging coverage.py.
    def __repr__
    pragma: debugging

    # Lines that are only executed when we are not testing coverage.py.
    pragma: not testing

    # Lines that we can't run during metacov.
    pragma: no metacov
    pytest.mark.skipif\(env.METACOV
    if not env.METACOV:

    # These lines only happen if tests fail.
    raise AssertionError
    pragma: only failure

    # Not-real code for type checking
    if TYPE_CHECKING:
    class .*\(Protocol\):
    @overload

    # OS error conditions that we can't (or don't care to) replicate.
    pragma: cant happen

    # Obscure bugs in specific versions of interpreters, and so probably no
    # longer tested.
    pragma: obscure

    # Lines that will never be called, but satisfy the type checker
    pragma: never called

partial_branches =
    pragma: part covered
    # A for-loop that always hits its break statement
    pragma: always breaks
    pragma: part started
    # If we're asserting that any() is true, it didn't finish.
    assert any\(
    if env.TESTING:
    if env.METACOV:

precision = 3

[html]
title = Coverage.py metacov

[paths]
source =
    .
    */coverage/trunk
    # GitHub Actions on Ubuntu uses /home/runner/work/coveragepy
    # GitHub Actions on Mac uses /Users/runner/work/coveragepy
    # GitHub Actions on Window uses D:\a\coveragepy\coveragepy
    *\coveragepy
    */coveragepy
