diff --git a/src/flake8/options/manager.py b/src/flake8/options/manager.py index a5e5906..f745388 100644 --- a/src/flake8/options/manager.py +++ b/src/flake8/options/manager.py @@ -425,13 +425,23 @@ class OptionManager(object): plugin_version_format ) - def parse_args(self, args=None, values=None): + def parse_args( + self, + args=None, # type: Optional[List[str]] + values=None, # type: Optional[argparse.Namespace] + ): + # type: (...) -> Tuple[argparse.Namespace, List[str]] """Proxy to calling the OptionParser's parse_args method.""" self.generate_epilog() self.update_version_string() - args = self.parser.parse_args(args, values) + assert isinstance( # nosec (for bandit) + self.parser, argparse.ArgumentParser + ), self.parser + if values: + self.parser.set_defaults(**vars(values)) + parsed_args = self.parser.parse_args(args) # TODO: refactor callers to not need this - return args, args.filenames + return parsed_args, parsed_args.filenames def parse_known_args(self, args=None): # type: (Optional[List[str]]) -> Tuple[argparse.Namespace, List[str]] diff --git a/tests/unit/test_option_manager.py b/tests/unit/test_option_manager.py index d3cc728..859dca1 100644 --- a/tests/unit/test_option_manager.py +++ b/tests/unit/test_option_manager.py @@ -22,6 +22,21 @@ def test_option_manager_creates_option_parser(optmanager): assert isinstance(optmanager.parser, argparse.ArgumentParser) +def test_parse_args_forwarding_default_values(optmanager): + """Verify default provided values are present in the final result.""" + namespace = argparse.Namespace(foo='bar') + options, args = optmanager.parse_args([], namespace) + assert options.foo == 'bar' + + +def test_parse_args_forwarding_type_coercion(optmanager): + """Verify default provided values are type converted from add_option.""" + optmanager.add_option('--foo', type=int) + namespace = argparse.Namespace(foo='5') + options, args = optmanager.parse_args([], namespace) + assert options.foo == 5 + + def test_add_option_short_option_only(optmanager): """Verify the behaviour of adding a short-option only.""" assert optmanager.options == []