"""Defines the different custom formats in which mypy can output.""" import json from abc import ABC, abstractmethod from typing import TYPE_CHECKING if TYPE_CHECKING: from mypy.errors import MypyError class ErrorFormatter(ABC): """Base class to define how errors are formatted before being printed.""" @abstractmethod def report_error(self, error: "MypyError") -> str: raise NotImplementedError class JSONFormatter(ErrorFormatter): """Formatter for basic JSON output format.""" def report_error(self, error: "MypyError") -> str: """Prints out the errors as simple, static JSON lines.""" return json.dumps( { "file": error.file_path, "line": error.line, "column": error.column, "message": error.message, "hint": None if len(error.hints) == 0 else "\n".join(error.hints), "code": None if error.errorcode is None else error.errorcode.code, "severity": error.severity, } ) OUTPUT_CHOICES = {"json": JSONFormatter()}