| Index: third_party/pylint/reporters/text.py
 | 
| ===================================================================
 | 
| --- third_party/pylint/reporters/text.py	(revision 293047)
 | 
| +++ third_party/pylint/reporters/text.py	(working copy)
 | 
| @@ -1,5 +1,4 @@
 | 
| -# Copyright (c) 2003-2007 Sylvain Thenault (thenault@gmail.com).
 | 
| -# Copyright (c) 2003-2011 LOGILAB S.A. (Paris, FRANCE).
 | 
| +# Copyright (c) 2003-2013 LOGILAB S.A. (Paris, FRANCE).
 | 
|  # This program is free software; you can redistribute it and/or modify it under
 | 
|  # the terms of the GNU General Public License as published by the Free Software
 | 
|  # Foundation; either version 2 of the License, or (at your option) any later
 | 
| @@ -11,56 +10,54 @@
 | 
|  #
 | 
|  # You should have received a copy of the GNU General Public License along with
 | 
|  # this program; if not, write to the Free Software Foundation, Inc.,
 | 
| -# 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 | 
| +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 | 
|  """Plain text reporters:
 | 
|  
 | 
|  :text: the default one grouping messages by module
 | 
| -:parseable:
 | 
| -  standard parseable output with full module path on each message (for
 | 
| -  editor integration)
 | 
|  :colorized: an ANSI colorized text reporter
 | 
| -
 | 
|  """
 | 
|  
 | 
| -import os
 | 
| -import sys
 | 
| +import warnings
 | 
|  
 | 
|  from logilab.common.ureports import TextWriter
 | 
|  from logilab.common.textutils import colorize_ansi
 | 
|  
 | 
|  from pylint.interfaces import IReporter
 | 
| -from pylint.reporters import BaseReporter
 | 
| +from pylint.reporters import BaseReporter, Message
 | 
|  
 | 
|  TITLE_UNDERLINES = ['', '=', '-', '.']
 | 
|  
 | 
|  
 | 
|  class TextReporter(BaseReporter):
 | 
| -    """reports messages and layouts in plain text
 | 
| -    """
 | 
| +    """reports messages and layouts in plain text"""
 | 
|  
 | 
|      __implements__ = IReporter
 | 
| +    name = 'text'
 | 
|      extension = 'txt'
 | 
| +    line_format = '{C}:{line:3d},{column:2d}: {msg} ({symbol})'
 | 
|  
 | 
| -    def __init__(self, output=sys.stdout):
 | 
| +    def __init__(self, output=None):
 | 
|          BaseReporter.__init__(self, output)
 | 
| -        self._modules = {}
 | 
| +        self._modules = set()
 | 
| +        self._template = None
 | 
|  
 | 
| +    def on_set_current_module(self, module, filepath):
 | 
| +        self._template = unicode(self.linter.config.msg_template or self.line_format)
 | 
| +
 | 
| +    def write_message(self, msg):
 | 
| +        """Convenience method to write a formated message with class default template"""
 | 
| +        self.writeln(msg.format(self._template))
 | 
| +
 | 
|      def add_message(self, msg_id, location, msg):
 | 
|          """manage message of different type and in the context of path"""
 | 
| -        path, module, obj, line, col_offset = location
 | 
| -        if module not in self._modules:
 | 
| -            if module:
 | 
| -                self.writeln('************* Module %s' % (path if path else module))
 | 
| -                self._modules[module] = 1
 | 
| +        m = Message(self, msg_id, location, msg)
 | 
| +        if m.module not in self._modules:
 | 
| +            if m.module:
 | 
| +                self.writeln('************* Module %s' % m.module)
 | 
| +                self._modules.add(m.module)
 | 
|              else:
 | 
| -                self.writeln('************* %s' % module)
 | 
| -        if obj:
 | 
| -            obj = ':%s' % obj
 | 
| -        if self.include_ids:
 | 
| -            sigle = msg_id
 | 
| -        else:
 | 
| -            sigle = msg_id[0]
 | 
| -        self.writeln('%s:%3s,%s%s: %s' % (sigle, line, col_offset, obj, msg))
 | 
| +                self.writeln('************* ')
 | 
| +        self.write_message(m)
 | 
|  
 | 
|      def _display(self, layout):
 | 
|          """launch layouts display"""
 | 
| @@ -74,35 +71,25 @@
 | 
|  
 | 
|      <filename>:<linenum>:<msg>
 | 
|      """
 | 
| -    line_format = '%(path)s:%(line)s: [%(sigle)s%(obj)s] %(msg)s'
 | 
| +    name = 'parseable'
 | 
| +    line_format = '{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}'
 | 
|  
 | 
| -    def __init__(self, output=sys.stdout, relative=True):
 | 
| +    def __init__(self, output=None):
 | 
| +        warnings.warn('%s output format is deprecated. This is equivalent '
 | 
| +                      'to --msg-template=%s' % (self.name, self.line_format))
 | 
|          TextReporter.__init__(self, output)
 | 
| -        if relative:
 | 
| -            self._prefix = os.getcwd() + os.sep
 | 
| -        else:
 | 
| -            self._prefix = ''
 | 
|  
 | 
| -    def add_message(self, msg_id, location, msg):
 | 
| -        """manage message of different type and in the context of path"""
 | 
| -        path, _, obj, line, _ = location
 | 
| -        if obj:
 | 
| -            obj = ', %s' % obj
 | 
| -        if self.include_ids:
 | 
| -            sigle = msg_id
 | 
| -        else:
 | 
| -            sigle = msg_id[0]
 | 
| -        if self._prefix:
 | 
| -            path = path.replace(self._prefix, '')
 | 
| -        self.writeln(self.line_format % locals())
 | 
|  
 | 
|  class VSTextReporter(ParseableTextReporter):
 | 
|      """Visual studio text reporter"""
 | 
| -    line_format = '%(path)s(%(line)s): [%(sigle)s%(obj)s] %(msg)s'
 | 
| +    name = 'msvs'
 | 
| +    line_format = '{path}({line}): [{msg_id}({symbol}){obj}] {msg}'
 | 
|  
 | 
| +
 | 
|  class ColorizedTextReporter(TextReporter):
 | 
|      """Simple TextReporter that colorizes text output"""
 | 
|  
 | 
| +    name = 'colorized'
 | 
|      COLOR_MAPPING = {
 | 
|          "I" : ("green", None),
 | 
|          'C' : (None, "bold"),
 | 
| @@ -113,12 +100,11 @@
 | 
|          'S' : ("yellow", "inverse"), # S stands for module Separator
 | 
|      }
 | 
|  
 | 
| -    def __init__(self, output=sys.stdout, color_mapping = None):
 | 
| +    def __init__(self, output=None, color_mapping=None):
 | 
|          TextReporter.__init__(self, output)
 | 
|          self.color_mapping = color_mapping or \
 | 
|                               dict(ColorizedTextReporter.COLOR_MAPPING)
 | 
|  
 | 
| -
 | 
|      def _get_decoration(self, msg_id):
 | 
|          """Returns the tuple color, style associated with msg_id as defined
 | 
|          in self.color_mapping
 | 
| @@ -132,24 +118,26 @@
 | 
|          """manage message of different types, and colorize output
 | 
|          using ansi escape codes
 | 
|          """
 | 
| -        module, obj, line, _ = location[1:]
 | 
| -        if module not in self._modules:
 | 
| +        msg = Message(self, msg_id, location, msg)
 | 
| +        if msg.module not in self._modules:
 | 
|              color, style = self._get_decoration('S')
 | 
| -            if module:
 | 
| -                modsep = colorize_ansi('************* Module %s' % module,
 | 
| +            if msg.module:
 | 
| +                modsep = colorize_ansi('************* Module %s' % msg.module,
 | 
|                                         color, style)
 | 
|              else:
 | 
| -                modsep = colorize_ansi('************* %s' % module,
 | 
| +                modsep = colorize_ansi('************* %s' % msg.module,
 | 
|                                         color, style)
 | 
|              self.writeln(modsep)
 | 
| -            self._modules[module] = 1
 | 
| -        if obj:
 | 
| -            obj = ':%s' % obj
 | 
| -        if self.include_ids:
 | 
| -            sigle = msg_id
 | 
| -        else:
 | 
| -            sigle = msg_id[0]
 | 
| -        color, style = self._get_decoration(sigle)
 | 
| -        msg = colorize_ansi(msg, color, style)
 | 
| -        sigle = colorize_ansi(sigle, color, style)
 | 
| -        self.writeln('%s:%3s%s: %s' % (sigle, line, obj, msg))
 | 
| +            self._modules.add(msg.module)
 | 
| +        color, style = self._get_decoration(msg.C)
 | 
| +        for attr in ('msg', 'symbol', 'category', 'C'):
 | 
| +            setattr(msg, attr, colorize_ansi(getattr(msg, attr), color, style))
 | 
| +        self.write_message(msg)
 | 
| +
 | 
| +
 | 
| +def register(linter):
 | 
| +    """Register the reporter classes with the linter."""
 | 
| +    linter.register_reporter(TextReporter)
 | 
| +    linter.register_reporter(ParseableTextReporter)
 | 
| +    linter.register_reporter(VSTextReporter)
 | 
| +    linter.register_reporter(ColorizedTextReporter)
 | 
| 
 |