diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d0a2148 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.egg-info +__pycache__ +*.pyc diff --git a/lsp_proxy/__init__.py b/lsp_proxy/__init__.py new file mode 100755 index 0000000..d6cf9d3 --- /dev/null +++ b/lsp_proxy/__init__.py @@ -0,0 +1,38 @@ +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 diff --git a/java b/lsp_proxy/java.py similarity index 98% rename from java rename to lsp_proxy/java.py index 6f13d3f..588003d 100644 --- a/java +++ b/lsp_proxy/java.py @@ -1,6 +1,8 @@ import os import sys +from .lsp import LspServer, command + FILE_URI = "file://" def locate_product_directory (jdt_ls_path): diff --git a/lsp-proxy b/lsp_proxy/lsp.py old mode 100755 new mode 100644 similarity index 77% rename from lsp-proxy rename to lsp_proxy/lsp.py index f67f6e9..30c789b --- a/lsp-proxy +++ b/lsp_proxy/lsp.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - import os import sys import inspect @@ -106,33 +104,3 @@ class LspServer: if self.process: self.process.terminate() -def find_server_classes (values=None): - values = values or globals() - return dict([item 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 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] - -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 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..afc8fa0 --- /dev/null +++ b/setup.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from distutils.core import setup + +setup( + name='lsp-proxy', + version='0.0.1', + description='lsp-proxy is a proxy for language servers.', + author='Adrian Malacoda', + packages=['lsp_proxy'], + install_requires=[], + entry_points={ + 'console_scripts': [ + 'lsp-proxy = lsp_proxy:main' + ] + } +)