diff options
-rw-r--r-- | src/flake8/api/legacy.py | 6 | ||||
-rw-r--r-- | src/flake8/main/application.py | 12 | ||||
-rw-r--r-- | tests/integration/test_main.py | 14 | ||||
-rw-r--r-- | tests/unit/test_application.py | 20 | ||||
-rw-r--r-- | tests/unit/test_legacy_api.py | 2 |
5 files changed, 29 insertions, 25 deletions
diff --git a/src/flake8/api/legacy.py b/src/flake8/api/legacy.py index 68df9a2..f71d899 100644 --- a/src/flake8/api/legacy.py +++ b/src/flake8/api/legacy.py @@ -29,7 +29,7 @@ def get_style_guide(**kwargs): :class:`StyleGuide` """ application = app.Application() - prelim_opts, remaining_args = application.parse_preliminary_options([]) + prelim_opts = application.parse_preliminary_options([]) flake8.configure_logging(prelim_opts.verbose, prelim_opts.output_file) config_finder = config.ConfigFileFinder( application.program, @@ -40,9 +40,7 @@ def get_style_guide(**kwargs): application.find_plugins(config_finder) application.register_plugin_options() - application.parse_configuration_and_cli( - config_finder, remaining_args, - ) + application.parse_configuration_and_cli(config_finder, []) # We basically want application.initialize to be called but with these # options set instead before we make our formatter, notifier, internal # style guide and file checker manager. diff --git a/src/flake8/main/application.py b/src/flake8/main/application.py index 001ad6c..61f5f9b 100644 --- a/src/flake8/main/application.py +++ b/src/flake8/main/application.py @@ -5,7 +5,7 @@ import argparse import logging import sys import time -from typing import Dict, List, Optional, Set, Tuple +from typing import Dict, List, Optional, Set import flake8 from flake8 import checker @@ -95,7 +95,7 @@ class Application(object): self.parsed_diff = {} # type: Dict[str, Set[int]] def parse_preliminary_options(self, argv): - # type: (List[str]) -> Tuple[argparse.Namespace, List[str]] + # type: (List[str]) -> argparse.Namespace """Get preliminary options from the CLI, pre-plugin-loading. We need to know the values of a few standard options so that we can @@ -112,7 +112,7 @@ class Application(object): :rtype: (argparse.Namespace, list) """ - return self.prelim_arg_parser.parse_known_args(argv) + return self.prelim_arg_parser.parse_known_args(argv)[0] def exit(self): # type: () -> None @@ -312,7 +312,7 @@ class Application(object): """ # NOTE(sigmavirus24): When updating this, make sure you also update # our legacy API calls to these same methods. - prelim_opts, remaining_args = self.parse_preliminary_options(argv) + prelim_opts = self.parse_preliminary_options(argv) flake8.configure_logging(prelim_opts.verbose, prelim_opts.output_file) config_finder = config.ConfigFileFinder( self.program, @@ -322,9 +322,7 @@ class Application(object): ) self.find_plugins(config_finder) self.register_plugin_options() - self.parse_configuration_and_cli( - config_finder, remaining_args, - ) + self.parse_configuration_and_cli(config_finder, argv) self.make_formatter() self.make_guide() self.make_file_checker_manager() diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py index b67992b..54254ef 100644 --- a/tests/integration/test_main.py +++ b/tests/integration/test_main.py @@ -246,3 +246,17 @@ def test_file_not_found(tmpdir, capsys): out, err = capsys.readouterr() assert out.startswith("i-do-not-exist:0:1: E902") assert err == "" + + +def test_output_file(tmpdir, capsys): + """Ensure that --output-file is honored.""" + tmpdir.join('t.py').write('import os\n') + + with tmpdir.as_cwd(): + _call_main(['t.py', '--output-file=f'], retv=1) + + out, err = capsys.readouterr() + assert out == err == "" + + expected = "t.py:1:1: F401 'os' imported but unused\n" + assert tmpdir.join('f').read() == expected diff --git a/tests/unit/test_application.py b/tests/unit/test_application.py index 51adefb..f31be21 100644 --- a/tests/unit/test_application.py +++ b/tests/unit/test_application.py @@ -79,28 +79,22 @@ def test_returns_specified_plugin(application): def test_prelim_opts_args(application): """Verify we get sensible prelim opts and args.""" - opts, args = application.parse_preliminary_options( + opts = application.parse_preliminary_options( ['--foo', '--verbose', 'src', 'setup.py', '--statistics', '--version']) assert opts.verbose - assert args == ['--foo', 'src', 'setup.py', '--statistics', '--version'] def test_prelim_opts_ignore_help(application): """Verify -h/--help is not handled.""" - # GIVEN - - # WHEN - _, args = application.parse_preliminary_options(['--help', '-h']) - - # THEN - assert args == ['--help', '-h'] + # normally argparse would `SystemExit` on `--help` + application.parse_preliminary_options(['--help', '-h']) def test_prelim_opts_handles_empty(application): """Verify empty argv lists are handled correctly.""" - irrelevant_args = ['myexe', '/path/to/foo'] + # this would set `.verbose` but we validate that it does not + irrelevant_args = ['--verbose'] with mock.patch.object(sys, 'argv', irrelevant_args): - opts, args = application.parse_preliminary_options([]) - - assert args == [] + opts = application.parse_preliminary_options([]) + assert not opts.verbose diff --git a/tests/unit/test_legacy_api.py b/tests/unit/test_legacy_api.py index 0a3f884..a758308 100644 --- a/tests/unit/test_legacy_api.py +++ b/tests/unit/test_legacy_api.py @@ -19,7 +19,7 @@ def test_get_style_guide(): verbose=0, ) mockedapp = mock.Mock() - mockedapp.parse_preliminary_options.return_value = (prelim_opts, []) + mockedapp.parse_preliminary_options.return_value = prelim_opts mockedapp.program = 'flake8' with mock.patch('flake8.api.legacy.config.ConfigFileFinder') as mock_config_finder: # noqa: E501 config_finder = ConfigFileFinder(mockedapp.program) |