관리-도구
편집 파일: default.py
"""Default formatting class for Flake8.""" from typing import Optional from typing import Set from flake8.formatting import base from flake8.violation import Violation COLORS = { "bold": "\033[1m", "black": "\033[30m", "red": "\033[31m", "green": "\033[32m", "yellow": "\033[33m", "blue": "\033[34m", "magenta": "\033[35m", "cyan": "\033[36m", "white": "\033[37m", "reset": "\033[m", } COLORS_OFF = {k: "" for k in COLORS} class SimpleFormatter(base.BaseFormatter): """Simple abstraction for Default and Pylint formatter commonality. Sub-classes of this need to define an ``error_format`` attribute in order to succeed. The ``format`` method relies on that attribute and expects the ``error_format`` string to use the old-style formatting strings with named parameters: * code * text * path * row * col """ error_format: str def format(self, error: "Violation") -> Optional[str]: """Format and write error out. If an output filename is specified, write formatted errors to that file. Otherwise, print the formatted error to standard out. """ return self.error_format % { "code": error.code, "text": error.text, "path": error.filename, "row": error.line_number, "col": error.column_number, **(COLORS if self.color else COLORS_OFF), } class Default(SimpleFormatter): """Default formatter for Flake8. This also handles backwards compatibility for people specifying a custom format string. """ error_format = ( "%(bold)s%(path)s%(reset)s" "%(cyan)s:%(reset)s%(row)d%(cyan)s:%(reset)s%(col)d%(cyan)s:%(reset)s " "%(bold)s%(red)s%(code)s%(reset)s %(text)s" ) def after_init(self) -> None: """Check for a custom format string.""" if self.options.format.lower() != "default": self.error_format = self.options.format class Pylint(SimpleFormatter): """Pylint formatter for Flake8.""" error_format = "%(path)s:%(row)d: [%(code)s] %(text)s" class FilenameOnly(SimpleFormatter): """Only print filenames, e.g., flake8 -q.""" error_format = "%(path)s" def after_init(self) -> None: """Initialize our set of filenames.""" self.filenames_already_printed: Set[str] = set() def show_source(self, error: "Violation") -> Optional[str]: """Do not include the source code.""" def format(self, error: "Violation") -> Optional[str]: """Ensure we only print each error once.""" if error.filename not in self.filenames_already_printed: self.filenames_already_printed.add(error.filename) return super().format(error) else: return None class Nothing(base.BaseFormatter): """Print absolutely nothing.""" def format(self, error: "Violation") -> Optional[str]: """Do nothing.""" def show_source(self, error: "Violation") -> Optional[str]: """Do not print the source."""