Проблема
Класс 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-модулях/классах при индексации их в OScriptLibraryIndex — MemberDescriptor.property(v) уходит без типа, и БазовыйКаталог.<member> не резолвится.
Ожидаемое поведение
-
Добавить в VariableDescription метод вида:
public List<TypeDescription> getTypes();
возвращающий типы, объявленные в описании (в том числе из секций «Тип» / «Type» и форм // Строка - ...).
-
Желательно симметрично — для trailing-комментариев (// Строка - ... в той же строке).
-
Если синтаксис описания переменной в bsl ещё не специфицирован отдельной грамматикой описания — рассмотреть «эвристический» извлекатель типов, аналогичный ParameterDescription.types() (распарсить элементы и взять TypeDescription сразу после имени/двоеточия).
Версия
bsl-parser 0.32.0.
Проблема
Класс
com.github._1c_syntax.bsl.parser.description.VariableDescription(bsl-parser 0.32.0) не предоставляет API для получения списка типов, объявленных в описании переменной.Доступные публичные методы:
Типов (
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-модулях/классах при индексации их вOScriptLibraryIndex—MemberDescriptor.property(v)уходит без типа, иБазовыйКаталог.<member>не резолвится.Ожидаемое поведение
Добавить в
VariableDescriptionметод вида:возвращающий типы, объявленные в описании (в том числе из секций «Тип» / «Type» и форм
// Строка - ...).Желательно симметрично — для trailing-комментариев (
// Строка - ...в той же строке).Если синтаксис описания переменной в bsl ещё не специфицирован отдельной грамматикой описания — рассмотреть «эвристический» извлекатель типов, аналогичный
ParameterDescription.types()(распарсить элементы и взятьTypeDescriptionсразу после имени/двоеточия).Версия
bsl-parser 0.32.0.