diff --git a/src/serena/cli.py b/src/serena/cli.py index 178d643d..458822be 100644 --- a/src/serena/cli.py +++ b/src/serena/cli.py @@ -1,3 +1,4 @@ +import collections import glob import json import os @@ -11,6 +12,7 @@ from typing import Any, Literal import click from sensai.util import logging from sensai.util.logging import FileLoggerContext, datetime_tag +from sensai.util.string import dict_string from tqdm import tqdm from serena.agent import SerenaAgent @@ -529,23 +531,24 @@ class ProjectCommands(AutoRegisteringGroup): files = proj.gather_source_files() - servers = list(ls_mgr.iter_language_servers()) - for k, ls in enumerate(servers, start=1): - click.echo(f"Indexing for language {ls.language.value} ({k}/{len(servers)}) …") - collected_exceptions: list[Exception] = [] - files_failed = [] - for i, f in enumerate(tqdm(files, desc="Indexing")): - try: - ls.request_document_symbols(f, include_body=False) - ls.request_document_symbols(f, include_body=True) - except Exception as e: - log.error(f"Failed to index {f}, continuing.") - collected_exceptions.append(e) - files_failed.append(f) - if (i + 1) % 10 == 0: - ls.save_cache() - ls.save_cache() - click.echo(f"Symbols saved to {ls.cache_path}") + collected_exceptions: list[Exception] = [] + files_failed = [] + language_file_counts = collections.defaultdict(lambda: 0) + for i, f in enumerate(tqdm(files, desc="Indexing")): + try: + ls = ls_mgr.get_language_server(f) + ls.request_document_symbols(f, include_body=False) + ls.request_document_symbols(f, include_body=True) + language_file_counts[ls.language] += 1 + except Exception as e: + log.error(f"Failed to index {f}, continuing.") + collected_exceptions.append(e) + files_failed.append(f) + if (i + 1) % 10 == 0: + ls_mgr.save_all_caches() + language_file_counts = {k.value: v for k, v in language_file_counts.items()} + click.echo(f"Indexed files per language: {dict_string(language_file_counts, brackets=None)}") + ls_mgr.save_all_caches() if len(files_failed) > 0: os.makedirs(os.path.dirname(log_file), exist_ok=True)