From c6632c77189b839f842ca32de08df56c02cccb6f Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Thu, 12 Mar 2009 08:01:07 -0400 Subject: Move format_lines into misc.py since it doesn't need to be a method of coverage. --- coverage/misc.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'coverage/misc.py') diff --git a/coverage/misc.py b/coverage/misc.py index 15ddad0..a6d9f20 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -14,5 +14,37 @@ def nice_pair(pair): return "%d-%d" % (start, end) +def format_lines(statements, lines): + """Nicely format a list of line numbers. + + Format a list of line numbers for printing by coalescing groups of lines as + long as the lines represent consecutive statements. This will coalesce + even if there are gaps between statements. + + For example, if `statements` is [1,2,3,4,5,10,11,12,13,14] and + `lines` is [1,2,5,10,11,13,14] then the result will be "1-2, 5-11, 13-14". + + """ + pairs = [] + i = 0 + j = 0 + start = None + pairs = [] + while i < len(statements) and j < len(lines): + if statements[i] == lines[j]: + if start == None: + start = lines[j] + end = lines[j] + j = j + 1 + elif start: + pairs.append((start, end)) + start = None + i = i + 1 + if start: + pairs.append((start, end)) + ret = ', '.join(map(nice_pair, pairs)) + return ret + + class CoverageException(Exception): pass -- cgit v1.2.1