kislyuk / argcomplete

Python and tab completion, better together.
https://kislyuk.github.io/argcomplete/
Apache License 2.0
1.39k stars 129 forks source link

SuppressCompleter is not working #409

Closed Dramelac closed 1 year ago

Dramelac commented 1 year ago

Hello,

I try to disable the completer on some specific argument but using the SuppressCompleter completer doesn't work...

PoC code:

#!/usr/bin/env python
# PYTHON_ARGCOMPLETE_OK
import argparse
import argcomplete
from argcomplete.completers import SuppressCompleter

parser = argparse.ArgumentParser()

parser.add_argument("--mute").completer = SuppressCompleter

argcomplete.autocomplete(parser)
args = parser.parse_args()

When pressing TAB the default completer is still running by listing every files and directories.

Thank you for your help

Dramelac commented 1 year ago

Here is the output in debug mode:

$ ./testarg.py --mute 

word --mute split, lexer state: ' '
In trailing whitespace

LINE: './testarg.py --mute ' 
POINT: 20 
PREQUOTE: '' 
PREFIX: '' 
SUFFIX: '' 
WORDS: ['./testarg.py', '--mute']
Active parsers: [MonkeyPatchedIntrospectiveArgumentParser(prog='testarg.py', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)]
Visited positionals: [MonkeyPatchedIntrospectiveArgumentParser(prog='testarg.py', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)]
invoking parser with ['--mute']

exception <class 'SystemExit'> 2 while parsing args
all active parsers: [MonkeyPatchedIntrospectiveArgumentParser(prog='testarg.py', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)]
active_parser: MonkeyPatchedIntrospectiveArgumentParser(prog='testarg.py', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
optional options: ['-h', '--help', '--mute']
next_positional: None
Active actions (L=1): [IntrospectAction(option_strings=['--mute'], dest='mute', nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None)]
Resetting completions because IntrospectAction(option_strings=['--mute'], dest='mute', nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None) must consume the next argument
Activating completion for IntrospectAction(option_strings=['--mute'], dest='mute', nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None) <class 'argparse._StoreAction'>
Traceback (most recent call last):
  File "/tmp/testarg.py", line 11, in <module>
    argcomplete.autocomplete(parser)
  File "/tmp/venv/lib/python3.10/site-packages/argcomplete/__init__.py", line 232, in __call__
    completions = self._get_completions(comp_words, cword_prefix, cword_prequote, last_wordbreak_pos)
  File "/tmp/venv/lib/python3.10/site-packages/argcomplete/__init__.py", line 265, in _get_completions
    completions = self.collect_completions(active_parsers, parsed_args, cword_prefix, debug)
  File "/tmp/venv/lib/python3.10/site-packages/argcomplete/__init__.py", line 489, in collect_completions
    completions = self._complete_active_option(active_parser, next_positional, cword_prefix, parsed_args,
  File "/tmp/venv/lib/python3.10/site-packages/argcomplete/__init__.py", line 441, in _complete_active_option
    completions_from_callable = [c for c in completer(
TypeError: SuppressCompleter.__init__() got an unexpected keyword argument 'prefix'
evanunderscore commented 1 year ago

Try instantiating the completer, i.e. SuppressCompleter().