Running into the same case as #1929, except specific to option values that may start with symbols such as '+', '~', and '!'. Shell completion treats these values as the start of new options, so doesn't complete them.
Reproduction script with the cli command referenced by setuptools:
@command()
@option("-c", type=Choice(["+1", "+2", "!1", "!2"]))
def cli(c):
echo(f"Value is {c}")
With shell completion enabled:
$ click-bug -c <TAB><TAB>
+1 +2 !1 !2
$ click-bug -c +<TAB><TAB>
# Nothing happens
I was looking at the discussion on #1930, and it makes sense that '+' may be considered the start of an option. I'm wondering if it would be valid for completion to prioritize option values over new option names. As in, within shell_completion.py's _resolve_incomplete function, moving the _is_incomplete_option check above the if "--" not in args and _start_of_option(incomplete) call allows the tab completion in this example to work as expected:
$ click-bug -c +<TAB><TAB>
+1 +2
I can look into putting up a PR to do that if it seems valid.
Environment:
- Python version: 3.6.9
- Click version: 8.0.1
Running into the same case as #1929, except specific to option values that may start with symbols such as '+', '~', and '!'. Shell completion treats these values as the start of new options, so doesn't complete them.
Reproduction script with the cli command referenced by setuptools:
With shell completion enabled:
I was looking at the discussion on #1930, and it makes sense that '+' may be considered the start of an option. I'm wondering if it would be valid for completion to prioritize option values over new option names. As in, within shell_completion.py's _resolve_incomplete function, moving the
_is_incomplete_optioncheck above theif "--" not in args and _start_of_option(incomplete)call allows the tab completion in this example to work as expected:I can look into putting up a PR to do that if it seems valid.
Environment: