Skip to content

Регистрировать пользовательские коллекции OneScript как коллекции в системе типов #4033

Description

@sfaqer

Что

Пользовательские классы-коллекции OneScript (т.е. классы со специальной разметкой / маркером итерируемости в исходниках OneScript) должны регистрироваться в TypeRegistry как коллекции, чтобы:

  • Для каждого ... Из коллекция Цикл корректно типизировался — итератор получал тип элемента, а не Произвольный.
  • коллекция[i] через индексатор возвращал тип элемента.
  • Диагностики, опирающиеся на isCollection(typeRef) / collectionElementTypes(typeRef), видели пользовательские коллекции наравне с платформенными Массив, Соответствие, СписокЗначений и пр.

Сейчас, насколько видно из кода, такая разметка не поднимается до TypeRegistry-уровня: пользовательский класс попадает в реестр как обычный TYPE без указания, что он представляет коллекцию.

Зачем

OneScript-проекты активно используют свои контейнеры — например, обёртки над Массив, специализированные коллекции c индексаторами, итераторами и т. п. Текущая инференция теряет тип элемента на первой же итерации, ломая цепочку дальнейших типизированных подсказок и QuickFix'ов.

Что нужно сделать

  1. На стороне bsl-context (если ещё не) — извлекать признак «класс — коллекция» + тип элемента из метаданных OneScript класса (доку/манифест/аннотации в .os исходнике).
  2. На стороне LS — при регистрации TypeDecl для пользовательских OneScript-типов помечать их как коллекции (isCollection=true + collectionElementType).
  3. Покрыть тестом: Для каждого Элемент Из колл ЦиклЭлемент имеет ожидаемый тип элемента, не Произвольный.

Связано

  • Платформенные коллекции уже работают через ContextCollection / collectionElementTypes. Здесь распространить тот же контракт на пользовательские.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions