diff options
Diffstat (limited to 'coverage/annotate.py')
-rw-r--r-- | coverage/annotate.py | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/coverage/annotate.py b/coverage/annotate.py index 14a7b7c7..c0c69800 100644 --- a/coverage/annotate.py +++ b/coverage/annotate.py @@ -7,7 +7,6 @@ from coverage.report import Reporter class AnnotateReporter(Reporter): def __init__(self, coverage, ignore_errors=False): super(AnnotateReporter, self).__init__(coverage, ignore_errors) - self.directory = None blank_re = re.compile(r"\s*(#|$)") @@ -17,27 +16,36 @@ class AnnotateReporter(Reporter): self.find_code_units(morfs, omit_prefixes) self.directory = directory + if self.directory and not os.path.exists(self.directory): + os.makedirs(self.directory) + for cu in self.code_units: try: + if not cu.relative: + continue statements, excluded, missing, _ = self.coverage.analyze(cu) - self.annotate_file(cu.filename, statements, excluded, missing) + self.annotate_file(cu, statements, excluded, missing) except KeyboardInterrupt: raise except: if not self.ignore_errors: raise - def annotate_file(self, filename, statements, excluded, missing): + def annotate_file(self, cu, statements, excluded, missing): + """Annotate a single file. + + `cu` is the CodeUnit for the file to annotate. + + """ + filename = cu.filename source = open(filename, 'r') if self.directory: - if not os.path.exists(self.directory): - os.makedirs(self.directory) - dest_file = os.path.join(self.directory, - os.path.basename(filename) - + ',cover') + dest_file = os.path.join(self.directory, cu.flat_rootname()) + ".py" else: - dest_file = filename + ',cover' + dest_file = filename + dest_file += ",cover" dest = open(dest_file, 'w') + lineno = 0 i = 0 j = 0 @@ -46,11 +54,11 @@ class AnnotateReporter(Reporter): line = source.readline() if line == '': break - lineno = lineno + 1 + lineno += 1 while i < len(statements) and statements[i] < lineno: - i = i + 1 + i += 1 while j < len(missing) and missing[j] < lineno: - j = j + 1 + j += 1 if i < len(statements) and statements[i] == lineno: covered = j >= len(missing) or missing[j] > lineno if self.blank_re.match(line): |