Source code for flakeheaven.plugins._pylint

# built-in
from ast import AST
from tokenize import TokenInfo
from typing import Sequence, TypeVar


try:
    # external
    from pylint.__pkginfo__ import __version__ as version
    from pylint.lint import Run
    from pylint.reporters import BaseReporter
except ImportError:
    version = '0.0.0'
    Run = None
    BaseReporter = type


STDIN = 'stdin'


[docs]class Reporter(BaseReporter):
[docs] def _display(self, layout) -> None: pass
P = TypeVar('P', bound='PyLintChecker')
[docs]class PyLintChecker: name = 'pylint' version = version max_line_length: int
[docs] @classmethod def parse_options(cls, options) -> None: cls.max_line_length = options.max_line_length
def __init__( self, tree: AST, file_tokens: Sequence[TokenInfo], filename: str = STDIN, ) -> None: self.tree = tree self.filename = filename self.file_tokens = file_tokens
[docs] def run(self): # pylint is not installed, skip if Run is None: return args = [self.filename, f'--max-line-length={self.max_line_length}'] reporter = Reporter() Run(args, reporter=reporter, exit=False) for error in reporter.messages: yield ( error.line, error.column, f'{error.msg_id} {error.msg or ""} ({error.symbol})', type(self), )