From f20733fbfa3dbc8ced90354a86a4bd3767b9522b Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Thu, 10 Jul 2025 01:34:23 +0200 Subject: [PATCH] Only start the language server if in LS mode (not JetBrains mode) --- src/serena/agent.py | 11 +++++++++-- .../resources/config/internal_modes/jetbrains.yml | 1 + src/serena/tools/tools_base.py | 10 ++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/serena/agent.py b/src/serena/agent.py index b799c4e..5d98695 100644 --- a/src/serena/agent.py +++ b/src/serena/agent.py @@ -361,6 +361,12 @@ class SerenaAgent: future = self.issue_task(task) return future.result() + def is_using_language_server(self) -> bool: + """ + :return: whether this agent uses language server-based code analysis + """ + return not self.serena_config.jetbrains + def _activate_project(self, project: Project) -> None: log.info(f"Activating {project.project_name} at {project.project_root}") self._active_project = project @@ -376,8 +382,9 @@ class SerenaAgent: self.reset_language_server() assert self.language_server is not None - # initialize the language server in the background - self.issue_task(init_language_server) + # initialize the language server in the background (if in language server mode) + if self.is_using_language_server(): + self.issue_task(init_language_server) if self._project_activation_callback is not None: self._project_activation_callback() diff --git a/src/serena/resources/config/internal_modes/jetbrains.yml b/src/serena/resources/config/internal_modes/jetbrains.yml index a7de011..937115c 100644 --- a/src/serena/resources/config/internal_modes/jetbrains.yml +++ b/src/serena/resources/config/internal_modes/jetbrains.yml @@ -7,6 +7,7 @@ excluded_tools: - find_symbol - find_referencing_symbols - get_symbols_overview + - restart_language_server included_optional_tools: - jet_brains_find_symbol - jet_brains_find_symbol_references diff --git a/src/serena/tools/tools_base.py b/src/serena/tools/tools_base.py index c1851f5..913eb66 100644 --- a/src/serena/tools/tools_base.py +++ b/src/serena/tools/tools_base.py @@ -46,6 +46,8 @@ class Component(ABC): return self.agent.memories_manager def create_language_server_symbol_retriever(self) -> LanguageServerSymbolRetriever: + if not self.agent.is_using_language_server(): + raise Exception("Cannot create LanguageServerSymbolRetriever; agent is not in language server mode.") language_server = self.agent.language_server assert language_server is not None return LanguageServerSymbolRetriever(language_server, agent=self.agent) @@ -57,10 +59,10 @@ class Component(ABC): def create_code_editor(self) -> "CodeEditor": from ..code_editor import JetBrainsCodeEditor, LanguageServerCodeEditor - if self.agent.serena_config.jetbrains: - return JetBrainsCodeEditor(project=self.project, agent=self.agent) - else: + if self.agent.is_using_language_server(): return LanguageServerCodeEditor(self.create_language_server_symbol_retriever(), agent=self.agent) + else: + return JetBrainsCodeEditor(project=self.project, agent=self.agent) @property def lines_read(self) -> "LinesRead": @@ -223,7 +225,7 @@ class Tool(Component): "Error: No active project. Ask to user to select a project from this list: " + f"{self.agent.serena_config.project_names}" ) - if not self.agent.is_language_server_running(): + if self.agent.is_using_language_server() and not self.agent.is_language_server_running(): log.info("Language server is not running. Starting it ...") self.agent.reset_language_server()