Skip to content

Commit

Permalink
replace all non-word characters with wordify
Browse files Browse the repository at this point in the history
Use the regular expression set \W to replace all non-word characters
instead of the fixed set [-.\s:] in wordify. Add a test for subcommands
containing slashes in their name as an example. This could be tested
more robustly.
  • Loading branch information
dustinlagoy committed Mar 1, 2024
1 parent 2be59e4 commit c33102b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
4 changes: 2 additions & 2 deletions shtab/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ def complete2pattern(opt_complete, shell: str, choice_type2fn) -> str:


def wordify(string: str) -> str:
"""Replace non-word chars [-. :] with underscores [_]"""
return re.sub(r"[-.\s:]", "_", string)
r"""Replace non-word chars [\W] with underscores [_]"""
return re.sub(r"\W", "_", string)


def get_public_subcommands(sub):
Expand Down
19 changes: 19 additions & 0 deletions tests/test_shtab.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,25 @@ def test_subparser_colons(shell, caplog):
assert not caplog.record_tuples


@fix_shell
def test_subparser_slashes(shell, caplog):
parser = ArgumentParser(prog="test")
subparsers = parser.add_subparsers()
subparsers.add_parser("sub/cmd", help="help message")
with caplog.at_level(logging.INFO):
completion = shtab.complete(parser, shell=shell)
print(completion)

if shell == "bash":
shell = Bash(completion)
shell.compgen('-W "${_shtab_test_subparsers[*]}"', "s", "sub/cmd")
shell.compgen('-W "${_shtab_test_pos_0_choices[*]}"', "s", "sub/cmd")
shell.test('-z "${_shtab_test_COMPGEN-}"')
elif shell == "zsh":
# make sure the slash was properly substituted to avoid syntax errors
assert "_shtab_test_sub/cmd" not in completion


@fix_shell
def test_add_argument_to_optional(shell, caplog):
parser = ArgumentParser(prog="test")
Expand Down

0 comments on commit c33102b

Please sign in to comment.