From 163a0b5db116e2d671bbf1bf8ce400b8b834ad41 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Tue, 8 Aug 2017 04:40:45 +0200 Subject: [PATCH] Use Vim's pythonx mechanism Move jedi_vim.py and the jedi submodule into pythonx, which gets added to Vim's internal sys.path. While jedi cannot be imported directly from there, it still makes sense for consistency. --- .gitmodules | 2 +- autoload/jedi.vim | 37 +++++++++++------------------- jedi => pythonx/jedi | 0 jedi_vim.py => pythonx/jedi_vim.py | 5 ++++ 4 files changed, 20 insertions(+), 24 deletions(-) rename jedi => pythonx/jedi (100%) rename jedi_vim.py => pythonx/jedi_vim.py (99%) diff --git a/.gitmodules b/.gitmodules index 3bfce98..e08afc4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "jedi"] - path = jedi + path = pythonx/jedi url = https://github.com/davidhalter/jedi.git diff --git a/autoload/jedi.vim b/autoload/jedi.vim index 8f81175..7a4a6af 100644 --- a/autoload/jedi.vim +++ b/autoload/jedi.vim @@ -152,29 +152,20 @@ function! jedi#setup_py_version(py_version) abort execute 'command! -nargs=1 PythonJedi '.cmd_exec.' ' - let s:init_outcome = 0 - PythonJedi << EOF -try: - import vim - import os, sys - jedi_path = os.path.join(vim.eval('expand(s:script_path)'), 'jedi') - sys.path.insert(0, jedi_path) - - jedi_vim_path = vim.eval('expand(s:script_path)') - if jedi_vim_path not in sys.path: # Might happen when reloading. - sys.path.insert(0, jedi_vim_path) -except Exception as excinfo: - vim.command('let s:init_outcome = "error when adding to sys.path: {0}: {1}"'.format(excinfo.__class__.__name__, excinfo)) -else: - try: - import jedi_vim - except Exception as excinfo: - vim.command('let s:init_outcome = "error when importing jedi_vim: {0}: {1}"'.format(excinfo.__class__.__name__, excinfo)) - else: - vim.command('let s:init_outcome = 1') - finally: - sys.path.remove(jedi_path) -EOF + let init_lines = [ + \ 'import vim', + \ 'vim.command(''let s:init_outcome = 0'')', + \ 'try:', + \ ' import jedi_vim', + \ 'except Exception as exc:', + \ ' vim.command(''let s:init_outcome = "could not import jedi_vim: {0}: {1}"''.format(exc.__class__.__name__, exc))', + \ 'else:', + \ ' vim.command(''let s:init_outcome = 1'')'] + try + exe 'PythonJedi exec('''.escape(join(init_lines, '\n'), "'").''')' + catch + throw printf('jedi#setup_py_version: failed to run Python for initialization: %s.', v:exception) + endtry if !exists('s:init_outcome') throw 'jedi#setup_py_version: failed to run Python for initialization.' elseif s:init_outcome isnot 1 diff --git a/jedi b/pythonx/jedi similarity index 100% rename from jedi rename to pythonx/jedi diff --git a/jedi_vim.py b/pythonx/jedi_vim.py similarity index 99% rename from jedi_vim.py rename to pythonx/jedi_vim.py index 5ddd80a..f12cfbb 100644 --- a/jedi_vim.py +++ b/pythonx/jedi_vim.py @@ -93,6 +93,9 @@ def echo_highlight(msg): str(msg).replace('"', '\\"'))) +jedi_path = os.path.join(os.path.dirname(__file__), 'jedi') +sys.path.insert(0, jedi_path) + try: import jedi except ImportError as e: @@ -115,6 +118,8 @@ else: version = utils.version_info() if version < (0, 7): echo_highlight('Please update your Jedi version, it is too old.') +finally: + sys.path.remove(jedi_path) def catch_and_print_exceptions(func):