Enable git-like did-you-mean feature in click.
It's as simple as this:
import click
from click_didyoumean import DYMGroup
@click.group(cls=DYMGroup)
def cli():
...
Install this extension with pip:
pip install click-didyoumean
Use specific did-you-mean group class for your cli:
import click
from click_didyoumean import DYMGroup
@click.group(cls=DYMGroup)
def cli():
pass
@cli.command()
def foo():
pass
@cli.command()
def bar():
pass
@cli.command()
def barrr():
pass
if __name__ == "__main__":
cli()
Or you it in a CommandCollection:
import click
from click_didyoumean import DYMCommandCollection
@click.group()
def cli1():
pass
@cli1.command()
def foo():
pass
@cli1.command()
def bar():
pass
@click.group()
def cli2():
pass
@cli2.command()
def barrr():
pass
cli = DYMCommandCollection(sources=[cli1, cli2])
if __name__ == "__main__":
cli()
There are two configuration for the DYMGroup
and DYMCommandCollection
:
Parameter | Type | Default | Description |
---|---|---|---|
max_suggestions | int | 3 | Maximal number of did-you-mean suggestions |
cutoff | float | 0.5 | Possibilities that don’t score at least that similar to word are ignored. |
@cli.group(cls=DYMGroup, max_suggestions=2, cutoff=0.7)
def cli():
pass
... or ...
cli = DYMCommandCollection(sources=[cli1, cli2], max_suggestions=2, cutoff=0.7)