diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2009-11-08 17:38:51 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2009-11-08 17:38:51 -0500 |
commit | 5ed5253d89664d675566b8ea36677a75158ede4b (patch) | |
tree | 4b26b6f73685f1a5755b30bf9ac2ea9fb0f0a304 /coverage | |
parent | 715ceff602f744cf3ddd3e60bd65260250b8163f (diff) | |
download | python-coveragepy-git-5ed5253d89664d675566b8ea36677a75158ede4b.tar.gz |
Dict literals shouldn't count as many different exits.
Diffstat (limited to 'coverage')
-rw-r--r-- | coverage/parser.py | 31 | ||||
-rw-r--r-- | coverage/results.py | 18 |
2 files changed, 28 insertions, 21 deletions
diff --git a/coverage/parser.py b/coverage/parser.py index 7721d8db..4890aa6f 100644 --- a/coverage/parser.py +++ b/coverage/parser.py @@ -186,11 +186,27 @@ class CodeParser(object): normalized to the first line of multiline statements. """ - all_arcs = self.byte_parser._all_arcs() - m2fl = self.first_line - all_arcs = [(m2fl(l1), m2fl(l2)) for (l1,l2) in all_arcs] + all_arcs = [] + for l1, l2 in self.byte_parser._all_arcs(): + fl1 = self.first_line(l1) + fl2 = self.first_line(l2) + if fl1 != fl2: + all_arcs.append((fl1, fl2)) return sorted(all_arcs) + def exit_counts(self): + """Return a dict mapping line numbers to number of exits from that line.""" + exit_counts = {} + for l1,l2 in self.arcs(): + if l1 == -1: + continue + if l1 not in exit_counts: + exit_counts[l1] = 0 + exit_counts[l1] += 1 + + return exit_counts + + ## Opcodes that guide the ByteParser. def _opcode(name): @@ -592,17 +608,22 @@ class AdHocMain(object): else: arc_width, arc_chars = 0, {} + exit_counts = cp.exit_counts() + for i, ltext in enumerate(cp.lines): lineno = i+1 - m0 = m1 = m2 = a = ' ' + m0 = m1 = m2 = m3 = a = ' ' if lineno in cp.statement_starts: m0 = '-' if lineno in cp.docstrings: m1 = '"' if lineno in cp.excluded: m2 = 'x' + exits = exit_counts.get(lineno, 0) + if exits > 1: + m3 = str(exits) a = arc_chars.get(lineno, '').ljust(arc_width) - print("%4d %s%s%s%s %s" % (lineno, m0, m1, m2, a, ltext)) + print("%4d %s%s%s%s%s %s" % (lineno, m0, m1, m2, m3, a, ltext)) def arc_ascii_art(self, arcs): """Draw arcs as ascii art. diff --git a/coverage/results.py b/coverage/results.py index 59cc1fa9..6f4117a8 100644 --- a/coverage/results.py +++ b/coverage/results.py @@ -96,25 +96,11 @@ class Analysis(object): def branch_lines(self): """Returns lines that have more than one exit.""" - exit_counts = {} - for l1,l2 in self.arc_possibilities(): - if l1 == -1: - continue - if l1 not in exit_counts: - exit_counts[l1] = 0 - exit_counts[l1] += 1 - + exit_counts = self.parser.exit_counts() return [l1 for l1,count in exit_counts.items() if count > 1] def total_branches(self): - exit_counts = {} - for l1,l2 in self.arc_possibilities(): - if l1 == -1: - continue - if l1 not in exit_counts: - exit_counts[l1] = 0 - exit_counts[l1] += 1 - + exit_counts = self.parser.exit_counts() return sum([count for count in exit_counts.values() if count > 1]) def missing_branch_arcs(self): |