Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Long option completion with = broken #2847

Open
brandon-avantus opened this issue Jan 23, 2025 · 0 comments
Open

Long option completion with = broken #2847

brandon-avantus opened this issue Jan 23, 2025 · 0 comments
Labels

Comments

@brandon-avantus
Copy link

When using Click shell completion in bash and zsh, long option completion is not working properly when = is used to separate the option from the value (e.g., command --long-option=value vs. command --long-option value). In zsh, the option being completed is replaced with the incomplete value or matched value, essentially "gobbling" up the option. In bash, the option isn't completed at all. I did not test fish.

Steps to reproduce the issue

  1. Create the following script and place it in the bin directory of an activated virtual environment with click installed:
# gobble

#!/usr/bin/env python
import click


@click.command
@click.option("--color", type=click.Choice(["auto", "always", "never"]), default=None,
              help="Control colors in output.")
@click.option("--name",
              help="Name of something.")
def main(color: str | None, name: str | None) -> None:
    """Test long options."""
    click.echo(f"{color=}, {name=}")


if __name__ == "__main__":
    main()
  1. Open a zsh shell and enable script completion: eval "$(_GOBBLE_COMPLETE=zsh_source gobble)"

  2. Attempt to tab complete the --color option using both styles

before tab completion after tab completion offered completions
gobble --color= gobble
gobble --color=a gobble a
gobble --color=al gobble always
gobble --color gobble --color auto always never
gobble --color a gobble --color a auto always
gobble --color al gobble --color always
  1. Open a bash shell and enable script completion: eval "$(_GOBBLE_COMPLETE=bash_source gobble)"

  2. Attempt to tab complete the --color option using both styles

before tab completion after tab completion offered completions
gobble --color= gobble --color= auto always never
gobble --color=a gobble --color=a
gobble --color=al gobble --color=al
gobble --color gobble --color auto always never
gobble --color a gobble --color a auto always
gobble --color al gobble --color always

Expected behavior

before tab completion after tab completion offered completions alternate completions
gobble --color= gobble --color= auto always never --color=auto --color=always --color=never
gobble --color=a gobble --color=a auto always --color=auto --color=always
gobble --color=al gobble --color=always
gobble --color gobble --color auto always never
gobble --color a gobble --color a auto always
gobble --color al gobble --color always

Environment:

  • Python version: 3.12.7
  • Click version: 8.1.8
@Rowlando13 Rowlando13 added the bug label Apr 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants