diff --git a/src/flake8/main/application.py b/src/flake8/main/application.py
index 13ece4e..5178abb 100644
--- a/src/flake8/main/application.py
+++ b/src/flake8/main/application.py
@@ -132,6 +132,7 @@ class Application:
             version=flake8.__version__,
             plugin_versions=self.plugins.versions_str(),
             parents=[self.prelim_arg_parser],
+            formatter_names=list(self.plugins.reporters),
         )
         options.register_default_options(self.option_manager)
         self.option_manager.register_plugins(self.plugins)
diff --git a/src/flake8/main/options.py b/src/flake8/main/options.py
index 9b374ab..86a6cf8 100644
--- a/src/flake8/main/options.py
+++ b/src/flake8/main/options.py
@@ -220,7 +220,15 @@ def register_default_options(option_manager: OptionManager) -> None:
         metavar="format",
         default="default",
         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(
diff --git a/src/flake8/options/manager.py b/src/flake8/options/manager.py
index e333c9e..7c40cb9 100644
--- a/src/flake8/options/manager.py
+++ b/src/flake8/options/manager.py
@@ -317,6 +317,7 @@ class OptionManager:
         version: str,
         plugin_versions: str,
         parents: list[argparse.ArgumentParser],
+        formatter_names: list[str],
     ) -> None:
         """Initialize an instance of an OptionManager.
 
@@ -330,6 +331,7 @@ class OptionManager:
             A list of ArgumentParser objects whose arguments should also be
             included.
         """
+        self.formatter_names = formatter_names
         self.parser = argparse.ArgumentParser(
             prog="flake8",
             usage="%(prog)s [options] file file ...",

diff --git a/tests/integration/test_aggregator.py b/tests/integration/test_aggregator.py
index a5b39d7..006ac5f 100644
--- a/tests/integration/test_aggregator.py
+++ b/tests/integration/test_aggregator.py
@@ -18,6 +18,7 @@ def optmanager():
         version="3.0.0",
         plugin_versions="",
         parents=[],
+        formatter_names=[],
     )
     options.register_default_options(option_manager)
     return option_manager
diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py
index e711fb3..dfa0e0b 100644
--- a/tests/integration/test_main.py
+++ b/tests/integration/test_main.py
@@ -406,3 +406,13 @@ The specified config file does not exist: missing.cfg
     out, err = capsys.readouterr()
     assert out == expected
     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 == ""
diff --git a/tests/integration/test_plugins.py b/tests/integration/test_plugins.py
index 0b4424a..edba048 100644
--- a/tests/integration/test_plugins.py
+++ b/tests/integration/test_plugins.py
@@ -100,6 +100,7 @@ def test_local_plugin_can_add_option(local_config):
         version="123",
         plugin_versions="",
         parents=[stage1_parser],
+        formatter_names=[],
     )
     register_default_options(option_manager)
     option_manager.register_plugins(loaded_plugins)
diff --git a/tests/unit/test_option_manager.py b/tests/unit/test_option_manager.py
index d5b88c3..3d3ddc1 100644
--- a/tests/unit/test_option_manager.py
+++ b/tests/unit/test_option_manager.py
@@ -17,7 +17,10 @@ TEST_VERSION = "3.0.0b1"
 def optmanager():
     """Generate a simple OptionManager with default test arguments."""
     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
     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"])
 
diff --git a/tests/unit/test_options_config.py b/tests/unit/test_options_config.py
index 0890ea9..8c8f0cb 100644
--- a/tests/unit/test_options_config.py
+++ b/tests/unit/test_options_config.py
@@ -168,7 +168,9 @@ def test_load_extra_config_utf8(tmpdir):
 
 @pytest.fixture
 def opt_manager():
-    ret = OptionManager(version="123", plugin_versions="", parents=[])
+    ret = OptionManager(
+        version="123", plugin_versions="", parents=[], formatter_names=[]
+    )
     register_default_options(ret)
     return ret
 

Display list of available formatters with help for --format
In GitLab by @blueyed on Apr 26, 2018, 03:32

`flake8 --help` contains:

> --format=format       Format errors according to the chosen formatter.

It would be nice/helpful if the list of available formats would be listed there.
tests/integration/test_aggregator.py::test_aggregate_options_with_config tests/integration/test_aggregator.py::test_aggregate_options_when_isolated tests/integration/test_main.py::test_format_option_help tests/integration/test_plugins.py::test_local_plugin_can_add_option tests/unit/test_option_manager.py::test_option_manager_creates_option_parser tests/unit/test_option_manager.py::test_option_manager_including_parent_options tests/unit/test_option_manager.py::test_parse_args_forwarding_default_values tests/unit/test_option_manager.py::test_parse_args_forwarding_type_coercion tests/unit/test_option_manager.py::test_add_option_short_option_only tests/unit/test_option_manager.py::test_add_option_long_option_only tests/unit/test_option_manager.py::test_add_short_and_long_option_names tests/unit/test_option_manager.py::test_add_option_with_custom_args tests/unit/test_option_manager.py::test_parse_args_normalize_path tests/unit/test_option_manager.py::test_parse_args_handles_comma_separated_defaults tests/unit/test_option_manager.py::test_parse_args_handles_comma_separated_lists tests/unit/test_option_manager.py::test_parse_args_normalize_paths tests/unit/test_option_manager.py::test_extend_default_ignore tests/unit/test_option_manager.py::test_optparse_normalize_callback_option_legacy tests/unit/test_option_manager.py::test_optparse_normalize_types[int-5-5] tests/unit/test_option_manager.py::test_optparse_normalize_types[long-6-6] tests/unit/test_option_manager.py::test_optparse_normalize_types[string-foo-foo] tests/unit/test_option_manager.py::test_optparse_normalize_types[float-1.5-1.5] tests/unit/test_option_manager.py::test_optparse_normalize_types[complex-1+5j-(1+5j)] tests/unit/test_option_manager.py::test_optparse_normalize_types[str-foo-foo] tests/unit/test_option_manager.py::test_optparse_normalize_choice_type tests/unit/test_option_manager.py::test_optparse_normalize_help tests/unit/test_option_manager.py::test_parse_invalid_jobs_argument tests/unit/test_options_config.py::test_parse_config_no_values tests/unit/test_options_config.py::test_parse_config_typed_values tests/unit/test_options_config.py::test_parse_config_ignores_unknowns
tests/integration/test_main.py::test_diff_option tests/integration/test_main.py::test_form_feed_line_split tests/integration/test_main.py::test_e101_indent_char_does_not_reset tests/integration/test_main.py::test_statistics_option tests/integration/test_main.py::test_show_source_option tests/integration/test_main.py::test_extend_exclude tests/integration/test_main.py::test_malformed_per_file_ignores_error tests/integration/test_main.py::test_tokenization_error_but_not_syntax_error tests/integration/test_main.py::test_tokenization_error_is_a_syntax_error tests/integration/test_main.py::test_bug_report_successful tests/integration/test_main.py::test_benchmark_successful tests/integration/test_main.py::test_specific_noqa_does_not_clobber_pycodestyle_noqa tests/integration/test_main.py::test_specific_noqa_on_line_with_continuation tests/integration/test_main.py::test_physical_line_file_not_ending_in_newline tests/integration/test_main.py::test_physical_line_file_not_ending_in_newline_trailing_ws tests/integration/test_main.py::test_obtaining_args_from_sys_argv_when_not_explicity_provided tests/integration/test_main.py::test_cli_config_option_respected tests/integration/test_main.py::test_cli_isolated_overrides_config_option tests/integration/test_main.py::test_file_not_found tests/integration/test_main.py::test_output_file tests/integration/test_main.py::test_early_keyboard_interrupt_does_not_crash tests/integration/test_main.py::test_config_file_not_found tests/integration/test_plugins.py::test_enable_local_plugin_from_config tests/integration/test_plugins.py::test_plugin_gets_enabled_by_default tests/integration/test_plugins.py::test_plugin_off_by_default tests/integration/test_plugins.py::test_physical_line_plugin_multiline_string tests/unit/test_option_manager.py::test_parse_valid_jobs_argument[auto-True--1] tests/unit/test_option_manager.py::test_parse_valid_jobs_argument[4-False-4] tests/unit/test_option_manager.py::test_jobs_argument_str tests/unit/test_option_manager.py::test_jobs_argument_repr tests/unit/test_options_config.py::test_config_not_found_returns_none tests/unit/test_options_config.py::test_config_file_without_section_is_not_considered tests/unit/test_options_config.py::test_config_file_with_parse_error_is_not_considered tests/unit/test_options_config.py::test_config_file_with_encoding_error_is_not_considered tests/unit/test_options_config.py::test_find_config_file_exists_at_path[setup.cfg] tests/unit/test_options_config.py::test_find_config_file_exists_at_path[tox.ini] tests/unit/test_options_config.py::test_find_config_file_exists_at_path[.flake8] tests/unit/test_options_config.py::test_find_config_either_section[flake8] tests/unit/test_options_config.py::test_find_config_either_section[flake8:local-plugins] tests/unit/test_options_config.py::test_find_config_searches_upwards tests/unit/test_options_config.py::test_find_config_ignores_homedir tests/unit/test_options_config.py::test_find_config_ignores_unknown_homedir tests/unit/test_options_config.py::test_load_config_config_specified_skips_discovery tests/unit/test_options_config.py::test_load_config_no_config_file_does_discovery tests/unit/test_options_config.py::test_load_config_no_config_found_sets_cfg_dir_to_pwd tests/unit/test_options_config.py::test_load_config_isolated_ignores_configuration tests/unit/test_options_config.py::test_load_config_append_config tests/unit/test_options_config.py::test_load_auto_config_utf8 tests/unit/test_options_config.py::test_load_explicit_config_utf8 tests/unit/test_options_config.py::test_load_extra_config_utf8 tests/unit/test_options_config.py::test_load_config_missing_file_raises_exception