fix(semanticTokens): подсвечивать вложенные типы в описаниях методов#4184
Conversation
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthrough
ChangesType semantic token emission refactor for BSL doc comments
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
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 |
7deb4c1 to
c3dd3f5
Compare
В описаниях методов («Возвращаемое значение: Массив из Число») подсвечивался только тип-голова коллекции (Массив): подсветка типов опиралась на TYPE_NAME-элементы парсера из getElements(), а они для описаний методов отдают лишь голову — тип-значение коллекции (Число) и типы полей структур в getElements() не попадают. Теперь все типы описания подсвечиваются из структурных аксессоров DescriptionTypes.typesOf по их element().range() (включая типы-значения коллекций и типы полей структур). На корпусе описаний typesOf — надмножество TYPE_NAME-элементов getElements(), поэтому проход по TYPE_NAME убран, а getElements() остаётся источником токенов имён параметров и ключевых слов. Для переменных сохранён резолв-гард, чтобы свободный текст висячего комментария не красился как тип. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_016DL8j9ZCc6WCiKeL4uMBFs
c3dd3f5 to
a2ca8ac
Compare
|



Проблема
В описаниях методов (
// Возвращаемое значение:/// Параметры:) тип-значение коллекции не подсвечивался. Например, дляподсвечивался только тип-голова
Массив, аЧислооставалось серым комментарием (см. #4179, скриншот ховера).Причина
Подсветка типов в описаниях опиралась исключительно на
TYPE_NAME-элементы парсера изSourceDefinedSymbolDescription.getElements(). Для описаний методов парсер отдаёт отдельнымTYPE_NAME-элементом только тип-голову коллекции (Массив) — тип-значение (Число) вgetElements()не попадает. Поскольку для методов резолв-гвард отключён (validateTypeResolution = false), подсветка целиком зависела отgetElements()и теряла вложенные типы.(Для висячих комментариев переменных
getElements()отдаёт оба токена, поэтому там проблема не проявлялась.)Решение
Вложенные типы (типы-значения коллекций
Массив из Число→Числои типы полей структур) теперь подсвечиваются напрямую из структурных аксессоровDescriptionTypes.typesOfпо ихelement().range(), с пропуском уже покрытых черезgetElements()голов (по совпадению диапазона). Для описаний переменных применяется тот же гвард резолва, что и для основной подсветки, — чтобы свободный текст висячего комментария не красился как тип.Затрагивается только подсветка (
BslDocSemanticTokensSupplier). Document links на вложенные типы уже работали — они строятся изtypesOfнапрямую. На вывод типа для автокомплита влияния нет.Проверка
testMethodReturnCollectionTypeHighlighting(иМассив, иЧисло→Type).BslDocSemanticTokensSupplierTest,documentlink.*, spotless.🤖 Generated with Claude Code
Generated by Claude Code
Summary by CodeRabbit
New Features
Typetokens—particularly for nested types like collection heads and element types—while avoiding duplicate emissions.Tests
Typetokens.