Skip to content

VariableDescription: отсутствует API для получения типов переменной #376

Description

@nixel2007

Проблема

Класс com.github._1c_syntax.bsl.parser.description.VariableDescription (bsl-parser 0.32.0) не предоставляет API для получения списка типов, объявленных в описании переменной.

Доступные публичные методы:

public String getDescription();
public String getDeprecationInfo();
public boolean isDeprecated();
public String getPurposeDescription();
public List<Hyperlink> getLinks();
public SimpleRange getRange();
public Optional<VariableDescription> getTrailingDescription();
public List<DescriptionElement> getElements();

Типов (List<TypeDescription> getTypes() или аналог) — нет. Это симметрично отличает VariableDescription от ParameterDescription, у которого есть List<TypeDescription> types().

Контекст

В 1C/OneScript принято документировать переменные модуля (в том числе экспортные Перем ... Экспорт;) комментарием, в котором указан тип, например:

// Строка - Базовый каталог для размещения создаваемых временных файлов.
//
Перем БазовыйКаталог Экспорт;

Токенизатор BSLMethodDescriptionTokenizer уже умеет разбирать секции с типами (см. ParameterDescription), однако для VariableDescription собранные TypeDescription наружу не отдаются — приходится либо парсить getDescription() строкой вручную, либо ходить по getElements() и склеивать DescriptionElement.Type.TYPE_NAME руками.

Эффект на потребителей

Это блокирует вывод типов модульных и экспортных переменных в bsl-language-server (hover, completion, signature help, type inference), а также аналогичную типизацию Перем ... Экспорт в OneScript-модулях/классах при индексации их в OScriptLibraryIndexMemberDescriptor.property(v) уходит без типа, и БазовыйКаталог.<member> не резолвится.

Ожидаемое поведение

  1. Добавить в VariableDescription метод вида:

    public List<TypeDescription> getTypes();

    возвращающий типы, объявленные в описании (в том числе из секций «Тип» / «Type» и форм // Строка - ...).

  2. Желательно симметрично — для trailing-комментариев (// Строка - ... в той же строке).

  3. Если синтаксис описания переменной в bsl ещё не специфицирован отдельной грамматикой описания — рассмотреть «эвристический» извлекатель типов, аналогичный ParameterDescription.types() (распарсить элементы и взять TypeDescription сразу после имени/двоеточия).

Версия

bsl-parser 0.32.0.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions