mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-07 13:36:54 +00:00
Merge branch 'plugin_argparse_groups' into 'master'
Put plugin options into separate argparse groups Closes #565 See merge request pycqa/flake8!342
This commit is contained in:
commit
eea5bf9225
4 changed files with 30 additions and 4 deletions
|
|
@ -1,9 +1,10 @@
|
||||||
"""Option handling and Option management logic."""
|
"""Option handling and Option management logic."""
|
||||||
import argparse
|
import argparse
|
||||||
import collections
|
import collections
|
||||||
|
import contextlib
|
||||||
import functools
|
import functools
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Dict, List, Optional, Set
|
from typing import Any, Dict, Generator, List, Optional, Set, Union
|
||||||
|
|
||||||
from flake8 import utils
|
from flake8 import utils
|
||||||
|
|
||||||
|
|
@ -312,7 +313,9 @@ class OptionManager(object):
|
||||||
:param str usage:
|
:param str usage:
|
||||||
Basic usage string used by the OptionParser.
|
Basic usage string used by the OptionParser.
|
||||||
"""
|
"""
|
||||||
self.parser = argparse.ArgumentParser(prog=prog, usage=usage)
|
self.parser = argparse.ArgumentParser(
|
||||||
|
prog=prog, usage=usage
|
||||||
|
) # type: Union[argparse.ArgumentParser, argparse._ArgumentGroup]
|
||||||
self.version_action = self.parser.add_argument(
|
self.version_action = self.parser.add_argument(
|
||||||
"--version", action="version", version=version
|
"--version", action="version", version=version
|
||||||
)
|
)
|
||||||
|
|
@ -330,6 +333,16 @@ class OptionManager(object):
|
||||||
"""Convert a PluginVersion into a dictionary mapping name to value."""
|
"""Convert a PluginVersion into a dictionary mapping name to value."""
|
||||||
return {attr: getattr(plugin, attr) for attr in ["name", "version"]}
|
return {attr: getattr(plugin, attr) for attr in ["name", "version"]}
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def group(self, name): # type: (str) -> Generator[None, None, None]
|
||||||
|
"""Attach options to an argparse group during this context."""
|
||||||
|
group = self.parser.add_argument_group(name)
|
||||||
|
self.parser, orig_parser = group, self.parser
|
||||||
|
try:
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
self.parser = orig_parser
|
||||||
|
|
||||||
def add_option(self, *args, **kwargs):
|
def add_option(self, *args, **kwargs):
|
||||||
"""Create and register a new option.
|
"""Create and register a new option.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,8 @@ class Plugin(object):
|
||||||
self.name,
|
self.name,
|
||||||
optmanager,
|
optmanager,
|
||||||
)
|
)
|
||||||
add_options(optmanager)
|
with optmanager.group(self.plugin_name):
|
||||||
|
add_options(optmanager)
|
||||||
|
|
||||||
if self.off_by_default:
|
if self.off_by_default:
|
||||||
self.disable(optmanager)
|
self.disable(optmanager)
|
||||||
|
|
|
||||||
|
|
@ -307,3 +307,14 @@ def test_optparse_normalize_help(optmanager, capsys):
|
||||||
out, err = capsys.readouterr()
|
out, err = capsys.readouterr()
|
||||||
output = out + err
|
output = out + err
|
||||||
assert 'default: bar' in output
|
assert 'default: bar' in output
|
||||||
|
|
||||||
|
|
||||||
|
def test_optmanager_group(optmanager, capsys):
|
||||||
|
"""Test that group(...) causes options to be assigned to a group."""
|
||||||
|
with optmanager.group('groupname'):
|
||||||
|
optmanager.add_option('--foo')
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
optmanager.parse_args(['--help'])
|
||||||
|
out, err = capsys.readouterr()
|
||||||
|
output = out + err
|
||||||
|
assert '\ngroupname:\n' in output
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import mock
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from flake8 import exceptions
|
from flake8 import exceptions
|
||||||
|
from flake8.options import manager as options_manager
|
||||||
from flake8.plugins import manager
|
from flake8.plugins import manager
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -91,7 +92,7 @@ def test_register_options():
|
||||||
entry_point = mock.Mock(spec=['load'])
|
entry_point = mock.Mock(spec=['load'])
|
||||||
plugin_obj = mock.Mock(spec_set=['name', 'version', 'add_options',
|
plugin_obj = mock.Mock(spec_set=['name', 'version', 'add_options',
|
||||||
'parse_options'])
|
'parse_options'])
|
||||||
option_manager = mock.Mock(spec=['register_plugin'])
|
option_manager = mock.MagicMock(spec=options_manager.OptionManager)
|
||||||
plugin = manager.Plugin('T000', entry_point)
|
plugin = manager.Plugin('T000', entry_point)
|
||||||
plugin._plugin = plugin_obj
|
plugin._plugin = plugin_obj
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue