Enable users who want to track all files processed

This adds two new methods to the BaseFormatter class:

- beginning
- finished

These will indicate when Flake8 begins and finishes processing a file.

Closes #251
This commit is contained in:
Ian Cordasco 2016-11-18 19:15:18 -06:00
parent cf0115e105
commit 5248cf3c2d
No known key found for this signature in database
GPG key ID: 656D3395E4A9791A
5 changed files with 35 additions and 2 deletions

View file

@ -3,6 +3,9 @@
You can view the `3.3.0 milestone`_ on GitLab for more details. You can view the `3.3.0 milestone`_ on GitLab for more details.
- Add methods to Report class that will be called when Flake8 starts and
finishes processing a file. (`GitLab#251`_)
- Dramatically improve the performance of Flake8 (`GitLab!156`_) - Dramatically improve the performance of Flake8 (`GitLab!156`_)
- Fix problem where hooks should only check \*.py files. (See also - Fix problem where hooks should only check \*.py files. (See also
@ -14,6 +17,8 @@ You can view the `3.3.0 milestone`_ on GitLab for more details.
.. links .. links
.. _3.3.0 milestone: .. _3.3.0 milestone:
https://gitlab.com/pycqa/flake8/milestones/16 https://gitlab.com/pycqa/flake8/milestones/16
.. _GitLab#251:
https://gitlab.com/pycqa/flake8/issues/251
.. _GitLab#268: .. _GitLab#268:
https://gitlab.com/pycqa/flake8/issues/268 https://gitlab.com/pycqa/flake8/issues/268
.. _GitLab!156: .. _GitLab!156:

View file

@ -260,8 +260,9 @@ class Manager(object):
results_reported = results_found = 0 results_reported = results_found = 0
for checker in self.checkers: for checker in self.checkers:
results = sorted(checker.results, key=lambda tup: (tup[1], tup[2])) results = sorted(checker.results, key=lambda tup: (tup[1], tup[2]))
results_reported += self._handle_results(checker.display_name, filename = checker.display_name
results) with self.style_guide.processing_file(filename):
results_reported += self._handle_results(filename, results)
results_found += len(results) results_found += len(results)
return (results_found, results_reported) return (results_found, results_reported)

View file

@ -44,6 +44,24 @@ class BaseFormatter(object):
"""Initialize the formatter further.""" """Initialize the formatter further."""
pass pass
def beginning(self, filename):
"""Notify the formatter that we're starting to process a file.
:param str filename:
The name of the file that Flake8 is beginning to report results
from.
"""
pass
def finished(self, filename):
"""Notify the formatter that we've finished processing a file.
:param str filename:
The name of the file that Flake8 has finished reporting results
from.
"""
pass
def start(self): def start(self):
"""Prepare the formatter to receive input. """Prepare the formatter to receive input.

View file

@ -1,5 +1,6 @@
"""Implementation of the StyleGuide used by Flake8.""" """Implementation of the StyleGuide used by Flake8."""
import collections import collections
import contextlib
import enum import enum
import linecache import linecache
import logging import logging
@ -120,6 +121,13 @@ class StyleGuide(object):
return Selected.Implicitly return Selected.Implicitly
@contextlib.contextmanager
def processing_file(self, filename):
"""Record the fact that we're processing the file's results."""
self.formatter.beginning(filename)
yield self
self.formatter.finished(filename)
def _decision_for(self, code): def _decision_for(self, code):
# type: (Error) -> Decision # type: (Error) -> Decision
select = find_first_match(code, self._all_selected) select = find_first_match(code, self._all_selected)

View file

@ -134,6 +134,7 @@ def test_report_order(results, expected_order):
file_checker.display_name = 'placeholder' file_checker.display_name = 'placeholder'
style_guide = mock.Mock(spec=['options']) style_guide = mock.Mock(spec=['options'])
style_guide.processing_file = mock.MagicMock()
# Create a placeholder manager without arguments or plugins # Create a placeholder manager without arguments or plugins
# Just add one custom file checker which just provides the results # Just add one custom file checker which just provides the results