Skip to content

Commit 96a89f3

Browse files
committed
Create dedicated server entry point to prevent crashes
1 parent fd9781d commit 96a89f3

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

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

0 commit comments

Comments
 (0)