lsp-proxy/lsp_proxy/__init__.py

39 lines
1.1 KiB
Python
Executable File

import os
import sys
import inspect
from .lsp import LspServer, handler, method, command
from .java import Java
def find_server_classes (values=None):
values = values or globals()
return dict([(item[0].lower(), item[1]) for item in values.items() if inspect.isclass(item[1]) and LspServer in inspect.getmro(item[1])])
def select_server_class (argument):
classes = find_server_classes()
if argument.lower() in classes:
return classes[argument]
if os.path.isfile(argument):
script_locals = {
"LspServer": LspServer,
"handler": handler,
"method": method,
"command": command
}
with open(argument) as server_script:
exec(server_script.read(), script_locals)
return [item[1] for item in find_server_classes(script_locals).items() if not item[1] == LspServer][0]
def main ():
server_class = select_server_class(sys.argv[1])
server = server_class(sys.argv[2:])
try:
server.start()
except Exception as e:
server.close()
raise e