diff --git a/docs/source/release-notes/3.3.0.rst b/docs/source/release-notes/3.3.0.rst index 4c1747b..ed9f171 100644 --- a/docs/source/release-notes/3.3.0.rst +++ b/docs/source/release-notes/3.3.0.rst @@ -3,7 +3,11 @@ You can view the `3.3.0 milestone`_ on GitLab for more details. +- Fix problem where hooks should only check \*.py files. (See also + `GitLab#268`_) .. links .. _3.3.0 milestone: https://gitlab.com/pycqa/flake8/milestones/16 +.. _GitLab#268: + https://gitlab.com/pycqa/flake8/issues/268 diff --git a/src/flake8/checker.py b/src/flake8/checker.py index 7f148f4..18e4937 100644 --- a/src/flake8/checker.py +++ b/src/flake8/checker.py @@ -257,24 +257,17 @@ class Manager(object): paths = ['.'] filename_patterns = self.options.filename + running_from_vcs = self.options._running_from_vcs # NOTE(sigmavirus24): Yes this is a little unsightly, but it's our # best solution right now. - def should_create_file_checker(filename): + def should_create_file_checker(filename, argument): """Determine if we should create a file checker.""" matches_filename_patterns = utils.fnmatch( filename, filename_patterns ) is_stdin = filename == '-' file_exists = os.path.exists(filename) - return (file_exists and matches_filename_patterns) or is_stdin - - checks = self.checks.to_dictionary() - self.checkers = [ - FileChecker(filename, checks, self.options) - for argument in paths - for filename in utils.filenames_from(argument, - self.is_path_excluded) # NOTE(sigmavirus24): If a user explicitly specifies something, # e.g, ``flake8 bin/script`` then we should run Flake8 against # that. Since should_create_file_checker looks to see if the @@ -282,7 +275,19 @@ class Manager(object): # the event that the argument and the filename are identical. # If it was specified explicitly, the user intended for it to be # checked. - if argument == filename or should_create_file_checker(filename) + explicitly_provided = (not running_from_vcs and + (argument == filename)) + return ((file_exists and + (explicitly_provided or matches_filename_patterns)) or + is_stdin) + + checks = self.checks.to_dictionary() + self.checkers = [ + FileChecker(filename, checks, self.options) + for argument in paths + for filename in utils.filenames_from(argument, + self.is_path_excluded) + if should_create_file_checker(filename, argument) ] LOG.info('Checking %d files', len(self.checkers)) diff --git a/src/flake8/main/application.py b/src/flake8/main/application.py index 4765ee1..2eae382 100644 --- a/src/flake8/main/application.py +++ b/src/flake8/main/application.py @@ -174,6 +174,8 @@ class Application(object): if not self.parsed_diff: self.exit() + self.options._running_from_vcs = False + self.check_plugins.provide_options(self.option_manager, self.options, self.args) self.listening_plugins.provide_options(self.option_manager, @@ -300,16 +302,20 @@ class Application(object): self.make_guide() self.make_file_checker_manager() - def _run(self, argv): - # type: (Union[NoneType, List[str]]) -> NoneType - self.initialize(argv) - self.run_checks() + def report(self): + """Report errors, statistics, and benchmarks.""" self.formatter.start() self.report_errors() self.report_statistics() self.report_benchmarks() self.formatter.stop() + def _run(self, argv): + # type: (Union[NoneType, List[str]]) -> NoneType + self.initialize(argv) + self.run_checks() + self.report() + def run(self, argv=None): # type: (Union[NoneType, List[str]]) -> NoneType """Run our application. diff --git a/src/flake8/main/git.py b/src/flake8/main/git.py index 096fed6..5eae0d0 100644 --- a/src/flake8/main/git.py +++ b/src/flake8/main/git.py @@ -43,6 +43,7 @@ def hook(lazy=False, strict=False): filepaths = list(copy_indexed_files_to(tempdir, lazy)) app.initialize(['.']) app.options.exclude = update_excludes(app.options.exclude, tempdir) + app.options._running_from_vcs = True app.run_checks(filepaths) app.report_errors() diff --git a/src/flake8/main/mercurial.py b/src/flake8/main/mercurial.py index d067612..a46f676 100644 --- a/src/flake8/main/mercurial.py +++ b/src/flake8/main/mercurial.py @@ -35,7 +35,10 @@ def hook(ui, repo, **kwargs): filenames = list(get_filenames_from(repo, kwargs)) app = application.Application() - app.run(filenames) + app.initialize(filenames) + app.options._running_from_vcs = True + app.run_checks() + app.report() if strict: return app.result_count