39 lines
1.1 KiB
Python
Executable File
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
|