xonsh/xontrib/jedi.xsh
Sean Farley 22a078377d jedi: refactor completions
This fixes jedi completions backtrace in the scenario where
CASE_SENSITIVE_COMPLETIONS is set.
2019-10-02 15:01:05 -05:00

51 lines
1.2 KiB
Text

"""Jedi-based completer for Python-mode."""
import builtins
import importlib
from xonsh.lazyasd import lazyobject, lazybool
__all__ = ()
@lazybool
def HAS_JEDI():
"""``True`` if `jedi` is available, else ``False``."""
spec = importlib.util.find_spec('jedi')
return (spec is not None)
@lazyobject
def jedi():
if HAS_JEDI:
import jedi as m
else:
m = None
return m
def complete_jedi(prefix, line, start, end, ctx):
"""Jedi-based completer for Python-mode."""
if not HAS_JEDI:
return set()
src = builtins.__xonsh__.shell.shell.accumulated_inputs + line
script = jedi.api.Interpreter(src, [ctx], column=end)
script_comp = set()
try:
script_comp = script.completions()
except Exception:
pass
if builtins.__xonsh__.env.get('CASE_SENSITIVE_COMPLETIONS'):
rtn = {x.name_with_symbols for x in script_comp
if x.name_with_symbols.startswith(prefix)}
else:
rtn = {x.name_with_symbols for x in script_comp}
return rtn
# register the completer
builtins.__xonsh__.ctx['complete_jedi'] = complete_jedi
completer add jedi complete_jedi end
completer remove python_mode
del builtins.__xonsh__.ctx['complete_jedi']