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

powershell completion fails with partial word because it includes the incomplete word with completed args #359

Closed
7 tasks done
patricksurry opened this issue Feb 22, 2022 · 1 comment · Fixed by #360
Closed
7 tasks done
Labels
question Question or problem

Comments

@patricksurry
Copy link
Contributor

patricksurry commented Feb 22, 2022

First Check

  • I added a very descriptive title to this issue.
  • I used the GitHub search to find a similar issue and didn't find it.
  • I searched the Typer documentation, with the integrated search.
  • I already searched in Google "How to X in Typer" and didn't find any information.
  • I already read and followed all the tutorial in the docs and didn't find an answer.
  • I already checked if it is not related to Typer but to Click.

Commit to Help

  • I commit to help with one of those options 👆

Example Code

import typer

valid_names = ["Camila", "Carlos", "Sebastian"]


def complete_name(incomplete: str):
    completion = []
    for name in valid_names:
        if name.startswith(incomplete):
            completion.append(name)
    return completion


def main(
    name: str = typer.Option(
        "World", help="The name to say hi to.", autocompletion=complete_name
    )
):
    typer.echo(f"Hello {name}")


if __name__ == "__main__":
    typer.run(main)

Description

The intro example from the documentation fails in powershell if you start an incomplete name. For example typer ./main.py run --name Ca[TAB][TAB] fails to suggest completions, tho typer ./main.py run --name [TAB][TAB] does.

The powershell completion set args to the full list of arguments including the incomplete word, e.g. args = ['--name', 'Ca'], incomplete='Ca' unlike the bash completion which drops the incomplete word, e.g. args = ['--name'], incomplete='Ca'.

It looks straightforward to use the $cursorPosition
variable to figure out where to truncate the string and take all but the last arg up to that point. I'll experiment and make a PR.

Operating System

Windows

Operating System Details

Windows 11, powershell 7

Typer Version

0.4.0

Python Version

3.7.12

Additional Context

No response

@patricksurry patricksurry added the question Question or problem label Feb 22, 2022
@patricksurry patricksurry changed the title powershell completion incorrectly includes the incomplete parameter in completed word list powershell completion fails with partial word because it includes the incomplete word with completed args Feb 22, 2022
@tiangolo
Copy link
Member

Thanks for the report @patricksurry! And thanks for the PR #360

This fix will be available in Typer 0.12.5, released in the next few hours. 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Question or problem
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants