Skip to content

Commit 63ec12d

Browse files
committed
types: clarify that morfs arguments can be a single morf
1 parent 0aaf4be commit 63ec12d

12 files changed

Lines changed: 29 additions & 30 deletions

coverage/annotate.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77

88
import os
99
import re
10-
from collections.abc import Iterable
1110
from typing import TYPE_CHECKING
1211

1312
from coverage.files import flat_rootname
1413
from coverage.misc import ensure_dir, isolate_module
1514
from coverage.plugin import FileReporter
1615
from coverage.report_core import get_analysis_to_report
1716
from coverage.results import Analysis
18-
from coverage.types import TMorf
17+
from coverage.types import TMorfs
1918

2019
if TYPE_CHECKING:
2120
from coverage import Coverage
@@ -53,7 +52,7 @@ def __init__(self, coverage: Coverage) -> None:
5352
blank_re = re.compile(r"\s*(#|$)")
5453
else_re = re.compile(r"\s*else\s*:\s*(#|$)")
5554

56-
def report(self, morfs: Iterable[TMorf] | None, directory: str | None = None) -> None:
55+
def report(self, morfs: TMorfs, directory: str | None = None) -> None:
5756
"""Run the report.
5857
5958
See `coverage.report()` for arguments.

coverage/control.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
TFileDisposition,
6767
TLineNo,
6868
TMorf,
69+
TMorfs,
6970
)
7071
from coverage.version import __url__
7172
from coverage.xmlreport import XmlReporter
@@ -1056,7 +1057,7 @@ def _get_file_reporter(self, morf: TMorf) -> FileReporter:
10561057

10571058
def _get_file_reporters(
10581059
self,
1059-
morfs: Iterable[TMorf] | None = None,
1060+
morfs: TMorfs = None,
10601061
) -> list[tuple[FileReporter, TMorf]]:
10611062
"""Get FileReporters for a list of modules or file names.
10621063
@@ -1090,7 +1091,7 @@ def _prepare_data_for_reporting(self) -> None:
10901091

10911092
def report(
10921093
self,
1093-
morfs: Iterable[TMorf] | None = None,
1094+
morfs: TMorfs = None,
10941095
show_missing: bool | None = None,
10951096
ignore_errors: bool | None = None,
10961097
file: IO[str] | None = None,
@@ -1172,7 +1173,7 @@ def report(
11721173

11731174
def annotate(
11741175
self,
1175-
morfs: Iterable[TMorf] | None = None,
1176+
morfs: TMorfs = None,
11761177
directory: str | None = None,
11771178
ignore_errors: bool | None = None,
11781179
omit: str | list[str] | None = None,
@@ -1202,7 +1203,7 @@ def annotate(
12021203

12031204
def html_report(
12041205
self,
1205-
morfs: Iterable[TMorf] | None = None,
1206+
morfs: TMorfs = None,
12061207
directory: str | None = None,
12071208
ignore_errors: bool | None = None,
12081209
omit: str | list[str] | None = None,
@@ -1259,7 +1260,7 @@ def html_report(
12591260

12601261
def xml_report(
12611262
self,
1262-
morfs: Iterable[TMorf] | None = None,
1263+
morfs: TMorfs = None,
12631264
outfile: str | None = None,
12641265
ignore_errors: bool | None = None,
12651266
omit: str | list[str] | None = None,
@@ -1293,7 +1294,7 @@ def xml_report(
12931294

12941295
def json_report(
12951296
self,
1296-
morfs: Iterable[TMorf] | None = None,
1297+
morfs: TMorfs = None,
12971298
outfile: str | None = None,
12981299
ignore_errors: bool | None = None,
12991300
omit: str | list[str] | None = None,
@@ -1331,7 +1332,7 @@ def json_report(
13311332

13321333
def lcov_report(
13331334
self,
1334-
morfs: Iterable[TMorf] | None = None,
1335+
morfs: TMorfs = None,
13351336
outfile: str | None = None,
13361337
ignore_errors: bool | None = None,
13371338
omit: str | list[str] | None = None,

coverage/html.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
from coverage.report_core import get_analysis_to_report
3535
from coverage.results import Analysis, AnalysisNarrower, Numbers
3636
from coverage.templite import Templite
37-
from coverage.types import TLineNo, TMorf
37+
from coverage.types import TLineNo, TMorfs
3838
from coverage.version import __url__
3939

4040
if TYPE_CHECKING:
@@ -351,7 +351,7 @@ def new_index_page(self, noun: str, plural_noun: str) -> IndexPage:
351351
skipped_empty_count=0,
352352
)
353353

354-
def report(self, morfs: Iterable[TMorf] | None) -> float:
354+
def report(self, morfs: TMorfs) -> float:
355355
"""Generate an HTML report for `morfs`.
356356
357357
`morfs` is a list of modules or file names.

coverage/jsonreport.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from coverage import __version__
1515
from coverage.report_core import get_analysis_to_report
1616
from coverage.results import Analysis, AnalysisNarrower, Numbers
17-
from coverage.types import TLineNo, TMorf
17+
from coverage.types import TLineNo, TMorfs
1818

1919
if TYPE_CHECKING:
2020
from coverage import Coverage
@@ -66,7 +66,7 @@ def make_branch_summary(self, nums: Numbers) -> JsonObj:
6666
"percent_branches_covered_display": nums.pc_branches_str,
6767
}
6868

69-
def report(self, morfs: Iterable[TMorf] | None, outfile: IO[str]) -> float:
69+
def report(self, morfs: TMorfs, outfile: IO[str]) -> float:
7070
"""Generate a json report for `morfs`.
7171
7272
`morfs` is a list of modules or file names.

coverage/lcovreport.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@
88
import base64
99
import hashlib
1010
import sys
11-
from collections.abc import Iterable
1211
from typing import IO, TYPE_CHECKING
1312

1413
from coverage.plugin import FileReporter
1514
from coverage.report_core import get_analysis_to_report
1615
from coverage.results import Analysis, AnalysisNarrower, Numbers
17-
from coverage.types import TMorf
16+
from coverage.types import TMorfs
1817

1918
if TYPE_CHECKING:
2019
from coverage import Coverage
@@ -162,7 +161,7 @@ def __init__(self, coverage: Coverage) -> None:
162161
self.config = coverage.config
163162
self.total = Numbers(self.coverage.config.precision)
164163

165-
def report(self, morfs: Iterable[TMorf] | None, outfile: IO[str]) -> float:
164+
def report(self, morfs: TMorfs, outfile: IO[str]) -> float:
166165
"""Renders the full lcov report.
167166
168167
`morfs` is a list of modules or filenames

coverage/report.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from coverage.plugin import FileReporter
1515
from coverage.report_core import get_analysis_to_report
1616
from coverage.results import Analysis, Numbers
17-
from coverage.types import TMorf
17+
from coverage.types import TMorfs
1818

1919
if TYPE_CHECKING:
2020
from coverage import Coverage
@@ -187,7 +187,7 @@ def report_markdown(
187187
for end_line in end_lines:
188188
self.write(end_line)
189189

190-
def report(self, morfs: Iterable[TMorf] | None, outfile: IO[str] | None = None) -> float:
190+
def report(self, morfs: TMorfs, outfile: IO[str] | None = None) -> float:
191191
"""Writes a report summarizing coverage statistics per module.
192192
193193
`outfile` is a text-mode file object to write the summary to.

coverage/report_core.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from coverage.misc import ensure_dir_for_file, file_be_gone
1515
from coverage.plugin import FileReporter
1616
from coverage.results import Analysis
17-
from coverage.types import TMorf
17+
from coverage.types import TMorfs
1818

1919
if TYPE_CHECKING:
2020
from coverage import Coverage
@@ -25,14 +25,14 @@ class Reporter(Protocol):
2525

2626
report_type: str
2727

28-
def report(self, morfs: Iterable[TMorf] | None, outfile: IO[str]) -> float:
28+
def report(self, morfs: TMorfs, outfile: IO[str]) -> float:
2929
"""Generate a report of `morfs`, written to `outfile`."""
3030

3131

3232
def render_report(
3333
output_path: str,
3434
reporter: Reporter,
35-
morfs: Iterable[TMorf] | None,
35+
morfs: TMorfs,
3636
msgfn: Callable[[str], None],
3737
) -> float:
3838
"""Run a one-file report generator, managing the output file.
@@ -70,7 +70,7 @@ def render_report(
7070

7171
def get_analysis_to_report(
7272
coverage: Coverage,
73-
morfs: Iterable[TMorf] | None,
73+
morfs: TMorfs,
7474
) -> Iterable[tuple[FileReporter, Analysis]]:
7575
"""Get the files to report on.
7676

coverage/types.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ def get_plugin_options(self, plugin: str) -> TConfigSectionOut:
166166
## Parsing
167167

168168
TMorf = ModuleType | str
169+
TMorfs = TMorf | Iterable[TMorf] | None
169170

170171
TSourceTokenLines = Iterable[list[tuple[str, str]]]
171172

coverage/xmlreport.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import sys
1111
import time
1212
import xml.dom.minidom
13-
from collections.abc import Iterable
1413
from dataclasses import dataclass
1514
from typing import IO, TYPE_CHECKING, Any
1615

@@ -19,7 +18,7 @@
1918
from coverage.plugin import FileReporter
2019
from coverage.report_core import get_analysis_to_report
2120
from coverage.results import Analysis
22-
from coverage.types import TMorf
21+
from coverage.types import TMorfs
2322
from coverage.version import __url__
2423

2524
if TYPE_CHECKING:
@@ -76,7 +75,7 @@ def __init__(self, coverage: Coverage) -> None:
7675
self.packages: dict[str, PackageData] = {}
7776
self.xml_out: xml.dom.minidom.Document
7877

79-
def report(self, morfs: Iterable[TMorf] | None, outfile: IO[str] | None = None) -> float:
78+
def report(self, morfs: TMorfs, outfile: IO[str] | None = None) -> float:
8079
"""Generate a Cobertura-compatible XML report for `morfs`.
8180
8281
`morfs` is a list of modules or file names.

tests/test_concurrency.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ def try_multiprocessing_code(
473473
self,
474474
code: str,
475475
expected_out: str | None,
476-
the_module: ModuleType,
476+
the_module: ModuleType | None,
477477
nprocs: int,
478478
start_method: str,
479479
concurrency: str = "multiprocessing",

0 commit comments

Comments
 (0)