Skip to content

Commit

Permalink
Use shell_complete when supplied on Arguments - fixes tiangolo#334
Browse files Browse the repository at this point in the history
  • Loading branch information
bckohan committed Jan 24, 2024
1 parent 3a7264c commit a5d06f5
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 0 deletions.
28 changes: 28 additions & 0 deletions tests/assets/compat_arg_complete_click7_8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import click
import typer
from typer._compat_utils import _get_click_major

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)
if _get_click_major() > 7:
from click.shell_completion import CompletionItem

return [CompletionItem("Emma", help="Emma is awesome.")]
return ["Emma"]


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


if __name__ == "__main__":
app()
29 changes: 29 additions & 0 deletions tests/test_compat/test_arg_completion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import os
import subprocess
import sys

from typer._compat_utils import _get_click_major

from tests.assets import compat_arg_complete_click7_8 as mod


def test_arg_completion():
result = subprocess.run(
[sys.executable, "-m", "coverage", "run", mod.__file__, "E"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
encoding="utf-8",
env={
**os.environ,
"_COMPAT_ARG_COMPLETE_CLICK7_8.PY_COMPLETE": "complete_zsh",
"_TYPER_COMPLETE_ARGS": "compat_arg_complete_click7_8.py E",
"_TYPER_COMPLETE_TESTING": "True",
},
)
assert "Emma" in result.stdout
if _get_click_major() > 7:
assert "Emma is awesome." in result.stdout

assert "ctx: compat_arg_complete_click7_8" in result.stderr
assert "arg is: name" in result.stderr
assert "incomplete is: E" in result.stderr
1 change: 1 addition & 0 deletions typer/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,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,
autocompletion=get_param_completion(parameter_info.autocompletion),
# Rich settings
rich_help_panel=parameter_info.rich_help_panel,
Expand Down

0 comments on commit a5d06f5

Please sign in to comment.