Source code for flakeheaven._patched._style_guide

# built-in
from functools import lru_cache

# external
from flake8.style_guide import StyleGuide, StyleGuideManager

# app
from ._violation import FlakeHeavenViolation


[docs]class FlakeHeavenStyleGuideManager(StyleGuideManager):
[docs] def __init__(self, options, formatter, decider=None): """Initialize our StyleGuide. .. todo:: Add parameter documentation. """ super().__init__(options, formatter, decider) self.default_style_guide = FlakeHeavenStyleGuide( options, formatter, self.stats, decider=decider, ) self.style_guides = [self.default_style_guide] self.style_guides.extend(self.populate_style_guides_with(options))
[docs] @lru_cache(maxsize=None) def style_guide_for(self, filename: str): """Patched styleguide finder to give priority to flakeheaven's stileguides """ guides = sorted( (g for g in self.style_guides if g.applies_to(filename)), key=lambda g: len(g.filename or ''), reverse=True, ) for guide in guides: if isinstance(guide, FlakeHeavenStyleGuide): return guide return guides[0]
[docs] def handle_error( self, code: str, filename: str, line_number: int, column_number: int, text: str, plugin: str, physical_line: str = None, ): guide = self.style_guide_for(filename) params = dict( code=code, filename=filename, line_number=line_number, column_number=column_number, text=text, physical_line=physical_line, ) if isinstance(guide, FlakeHeavenStyleGuide): params['plugin'] = plugin return guide.handle_error(**params)
[docs]class FlakeHeavenStyleGuide(StyleGuide):
[docs] def handle_error( self, code: str, filename: str, line_number: int, column_number: int, text: str, plugin: str, physical_line: str = None, ): """ This function copied as is, but: 1. Violation is replaced by FlakeHeavenViolation 2. `error_is_selected` dropped. If we get here, the error IS selected. """ disable_noqa = self.options.disable_noqa if not column_number: column_number = 0 error = FlakeHeavenViolation( code=code, filename=filename, line_number=line_number, column_number=column_number + 1, text=text, physical_line=physical_line, plugin=plugin, ) is_not_inline_ignored = error.is_inline_ignored(disable_noqa) is False is_included_in_diff = error.is_in(self._parsed_diff) if is_not_inline_ignored and is_included_in_diff: self.formatter.handle(error) self.stats.record(error) return 1 return 0