1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 05:30:07 +08:00
SpaceVim/bundle/nvim-yarp/pythonx/yarp.py
2020-06-18 23:07:37 +08:00

72 lines
1.6 KiB
Python

from importlib.util import find_spec
if find_spec('pynvim'):
from pynvim import attach, setup_logging
else:
from neovim import attach, setup_logging
import sys
import importlib
from os import environ
assert __name__ == "__main__"
if "" in sys.path:
sys.path.remove("")
serveraddr = sys.argv[1]
yarpid = int(sys.argv[2])
module = sys.argv[3]
module_obj = None
nvim = None
environ['NVIM_YARP_MODULE'] = module
setup_logging(module)
def on_request(method, args):
if hasattr(module_obj, method):
return getattr(module_obj, method)(*args)
else:
raise Exception('method %s not found' % method)
def on_notification(method, args):
if hasattr(module_obj, method):
getattr(module_obj, method)(*args)
else:
raise Exception('method %s not found' % method)
pass
def on_setup():
pass
try:
# create another connection to avoid synchronization issue?
if len(serveraddr.split(':')) == 2:
serveraddr, port = serveraddr.split(':')
port = int(port)
nvim = attach('tcp', address=serveraddr, port=port)
else:
nvim = attach('socket', path=serveraddr)
sys.modules['vim'] = nvim
sys.modules['nvim'] = nvim
paths = nvim.eval(r'globpath(&rtp,"pythonx",1) . "\n" .'
r' globpath(&rtp,"rplugin/python3",1)')
for path in paths.split("\n"):
if not path:
continue
if path not in sys.path:
sys.path.append(path)
module_obj = importlib.import_module(module)
nvim.call('yarp#core#channel_started', yarpid, nvim.channel_id)
nvim.run_loop(on_request, on_notification, on_setup)
finally:
nvim.close()