Update language server instantiation to always use SolidLanguageServer

This commit is contained in:
Dominik Jain
2025-06-23 17:03:36 +02:00
parent 605f8fba71
commit e60d42211a
4 changed files with 11 additions and 31 deletions
+7 -17
View File
@@ -33,7 +33,6 @@ from sensai.util import logging
from sensai.util.logging import LOG_DEFAULT_FORMAT, FallbackHandler
from sensai.util.string import ToStringMixin, dict_string
from solidlsp import SolidLanguageServer as SyncLanguageServer
from serena import serena_version
from serena.config import SerenaAgentContext, SerenaAgentMode
from serena.constants import (
@@ -42,7 +41,6 @@ from serena.constants import (
REPO_ROOT,
SELENA_CONFIG_TEMPLATE_FILE,
SERENA_MANAGED_DIR_NAME,
USE_SOLID_LSP,
)
from serena.dashboard import MemoryLogHandler, SerenaDashboardAPI
from serena.prompt_factory import PromptFactory, SerenaPromptFactory
@@ -53,6 +51,7 @@ from serena.util.general import load_yaml, save_yaml
from serena.util.inspection import determine_programming_language_composition, iter_subclasses
from serena.util.shell import execute_shell_command
from serena.util.thread import ExecutionResult, execute_with_timeout
from solidlsp import SolidLanguageServer as SyncLanguageServer
from solidlsp.ls import SolidLanguageServer
from solidlsp.multilspy_config import Language, MultilspyConfig
from solidlsp.multilspy_logger import MultilspyLogger
@@ -678,21 +677,12 @@ def create_ls_for_project(
)
ls_logger = MultilspyLogger(log_level=log_level)
log.info(f"Creating language server instance for {project_instance.project_root}.")
if USE_SOLID_LSP:
ls = SolidLanguageServer.create(
multilspy_config,
ls_logger,
project_instance.project_root,
timeout=ls_timeout,
)
return cast(SyncLanguageServer, ls) # TODO: Fix type
else:
return SyncLanguageServer.create(
multilspy_config,
ls_logger,
project_instance.project_root,
timeout=ls_timeout,
)
return SolidLanguageServer.create(
multilspy_config,
ls_logger,
project_instance.project_root,
timeout=ls_timeout,
)
@click.command()
+1 -5
View File
@@ -19,8 +19,4 @@ DEFAULT_MODES = ("interactive", "editing")
PROJECT_TEMPLATE_FILE = str(_serena_pkg_path / "resources" / "project.template.yml")
SELENA_CONFIG_TEMPLATE_FILE = str(_serena_pkg_path / "resources" / "serena_config.template.yml")
USE_SOLID_LSP = True
"""Whether to use Solid LSP instead of multilspy for language server operations.
Multilspy uses asyncio, which creates many problems like deadlocks and requires full process
isolation (and even then some issues remain).
"""
USE_PROCESS_ISOLATION = False
+2 -3
View File
@@ -36,7 +36,7 @@ from serena.agent import (
show_fatal_exception_safe,
)
from serena.config import RegisteredContext, SerenaAgentContext, SerenaAgentMode
from serena.constants import DEFAULT_CONTEXT, DEFAULT_MODES, USE_SOLID_LSP
from serena.constants import DEFAULT_CONTEXT, DEFAULT_MODES, USE_SOLID_LSP, USE_PROCESS_ISOLATION
from serena.process_isolated_agent import (
ProcessIsolatedDashboard,
ProcessIsolatedSerenaAgent,
@@ -587,10 +587,9 @@ def start_mcp_server(
project_file = project_file_arg if project_file_arg is not None else project
mcp_factory: SerenaMCPFactory
if USE_SOLID_LSP:
if not USE_PROCESS_ISOLATION:
mcp_factory = SerenaMCPFactorySingleProcess(context=context, project=project_file)
else:
# using multilspy requires process isolation to prevent asyncio contamination
mcp_factory = SerenaMCPFactoryWithProcessIsolation(context=context, project=project_file)
# Use process isolation by default to prevent asyncio event loop contamination
+1 -6
View File
@@ -45,12 +45,7 @@ def create_ls(
ignored_paths.extend(spec.patterns)
config = MultilspyConfig(code_language=language, ignored_paths=ignored_paths, trace_lsp_communication=trace_lsp_communication)
logger = MultilspyLogger(log_level=log_level)
if USE_SOLID_LSP:
ls = SolidLanguageServer.create(config, logger, repo_path)
return cast(SyncLanguageServer, ls) # TODO: Fix type
else:
return SyncLanguageServer.create(config, logger, repo_path)
return SolidLanguageServer.create(config, logger, repo_path)
def create_default_ls(language: Language) -> SyncLanguageServer: