Skip to content

Commit

Permalink
Merge pull request #23 from skirpichev/fix-22
Browse files Browse the repository at this point in the history
Adapt code for flake8 >= 3.8.0
  • Loading branch information
kataev authored Nov 12, 2020
2 parents 684570d + bce2c05 commit b878e1d
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 6 deletions.
32 changes: 29 additions & 3 deletions flake8_rst/application.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import argparse
import time

from flake8.main import options
from flake8.main.application import Application as Flake8Application
from flake8.options import manager
Expand All @@ -8,11 +11,35 @@

class Application(Flake8Application):
def __init__(self, program='flake8-rst', version=__version__):
super(Application, self).__init__(program, version)
self.start_time = time.time()
self.end_time = None # type: float
self.program = program
self.version = version
self.prelim_arg_parser = argparse.ArgumentParser(add_help=False)
options.register_preliminary_options(self.prelim_arg_parser)

# super(Application, self).__init__(program, version) doesn't work
# because flake8 has hardcoded 'flake8' in this code snippet:
self.option_manager = manager.OptionManager(
prog=program, version=version
prog=program,
version=version,
parents=[self.prelim_arg_parser],
)
options.register_default_options(self.option_manager)

self.check_plugins = None # type: plugin_manager.Checkers
self.formatting_plugins = None # type: plugin_manager.ReportFormatters
self.formatter = None # type: BaseFormatter
self.guide = None # type: style_guide.StyleGuideManager
self.file_checker_manager = None # type: checker.Manager
self.options = None # type: argparse.Namespace
self.args = None # type: List[str]
self.result_count = 0
self.total_result_count = 0
self.catastrophic_failure = False
self.running_against_diff = False
self.parsed_diff = {} # type: Dict[str, Set[int]]

self.option_manager.add_option(
'--bootstrap', default=None, parse_from_config=True,
help='Bootstrap code snippets. Useful for add imports.',
Expand All @@ -21,7 +48,6 @@ def __init__(self, program='flake8-rst', version=__version__):
'--default-groupnames', default="*.rst->*: default", parse_from_config=True,
help='Set default group names.', type='string',
)
options.register_default_options(self.option_manager)

def make_file_checker_manager(self):
if self.file_checker_manager is None:
Expand Down
23 changes: 21 additions & 2 deletions flake8_rst/checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from flake8.checker import FileChecker, Manager, LOG
from flake8.processor import FileProcessor
from flake8.style_guide import DecisionEngine
from flake8 import exceptions

from .rst import find_sourcecode

Expand All @@ -27,6 +28,7 @@ def make_checkers(self, paths=None):
checkers.append(checker)

self.checkers = checkers
self._all_checkers = checkers

LOG.info('Checking %d blocks', len(self.checkers))

Expand Down Expand Up @@ -74,8 +76,25 @@ def report(self, error_code, line_number, column, text, line=None):
if line['lineno'] == 0:
return error_code

return super(RstFileChecker, self).report(error_code, line['lineno'], column + line['indent'],
text, line=line['raw_source'])
if error_code is None:
error_code, text = text.split(" ", 1)

# If we're recovering from a problem in _make_processor, we will not
# have this attribute.
if hasattr(self, "processor"):
try:
self.processor.file_tokens
source = self.processor.noqa_line_for(line_number)
except exceptions.InvalidSyntax:
source = line['source']
else:
source = None

if source:
source = line['raw_source'][:line['indent']] + source

self.results.append((error_code, line['lineno'], column + line['indent'], text, source))
return error_code
except IndexError:
return error_code

Expand Down
3 changes: 2 additions & 1 deletion tests/test_precisely.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
@pytest.fixture()
def options(mocker):
return mocker.Mock(max_line_length=80, verbose=0, hang_closing=False, max_doc_length=100,
ignore=[], bootstrap=None, default_groupnames='*.rst->*: default')
ignore=[], bootstrap=None, default_groupnames='*.rst->*: default',
disable_noqa=False)


@pytest.fixture()
Expand Down

0 comments on commit b878e1d

Please sign in to comment.