Source code for flakeheaven.formatters._stat
# built-in
from collections import defaultdict
from typing import DefaultDict, Dict
# external
from flake8.style_guide import Violation
# app
from .._logic import color_code, color_description, colored
from ._colored import ColoredFormatter
[docs]class StatFormatter(ColoredFormatter):
"""
Show count of every code occurance
"""
_codes: DefaultDict[str, DefaultDict[str, int]]
_msgs: DefaultDict[str, Dict[str, str]]
[docs] def after_init(self) -> None:
super().after_init()
self._codes = defaultdict(lambda: defaultdict(int))
self._msgs = defaultdict(dict)
[docs] def format(self, error: Violation) -> None:
plugin = getattr(error, 'plugin', '')
self._codes[plugin][error.code] += 1
self._msgs[plugin][error.code] = error.text
[docs] def stop(self) -> None:
for plugin, codes in sorted(self._codes.items()):
self._write(colored(plugin, 'green'))
for code, count in sorted(codes.items(), key=lambda x: x[-1], reverse=True):
self._write(' {code:} | {count:>5} | {msg}'.format(
code=color_code(code.ljust(6)),
count=count,
msg=color_description(self._msgs[plugin][code]),
))