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

🐛 Fix shell_complete not working for Arguments #737

Merged
merged 13 commits into from
Aug 16, 2024
22 changes: 22 additions & 0 deletions tests/assets/completion_argument.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import click
import typer

app = typer.Typer()


def shell_complete(ctx: click.Context, param: click.Parameter, incomplete: str):
typer.echo(f"ctx: {ctx.info_name}", err=True)
typer.echo(f"arg is: {param.name}", err=True)
typer.echo(f"incomplete is: {incomplete}", err=True)
return ["Emma"]


@app.command(context_settings={"auto_envvar_prefix": "TEST"})
def main(name: str = typer.Argument(shell_complete=shell_complete)):
"""
Say hello.
"""


if __name__ == "__main__":
app()
19 changes: 19 additions & 0 deletions tests/test_others.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,25 @@ def main(name: str = typer.Option(..., callback=name_callback)):
assert "value is: Camila" in result.stdout


def test_completion_argument():
file_path = Path(__file__).parent / "assets/completion_argument.py"
result = subprocess.run(
[sys.executable, "-m", "coverage", "run", str(file_path), "E"],
capture_output=True,
encoding="utf-8",
env={
**os.environ,
"_COMPLETION_ARGUMENT.PY_COMPLETE": "complete_zsh",
"_TYPER_COMPLETE_ARGS": "completion_argument.py E",
"_TYPER_COMPLETE_TESTING": "True",
},
)
assert "Emma" in result.stdout or "_files" in result.stdout
assert "ctx: completion_argument" in result.stderr
assert "arg is: name" in result.stderr
assert "incomplete is: E" in result.stderr


def test_completion_untyped_parameters():
file_path = Path(__file__).parent / "assets/completion_no_types.py"
result = subprocess.run(
Expand Down
1 change: 1 addition & 0 deletions typer/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -947,6 +947,7 @@ def get_click_param(
expose_value=parameter_info.expose_value,
is_eager=parameter_info.is_eager,
envvar=parameter_info.envvar,
shell_complete=parameter_info.shell_complete,
svlandeg marked this conversation as resolved.
Show resolved Hide resolved
autocompletion=get_param_completion(parameter_info.autocompletion),
# Rich settings
rich_help_panel=parameter_info.rich_help_panel,
Expand Down
Loading