feat(completion): нечёткий поиск в автодополнении (подстрока + подпоследовательность)#4147
Conversation
Автодополнение матчило кандидатов только по префиксу (startsWith), поэтому подстрока в середине слова и разбросанная подпоследовательность на сервере не находились вовсе: набор «Сцена» не показывал «ТекущийСценарий». Выделен переиспользуемый компонент FuzzyMatcher (точное/префиксное совпадение, непрерывная подстрока, подпоследовательность со скорингом позиции) и применён в CompletionProvider.matches(). Семантика подстрока/подпоследовательность зеркалит fuzzy-хвост WorkspaceSymbolIndex, чтобы далее переиспользовать её и там. isIncomplete остаётся false: при монотонности fuzzy (match более длинного запроса ⊆ match его префикса) набор первого запроса остаётся надмножеством для дальнейшего набора, и клиент доберёт нужное локальной фильтрацией без перезапроса. Связано с #4142 Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
WorkspaceSymbolIndex держал собственные fuzzyScore/subsequenceFirstIndex — ту же логику подстрока+подпоследовательность, что теперь в FuzzyMatcher. Индекс инжектит общий компонент и делегирует ему скоринг хвоста; константы SCORE_SUBSTRING/SCORE_SUBSEQUENCE переехали в FuzzyMatcher. Поведение и ранжирование не меняются (древесные скоры 0..4 остаются в индексе). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (6)
📝 WalkthroughWalkthroughA new ChangesFuzzyMatcher extraction and integration
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|



Закрывает #4142.
Проблема
Автодополнение матчило кандидатов только по префиксу (
CompletionProvider.matches()=startsWith), поэтому подстрока в середине слова и разбросанная подпоследовательность на сервере не находились вовсе: наборСценане показывалТекущийСценарий(он на «Т», в кэше префиксаС*его не было).Решение
FuzzyMatcher(utils): точное / префиксное совпадение, непрерывная подстрока, подпоследовательность со скорингом позиции первого совпавшего символа. Меньший скор — релевантнее.CompletionProvider.matches()теперь нечёткий черезFuzzyMatcher. Затрагивает все ветки no-dot/dot completion (глобальные функции/свойства, классы дляНовый, составные имена MD-объектов, кейворды, локальные методы/переменные, члены типа).WorkspaceSymbolIndexпереиспользует тот жеFuzzyMatcherв fuzzy-хвосте — дублирующиеfuzzyScore/subsequenceFirstIndexубраны, константыSCORE_SUBSTRING/SCORE_SUBSEQUENCEпереехали в компонент. Поведение и ранжированиеworkspace/symbolне меняются.Почему
isIncompleteостаётсяfalseisIncomplete=trueзаставил бы клиент перезапрашивать completion на каждый keystroke, а каждый такой запрос черезawaitLatest()ждёт перестройкуDocumentContext(eagercomputeSymbolTreeна весь модуль) — дорого при печати.Этого не требуется: fuzzy-матч монотонен — для запроса
Q1, у которогоQ0является префиксом,match(Q1) ⊆ match(Q0)(и для подстроки, и для подпоследовательности). Значит набор первого запроса остаётся надмножеством для всего, что пользователь допечатает, и клиент доберёт нужное локальной fuzzy-фильтрацией без перезапроса и без ожидания rebuild.Тесты
FuzzyMatcherTest— exact/prefix/substring/subsequence, ранжирование, позиция старта подпоследовательности, регистронезависимость.CompletionProviderTest—Сообщитьнаходится по подстрокеобщи по подпоследовательностиСбщ(given/when/then).WorkspaceSymbolIndexTest/SymbolProvider*Testостаются зелёными (рефакторинг поведение не меняет).🤖 Generated with Claude Code
Summary by CodeRabbit
Release Notes
New Features
Tests