summaryrefslogtreecommitdiff
path: root/coverage/control.py
diff options
context:
space:
mode:
Diffstat (limited to 'coverage/control.py')
-rw-r--r--coverage/control.py25
1 files changed, 16 insertions, 9 deletions
diff --git a/coverage/control.py b/coverage/control.py
index ef704261..ce79cd30 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -4,7 +4,7 @@ import os, socket
from coverage.annotate import AnnotateReporter
from coverage.backward import string_class
-from coverage.codeunit import code_unit_factory
+from coverage.codeunit import code_unit_factory, CodeUnit
from coverage.collector import Collector
from coverage.data import CoverageData
from coverage.files import FileLocator
@@ -241,17 +241,19 @@ class coverage:
coverage data.
"""
- code_unit = code_unit_factory(morf, self.file_locator)[0]
- analysis = self._analyze(code_unit)
- return code_unit.filename, analysis.statements, analysis.excluded, analysis.missing, analysis.missing_formatted()
+ analysis = self._analyze(morf)
+ return analysis.filename, analysis.statements, analysis.excluded, analysis.missing, analysis.missing_formatted()
- def _analyze(self, code_unit):
- """Analyze a single code unit.
+ def _analyze(self, it):
+ """Analyze a single morf or code unit.
Returns an `Analysis` object.
"""
- return Analysis(self, code_unit)
+ if not isinstance(it, CodeUnit):
+ it = code_unit_factory(it, self.file_locator)[0]
+
+ return Analysis(self, it)
def report(self, morfs=None, show_missing=True, ignore_errors=False,
file=None, omit_prefixes=None): # pylint: disable-msg=W0622
@@ -343,10 +345,10 @@ class Analysis:
"No source for code '%s'." % code_unit.filename
)
- parser = CodeParser(
+ self.parser = CodeParser(
text=source, filename=filename, exclude=cov.exclude_re
)
- self.statements, self.excluded, line_map = parser.parse_source()
+ self.statements, self.excluded, line_map = self.parser.parse_source()
# Identify missing statements.
self.missing = []
@@ -363,5 +365,10 @@ class Analysis:
if line not in execed:
self.missing.append(line)
+ self.filename = self.code_unit.filename
+
def missing_formatted(self):
return format_lines(self.statements, self.missing)
+
+ def arc_info(self):
+ return self.parser.arc_info()