Source code for xonsh.completers.base

"""Base completer for xonsh."""
import collections.abc as cabc

from xonsh.completers.path import complete_path
from xonsh.completers.python import complete_python
from xonsh.completers.commands import complete_command


[docs]def complete_base(prefix, line, start, end, ctx): """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 line.strip() and prefix != line: # don't do unnecessary completions return set() # get and unpack python completions python_comps = complete_python(prefix, line, start, end, ctx) if isinstance(python_comps, cabc.Sequence): python_comps, python_comps_len = python_comps else: python_comps_len = None # add command completions out = python_comps | complete_command(prefix, line, start, end, ctx) # add paths, if needed if line.strip() == "": paths = complete_path(prefix, line, start, end, ctx, False) return (out | paths[0]), paths[1] elif prefix == line: if python_comps_len is None: return out else: return out, python_comps_len return set()