Raise error if overview is requested without suitable LS support

This commit is contained in:
Michael Panchenko committed 2026-03-04 20:12:23 +01:00
1 parent 4e26785a85
commit 2c901b0a0e
3 files changed
+18 -4

No files matched your search

+11 -4
View File
@@ -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
+3
View File
@@ -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)
+4
View File
@@ -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]