mirror of
https://github.com/tiennm99/serena.git
synced 2026-09-02 16:20:41 +00:00
Update language server instantiation to always use SolidLanguageServer
This commit is contained in:
+7
-17
@@ -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()
|
||||
|
||||
@@ -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
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user