diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2022-12-31 19:04:31 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2022-12-31 20:39:09 -0500 |
commit | e3c523c98cbc9ecdd37e36da19848ca9d0aef4a3 (patch) | |
tree | 0857c3472c5858695d26f0276e8f1c5b3512a3e2 /coverage/report.py | |
parent | 5a72a1eb736516759201b223463f69f00979818e (diff) | |
download | python-coveragepy-git-e3c523c98cbc9ecdd37e36da19848ca9d0aef4a3.tar.gz |
mypy: add __init__.py, __main__.py, bytecode.py, context.py, exceptions.py, report.py, and version.py
Diffstat (limited to 'coverage/report.py')
-rw-r--r-- | coverage/report.py | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/coverage/report.py b/coverage/report.py index b44f9c8e..549ab307 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -3,14 +3,38 @@ """Reporter foundation for coverage.py.""" +from __future__ import annotations + import sys +from typing import Callable, Iterable, Iterator, IO, Optional, Tuple, TYPE_CHECKING + from coverage.exceptions import CoverageException, NoDataError, NotPython from coverage.files import prep_patterns, GlobMatcher from coverage.misc import ensure_dir_for_file, file_be_gone +from coverage.plugin import FileReporter +from coverage.results import Analysis +from coverage.types import Protocol, TMorf + +if TYPE_CHECKING: + from coverage import Coverage + + +class Reporter(Protocol): + """What we expect of reporters.""" + + report_type: str + + def report(self, morfs: Optional[Iterable[TMorf]], outfile: IO[str]) -> float: + """Generate a report of `morfs`, written to `outfile`.""" -def render_report(output_path, reporter, morfs, msgfn) -> float: +def render_report( + output_path: str, + reporter: Reporter, + morfs: Optional[Iterable[TMorf]], + msgfn: Callable[[str], None], +) -> float: """Run a one-file report generator, managing the output file. This function ensures the output file is ready to be written to. Then writes @@ -45,7 +69,10 @@ def render_report(output_path, reporter, morfs, msgfn) -> float: msgfn(f"Wrote {reporter.report_type} to {output_path}") -def get_analysis_to_report(coverage, morfs): +def get_analysis_to_report( + coverage: Coverage, + morfs: Iterable[TMorf] +) -> Iterator[Tuple[FileReporter, Analysis]]: """Get the files to report on. For each morf in `morfs`, if it should be reported on (based on the omit @@ -75,7 +102,7 @@ def get_analysis_to_report(coverage, morfs): # explicitly suppress those errors. # NotPython is only raised by PythonFileReporter, which has a # should_be_python() method. - if fr.should_be_python(): + if fr.should_be_python(): # type: ignore[attr-defined] if config.ignore_errors: msg = f"Couldn't parse Python file '{fr.filename}'" coverage._warn(msg, slug="couldnt-parse") |