Skip to content
Merged
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
7 changes: 0 additions & 7 deletions codeflash/lsp/beta.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,10 +292,3 @@ def perform_function_optimization( # noqa: PLR0911
"extra": f"Speedup: {speedup:.2f}x faster",
"optimization": optimized_source,
}


if __name__ == "__main__":
from codeflash.cli_cmds.console import console

console.quiet = True
server.start_io()
23 changes: 22 additions & 1 deletion codeflash/lsp/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from pathlib import Path
from typing import TYPE_CHECKING, Any

from lsprotocol.types import INITIALIZE
from lsprotocol.types import INITIALIZE, MessageType, LogMessageParams
from pygls import uris
from pygls.protocol import LanguageServerProtocol, lsp_method
from pygls.server import LanguageServer
Expand Down Expand Up @@ -55,3 +55,24 @@ def initialize_optimizer(self, config_file: Path) -> None:
args.no_pr = True # LSP server should not create PRs
args = process_pyproject_config(args)
self.optimizer = Optimizer(args)

def show_message_log(self, message: str, message_type: str) -> None:
"""Send a log message to the client's output channel.

Args:
message: The message to log
message_type: String type - "Info", "Warning", "Error", or "Log"
"""
# Convert string message type to LSP MessageType enum
type_mapping = {
"Info": MessageType.Info,
"Warning": MessageType.Warning,
"Error": MessageType.Error,
"Log": MessageType.Log
}

lsp_message_type = type_mapping.get(message_type, MessageType.Info)

# Send log message to client (appears in output channel)
log_params = LogMessageParams(type=lsp_message_type, message=message)
self.lsp.notify("window/logMessage", log_params)
48 changes: 48 additions & 0 deletions codeflash/lsp/server_entry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
"""This script is the dedicated entry point for the Codeflash Language Server.
It initializes the server and redirects its logs to stderr so that the
VS Code client can display them in the output channel.

This script is run by the VS Code extension and is not intended to be
executed directly by users.
"""

import logging
import sys

from codeflash.lsp.beta import server


# Configure logging to stderr for VS Code output channel
def setup_logging():
# Clear any existing handlers to prevent conflicts
root_logger = logging.getLogger()
root_logger.handlers.clear()

# Set up stderr handler for VS Code output channel with [LSP-Server] prefix
handler = logging.StreamHandler(sys.stderr)
handler.setFormatter(logging.Formatter("[LSP-Server] %(asctime)s [%(levelname)s]: %(message)s"))

# Configure root logger
root_logger.addHandler(handler)
root_logger.setLevel(logging.INFO)

# Also configure the pygls logger specifically
pygls_logger = logging.getLogger("pygls")
pygls_logger.setLevel(logging.INFO)

return root_logger


if __name__ == "__main__":
# Set up logging
log = setup_logging()
log.info("Starting Codeflash Language Server...")

# Silence the console module to prevent stdout pollution
from codeflash.cli_cmds.console import console

console.quiet = True
# console.enable()

# Start the language server
server.start_io()
Loading