* Remove unnecessary PyCharm ignores. * Ignore intentional undefined attribute usage. * Add missing type hints. Fix existing type hints. * Fix docstrings and comments. * Use function to register completion handler. * Pass strings to display functions. * Fix CompositeAction handling of dest argument. * Use consistent types in expressions/assignments. * Use custom function to keep linters happy. * Add missing raise for custom exception. * Clean up key/value type handling in cloud plugins. * Use dataclass instead of dict for results. * Add custom type_guard function to check lists. * Ignore return type that can't be checked (yet). * Avoid changing types on local variables.
32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
"""Completers for use with argcomplete."""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import typing as t
|
|
|
|
from ..target import (
|
|
find_target_completion,
|
|
)
|
|
|
|
from .argparsing.argcompletion import (
|
|
OptionCompletionFinder,
|
|
)
|
|
|
|
|
|
def complete_target(completer: OptionCompletionFinder, prefix: str, parsed_args: argparse.Namespace, **_) -> t.List[str]:
|
|
"""Perform completion for the targets configured for the command being parsed."""
|
|
matches = find_target_completion(parsed_args.targets_func, prefix, completer.list_mode)
|
|
completer.disable_completion_mangling = completer.list_mode and len(matches) > 1
|
|
return matches
|
|
|
|
|
|
def complete_choices(choices: t.List[str], prefix: str, **_) -> t.List[str]:
|
|
"""Perform completion using the provided choices."""
|
|
matches = [choice for choice in choices if choice.startswith(prefix)]
|
|
return matches
|
|
|
|
|
|
def register_completer(action: argparse.Action, completer) -> None:
|
|
"""Register the given completer with the specified action."""
|
|
action.completer = completer # type: ignore[attr-defined] # intentionally using an attribute that does not exist
|