Source

pylint / reporters / json.py

from __future__ import absolute_import

import sys
import json

from collections import defaultdict

from pylint.reporters import BaseReporter
from pylint.interfaces import IReporter


class JsonReporter(BaseReporter):
    """Renders the report output as a json stream
    """

    __implements__ = IReporter
    extension = 'json'

    def __init__(self, output=sys.stdout):
        BaseReporter.__init__(self, output)
        self._data = defaultdict(list)

    def add_message(self, msg_id, location, msg):
        path, module, obj, line, col_offset = location
        if self.include_ids:
            message = {'id': msg_id, 'body': msg}
        else:
            message = {'body': msg}

        self._data[path].append(dict(
            line=line,
            col=col_offset,
            module=module,
            object=obj,
            message=message
        ))

    def display_results(self, layout):
        self.writeln(json.dumps(
            self._data,
            indent=4
        ))