Put plugin options into separate argparse groups

This commit is contained in:
Anthony Sottile 2019-08-19 15:58:34 -07:00
parent f265b2275b
commit 8fd36ba15b
4 changed files with 30 additions and 4 deletions

View file

@ -1,9 +1,10 @@
"""Option handling and Option management logic."""
import argparse
import collections
import contextlib
import functools
import logging
from typing import Any, Dict, List, Optional, Set
from typing import Any, Dict, Generator, List, Optional, Set, Union
from flake8 import utils
@ -312,7 +313,9 @@ class OptionManager(object):
:param str usage:
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(
"--version", action="version", version=version
)
@ -330,6 +333,16 @@ class OptionManager(object):
"""Convert a PluginVersion into a dictionary mapping name to value."""
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):
"""Create and register a new option.

View file

@ -213,7 +213,8 @@ class Plugin(object):
self.name,
optmanager,
)
add_options(optmanager)
with optmanager.group(self.plugin_name):
add_options(optmanager)
if self.off_by_default:
self.disable(optmanager)