fix(SymbolProvider): откатываться на буквальный поиск при невалидном regex в workspace/symbol#4063
Conversation
|
Warning Review limit reached
More reviews will be available in 10 minutes and 20 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more credits in the billing tab to continue. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe PR improves workspace symbol query handling by introducing graceful fallback from regex to literal matching. When a user query contains regex-special characters (like parentheses), the new ChangesSymbol Query Regex Fallback
🎯 2 (Simple) | ⏱️ ~12 minutes
🚥 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 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 |
|
…regex в workspace/symbol Запрос workspace/symbol со спецсимволами регулярных выражений (например «Получить(») больше не приводит к PatternSyntaxException и пустой выдаче. При невалидном регулярном выражении выполняется откат на буквальное сопоставление подстроки, как рекомендует "расслабленная" трактовка query в спецификации LSP. Co-Authored-By: Claude Fable 5 <[email protected]>
…al-фолбэке Вместо ручного Pattern.compile с дублированием флагов CASE_INSENSITIVE | UNICODE_CASE. Co-Authored-By: Claude Fable 5 <[email protected]>
08a72f5 to
1df5af1
Compare
После вливания containerName (#4062) createWorkspaceSymbol обращается к symbol.getOwner().getMdObject() — мок без стаба ронял тест NPE. Co-Authored-By: Claude Fable 5 <[email protected]>



Проблема
Строка запроса
workspace/symbolнапрямую компилировалась как регулярное выражение(
CaseInsensitivePattern.compile(query)). Если пользователь вводил подстроку соспецсимволом регулярного выражения (например «Получить(» или «Метод[»), компиляция
бросала
PatternSyntaxException, и провайдер возвращал пустой список. Из-за этогообычный пользовательский ввод приводил к "ничего не найдено", хотя спецификация LSP
рекомендует трактовать query в "расслабленной" манере и доверять клиенту дофильтрацию.
Решение
Компиляция шаблона вынесена в
compilePattern(...). ПриPatternSyntaxExceptionвыполняется откат на буквальное сопоставление:
Pattern.compile(Pattern.quote(query), CASE_INSENSITIVE | UNICODE_CASE)— те же флаги, что и уCaseInsensitivePattern.Полноценный fuzzy-поиск намеренно не вводится. Правка строго локальна в месте
компиляции/матчинга паттерна,
createWorkspaceSymbolне затронут.Тесты
getSymbolsQueryStringErrorRegex: запрос «Метод(» теперь не вызываетисключения, а трактуется как литерал. В фикстурах нет имён символов с литералом
«Метод(», поэтому ожидается пустой результат — но уже без отбрасывания валидных
совпадений. Имена методов/переменных в BSL не могут содержать спецсимволы regex,
поэтому литеральное совпадение по реальным фикстурам пустое по объективной причине.
getSymbolsQueryWithRegexSpecialCharsFallsBackToLiteralMatch(Mockito):символ с именем «Метод(Параметр» и невалидный запрос «Метод(». До правки тест падал
(пустой результат из-за
PatternSyntaxException), после — находит символ.Прогон
SymbolProviderTest(5 тестов) — BUILD SUCCESSFUL, все PASSED.🤖 Generated with Claude Code
Summary by CodeRabbit
Bug Fixes