summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Sottile <asottile@umich.edu>2020-05-11 18:26:34 -0700
committerAnthony Sottile <asottile@umich.edu>2020-05-11 18:34:15 -0700
commit4888eb65c5637568b3762a36b695a54a2c6c0113 (patch)
tree5dd64262ca4e05309ae58aa711f30ed005ab859a
parentb4d285019210ccdb5d526e64c281db64e5316d6c (diff)
downloadflake8-output_file_fix.tar.gz
Fix --output-file regressionoutput_file_fix
-rw-r--r--src/flake8/api/legacy.py6
-rw-r--r--src/flake8/main/application.py12
-rw-r--r--tests/integration/test_main.py14
-rw-r--r--tests/unit/test_application.py20
-rw-r--r--tests/unit/test_legacy_api.py2
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)