mirror of
https://github.com/tiennm99/serena.git
synced 2026-10-19 04:16:26 +00:00
RegisteredProject: pass SerenaConfig through get_project_instance
Remove serena_config storage from RegisteredProject; instead accept it as an explicit parameter in get_project_instance() for cleaner separation of concerns.
This commit is contained in:
3 files changed
+15
-22
No files matched your search
+2
-2
@@ -567,7 +567,7 @@ class ProjectCommands(AutoRegisteringGroup):
|
||||
serena_config = SerenaConfig.from_config_file()
|
||||
registered_project = serena_config.get_registered_project(str(project_root))
|
||||
if registered_project is None:
|
||||
registered_project = RegisteredProject(str(project_root), generated_conf, serena_config=serena_config)
|
||||
registered_project = RegisteredProject(str(project_root), generated_conf)
|
||||
serena_config.add_registered_project(registered_project)
|
||||
|
||||
return registered_project
|
||||
@@ -637,7 +637,7 @@ class ProjectCommands(AutoRegisteringGroup):
|
||||
lvl = logging.getLevelNamesMapping()[log_level.upper()]
|
||||
logging.configure(level=lvl)
|
||||
serena_config = SerenaConfig.from_config_file()
|
||||
proj = registered_project.get_project_instance()
|
||||
proj = registered_project.get_project_instance(serena_config=serena_config)
|
||||
click.echo(f"Indexing symbols in {proj} …")
|
||||
ls_mgr = proj.create_language_server_manager(
|
||||
log_level=lvl, ls_timeout=timeout, ls_specific_settings=serena_config.ls_specific_settings
|
||||
|
||||
@@ -402,7 +402,6 @@ class RegisteredProject(ToStringMixin):
|
||||
project_root: str,
|
||||
project_config: "ProjectConfig",
|
||||
project_instance: Optional["Project"] = None,
|
||||
serena_config: "SerenaConfig | None" = None,
|
||||
) -> None:
|
||||
"""
|
||||
Represents a registered project in the Serena configuration.
|
||||
@@ -410,12 +409,10 @@ class RegisteredProject(ToStringMixin):
|
||||
:param project_root: the root directory of the project
|
||||
:param project_config: the configuration of the project
|
||||
:param project_instance: an existing project instance (if already loaded)
|
||||
:param serena_config: the SerenaConfig instance for global settings
|
||||
"""
|
||||
self.project_root = Path(project_root).resolve()
|
||||
self.project_config = project_config
|
||||
self._project_instance = project_instance
|
||||
self._serena_config = serena_config
|
||||
|
||||
def _tostring_exclude_private(self) -> bool:
|
||||
return True
|
||||
@@ -425,21 +422,19 @@ class RegisteredProject(ToStringMixin):
|
||||
return self.project_config.project_name
|
||||
|
||||
@classmethod
|
||||
def from_project_instance(cls, project_instance: "Project", serena_config: "SerenaConfig | None" = None) -> "RegisteredProject":
|
||||
def from_project_instance(cls, project_instance: "Project") -> "RegisteredProject":
|
||||
return RegisteredProject(
|
||||
project_root=project_instance.project_root,
|
||||
project_config=project_instance.project_config,
|
||||
project_instance=project_instance,
|
||||
serena_config=serena_config,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_project_root(cls, project_root: str | Path, serena_config: "SerenaConfig | None" = None) -> "RegisteredProject":
|
||||
def from_project_root(cls, project_root: str | Path) -> "RegisteredProject":
|
||||
project_config = ProjectConfig.load(project_root)
|
||||
return RegisteredProject(
|
||||
project_root=str(project_root),
|
||||
project_config=project_config,
|
||||
serena_config=serena_config,
|
||||
)
|
||||
|
||||
def matches_root_path(self, path: str | Path) -> bool:
|
||||
@@ -451,7 +446,7 @@ class RegisteredProject(ToStringMixin):
|
||||
"""
|
||||
return self.project_root.samefile(Path(path).resolve())
|
||||
|
||||
def get_project_instance(self) -> "Project":
|
||||
def get_project_instance(self, serena_config: "SerenaConfig | None") -> "Project":
|
||||
"""
|
||||
Returns the project instance for this registered project, loading it if necessary.
|
||||
"""
|
||||
@@ -462,7 +457,7 @@ class RegisteredProject(ToStringMixin):
|
||||
self._project_instance = Project(
|
||||
project_root=str(self.project_root),
|
||||
project_config=self.project_config,
|
||||
serena_config=self._serena_config,
|
||||
serena_config=serena_config,
|
||||
)
|
||||
return self._project_instance
|
||||
|
||||
@@ -629,7 +624,6 @@ class SerenaConfig(ToolInclusionDefinition, ModeSelectionDefinition, ToStringMix
|
||||
project = RegisteredProject(
|
||||
project_root=str(path),
|
||||
project_config=project_config,
|
||||
serena_config=instance,
|
||||
)
|
||||
instance.projects.append(project)
|
||||
|
||||
@@ -720,7 +714,7 @@ class SerenaConfig(ToolInclusionDefinition, ModeSelectionDefinition, ToStringMix
|
||||
if autoregister:
|
||||
config_path = ProjectConfig.path_to_project_yml(project_root_or_name)
|
||||
if os.path.isfile(config_path):
|
||||
registered_project = RegisteredProject.from_project_root(project_root_or_name, serena_config=self)
|
||||
registered_project = RegisteredProject.from_project_root(project_root_or_name)
|
||||
self.add_registered_project(registered_project)
|
||||
return registered_project
|
||||
# nothing found
|
||||
@@ -731,7 +725,7 @@ class SerenaConfig(ToolInclusionDefinition, ModeSelectionDefinition, ToStringMix
|
||||
if registered_project is None:
|
||||
return None
|
||||
else:
|
||||
return registered_project.get_project_instance()
|
||||
return registered_project.get_project_instance(serena_config=self)
|
||||
|
||||
def add_registered_project(self, registered_project: RegisteredProject) -> None:
|
||||
"""
|
||||
@@ -771,7 +765,7 @@ class SerenaConfig(ToolInclusionDefinition, ModeSelectionDefinition, ToStringMix
|
||||
is_newly_created=True,
|
||||
serena_config=self,
|
||||
)
|
||||
self.add_registered_project(RegisteredProject.from_project_instance(new_project, serena_config=self))
|
||||
self.add_registered_project(RegisteredProject.from_project_instance(new_project))
|
||||
|
||||
return new_project
|
||||
|
||||
|
||||
@@ -145,9 +145,8 @@ class TestRegisteredProjectGlobalIgnoredPaths:
|
||||
registered = RegisteredProject(
|
||||
project_root=str(self.project_path),
|
||||
project_config=config,
|
||||
serena_config=serena_config,
|
||||
)
|
||||
project = registered.get_project_instance()
|
||||
project = registered.get_project_instance(serena_config=serena_config)
|
||||
assert project.is_ignored_path(str(self.project_path / "node_modules" / "pkg.js"))
|
||||
|
||||
def test_get_project_instance_without_global_ignored_paths(self) -> None:
|
||||
@@ -162,7 +161,7 @@ class TestRegisteredProjectGlobalIgnoredPaths:
|
||||
project_root=str(self.project_path),
|
||||
project_config=config,
|
||||
)
|
||||
project = registered.get_project_instance()
|
||||
project = registered.get_project_instance(serena_config=None)
|
||||
assert not project.is_ignored_path(str(self.project_path / "node_modules" / "pkg.js"))
|
||||
|
||||
def test_from_project_root_passes_global_ignored_paths(self) -> None:
|
||||
@@ -173,11 +172,11 @@ class TestRegisteredProjectGlobalIgnoredPaths:
|
||||
(serena_dir / "project.yml").write_text(
|
||||
'project_name: "test_project"\nlanguages: ["python"]\nignored_paths: []\nignore_all_files_in_gitignore: false\n'
|
||||
)
|
||||
serena_config = SerenaConfig(gui_log_window=False, web_dashboard=False, ignored_paths=["node_modules"])
|
||||
registered = RegisteredProject.from_project_root(
|
||||
str(self.project_path),
|
||||
serena_config=SerenaConfig(gui_log_window=False, web_dashboard=False, ignored_paths=["node_modules"]),
|
||||
)
|
||||
project = registered.get_project_instance()
|
||||
project = registered.get_project_instance(serena_config=serena_config)
|
||||
assert project.is_ignored_path(str(self.project_path / "node_modules" / "pkg.js"))
|
||||
|
||||
def test_from_project_instance_passes_global_ignored_paths(self) -> None:
|
||||
@@ -194,9 +193,9 @@ class TestRegisteredProjectGlobalIgnoredPaths:
|
||||
project_config=config,
|
||||
serena_config=serena_config,
|
||||
)
|
||||
registered = RegisteredProject.from_project_instance(project, serena_config=serena_config)
|
||||
registered = RegisteredProject.from_project_instance(project)
|
||||
# The registered project already has a project_instance, so get_project_instance() returns it directly
|
||||
retrieved = registered.get_project_instance()
|
||||
retrieved = registered.get_project_instance(serena_config=serena_config)
|
||||
assert retrieved.is_ignored_path(str(self.project_path / "node_modules" / "pkg.js"))
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user