| Index: third_party/pylint/reporters/__init__.py | 
| diff --git a/third_party/pylint/reporters/__init__.py b/third_party/pylint/reporters/__init__.py | 
| index 12d193f5d6982c5af945d63abba168947f54a119..ea3281ff7e8e9f300021b77f01f5e40ae593c223 100644 | 
| --- a/third_party/pylint/reporters/__init__.py | 
| +++ b/third_party/pylint/reporters/__init__.py | 
| @@ -12,12 +12,12 @@ | 
| # this program; if not, write to the Free Software Foundation, Inc., | 
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 
| """utilities methods and classes for reporters""" | 
| +from __future__ import print_function | 
|  | 
| import sys | 
| import locale | 
| import os | 
|  | 
| -from pylint.utils import MSG_TYPES | 
|  | 
| from pylint import utils | 
|  | 
| @@ -25,13 +25,9 @@ CMPS = ['=', '-', '+'] | 
|  | 
| # py3k has no more cmp builtin | 
| if sys.version_info >= (3, 0): | 
| -    def cmp(a, b): | 
| +    def cmp(a, b): # pylint: disable=redefined-builtin | 
| return (a > b) - (a < b) | 
|  | 
| -if sys.version_info < (2, 6): | 
| -    import stringformat | 
| -    stringformat.init(True) | 
| - | 
| def diff_string(old, new): | 
| """given a old and new int value, return a string representing the | 
| difference | 
| @@ -41,27 +37,6 @@ def diff_string(old, new): | 
| return diff_str | 
|  | 
|  | 
| -class Message(object): | 
| -    """This class represent a message to be issued by the reporters""" | 
| - | 
| -    def __init__(self, reporter, msg_id, location, msg): | 
| -        self.msg_id = msg_id | 
| -        self.abspath, self.module, self.obj, self.line, self.column = location | 
| -        self.path = self.abspath.replace(reporter.path_strip_prefix, '') | 
| -        self.msg = msg | 
| -        self.C = msg_id[0] | 
| -        self.category = MSG_TYPES[msg_id[0]] | 
| -        self.symbol = reporter.linter.msgs_store.check_message_id(msg_id).symbol | 
| - | 
| -    def format(self, template): | 
| -        """Format the message according to the given template. | 
| - | 
| -        The template format is the one of the format method : | 
| -        cf. http://docs.python.org/2/library/string.html#formatstrings | 
| -        """ | 
| -        return template.format(**(self.__dict__)) | 
| - | 
| - | 
| class BaseReporter(object): | 
| """base class for reporters | 
|  | 
| @@ -82,9 +57,16 @@ class BaseReporter(object): | 
| # Build the path prefix to strip to get relative paths | 
| self.path_strip_prefix = os.getcwd() + os.sep | 
|  | 
| +    def handle_message(self, msg): | 
| +        """Handle a new message triggered on the current file. | 
| + | 
| +        Invokes the legacy add_message API by default.""" | 
| +        self.add_message( | 
| +            msg.msg_id, (msg.abspath, msg.module, msg.obj, msg.line, msg.column), | 
| +            msg.msg) | 
| + | 
| def add_message(self, msg_id, location, msg): | 
| -        """Client API to send a message""" | 
| -        # Shall we store the message objects somewhere, do some validity checking ? | 
| +        """Deprecated, do not use.""" | 
| raise NotImplementedError | 
|  | 
| def set_output(self, output=None): | 
| @@ -109,7 +91,7 @@ class BaseReporter(object): | 
|  | 
| def writeln(self, string=''): | 
| """write a line in the output buffer""" | 
| -        print >> self.out, self.encode(string) | 
| +        print(self.encode(string), file=self.out) | 
|  | 
| def display_results(self, layout): | 
| """display results encapsulated in the layout tree""" | 
| @@ -133,6 +115,19 @@ class BaseReporter(object): | 
| pass | 
|  | 
|  | 
| +class CollectingReporter(BaseReporter): | 
| +    """collects messages""" | 
| + | 
| +    name = 'collector' | 
| + | 
| +    def __init__(self): | 
| +        BaseReporter.__init__(self) | 
| +        self.messages = [] | 
| + | 
| +    def handle_message(self, msg): | 
| +        self.messages.append(msg) | 
| + | 
| + | 
| def initialize(linter): | 
| """initialize linter with reporters in this package """ | 
| utils.register_plugins(linter, __path__[0]) | 
|  |