Source code for xonsh.completers.base

"""Base completer for xonsh."""

import collections.abc as cabc

from xonsh.completers.commands import complete_command
from xonsh.completers.path import contextual_complete_path
from xonsh.completers.python import complete_python
from xonsh.completers.tools import apply_lprefix, contextual_completer
from xonsh.parsers.completion_context import CompletionContext


[docs] @contextual_completer def complete_base(context: CompletionContext): """If the line is empty, complete based on valid commands, python names, and paths.""" # If we are completing the first argument, complete based on # valid commands and python names. if context.command is None or context.command.arg_index != 0: # don't do unnecessary completions return # get and unpack python completions python_comps = complete_python(context) or set() if isinstance(python_comps, cabc.Sequence): python_comps, python_comps_len = python_comps # type: ignore yield from apply_lprefix(python_comps, python_comps_len) else: yield from python_comps # add command completions yield from complete_command(context.command) # add paths, if needed if not context.command.prefix: path_comps, path_comp_len = contextual_complete_path( context.command, cdpath=False ) yield from apply_lprefix(path_comps, path_comp_len)