Compare commits

...

3 Commits

2 changed files with 21 additions and 9 deletions

View File

@@ -8,7 +8,7 @@ from .lsp import LspServer, command, get_data_home
FILE_URI = "file://" FILE_URI = "file://"
VERSION = "1.1.1" VERSION = "1.3.0"
DOWNLOADS_URI = "http://download.eclipse.org/jdtls/milestones/{version}/{file}" DOWNLOADS_URI = "http://download.eclipse.org/jdtls/milestones/{version}/{file}"
LATEST = "latest.txt" LATEST = "latest.txt"
@@ -28,7 +28,7 @@ def locate_launcher_configuration (jdt_ls_path):
def log (message, *args, **kwargs): def log (message, *args, **kwargs):
print(message.format(*args, **kwargs), file=sys.stderr) print(message.format(*args, **kwargs), file=sys.stderr)
def download_jdt_ls (destination): def download_jdt_ls (version, destination):
if not os.path.isdir(destination): if not os.path.isdir(destination):
os.makedirs(destination) os.makedirs(destination)
@@ -40,12 +40,12 @@ def download_jdt_ls (destination):
log("Currently downloaded version is {version}:", version=current_version) log("Currently downloaded version is {version}:", version=current_version)
latest_version = None latest_version = None
with request.urlopen(DOWNLOADS_URI.format(version=VERSION, file=LATEST)) as f: with request.urlopen(DOWNLOADS_URI.format(version=version, file=LATEST)) as f:
latest_version = f.read().decode().strip() latest_version = f.read().decode().strip()
log("Latest available version is {version}:", version=latest_version) log("Latest available version is {version}:", version=latest_version)
if not latest_version == current_version: if not latest_version == current_version:
latest_uri = DOWNLOADS_URI.format(version=VERSION, file=latest_version) latest_uri = DOWNLOADS_URI.format(version=version, file=latest_version)
log("Downloading latest version from: {uri}:", uri=latest_uri) log("Downloading latest version from: {uri}:", uri=latest_uri)
with request.urlopen(latest_uri) as f: with request.urlopen(latest_uri) as f:
with tarfile.open(fileobj=f, mode="r|gz") as tar: with tarfile.open(fileobj=f, mode="r|gz") as tar:
@@ -61,12 +61,25 @@ def download_jdt_ls (destination):
def locate_lombok (): def locate_lombok ():
return os.path.join(os.environ['HOME'], ".m2/repository/org/projectlombok/lombok/1.18.16/lombok-1.18.16.jar") return os.path.join(os.environ['HOME'], ".m2/repository/org/projectlombok/lombok/1.18.16/lombok-1.18.16.jar")
def get_argument (arguments, arg_name):
if not arg_name in args:
return
value = arguments.pop(arguments.index(arg_name) + 1)
arguments.remove(arg_name)
return value
class Java(LspServer): class Java(LspServer):
def __init__ (self, arguments): def __init__ (self, arguments):
self.path = arguments[0] if arguments else None self.path = arguments[0] if arguments else None
if self.path is None or not os.path.exists(self.path): if self.path is None or not os.path.exists(self.path):
self.path = download_jdt_ls(os.path.join(get_data_home(), "java", "jdt.ls")) version = VERSION
if "--version" in arguments:
version = get_argument(arguments, "--version")
self.path = download_jdt_ls(version, os.path.join(get_data_home(), "java", "jdt.ls", version))
else: else:
self.path = locate_product_directory(self.path) self.path = locate_product_directory(self.path)
@@ -77,8 +90,7 @@ class Java(LspServer):
data_directory = None data_directory = None
if "--data" in arguments: if "--data" in arguments:
data_directory = arguments.pop(arguments.index("--data") + 1) data_directory = get_argument(arguments, "--data")
arguments.remove("--data")
else: else:
data_directory = os.path.join(get_data_home(), "java", "data") data_directory = os.path.join(get_data_home(), "java", "data")

View File

@@ -101,10 +101,10 @@ class LspServer:
with Popen(self.command, stdin=PIPE, stdout=PIPE) as process: with Popen(self.command, stdin=PIPE, stdout=PIPE) as process:
self.process = process self.process = process
self.process_reader = Thread(target=process_messages, args=["process.stdout reader", process.stdout, sys.stdout.buffer, handlers]) self.process_reader = Thread(target=process_messages, args=["process.stdout -> sys.stdout reader", process.stdout, sys.stdout.buffer, handlers])
self.process_reader.start() self.process_reader.start()
process_messages("process.stdin reader", sys.stdin.buffer, process.stdin, handlers) process_messages("sys.stdin -> process.stdin", sys.stdin.buffer, process.stdin, handlers)
log("lsp process ended") log("lsp process ended")