feat(semantictokens): async-модификатор для платформенных member-методов#3953
Conversation
В develop добавили MemberDescriptor.async (#3950+followup). Используем его в PlatformMemberMethodCallSemanticTokensSupplier: - async-метод платформы (descriptor.async() == true) теперь получает Method + DefaultLibrary + Async на сайте вызова; - обычный метод — Method + DefaultLibrary, без Async (как и было). Реализовано через flatMap-пару (range, descriptor) в виде Resolved-record и кэшированных статических массивов модификаторов (DEFAULT_LIBRARY_MODIFIERS / DEFAULT_LIBRARY_ASYNC_MODIFIERS). В тест добавлены два unit-кейса (testModifiersForAsyncDescriptor / testModifiersForRegularDescriptor) на package-private modifiers(...) — производственные платформенные типы пока async-методов не несут, поэтому покрытие через type-инференс в integration-тесте сейчас невозможно. Co-Authored-By: Claude Opus 4.7 <[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 (2)
📝 WalkthroughWalkthrough
ChangesAsync modifier support for platform method calls
Possibly Related PRs
Poem
Estimated Code Review Effort🎯 2 (Simple) | ⏱️ ~12 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 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 |
There was a problem hiding this comment.
Pull request overview
PR расширяет подсветку semantic tokens для вызовов member-методов платформенных типов: если резолвнутый MemberDescriptor помечен как async, к токену Method + DefaultLibrary добавляется модификатор Async. Это приводит поведение platform-member call sites в соответствие с уже существующей поддержкой async для глобальных платформенных функций и source-defined методов.
Changes:
- Добавлен выбор набора semantic modifiers (
DefaultLibraryvsDefaultLibrary+Async) на основеMemberDescriptor.async(). - Рефакторинг резолва платформенного member-метода: вместо boolean-проверки теперь возвращается
Optional<MemberDescriptor>и протаскивается вместе с range. - Добавлены unit-тесты для проверки выбора модификаторов для async/regular
MemberDescriptor.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
src/main/java/com/github/_1c_syntax/bsl/languageserver/semantictokens/PlatformMemberMethodCallSemanticTokensSupplier.java |
Добавляет Async-модификатор для вызовов async member-методов платформенных типов на основе MemberDescriptor.async(). |
src/test/java/com/github/_1c_syntax/bsl/languageserver/semantictokens/PlatformMemberMethodCallSemanticTokensSupplierTest.java |
Добавляет тесты, проверяющие выбор набора modifiers для async/обычного member-descriptor. |
| var mods = PlatformMemberMethodCallSemanticTokensSupplier.modifiers(asyncMethod); | ||
|
|
||
| // then — async-метод платформы получает DefaultLibrary + Async. | ||
| assertThat(mods).containsExactly(SemanticTokenModifiers.DefaultLibrary, SemanticTokenModifiers.Async); |
|



Summary
После того как в develop появился
MemberDescriptor.async, расширяюPlatformMemberMethodCallSemanticTokensSupplierчтобы сайт вызова async-метода платформенного типа получал не толькоMethod + defaultLibrary, но ещё и стандартный модификаторasync. Обычные методы остаются безasync(как раньше).Реализовано через
flatMap-пару(range, descriptor)в видеResolved-record и кэшированных статических массивов модификаторов (DEFAULT_LIBRARY_MODIFIERS/DEFAULT_LIBRARY_ASYNC_MODIFIERS).Test plan
testModifiersForAsyncDescriptor—MemberDescriptor.method("X").withAsync(true)→[defaultLibrary, async]testModifiersForRegularDescriptor— обычныйMemberDescriptor.method("Y")→[defaultLibrary]Массив.Добавитьи т.п.) — без регрессий./gradlew test --tests "*.semantictokens.*" --tests "*.SemanticTokensProviderTest"— зелёноProduction-фикстуры платформенных типов пока не содержат member-методов с
async: true(флаг есть только у глобальных функций типаВопросАсинх, которые обрабатываетPlatformGlobalMethodSemanticTokensSupplier). Поэтому путь Async-метод проверяется на уровне статического хелпераmodifiers(...); как только в платформенной модели появятся async member-методы — подсветка заработает автоматически.🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Tests