Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 24 additions & 16 deletions src/multilspy/language_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ def create(cls, config: MultilspyConfig, logger: MultilspyLogger, repository_roo
from multilspy.language_servers.typescript_language_server.typescript_language_server import (
TypeScriptLanguageServer,
)

return TypeScriptLanguageServer(config, logger, repository_root_path)
elif config.code_language == Language.GO:
from multilspy.language_servers.gopls.gopls import Gopls
Expand Down Expand Up @@ -194,8 +195,10 @@ async def start_server(self) -> AsyncIterator["LanguageServer"]:
```
"""
self.server_started = True
yield self
self.server_started = False
try:
yield self
finally:
self.server_started = False

# TODO: Add support for more LSP features

Expand All @@ -221,8 +224,6 @@ def open_file(self, relative_file_path: str) -> Iterator[None]:
assert self.open_file_buffers[uri].ref_count >= 1

self.open_file_buffers[uri].ref_count += 1
yield
self.open_file_buffers[uri].ref_count -= 1
else:
contents = FileUtils.read_file(self.logger, absolute_file_path)

Expand All @@ -239,18 +240,20 @@ def open_file(self, relative_file_path: str) -> Iterator[None]:
}
}
)
try:
yield
finally:
self.open_file_buffers[uri].ref_count -= 1

if self.open_file_buffers[uri].ref_count == 0:
self.server.notify.did_close_text_document(
{
LSPConstants.TEXT_DOCUMENT: {
LSPConstants.URI: uri,
if self.open_file_buffers[uri].ref_count == 0:
self.server.notify.did_close_text_document(
{
LSPConstants.TEXT_DOCUMENT: {
LSPConstants.URI: uri,
}
}
}
)
del self.open_file_buffers[uri]
)
del self.open_file_buffers[uri]

def insert_text_at_position(
self, relative_file_path: str, line: int, column: int, text_to_be_inserted: str
Expand Down Expand Up @@ -686,6 +689,7 @@ async def request_workspace_symbol(self, query: str) -> Union[List[multilspy_typ

return ret


@ensure_all_methods_implemented(LanguageServer)
class SyncLanguageServer:
"""
Expand Down Expand Up @@ -771,10 +775,14 @@ def start_server(self) -> Iterator["SyncLanguageServer"]:
loop_thread.start()
ctx = self.language_server.start_server()
asyncio.run_coroutine_threadsafe(ctx.__aenter__(), loop=self.loop).result()
yield self
asyncio.run_coroutine_threadsafe(ctx.__aexit__(None, None, None), loop=self.loop).result()
self.loop.call_soon_threadsafe(self.loop.stop)
loop_thread.join()
try:
yield self
finally:
asyncio.run_coroutine_threadsafe(
ctx.__aexit__(None, None, None), loop=self.loop
).result()
self.loop.call_soon_threadsafe(self.loop.stop)
loop_thread.join()

def request_definition(self, file_path: str, line: int, column: int) -> List[multilspy_types.Location]:
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ async def window_log_message(msg):
# set ready flag
self.server_ready.set()
await self.server_ready.wait()

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,8 @@ async def window_log_message(msg):
)

self.server.notify.initialized({})

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()
10 changes: 5 additions & 5 deletions src/multilspy/language_servers/eclipse_jdtls/eclipse_jdtls.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,8 +398,8 @@ async def do_nothing(params):

# TODO: Add comments about why we wait here, and how this can be optimized
await self.service_ready_event.wait()

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()
10 changes: 5 additions & 5 deletions src/multilspy/language_servers/gopls/gopls.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@ async def do_nothing(params):
# gopls server is typically ready immediately after initialization
self.server_ready.set()
await self.server_ready.wait()

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,8 @@ async def window_log_message(msg):
}

self.server.notify.initialized({})

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()
Original file line number Diff line number Diff line change
Expand Up @@ -223,12 +223,15 @@ async def window_log_message(msg):

self.server.notify.initialized({})
self.completions_available.set()

yield self

try:
await self.server.shutdown()
except Exception as e:
self.logger.log(f"Error during Kotlin server shutdown: {str(e)}", logging.WARNING)
yield self
finally:
await self.server.stop()
try:
await self.server.shutdown()
except Exception as e:
self.logger.log(
f"Error during Kotlin server shutdown: {str(e)}",
logging.WARNING,
)
finally:
await self.server.stop()
10 changes: 5 additions & 5 deletions src/multilspy/language_servers/omnisharp/omnisharp.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,8 +396,8 @@ async def workspace_configuration_handler(params):

await self.definition_available.wait()
await self.references_available.wait()

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()
10 changes: 5 additions & 5 deletions src/multilspy/language_servers/rust_analyzer/rust_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,8 @@ async def window_log_message(msg):
self.completions_available.set()

await self.server_ready.wait()

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()
10 changes: 5 additions & 5 deletions src/multilspy/language_servers/solargraph/solargraph.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ async def window_log_message(msg):

self.server_ready.set()
await self.server_ready.wait()

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,8 @@ async def window_log_message(msg):
# TypeScript server is typically ready immediately after initialization
self.server_ready.set()
await self.server_ready.wait()

yield self

await self.server.shutdown()
await self.server.stop()
try:
yield self
finally:
await self.server.shutdown()
await self.server.stop()