Class SymbolProvider
Обрабатывает запросы workspace/symbol, делегируя поиск инкрементальному
WorkspaceSymbolIndex: индекс хранит уже подготовленные записи символов, поэтому провайдер
лишь маппит записи в WorkspaceSymbol без обхода всех документов.
Быстрая древесная выдача (WorkspaceSymbolIndex.search(String, CancelChecker)) отдаётся
мгновенно. Если клиент поддерживает частичные результаты (прислал
WorkDoneProgressAndPartialResultParams.getPartialResultToken()), и быстрая выдача, и нижнеранжированный
«грязный» fuzzy-хвост (подстрока внутри слова и подпоследовательность вразброс,
WorkspaceSymbolIndex.searchFuzzyTail(String, java.util.Collection, CancelChecker)) досылаются
потоково чанками через $/progress (с проверкой отмены между чанками), а синхронный ответ
возвращается ПУСТЫМ, чтобы не дублировать уже отправленные прогрессом чанки.
Без токена частичных результатов поведение определяется булевым флагом
workspaceSymbol.syncFuzzySearch: при значении true к древесной выдаче синхронно
дописывается результат блокирующего fuzzy-скана; при значении false (по умолчанию) ответом
служит только древесная выдача — медленный скан НЕ запускается.
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionSymbolProvider(WorkspaceSymbolIndex workspaceSymbolIndex, LanguageClientHolder clientHolder, GlobalLanguageServerConfiguration globalConfiguration) -
Method Summary
Modifier and TypeMethodDescriptionList<? extends WorkspaceSymbol> getSymbols(WorkspaceSymbolParams params, CancelChecker cancelChecker) Выполняет поиск символов рабочей области по запросуworkspace/symbolс поддержкой отмены и потоковой выдачи частичных результатов.
-
Constructor Details
-
SymbolProvider
@ConstructorProperties({"workspaceSymbolIndex","clientHolder","globalConfiguration"}) public SymbolProvider(WorkspaceSymbolIndex workspaceSymbolIndex, LanguageClientHolder clientHolder, GlobalLanguageServerConfiguration globalConfiguration)
-
-
Method Details
-
getSymbols
public List<? extends WorkspaceSymbol> getSymbols(WorkspaceSymbolParams params, CancelChecker cancelChecker) Выполняет поиск символов рабочей области по запросуworkspace/symbolс поддержкой отмены и потоковой выдачи частичных результатов.Сначала из
WorkspaceSymbolIndex.search(String, CancelChecker)берётся быстрая древесная выдача (точное совпадение, префикс полного имени, многословное camel-hump совпадение, префикс начала слова), ранжированная по релевантности.Если токен частичного результата есть (и запрос непуст, и клиент подключён), включается потоковая выдача: и быстрый набор, и fuzzy-хвост (
WorkspaceSymbolIndex.searchFuzzyTail(String, java.util.Collection, CancelChecker)с быстрой выдачей в качестве exclude) досылаются$/progress-чанками поSTREAM_BATCH_SIZEчерезstreamInBatches(Either, List, CancelChecker). Чтобы не пересортировывать выдачу, быстрые чанки уходят ПЕРВЫМИ (клиент дописывает их в порядке прихода). Синхронный ответ при этом ПУСТ: клиент конкатенирует прогресс-чанки, и повторная отдача того же набора в ответе привела бы к дублям. Отмена проверяется индексом периодически и между чанками; при отмене бросаетсяCancellationException.Если токена нет (либо запрос пуст, либо клиент не подключён), потоковая выдача невозможна. Тогда поведение определяется булевым флагом
workspaceSymbol.syncFuzzySearch: приtrueк древесной выдаче синхронно дописывается результат блокирующего fuzzy-скана; приfalse(по умолчанию) возвращается только древесная выдача, медленный скан не выполняется.- Parameters:
params- Параметры запросаworkspace/symbol, в т.ч. строка запроса и токен частичного результатаcancelChecker- Проверяющий отмену запроса- Returns:
- Полный список при синхронном пути; ПУСТОЙ список при потоковой выдаче (символы ушли в
$/progress)
-