summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2021-04-11 08:58:56 -0400
committerNed Batchelder <ned@nedbatchelder.com>2021-04-11 09:13:36 -0400
commit16f54a935a1c41618e098bebdbcb77b638f40c6c (patch)
treed76db410df6de56e14f4db95354b1ff52cdcc7c3
parent0285af966a3942d8bd63489bd285328e96221126 (diff)
downloadpython-coveragepy-git-16f54a935a1c41618e098bebdbcb77b638f40c6c.tar.gz
debug: label each matcher with its role
-rw-r--r--coverage/files.py15
-rw-r--r--coverage/inorout.py14
-rw-r--r--coverage/report.py4
-rw-r--r--tests/test_files.py12
4 files changed, 24 insertions, 21 deletions
diff --git a/coverage/files.py b/coverage/files.py
index 1cf4b18e..d6826830 100644
--- a/coverage/files.py
+++ b/coverage/files.py
@@ -215,12 +215,13 @@ class TreeMatcher(object):
somewhere in a subtree rooted at one of the directories.
"""
- def __init__(self, paths):
+ def __init__(self, paths, name):
self.original_paths = list(paths)
self.paths = list(map(os.path.normcase, paths))
+ self.name = name
def __repr__(self):
- return "<TreeMatcher %r>" % self.paths
+ return "<TreeMatcher {!r} {!r}>".format(self.name, self.original_paths)
def info(self):
"""A list of strings for displaying when dumping state."""
@@ -242,11 +243,12 @@ class TreeMatcher(object):
class ModuleMatcher(object):
"""A matcher for modules in a tree."""
- def __init__(self, module_names):
+ def __init__(self, module_names, name):
self.modules = list(module_names)
+ self.name = name
def __repr__(self):
- return "<ModuleMatcher %r>" % (self.modules)
+ return "<ModuleMatcher {!r} {!r}>".format(self.name, self.modules)
def info(self):
"""A list of strings for displaying when dumping state."""
@@ -270,12 +272,13 @@ class ModuleMatcher(object):
class FnmatchMatcher(object):
"""A matcher for files by file name pattern."""
- def __init__(self, pats):
+ def __init__(self, pats, name):
self.pats = list(pats)
self.re = fnmatches_to_regex(self.pats, case_insensitive=env.WINDOWS)
+ self.name = name
def __repr__(self):
- return "<FnmatchMatcher %r>" % self.pats
+ return "<FnmatchMatcher {!r} {!r}>".format(self.name, self.pats)
def info(self):
"""A list of strings for displaying when dumping state."""
diff --git a/coverage/inorout.py b/coverage/inorout.py
index a773af76..9861dac6 100644
--- a/coverage/inorout.py
+++ b/coverage/inorout.py
@@ -258,27 +258,27 @@ class InOrOut(object):
if self.source or self.source_pkgs:
against = []
if self.source:
- self.source_match = TreeMatcher(self.source)
+ self.source_match = TreeMatcher(self.source, "source")
against.append("trees {!r}".format(self.source_match))
if self.source_pkgs:
- self.source_pkgs_match = ModuleMatcher(self.source_pkgs)
+ self.source_pkgs_match = ModuleMatcher(self.source_pkgs, "source_pkgs")
against.append("modules {!r}".format(self.source_pkgs_match))
debug("Source matching against " + " and ".join(against))
else:
if self.cover_paths:
- self.cover_match = TreeMatcher(self.cover_paths)
+ self.cover_match = TreeMatcher(self.cover_paths, "coverage")
debug("Coverage code matching: {!r}".format(self.cover_match))
if self.pylib_paths:
- self.pylib_match = TreeMatcher(self.pylib_paths)
+ self.pylib_match = TreeMatcher(self.pylib_paths, "pylib")
debug("Python stdlib matching: {!r}".format(self.pylib_match))
if self.include:
- self.include_match = FnmatchMatcher(self.include)
+ self.include_match = FnmatchMatcher(self.include, "include")
debug("Include matching: {!r}".format(self.include_match))
if self.omit:
- self.omit_match = FnmatchMatcher(self.omit)
+ self.omit_match = FnmatchMatcher(self.omit, "omit")
debug("Omit matching: {!r}".format(self.omit_match))
if self.third_paths:
- self.third_match = TreeMatcher(self.third_paths)
+ self.third_match = TreeMatcher(self.third_paths, "third")
debug("Third-party lib matching: {!r}".format(self.third_match))
# Check if the source we want to measure has been installed as a
diff --git a/coverage/report.py b/coverage/report.py
index 4ed0c7ef..9dfc8f5e 100644
--- a/coverage/report.py
+++ b/coverage/report.py
@@ -57,11 +57,11 @@ def get_analysis_to_report(coverage, morfs):
config = coverage.config
if config.report_include:
- matcher = FnmatchMatcher(prep_patterns(config.report_include))
+ matcher = FnmatchMatcher(prep_patterns(config.report_include), "report_include")
file_reporters = [fr for fr in file_reporters if matcher.match(fr.filename)]
if config.report_omit:
- matcher = FnmatchMatcher(prep_patterns(config.report_omit))
+ matcher = FnmatchMatcher(prep_patterns(config.report_omit), "report_omit")
file_reporters = [fr for fr in file_reporters if not matcher.match(fr.filename)]
if not file_reporters:
diff --git a/tests/test_files.py b/tests/test_files.py
index 2f1bb83b..ed6fef26 100644
--- a/tests/test_files.py
+++ b/tests/test_files.py
@@ -167,7 +167,7 @@ class MatcherTest(CoverageTest):
files.canonical_filename("sub4/file5.py"),
files.canonical_filename("SUB5/file6.py"),
]
- tm = TreeMatcher(trees)
+ tm = TreeMatcher(trees, "test")
assert tm.info() == trees
for filepath, matches in matches_to_try:
self.assertMatches(tm, filepath, matches)
@@ -190,7 +190,7 @@ class MatcherTest(CoverageTest):
('yourmain', False),
]
modules = ['test', 'py.test', 'mymain']
- mm = ModuleMatcher(modules)
+ mm = ModuleMatcher(modules, "test")
assert mm.info() == modules
for modulename, matches in matches_to_try:
assert mm.match(modulename) == matches, modulename
@@ -203,13 +203,13 @@ class MatcherTest(CoverageTest):
(self.make_file("sub3/file4.py"), True),
(self.make_file("sub3/file5.c"), False),
]
- fnm = FnmatchMatcher(["*.py", "*/sub2/*"])
+ fnm = FnmatchMatcher(["*.py", "*/sub2/*"], "test")
assert fnm.info() == ["*.py", "*/sub2/*"]
for filepath, matches in matches_to_try:
self.assertMatches(fnm, filepath, matches)
def test_fnmatch_matcher_overload(self):
- fnm = FnmatchMatcher(["*x%03d*.txt" % i for i in range(500)])
+ fnm = FnmatchMatcher(["*x%03d*.txt" % i for i in range(500)], "test")
self.assertMatches(fnm, "x007foo.txt", True)
self.assertMatches(fnm, "x123foo.txt", True)
self.assertMatches(fnm, "x798bar.txt", False)
@@ -217,9 +217,9 @@ class MatcherTest(CoverageTest):
def test_fnmatch_windows_paths(self):
# We should be able to match Windows paths even if we are running on
# a non-Windows OS.
- fnm = FnmatchMatcher(["*/foo.py"])
+ fnm = FnmatchMatcher(["*/foo.py"], "test")
self.assertMatches(fnm, r"dir\foo.py", True)
- fnm = FnmatchMatcher([r"*\foo.py"])
+ fnm = FnmatchMatcher([r"*\foo.py"], "test")
self.assertMatches(fnm, r"dir\foo.py", True)