feat(semantictokens): не красить методы модулей конфигурации как defaultLibrary#4136
Conversation
…ultLibrary Симметрия к правке для реквизитов (#3996): экспортные методы модулей конфигурации (общих модулей, менеджеров, объектов и т.п.) — не платформенный API, поэтому модификатор LSP `defaultLibrary` им не положен. Вызовы методов общих модулей (`ОбщегоНазначения.X()`) уже красились корректно — они идут через ReferenceIndex и `MethodCallSemanticTokensSupplier` (без defaultLibrary). Но методы модулей менеджеров/объектов, вызванные у типизированной переменной (`Менеджер.ТестЭкспортная()`), резолвятся по типу, в ReferenceIndex не попадают и красились `PlatformMemberMethodCallSemanticTokensSupplier` как Method + DefaultLibrary — неверно. - ConfigurationModuleMembersProvider.toMethodMember: членам выставляется standardLibrary = false. - PlatformMemberMethodCallSemanticTokensSupplier.modifiers(): DefaultLibrary вешается только при standardLibrary; async-методы получают только Async. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
|
Caution Review failedPull request was closed or merged during review 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 (4)
💤 Files with no reviewable changes (2)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthrough
ChangesConditional DefaultLibrary Modifier Based on standardLibrary Flag
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
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 |
…му заявлять явно По ревью: модификатор `defaultLibrary` — это «из стандартной библиотеки/платформы», поэтому платформенность должна заявляться явно, а не выключаться у конфигурации. - MemberDescriptor: compat-конструкторы и фабрики (method/property/event/ genericProperty) теперь дают standardLibrary = false. - Платформенные источники проставляют true явно: BslContextPlatformTypesProvider (свойства/методы/события/значения перечислений), BuiltinTypesJsonLoader, GlobalScopeProvider (глобальные функции), EventHandlerResolver (события OneScript-классов), стандартные реквизиты в ConfigurationTypesProvider. - MetadataCollectionSpecializer: materializeChildMember/withElementReturnType проносят флаг шаблона — платформенные методы менеджеров/коллекций (Справочники.X.НайтиПоКоду) не теряют defaultLibrary. - Конфигурационные источники больше не объявляют false явно (он и так дефолт). Тест-стражи: платформенный метод менеджера сохраняет defaultLibrary; поле структуры (ключ задан разработчиком) красится обычным Property без defaultLibrary. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
|
…nt() в фабрике - event(): фабрика сразу проставляет standardLibrary = true (события всегда платформенные), убраны явные withStandardLibrary(true) в EventHandlerResolver; - из пакета types убран термин defaultLibrary (домен semantic tokens): переформулированы javadoc/комментарии в MemberDescriptor и ConfigurationTypesProvider; - удалены лишние/очевидные комментарии у withStandardLibrary(true/false) в BuiltinTypesJsonLoader, GlobalScopeProvider, ConfigurationModuleMembersProvider. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>



Follow-up к #3996 (п.3 — симметрия для методов).
Проблема
Модификатор LSP
defaultLibraryозначает «символ из стандартной библиотеки/платформы». Экспортные методы модулей конфигурации (общих модулей, менеджеров, объектов) — это код разработчика, а не платформенный API, поэтомуdefaultLibraryим не положен — так же, как и собственным реквизитам в #3996.Вызовы методов общих модулей (
ОбщегоНазначения.X()) уже красились корректно: они проходят черезReferenceIndexиMethodCallSemanticTokensSupplier, которыйdefaultLibraryне вешает.А вот методы модулей менеджеров/объектов, вызванные у типизированной переменной, резолвятся по типу через
TypeService.memberAt, вReferenceIndexне попадают и потому красилисьPlatformMemberMethodCallSemanticTokensSupplierкакMethod + DefaultLibrary— неверно:Что сделано
ConfigurationModuleMembersProvider.toMethodMember— членам, построенным из экспортных методов модулей конфигурации, выставляетсяstandardLibrary = false.PlatformMemberMethodCallSemanticTokensSupplier.modifiers()—defaultLibraryвешается только приstandardLibrary; для членов конфигурации остаётся обычныйMethod(а async-методы получают толькоAsync).Тесты
PlatformMemberMethodCallSemanticTokensSupplierTest:testManagerModuleExportMethodNotColoredAsDefaultLibrary— интеграционный (красный до фикса: метод имелDefaultLibrary);testModifiersForConfigurationDescriptor/testModifiersForAsyncConfigurationDescriptor— все четыре веткиmodifiers()покрыты.Прогон: semantictokens / types / hover / completion — зелёные. Регрессий в
MethodCallSemanticTokensSupplier/GlobalScopeSemanticTokensSupplier/ConfigurationManagerChainInferenceнет.Summary by CodeRabbit
Release Notes