mirror of
https://github.com/tiennm99/serena.git
synced 2026-10-12 18:16:43 +00:00
Raise error if overview is requested without suitable LS support
This commit is contained in:
1 parent
4e26785a85
commit
2c901b0a0e
3 files changed
+18
-4
No files matched your search
@@ -147,16 +147,20 @@ class LanguageServerManager:
|
||||
ls = self.restart_language_server(ls.language)
|
||||
return ls
|
||||
|
||||
def _get_suitable_language_server(self, relative_path: str) -> SolidLanguageServer | None:
|
||||
""":param relative_path: relative path to a file"""
|
||||
for candidate in self._language_servers.values():
|
||||
if not candidate.is_ignored_path(relative_path, ignore_unsupported_files=True):
|
||||
return candidate
|
||||
return None
|
||||
|
||||
def get_language_server(self, relative_path: str) -> SolidLanguageServer:
|
||||
""":param relative_path: relative path to a file"""
|
||||
ls: SolidLanguageServer | None = None
|
||||
if len(self._language_servers) > 1:
|
||||
if os.path.isdir(relative_path):
|
||||
raise ValueError(f"Expected a file path, but got a directory: {relative_path}")
|
||||
for candidate in self._language_servers.values():
|
||||
if not candidate.is_ignored_path(relative_path, ignore_unsupported_files=True):
|
||||
ls = candidate
|
||||
break
|
||||
ls = self._get_suitable_language_server(relative_path)
|
||||
if ls is None:
|
||||
ls = self._default_language_server
|
||||
return self._ensure_functional_ls(ls)
|
||||
@@ -241,3 +245,6 @@ class LanguageServerManager:
|
||||
for ls in self.iter_language_servers():
|
||||
if ls.is_running():
|
||||
ls.save_cache()
|
||||
|
||||
def has_suitable_ls_for_file(self, relative_file_path: str) -> bool:
|
||||
return self._get_suitable_language_server(relative_file_path) is not None
|
||||
@@ -699,6 +699,9 @@ class LanguageServerSymbolRetriever:
|
||||
def get_root_path(self) -> str:
|
||||
return self._ls_manager.get_root_path()
|
||||
|
||||
def can_analyze_file(self, relative_file_path: str) -> bool:
|
||||
return self._ls_manager.has_suitable_ls_for_file(relative_file_path)
|
||||
|
||||
def get_language_server(self, relative_path: str) -> SolidLanguageServer:
|
||||
""":param relative_path: relative path to a file"""
|
||||
return self._ls_manager.get_language_server(relative_path)
|
||||
|
||||
@@ -68,6 +68,10 @@ class GetSymbolsOverviewTool(Tool, ToolMarkerSymbolicRead):
|
||||
raise FileNotFoundError(f"File or directory {relative_path} does not exist in the project.")
|
||||
if os.path.isdir(file_path):
|
||||
raise ValueError(f"Expected a file path, but got a directory path: {relative_path}. ")
|
||||
if not symbol_retriever.can_analyze_file(relative_path):
|
||||
raise ValueError(
|
||||
f"Cannot extract symbols from file {relative_path}. Active languages: {[l.value for l in self.agent.get_active_lsp_languages()]}"
|
||||
)
|
||||
|
||||
symbols = symbol_retriever.get_symbol_overview(relative_path)[relative_path]
|
||||
|
||||
|
||||
Reference in new issue
Block a user