fix(DiagnosticProvider): слать workspace/diagnostic/refresh после наполнения контекста#4057
Conversation
|
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 (3)
🚧 Files skipped from review as they are similar to previous changes (3)
📝 WalkthroughWalkthroughCentralizes pull-diagnostics capability detection in DiagnosticProvider, adds event-driven diagnostic refresh on server-context population and configuration changes, updates BSLTextDocumentService to query the provider, and adds tests covering capability detection and refresh behavior. ChangesDiagnostic Pull Model Integration
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Suggested labels
Suggested reviewers
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 |
Test Results 3 246 files 3 246 suites 1h 24m 14s ⏱️ Results for commit a2d178f. ♻️ This comment has been updated with latest results. |
|
|
|
||
| // Клиент с pull-моделью сам запросит диагностики (в том числе через | ||
| // workspace/diagnostic/refresh), поэтому push-публикацию по открытым документам | ||
| // для него выполнять не нужно — иначе возникает второй конкурирующий источник |
There was a problem hiding this comment.
это сделано намерено, поддержки workspace/diagnosic/refresh еще нет
There was a problem hiding this comment.
Понял, откатил: AnalyzeProjectOnStart и его тесты возвращены к виду develop — push-публикация при старте снова безусловная. В PR остаётся только отправка workspace/diagnostic/refresh после наполнения контекста (она и так выполняется только при заявленной клиентом workspace.diagnostics.refreshSupport, так что для текущих клиентов это no-op). AnalyzeProjectOnStartTest и DiagnosticProviderTest зелёные.
…олнения контекста После ServerContextPopulatedEvent межфайловые диагностики открытых документов устаревают, поэтому при поддержке клиентом refreshSupport отправляем запрос на повторный расчёт через workspace/diagnostic/refresh. Co-Authored-By: Claude Fable 5 <[email protected]>
…с pull-моделью Для клиента с pull-моделью push-публикация диагностик по открытым документам при анализе на старте создавала второй конкурирующий источник тех же диагностик. Признак pull-клиента вынесен в ClientCapabilitiesHolder.supportsPullDiagnostics() и переиспользован в BSLTextDocumentService, чтобы не дублировать логику. Co-Authored-By: Claude Fable 5 <[email protected]>
…tCapabilitiesHolder Доменно-специфичный хелпер supportsPullDiagnostics() вынесен из общего ClientCapabilitiesHolder в DiagnosticProvider. BSLTextDocumentService и AnalyzeProjectOnStart переиспользуют его оттуда, без дублирования вычисления. Co-Authored-By: Claude Fable 5 <[email protected]>
… анализе на старте Безусловный push при старте сделан намеренно: поддержки workspace/diagnostic/refresh на стороне клиентов ещё нет. AnalyzeProjectOnStart и его тесты возвращены к виду develop; refresh после наполнения контекста (первый коммит PR) остаётся. Co-Authored-By: Claude Fable 5 <[email protected]>
f0a679d to
d910e12
Compare



Проблема
При
interFileDependencies=trueмежфайловые диагностики уже открытых документов (неиспользуемые методы, обращения к общим модулям и т.п.) устаревали после построения индексов.refreshDiagnosticsотправлялся только при смене конфигурации, поэтому послеServerContextPopulatedEventpull-клиент не узнавал, что надо перезапросить диагностики.Дополнительно при анализе на старте
AnalyzeProjectOnStartбезусловно публиковал диагностики push-ем даже для клиента с pull-моделью — для открытых документов это создавало второй конкурирующий источник тех же диагностик.Решение
DiagnosticProviderподписан наServerContextPopulatedEvent; при поддержке клиентомworkspace.diagnostics.refreshSupportдёргаетсяworkspace/diagnostic/refresh. Логика отправки refresh вынесена в общийrequestRefreshIfSupported().ClientCapabilitiesHolder.supportsPullDiagnostics()и переиспользован вBSLTextDocumentServiceиAnalyzeProjectOnStart, чтобы не дублировать проверку capability. Для pull-клиента push-публикация при анализе на старте больше не выполняется (документы по-прежнему перестраиваются, а диагностики клиент запросит сам через refresh).Тесты
DiagnosticProviderTest:testServerContextPopulatedRequestsRefreshWhenClientSupportsRefreshtestServerContextPopulatedDoesNotRequestRefreshWhenClientDoesNotSupportRefreshAnalyzeProjectOnStartTest:doesNotPublishDiagnosticsToPullClientПрогон:
DiagnosticProviderTest10/10,AnalyzeProjectOnStartTest4/4,BSLTextDocumentServiceTest65/65 — без падений.🤖 Generated with Claude Code
Summary by CodeRabbit
Bug Fixes
Refactor
Tests