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