DebugClients/Python/coverage/report.py

changeset 4491
0d8612e24fef
parent 4489
d0d6e4ad31bd
child 5051
3586ebd9fac8
diff -r 4ba7a8ab24f2 -r 0d8612e24fef DebugClients/Python/coverage/report.py
--- a/DebugClients/Python/coverage/report.py	Sat Oct 10 12:06:10 2015 +0200
+++ b/DebugClients/Python/coverage/report.py	Sat Oct 10 12:44:52 2015 +0200
@@ -1,9 +1,13 @@
-"""Reporter foundation for Coverage."""
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
+
+"""Reporter foundation for coverage.py."""
 
-import fnmatch, os
-from .codeunit import code_unit_factory
-from .files import prep_patterns
-from .misc import CoverageException, NoSource, NotPython
+import os
+
+from coverage.files import prep_patterns, FnmatchMatcher
+from coverage.misc import CoverageException, NoSource, NotPython
+
 
 class Reporter(object):
     """A base class for all reporters."""
@@ -18,45 +22,40 @@
         self.coverage = coverage
         self.config = config
 
-        # The code units to report on.  Set by find_code_units.
-        self.code_units = []
+        # The FileReporters to report on.  Set by find_file_reporters.
+        self.file_reporters = []
 
         # The directory into which to place the report, used by some derived
         # classes.
         self.directory = None
 
-    def find_code_units(self, morfs):
-        """Find the code units we'll report on.
+    def find_file_reporters(self, morfs):
+        """Find the FileReporters we'll report on.
 
-        `morfs` is a list of modules or filenames.
+        `morfs` is a list of modules or file names.
 
         """
-        morfs = morfs or self.coverage.data.measured_files()
-        file_locator = self.coverage.file_locator
-        self.code_units = code_unit_factory(morfs, file_locator)
+        self.file_reporters = self.coverage._get_file_reporters(morfs)
 
         if self.config.include:
             patterns = prep_patterns(self.config.include)
+            matcher = FnmatchMatcher(patterns)
             filtered = []
-            for cu in self.code_units:
-                for pattern in patterns:
-                    if fnmatch.fnmatch(cu.filename, pattern):
-                        filtered.append(cu)
-                        break
-            self.code_units = filtered
+            for fr in self.file_reporters:
+                if matcher.match(fr.filename):
+                    filtered.append(fr)
+            self.file_reporters = filtered
 
         if self.config.omit:
             patterns = prep_patterns(self.config.omit)
+            matcher = FnmatchMatcher(patterns)
             filtered = []
-            for cu in self.code_units:
-                for pattern in patterns:
-                    if fnmatch.fnmatch(cu.filename, pattern):
-                        break
-                else:
-                    filtered.append(cu)
-            self.code_units = filtered
+            for fr in self.file_reporters:
+                if not matcher.match(fr.filename):
+                    filtered.append(fr)
+            self.file_reporters = filtered
 
-        self.code_units.sort()
+        self.file_reporters.sort()
 
     def report_files(self, report_fn, morfs, directory=None):
         """Run a reporting function on a number of morfs.
@@ -64,31 +63,33 @@
         `report_fn` is called for each relative morf in `morfs`.  It is called
         as::
 
-            report_fn(code_unit, analysis)
+            report_fn(file_reporter, analysis)
 
-        where `code_unit` is the `CodeUnit` for the morf, and `analysis` is
-        the `Analysis` for the morf.
+        where `file_reporter` is the `FileReporter` for the morf, and
+        `analysis` is the `Analysis` for the morf.
 
         """
-        self.find_code_units(morfs)
+        self.find_file_reporters(morfs)
 
-        if not self.code_units:
+        if not self.file_reporters:
             raise CoverageException("No data to report.")
 
         self.directory = directory
         if self.directory and not os.path.exists(self.directory):
             os.makedirs(self.directory)
 
-        for cu in self.code_units:
+        for fr in self.file_reporters:
             try:
-                report_fn(cu, self.coverage._analyze(cu))
+                report_fn(fr, self.coverage._analyze(fr))
             except NoSource:
                 if not self.config.ignore_errors:
                     raise
             except NotPython:
                 # Only report errors for .py files, and only if we didn't
                 # explicitly suppress those errors.
-                if cu.should_be_python() and not self.config.ignore_errors:
+                # NotPython is only raised by PythonFileReporter, which has a
+                # should_be_python() method.
+                if fr.should_be_python() and not self.config.ignore_errors:
                     raise
 
 #

eric ide

mercurial