Skip to content

Use argparse's choices= to display OUTPUT_CHOICES#19869

Open
wyattscarpenter wants to merge 6 commits into
python:masterfrom
wyattscarpenter:choices
Open

Use argparse's choices= to display OUTPUT_CHOICES#19869
wyattscarpenter wants to merge 6 commits into
python:masterfrom
wyattscarpenter:choices

Conversation

@wyattscarpenter

@wyattscarpenter wyattscarpenter commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

This allows the user to see all of the relevant providable values. If a metavar is provided it cloaks the choices, so we remove the metavar. I also document why this can't be done for --enable-incomplete-feature.

There are no tests. I manually examined the generated results and found them satisfactory. They do the obvious.

@wyattscarpenter wyattscarpenter changed the title just use argparse's choices= to display OUTPUT_CHOICES Use argparse's choices= to display OUTPUT_CHOICES Sep 17, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Diff from mypy_primer, showing the effect of this PR on open source code:

AutoSplit (https://github.com/Toufool/AutoSplit)
-   File "/tmp/mypy_primer/mypy_old/venv/bin/mypy", line 7, in <module>
+   File "/tmp/mypy_primer/mypy_new/venv/bin/mypy", line 7, in <module>
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/__main__.py", line 15, in console_entry
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/__main__.py", line 15, in console_entry
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/main.py", line 127, in main
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/main.py", line 127, in main
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/main.py", line 211, in run_build
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/main.py", line 211, in run_build
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/build.py", line 196, in build
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/build.py", line 196, in build
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/build.py", line 272, in _build
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/build.py", line 272, in _build
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/build.py", line 2946, in dispatch
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/build.py", line 2946, in dispatch
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/build.py", line 3346, in process_graph
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/build.py", line 3346, in process_graph
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/build.py", line 3475, in process_stale_scc
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/build.py", line 3475, in process_stale_scc
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/build.py", line 2493, in write_cache
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/build.py", line 2493, in write_cache
-   File "/tmp/mypy_primer/mypy_old/venv/lib/python3.13/site-packages/mypy/cache.py", line 28, in __init__
+   File "/tmp/mypy_primer/mypy_new/venv/lib/python3.13/site-packages/mypy/cache.py", line 28, in __init__

Comment thread mypy/main.py
metavar="FORMAT",
help="Set a custom output format",
choices=OUTPUT_CHOICES,
"-O", "--output", help="Set a custom output format", choices=sorted(OUTPUT_CHOICES)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Informational:) an alternate form I considered for this code was

        "-O",
        "--output",
        metavar="FORMAT",
        # The metavar overrides the default of displaying the choices,
        # so we have to explicitly display them.
        help=f"Set a custom output format (choices: {set(OUTPUT_CHOICES.keys())})",
        choices=OUTPUT_CHOICES,

However, I ultimately decided that just letting it do its default thing was better.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant