diff options
Diffstat (limited to 'coverage/plugin.py')
-rw-r--r-- | coverage/plugin.py | 79 |
1 files changed, 30 insertions, 49 deletions
diff --git a/coverage/plugin.py b/coverage/plugin.py index 6648d7a6..5b0479c3 100644 --- a/coverage/plugin.py +++ b/coverage/plugin.py @@ -1,10 +1,15 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt + """Plugin interfaces for coverage.py""" import os import re +from coverage import files from coverage.misc import _needs_to_implement + # TODO: document that the plugin objects may be decorated with attributes with # named "_coverage_*". @@ -25,19 +30,6 @@ class CoveragePlugin(object): """ - def __init__(self, options): - """ - When the plugin is constructed, it will be passed a dictionary of - plugin-specific options read from the .coveragerc configuration file. - The base class stores these on the `self.options` attribute. - - Arguments: - options (dict): The plugin-specific options read from the - .coveragerc configuration file. - - """ - self.options = options - def file_tracer(self, filename): # pylint: disable=unused-argument """Return a FileTracer object for a file. @@ -50,14 +42,12 @@ class CoveragePlugin(object): trace the file or not. Be prepared for `filename` to refer to all kinds of files that have nothing to do with your plugin. - Arguments: - filename (str): The path to the file being considered. This is the - absolute real path to the file. If you are comparing to other - paths, be sure to take this into account. + `filename` is a string, the path to the file being considered. This is + the absolute real path to the file. If you are comparing to other + paths, be sure to take this into account. - Returns: - FileTracer: the :class:`FileTracer` object to use to trace - `filename`, or None if this plugin cannot trace this file. + Returns a :class:`FileTracer` object to use to trace `filename`, or + None if this plugin cannot trace this file. """ return None @@ -99,8 +89,7 @@ class FileTracer(object): to own the mapping from Python execution back to whatever source filename was originally the source of the code. - Returns: - The filename to credit with this execution. + Returns the filename to credit with this execution. """ _needs_to_implement(self, "source_filename") @@ -110,13 +99,12 @@ class FileTracer(object): FileTracers can provide dynamically determined filenames by implementing dynamic_source_filename. Invoking that function is - expensive. To determine whether to invoke it, coverage.py uses - the result of this function to know if it needs to bother invoking + expensive. To determine whether to invoke it, coverage.py uses the + result of this function to know if it needs to bother invoking :meth:`dynamic_source_filename`. - Returns: - boolean: True if :meth:`dynamic_source_filename` should be called - to get dynamic source filenames. + Returns true if :meth:`dynamic_source_filename` should be called to get + dynamic source filenames. """ return False @@ -130,9 +118,8 @@ class FileTracer(object): This function will not be invoked if :meth:`has_dynamic_source_filename` returns False. - Returns: - The source filename for this frame, or None if this frame shouldn't - be measured. + Returns the source filename for this frame, or None if this frame + shouldn't be measured. """ return None @@ -150,13 +137,6 @@ class FileTracer(object): from the source file were executed. Return (-1, -1) in this case to tell coverage.py that no lines should be recorded for this frame. - Arguments: - frame: the call frame to examine. - - Returns: - int, int: a pair of line numbers, the start and end lines - executed in the source, inclusive. - """ lineno = frame.f_lineno return lineno, lineno @@ -169,27 +149,26 @@ class FileReporter(object): self.filename = filename def __repr__(self): - return ( - # pylint: disable=redundant-keyword-arg - "<{self.__class__.__name__}" - " filename={self.filename!r}>".format(self=self) - ) + return "<{0.__class__.__name__} filename={0.filename!r}>".format(self) + + def relative_filename(self): + return files.relative_filename(self.filename) # Annoying comparison operators. Py3k wants __lt__ etc, and Py2k needs all # of them defined. + def __eq__(self, other): + return isinstance(other, FileReporter) and self.filename == other.filename + + def __ne__(self, other): + return not (self == other) + def __lt__(self, other): return self.filename < other.filename def __le__(self, other): return self.filename <= other.filename - def __eq__(self, other): - return self.filename == other.filename - - def __ne__(self, other): - return self.filename != other.filename - def __gt__(self, other): return self.filename > other.filename @@ -247,6 +226,8 @@ class FileReporter(object): For example, the file a/b/c.py will return 'a_b_c_py' + You should not need to override this method. + """ - name = os.path.splitdrive(self.name)[1] + name = os.path.splitdrive(self.relative_filename())[1] return re.sub(r"[\\/.:]", "_", name) |