Skip to content

Commit 9c05130

Browse files
authored
Merge branch 'main' into standalone-fto-async
2 parents 207612c + 674e69e commit 9c05130

File tree

2 files changed

+43
-14
lines changed

2 files changed

+43
-14
lines changed

codeflash/lsp/beta.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def initialize_function_optimization(
110110

111111
if count == 0:
112112
server.show_message_log(f"No optimizable functions found for {params.functionName}", "Warning")
113-
cleanup_the_optimizer(server)
113+
server.cleanup_the_optimizer()
114114
return {"functionName": params.functionName, "status": "error", "message": "not found", "args": None}
115115

116116
fto = optimizable_funcs.popitem()[1][0]
@@ -217,6 +217,7 @@ def provide_api_key(server: CodeflashLanguageServer, params: ProvideApiKeyParams
217217

218218

219219
@server.feature("performFunctionOptimization")
220+
@server.thread()
220221
def perform_function_optimization( # noqa: PLR0911
221222
server: CodeflashLanguageServer, params: FunctionOptimizationParams
222223
) -> dict[str, str]:
@@ -337,14 +338,4 @@ def perform_function_optimization( # noqa: PLR0911
337338
"explanation": best_optimization.explanation_v2,
338339
}
339340
finally:
340-
cleanup_the_optimizer(server)
341-
342-
343-
def cleanup_the_optimizer(server: CodeflashLanguageServer) -> None:
344-
server.optimizer.cleanup_temporary_paths()
345-
# restore args and test cfg
346-
if server.optimizer.original_args_and_test_cfg:
347-
server.optimizer.args, server.optimizer.test_cfg = server.optimizer.original_args_and_test_cfg
348-
server.optimizer.args.function = None
349-
server.optimizer.current_worktree = None
350-
server.optimizer.current_function_optimizer = None
341+
server.cleanup_the_optimizer()

codeflash/lsp/server.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from __future__ import annotations
22

3+
import sys
34
from pathlib import Path
4-
from typing import TYPE_CHECKING, Any
5+
from threading import Event
6+
from typing import TYPE_CHECKING, Any, Optional, TextIO
57

68
from lsprotocol.types import INITIALIZE, LogMessageParams, MessageType
79
from pygls import uris
810
from pygls.protocol import LanguageServerProtocol, lsp_method
9-
from pygls.server import LanguageServer
11+
from pygls.server import LanguageServer, StdOutTransportAdapter, aio_readline
1012

1113
if TYPE_CHECKING:
1214
from lsprotocol.types import InitializeParams, InitializeResult
@@ -81,3 +83,39 @@ def show_message_log(self, message: str, message_type: str) -> None:
8183
# Send log message to client (appears in output channel)
8284
log_params = LogMessageParams(type=lsp_message_type, message=message)
8385
self.lsp.notify("window/logMessage", log_params)
86+
87+
def cleanup_the_optimizer(self) -> None:
88+
try:
89+
self.optimizer.cleanup_temporary_paths()
90+
# restore args and test cfg
91+
if self.optimizer.original_args_and_test_cfg:
92+
self.optimizer.args, self.optimizer.test_cfg = self.optimizer.original_args_and_test_cfg
93+
self.optimizer.args.function = None
94+
self.optimizer.current_worktree = None
95+
self.optimizer.current_function_optimizer = None
96+
except Exception:
97+
self.show_message_log("Failed to cleanup optimizer", "Error")
98+
99+
def start_io(self, stdin: Optional[TextIO] = None, stdout: Optional[TextIO] = None) -> None:
100+
self.show_message_log("Starting IO server", "Info")
101+
102+
self._stop_event = Event()
103+
transport = StdOutTransportAdapter(stdin or sys.stdin.buffer, stdout or sys.stdout.buffer)
104+
self.lsp.connection_made(transport)
105+
try:
106+
self.loop.run_until_complete(
107+
aio_readline(
108+
self.loop,
109+
self.thread_pool_executor,
110+
self._stop_event,
111+
stdin or sys.stdin.buffer,
112+
self.lsp.data_received,
113+
)
114+
)
115+
except BrokenPipeError:
116+
self.show_message_log("Connection to the client is lost! Shutting down the server.", "Error")
117+
except (KeyboardInterrupt, SystemExit):
118+
pass
119+
finally:
120+
self.cleanup_the_optimizer()
121+
self.shutdown()

0 commit comments

Comments
 (0)