fix(oscript): переносить поля структуры из JsDoc-возврата в property кросс-файл#4173
Merged
Merged
Conversation
…кросс-файл Тип property-члена, выведенный из См.-ссылки на локальную функцию (`Перем Сложно Экспорт; // см. НовыйСложно`), терял документированные поля структуры (СЧислом/СТекстом из возврата НовыйСложно()): провайдер резолвил только имя типа, отбрасывая TypeDescription.fields(). Из-за этого Клас.Сложно. кросс-файл не предлагал поля структуры (внутри модуля работало через инференсер). - SymbolTypeIndex: публичный resolveDescribedTypes(List<TypeDescription>) — on-demand резолв с навешиванием полей структур/ТЗ и элементов коллекций (без обязательной предварительной индексации); - OScriptModuleMembersProvider: тип из См.-ссылки берётся через него, результат аккумулируется как TypeSet (с localFields), а не плоский список TypeRef. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01GxykJ84i92KBM8JcjEt2Me
Contributor
|
Caution Review failedAn error occurred during the review process. Please try again later. ✨ 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 |
…и OneScript Вынесен общий MemberTypeFromCommentResolver (прямые типы + См.-ссылка на функцию того же модуля, field-aware через SymbolTypeIndex.resolveDescribedTypes). - OScriptModuleMembersProvider теперь делегирует резолверу (поведение прежнее); - ConfigurationModuleMembersProvider: экспортные `Перем X Экспорт` модулей объекта/набора записей и т.п. выставляются как типизированные свойства соответствующего типа (СправочникОбъект.X) — раньше выставлялись только экспортные методы. Тип свойства и поля структуры из JsDoc-возврата переносятся так же, как в OneScript. Формы (УправляемаяФорма) пока не охвачены — их члены не строит ни один провайдер (отдельная задача). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01GxykJ84i92KBM8JcjEt2Me
Contributor
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@src/main/java/com/github/_1c_syntax/bsl/languageserver/types/MemberTypeFromCommentResolver.java`:
- Around line 103-104: The `target.contains(".")` condition in the guard clause
of the `if` statement is causing qualified links (like `Модуль.Метод` or
`Модуль.Метод.Параметр`) to be immediately dropped by returning `TypeSet.EMPTY`,
even though the type index already supports hyperlink traversal for such
qualified references. Remove or modify the `target.contains(".")` check and
instead implement logic to resolve these qualified targets using the available
hyperlink traversal support in the type index. This fix applies to both
occurrences mentioned (lines 103-104 and lines 114-116).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 7e34fb03-bc5f-4da6-9753-50eacfbada28
⛔ Files ignored due to path filters (1)
src/test/resources/metadata/designer/Catalogs/СправочникСМенеджером/Ext/ObjectModule.bslis excluded by!src/test/resources/**
📒 Files selected for processing (7)
src/main/java/com/github/_1c_syntax/bsl/languageserver/types/MemberTypeFromCommentResolver.javasrc/main/java/com/github/_1c_syntax/bsl/languageserver/types/index/SymbolTypeIndex.javasrc/main/java/com/github/_1c_syntax/bsl/languageserver/types/oscript/OScriptModuleMembersProvider.javasrc/main/java/com/github/_1c_syntax/bsl/languageserver/types/registry/ConfigurationModuleMembersProvider.javasrc/test/java/com/github/_1c_syntax/bsl/languageserver/types/oscript/ArchiveReproDiagnosticTest.javasrc/test/java/com/github/_1c_syntax/bsl/languageserver/types/oscript/OScriptModuleMembersProviderTest.javasrc/test/java/com/github/_1c_syntax/bsl/languageserver/types/registry/ConfigurationModuleMembersProviderTest.java
…члена Ссылка вида `// см. Модуль.Метод` в висячем комментарии больше не отбрасывается: квалифицированная цель резолвится обходом членов через SymbolTypeIndex.resolveHyperlink (как в инференсере для См.-ссылок параметров), неквалифицированная — по-прежнему как функция того же модуля или имя типа. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01GxykJ84i92KBM8JcjEt2Me
…leMembersProvider Без изменения поведения: MethodSymbol/VariableSymbol, MemberTypeFromCommentResolver, TypeSet, TypeDescription, ArrayList вынесены в import. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01GxykJ84i92KBM8JcjEt2Me
|
This was referenced Jun 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Что
Поля документированной структуры теперь переносятся кросс-файл на property-член OScript-класса, тип которого выведен из
См.-ссылки.Пример (из архива пользователя):
Из
test.os:Клас.Сложно.теперь предлагаетСЧислом,СТекстом(раньше — только платформенные членыСтруктура).Почему не работало
Тип
Сложно, выведенный из// см. НовыйСложно, резолвился только по имени (Структура), аTypeDescription.fields()(поля из JsDoc-возвратаНовыйСложно()) отбрасывались: провайдер собирал плоскийList<TypeRef>. Внутри модуля поля видны, т.к. там тип разворачивает инференсер; кросс-файл члены идут черезOScriptModuleMembersProvider, и поля терялись.Что сделано
SymbolTypeIndex.resolveDescribedTypes(List<TypeDescription>)— публичная on-demand-обёртка над внутренним резолвом, навешивающим поля структур/ТЗ (TypeSet.withField) и элементы коллекций. Не требует предварительной индексации (важно для library-файлов).OScriptModuleMembersProvider— тип изСм.-ссылки на локальную функцию берётся черезresolveDescribedTypes(getReturnedValue()), результат аккумулируется какTypeSet(сlocalFields) черезunion, а не как плоскийList<TypeRef>. Поэтому поля доезжают до члена и видны в completion.Проверка
ArchiveReproDiagnosticTest#dotCompletionOnStructurePropertyShowsLocalFieldsCrossFile:Клас.Сложно.изtest.osсодержитСЧислом,СТекстом.ArchiveReproDiagnosticTest,OScriptModuleMembersProviderTest, весь пакетtypes.*+spotlessJavaCheck— зелёные.🤖 Generated with Claude Code
Generated by Claude Code
Summary by CodeRabbit