From edb07bc823c401837a65826d0ad0c1bddd2d0e60 Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Wed, 9 Jul 2025 19:49:42 +0200 Subject: [PATCH] Move class Project to new module serena.project --- src/serena/agent.py | 3 ++- src/serena/code_editor.py | 2 +- src/serena/config/serena_config.py | 26 +----------------------- src/serena/project.py | 32 ++++++++++++++++++++++++++++++ src/serena/symbol.py | 2 +- test/serena/test_serena_agent.py | 3 ++- 6 files changed, 39 insertions(+), 29 deletions(-) create mode 100644 src/serena/project.py diff --git a/src/serena/agent.py b/src/serena/agent.py index f570ac3d..c8128633 100644 --- a/src/serena/agent.py +++ b/src/serena/agent.py @@ -23,11 +23,12 @@ from sensai.util.logging import LogTime from serena import serena_version from serena.config.context_mode import SerenaAgentContext, SerenaAgentMode -from serena.config.serena_config import Project, SerenaConfig, ToolSet, get_serena_managed_dir +from serena.config.serena_config import SerenaConfig, ToolSet, get_serena_managed_dir from serena.constants import ( SERENA_LOG_FORMAT, ) from serena.dashboard import MemoryLogHandler, SerenaDashboardAPI +from serena.project import Project from serena.prompt_factory import SerenaPromptFactory from serena.symbol import SymbolManager from serena.tools import Tool, ToolRegistry diff --git a/src/serena/code_editor.py b/src/serena/code_editor.py index b0d6de37..fccf047d 100644 --- a/src/serena/code_editor.py +++ b/src/serena/code_editor.py @@ -11,7 +11,7 @@ from solidlsp import SolidLanguageServer from solidlsp.ls import LSPFileBuffer from solidlsp.ls_utils import TextUtils -from .config.serena_config import Project +from .project import Project from .tools.jetbrains_plugin_client import JetBrainsPluginClient if TYPE_CHECKING: diff --git a/src/serena/config/serena_config.py b/src/serena/config/serena_config.py index 1f710bb1..7b1b2be1 100644 --- a/src/serena/config/serena_config.py +++ b/src/serena/config/serena_config.py @@ -23,6 +23,7 @@ from serena.constants import ( SELENA_CONFIG_TEMPLATE_FILE, SERENA_MANAGED_DIR_NAME, ) +from serena.project import Project from serena.util.general import load_yaml, save_yaml from serena.util.inspection import determine_programming_language_composition from solidlsp.ls_config import Language @@ -224,31 +225,6 @@ class ProjectConfig(ToolInclusionDefinition, ToStringMixin): return cls._from_dict(yaml_data) -@dataclass -class Project: - project_root: str - project_config: ProjectConfig - - @property - def project_name(self) -> str: - return self.project_config.project_name - - @property - def language(self) -> Language: - return self.project_config.language - - @classmethod - def load(cls, project_root: str | Path, autogenerate: bool = True) -> Self: - project_root = Path(project_root).resolve() - if not project_root.exists(): - raise FileNotFoundError(f"Project root not found: {project_root}") - project_config = ProjectConfig.load(project_root, autogenerate=autogenerate) - return cls(project_root=str(project_root), project_config=project_config) - - def path_to_project_yml(self) -> str: - return os.path.join(self.project_root, self.project_config.rel_path_to_project_yml()) - - @dataclass(kw_only=True) class SerenaConfig(ToolInclusionDefinition, ToStringMixin): """ diff --git a/src/serena/project.py b/src/serena/project.py new file mode 100644 index 00000000..321a6223 --- /dev/null +++ b/src/serena/project.py @@ -0,0 +1,32 @@ +import os +from dataclasses import dataclass +from pathlib import Path +from typing import Self + +from serena.config.serena_config import ProjectConfig +from solidlsp.ls_config import Language + + +@dataclass +class Project: + project_root: str + project_config: ProjectConfig + + @property + def project_name(self) -> str: + return self.project_config.project_name + + @property + def language(self) -> Language: + return self.project_config.language + + @classmethod + def load(cls, project_root: str | Path, autogenerate: bool = True) -> Self: + project_root = Path(project_root).resolve() + if not project_root.exists(): + raise FileNotFoundError(f"Project root not found: {project_root}") + project_config = ProjectConfig.load(project_root, autogenerate=autogenerate) + return cls(project_root=str(project_root), project_config=project_config) + + def path_to_project_yml(self) -> str: + return os.path.join(self.project_root, self.project_config.rel_path_to_project_yml()) diff --git a/src/serena/symbol.py b/src/serena/symbol.py index 3a599b50..8161e94f 100644 --- a/src/serena/symbol.py +++ b/src/serena/symbol.py @@ -13,7 +13,7 @@ from solidlsp import SolidLanguageServer from solidlsp.ls import ReferenceInSymbol as LSPReferenceInSymbol from solidlsp.ls_types import Position, SymbolKind, UnifiedSymbolInformation -from .config.serena_config import Project +from .project import Project if TYPE_CHECKING: from .agent import SerenaAgent diff --git a/test/serena/test_serena_agent.py b/test/serena/test_serena_agent.py index 460c124c..8b2a98cf 100644 --- a/test/serena/test_serena_agent.py +++ b/test/serena/test_serena_agent.py @@ -6,7 +6,8 @@ import pytest import test.solidlsp.clojure as clj from serena.agent import SerenaAgent -from serena.config.serena_config import Project, ProjectConfig, SerenaConfig +from serena.config.serena_config import ProjectConfig, SerenaConfig +from serena.project import Project from serena.tools import FindReferencingSymbolsTool, FindSymbolTool from solidlsp.ls_config import Language from test.conftest import get_repo_path