Merge pull request #1624 from atugushev/format-option-help

Display list of available formatters with help for `--format`
This commit is contained in:
Anthony Sottile 2022-10-15 13:03:17 -07:00 committed by GitHub
commit 09a75e8f5a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 35 additions and 4 deletions

View file

@ -132,6 +132,7 @@ class Application:
version=flake8.__version__, version=flake8.__version__,
plugin_versions=self.plugins.versions_str(), plugin_versions=self.plugins.versions_str(),
parents=[self.prelim_arg_parser], parents=[self.prelim_arg_parser],
formatter_names=list(self.plugins.reporters),
) )
options.register_default_options(self.option_manager) options.register_default_options(self.option_manager)
self.option_manager.register_plugins(self.plugins) self.option_manager.register_plugins(self.plugins)

View file

@ -220,7 +220,15 @@ def register_default_options(option_manager: OptionManager) -> None:
metavar="format", metavar="format",
default="default", default="default",
parse_from_config=True, parse_from_config=True,
help="Format errors according to the chosen formatter.", help=(
f"Format errors according to the chosen formatter "
f"({', '.join(sorted(option_manager.formatter_names))}) "
f"or a format string containing %%-style "
f"mapping keys (code, col, path, row, text). "
f"For example, "
f"``--format=pylint`` or ``--format='%%(path)s %%(code)s'``. "
f"(Default: %(default)s)"
),
) )
add_option( add_option(

View file

@ -317,6 +317,7 @@ class OptionManager:
version: str, version: str,
plugin_versions: str, plugin_versions: str,
parents: list[argparse.ArgumentParser], parents: list[argparse.ArgumentParser],
formatter_names: list[str],
) -> None: ) -> None:
"""Initialize an instance of an OptionManager. """Initialize an instance of an OptionManager.
@ -330,6 +331,7 @@ class OptionManager:
A list of ArgumentParser objects whose arguments should also be A list of ArgumentParser objects whose arguments should also be
included. included.
""" """
self.formatter_names = formatter_names
self.parser = argparse.ArgumentParser( self.parser = argparse.ArgumentParser(
prog="flake8", prog="flake8",
usage="%(prog)s [options] file file ...", usage="%(prog)s [options] file file ...",

View file

@ -18,6 +18,7 @@ def optmanager():
version="3.0.0", version="3.0.0",
plugin_versions="", plugin_versions="",
parents=[], parents=[],
formatter_names=[],
) )
options.register_default_options(option_manager) options.register_default_options(option_manager)
return option_manager return option_manager

View file

@ -406,3 +406,13 @@ The specified config file does not exist: missing.cfg
out, err = capsys.readouterr() out, err = capsys.readouterr()
assert out == expected assert out == expected
assert err == "" assert err == ""
def test_format_option_help(capsys):
"""Test that help displays list of available formatters."""
with pytest.raises(SystemExit):
cli.main(["--help"])
out, err = capsys.readouterr()
assert "(default, pylint, quiet-filename, quiet-nothing)" in out
assert err == ""

View file

@ -100,6 +100,7 @@ def test_local_plugin_can_add_option(local_config):
version="123", version="123",
plugin_versions="", plugin_versions="",
parents=[stage1_parser], parents=[stage1_parser],
formatter_names=[],
) )
register_default_options(option_manager) register_default_options(option_manager)
option_manager.register_plugins(loaded_plugins) option_manager.register_plugins(loaded_plugins)

View file

@ -17,7 +17,10 @@ TEST_VERSION = "3.0.0b1"
def optmanager(): def optmanager():
"""Generate a simple OptionManager with default test arguments.""" """Generate a simple OptionManager with default test arguments."""
return manager.OptionManager( return manager.OptionManager(
version=TEST_VERSION, plugin_versions="", parents=[] version=TEST_VERSION,
plugin_versions="",
parents=[],
formatter_names=[],
) )
@ -34,7 +37,10 @@ def test_option_manager_including_parent_options():
# WHEN # WHEN
optmanager = manager.OptionManager( optmanager = manager.OptionManager(
version=TEST_VERSION, plugin_versions="", parents=[parent_parser] version=TEST_VERSION,
plugin_versions="",
parents=[parent_parser],
formatter_names=[],
) )
options = optmanager.parse_args(["--parent", "foo"]) options = optmanager.parse_args(["--parent", "foo"])

View file

@ -168,7 +168,9 @@ def test_load_extra_config_utf8(tmpdir):
@pytest.fixture @pytest.fixture
def opt_manager(): def opt_manager():
ret = OptionManager(version="123", plugin_versions="", parents=[]) ret = OptionManager(
version="123", plugin_versions="", parents=[], formatter_names=[]
)
register_default_options(ret) register_default_options(ret)
return ret return ret