def _analyze(self, code_unit): """Analyze a single code unit. Returns a 4-tuple: (statements, excluded, missing, missing formatted). """ from parser import CodeParser filename = code_unit.filename ext = os.path.splitext(filename)[1] source = None if ext == '.py': if not os.path.exists(filename): source = self.file_locator.get_zip_data(filename) if not source: raise CoverageException( "No source for code '%s'." % code_unit.filename ) parser = CodeParser() statements, excluded, line_map = parser.parse_source( text=source, filename=filename, exclude=self.exclude_re ) # Identify missing statements. missing = [] execed = self.data.executed_lines(filename) for line in statements: lines = line_map.get(line) if lines: for l in range(lines[0], lines[1]+1): if l in execed: break else: missing.append(line) else: if line not in execed: missing.append(line) return ( statements, excluded, missing, format_lines(statements, missing) )
def _analyze(self, code_unit): """Analyze a single code unit. Returns a 4-tuple: (statements, excluded, missing, missing formatted). """ from parser import CodeParser filename = code_unit.filename ext = os.path.splitext(filename)[1] source = None if ext == '.py': if not os.path.exists(filename): source = self.file_locator.get_zip_data(filename) if not source: raise CoverageException("No source for code '%s'." % code_unit.filename) parser = CodeParser() statements, excluded, line_map = parser.parse_source( text=source, filename=filename, exclude=self.exclude_re) # Identify missing statements. missing = [] execed = self.data.executed_lines(filename) for line in statements: lines = line_map.get(line) if lines: for l in range(lines[0], lines[1] + 1): if l in execed: break else: missing.append(line) else: if line not in execed: missing.append(line) return (statements, excluded, missing, format_lines(statements, missing))