Skip to content

Commit 67a9e79

Browse files
authored
Create dedicated server entry point to prevent crashes (#464)
* Create dedicated server entry point to prevent crashes * wrap in main block * clean up beta.py
1 parent 9760a51 commit 67a9e79

File tree

3 files changed

+70
-8
lines changed

3 files changed

+70
-8
lines changed

codeflash/lsp/beta.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -292,10 +292,3 @@ def perform_function_optimization( # noqa: PLR0911
292292
"extra": f"Speedup: {speedup:.2f}x faster",
293293
"optimization": optimized_source,
294294
}
295-
296-
297-
if __name__ == "__main__":
298-
from codeflash.cli_cmds.console import console
299-
300-
console.quiet = True
301-
server.start_io()

codeflash/lsp/server.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from pathlib import Path
44
from typing import TYPE_CHECKING, Any
55

6-
from lsprotocol.types import INITIALIZE
6+
from lsprotocol.types import INITIALIZE, MessageType, LogMessageParams
77
from pygls import uris
88
from pygls.protocol import LanguageServerProtocol, lsp_method
99
from pygls.server import LanguageServer
@@ -55,3 +55,24 @@ def initialize_optimizer(self, config_file: Path) -> None:
5555
args.no_pr = True # LSP server should not create PRs
5656
args = process_pyproject_config(args)
5757
self.optimizer = Optimizer(args)
58+
59+
def show_message_log(self, message: str, message_type: str) -> None:
60+
"""Send a log message to the client's output channel.
61+
62+
Args:
63+
message: The message to log
64+
message_type: String type - "Info", "Warning", "Error", or "Log"
65+
"""
66+
# Convert string message type to LSP MessageType enum
67+
type_mapping = {
68+
"Info": MessageType.Info,
69+
"Warning": MessageType.Warning,
70+
"Error": MessageType.Error,
71+
"Log": MessageType.Log
72+
}
73+
74+
lsp_message_type = type_mapping.get(message_type, MessageType.Info)
75+
76+
# Send log message to client (appears in output channel)
77+
log_params = LogMessageParams(type=lsp_message_type, message=message)
78+
self.lsp.notify("window/logMessage", log_params)

codeflash/lsp/server_entry.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
"""This script is the dedicated entry point for the Codeflash Language Server.
2+
It initializes the server and redirects its logs to stderr so that the
3+
VS Code client can display them in the output channel.
4+
5+
This script is run by the VS Code extension and is not intended to be
6+
executed directly by users.
7+
"""
8+
9+
import logging
10+
import sys
11+
12+
from codeflash.lsp.beta import server
13+
14+
15+
# Configure logging to stderr for VS Code output channel
16+
def setup_logging():
17+
# Clear any existing handlers to prevent conflicts
18+
root_logger = logging.getLogger()
19+
root_logger.handlers.clear()
20+
21+
# Set up stderr handler for VS Code output channel with [LSP-Server] prefix
22+
handler = logging.StreamHandler(sys.stderr)
23+
handler.setFormatter(logging.Formatter("[LSP-Server] %(asctime)s [%(levelname)s]: %(message)s"))
24+
25+
# Configure root logger
26+
root_logger.addHandler(handler)
27+
root_logger.setLevel(logging.INFO)
28+
29+
# Also configure the pygls logger specifically
30+
pygls_logger = logging.getLogger("pygls")
31+
pygls_logger.setLevel(logging.INFO)
32+
33+
return root_logger
34+
35+
36+
if __name__ == "__main__":
37+
# Set up logging
38+
log = setup_logging()
39+
log.info("Starting Codeflash Language Server...")
40+
41+
# Silence the console module to prevent stdout pollution
42+
from codeflash.cli_cmds.console import console
43+
44+
console.quiet = True
45+
# console.enable()
46+
47+
# Start the language server
48+
server.start_io()

0 commit comments

Comments
 (0)