Skip to content

fix(oscript): переносить поля структуры из JsDoc-возврата в property кросс-файл#4173

Merged
nixel2007 merged 4 commits into
developfrom
claude/test-os-autocomplete-issue-zzts1o
Jun 19, 2026
Merged

fix(oscript): переносить поля структуры из JsDoc-возврата в property кросс-файл#4173
nixel2007 merged 4 commits into
developfrom
claude/test-os-autocomplete-issue-zzts1o

Conversation

@nixel2007

@nixel2007 nixel2007 commented Jun 19, 2026

Copy link
Copy Markdown
Member

Что

Поля документированной структуры теперь переносятся кросс-файл на property-член OScript-класса, тип которого выведен из См.-ссылки.

Пример (из архива пользователя):

Перем Сложно Экспорт; // см. НовыйСложно
...
//  Возвращаемое значение:
//   Структура:
//     * СЧислом - Число -
//     * СТекстом - Строка -
Функция НовыйСложно()
    Возврат Новый Структура("СЧислом, СТекстом", 0, "");
КонецФункции

Из test.os: Клас.Сложно. теперь предлагает СЧислом, СТекстом (раньше — только платформенные члены Структура).

Почему не работало

Тип Сложно, выведенный из // см. НовыйСложно, резолвился только по имени (Структура), а TypeDescription.fields() (поля из JsDoc-возврата НовыйСложно()) отбрасывались: провайдер собирал плоский List<TypeRef>. Внутри модуля поля видны, т.к. там тип разворачивает инференсер; кросс-файл члены идут через OScriptModuleMembersProvider, и поля терялись.

Что сделано

  • SymbolTypeIndex.resolveDescribedTypes(List<TypeDescription>) — публичная on-demand-обёртка над внутренним резолвом, навешивающим поля структур/ТЗ (TypeSet.withField) и элементы коллекций. Не требует предварительной индексации (важно для library-файлов).
  • OScriptModuleMembersProvider — тип из См.-ссылки на локальную функцию берётся через resolveDescribedTypes(getReturnedValue()), результат аккумулируется как TypeSetlocalFields) через union, а не как плоский List<TypeRef>. Поэтому поля доезжают до члена и видны в completion.

Проверка

  • Новый тест ArchiveReproDiagnosticTest#dotCompletionOnStructurePropertyShowsLocalFieldsCrossFile: Клас.Сложно. из test.os содержит СЧислом, СТекстом.
  • Прежние тесты ArchiveReproDiagnosticTest, OScriptModuleMembersProviderTest, весь пакет types.* + spotlessJavaCheck — зелёные.

🤖 Generated with Claude Code


Generated by Claude Code

Summary by CodeRabbit

  • New Features
    • Improved inference of member types from trailing documentation comments, including resolving references and qualified/unqualified “see” targets.
    • Exported module variables are now surfaced as typed members (with better qualified types), improving editor completion accuracy across files.
  • Refactor
    • Centralized comment-based type resolution so module member providers consistently derive property/member types from the same logic.
  • Tests
    • Added and updated tests covering cross-file type-driven dot completion and object/module export variable typed-member registration.

…кросс-файл

Тип 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
@coderabbitai

coderabbitai Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

An error occurred during the review process. Please try again later.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/test-os-autocomplete-issue-zzts1o

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

…и 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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between ad0fb3f and a72e6ba.

⛔ Files ignored due to path filters (1)
  • src/test/resources/metadata/designer/Catalogs/СправочникСМенеджером/Ext/ObjectModule.bsl is excluded by !src/test/resources/**
📒 Files selected for processing (7)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/types/MemberTypeFromCommentResolver.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/types/index/SymbolTypeIndex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/types/oscript/OScriptModuleMembersProvider.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/types/registry/ConfigurationModuleMembersProvider.java
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/types/oscript/ArchiveReproDiagnosticTest.java
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/types/oscript/OScriptModuleMembersProviderTest.java
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/types/registry/ConfigurationModuleMembersProviderTest.java

claude added 2 commits June 19, 2026 14:15
…члена

Ссылка вида `// см. Модуль.Метод` в висячем комментарии больше не отбрасывается:
квалифицированная цель резолвится обходом членов через
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
@nixel2007
nixel2007 merged commit bcba086 into develop Jun 19, 2026
19 checks passed
@nixel2007
nixel2007 deleted the claude/test-os-autocomplete-issue-zzts1o branch June 19, 2026 14:35
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants