Skip to content

Commit 30f1ecf

Browse files
committed
refactor: human sorting
1 parent a4da2c6 commit 30f1ecf

File tree

3 files changed

+13
-10
lines changed

3 files changed

+13
-10
lines changed

coverage/collector.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from coverage.debug import short_stack
1212
from coverage.disposition import FileDisposition
1313
from coverage.exceptions import ConfigError
14-
from coverage.misc import human_sorted, isolate_module
14+
from coverage.misc import human_sorted_items, isolate_module
1515
from coverage.pytracer import PyTracer
1616

1717
os = isolate_module(os)
@@ -367,8 +367,8 @@ def pause(self):
367367
stats = tracer.get_stats()
368368
if stats:
369369
print("\nCoverage.py tracer stats:")
370-
for k in human_sorted(stats.keys()):
371-
print(f"{k:>20}: {stats[k]}")
370+
for k, v in human_sorted_items(stats.items()):
371+
print(f"{k:>20}: {v}")
372372
if self.threading:
373373
self.threading.settrace(None)
374374

coverage/misc.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ def import_local_file(modname, modfile=None):
368368
return mod
369369

370370

371-
def human_key(s):
371+
def _human_key(s):
372372
"""Turn a string into a list of string and number chunks.
373373
"z23a" -> ["z", 23, "a"]
374374
"""
@@ -389,14 +389,17 @@ def human_sorted(strings):
389389
Returns the sorted list.
390390
391391
"""
392-
return sorted(strings, key=human_key)
392+
return sorted(strings, key=_human_key)
393393

394394
def human_sorted_items(items, reverse=False):
395-
"""Sort the (string, value) items the way humans expect.
395+
"""Sort (string, ...) items the way humans expect.
396+
397+
The elements of `items` can be any tuple/list. They'll be sorted by the
398+
first element (a string), with ties broken by the remaining elements.
396399
397400
Returns the sorted list of items.
398401
"""
399-
return sorted(items, key=lambda pair: (human_key(pair[0]), pair[1]), reverse=reverse)
402+
return sorted(items, key=lambda item: (_human_key(item[0]), *item[1:]), reverse=reverse)
400403

401404

402405
def plural(n, thing="", things=""):

coverage/summary.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import sys
77

88
from coverage.exceptions import ConfigError, NoDataError
9-
from coverage.misc import human_key
9+
from coverage.misc import human_sorted_items
1010
from coverage.report import get_analysis_to_report
1111
from coverage.results import Numbers
1212

@@ -198,9 +198,9 @@ def report(self, morfs, outfile=None):
198198
if sort_idx is None:
199199
raise ConfigError(f"Invalid sorting option: {self.config.sort!r}")
200200
if sort_option == "name":
201-
lines_values.sort(key=lambda tup: (human_key(tup[0]), tup[1]), reverse=reverse)
201+
lines_values = human_sorted_items(lines_values, reverse=reverse)
202202
else:
203-
lines_values.sort(key=lambda tup: (tup[sort_idx], tup[0]), reverse=reverse)
203+
lines_values.sort(key=lambda line: (line[sort_idx], line[0]), reverse=reverse)
204204

205205
# Calculate total if we had at least one file.
206206
total_line = ["TOTAL", self.total.n_statements, self.total.n_missing]

0 commit comments

Comments
 (0)