1c-syntax / bsl-language-server

Реализация Language Server Protocol для языка 1C (BSL)
https://1c-syntax.github.io/bsl-language-server
Other
302 stars 105 forks source link

[MOD] NestedFunctionInParameters #1675

Open zeegin opened 3 years ago

zeegin commented 3 years ago

Диагностика

Инициализация параметров методов и конструкторов вызовом вложенных методов (NestedFunctionInParameters) https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedFunctionInParameters/

Описание предлагаемых изменений

Очень много срабатываний, предлагаю добавить параметр maxAllowedLevel по аналогии с NestedStatements или по-умолчанию сделать отключенной.

Не хочется, чтобы у меня ругалось на таких фрагментах, как:

Record = New Structure;
Record.Insert("Level", String(Level));
Record.Insert("EventName", EventName);
Record.Insert("Date", WriteJSONDate(
    Date,
    JSONDateFormat.ISO,
    JSONDateWritingVariant.UniversalDate
));

///

Raise RuntimeError(StrTemplate(
    NStr("en = 'Not supported protocol <%1>';
         |ru = 'Не поддерживаемый протокол <%1>'"),
    Self.Scheme
));

///

HTTPRequest.SetBodyFromString(
    HTTPRequests.ToFormURLEncode(Data),
    TextEncoding.UTF8,
    ByteOrderMarkUse.DontUse
);

Дополнительная информация

В стандарте исключение описано очень размыто:

В то же время, если код с вложенными вызовами получается компактным (не требует переноса выражений) и легко читаемым, то вложенные вызовы допустимы. Например:


Предупреждение(НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'"));

ПеречитатьСуммуПоКурсу(Сумма, КурсВалютыНаДату(Валюта));

asosnoviy commented 2 years ago

Могу закрыть только один кейс из представленных

HTTPRequest.SetBodyFromString(
    HTTPRequests.ToFormURLEncode(Data),
    TextEncoding.UTF8,
    ByteOrderMarkUse.DontUse
);

Нстр тоже можно закрыть.

А вот первый пример без форматирования, это как раз то что призвана эта диагностика ловить

Record.Insert("Date", WriteJSONDate(
Date,
JSONDateFormat.ISO,
JSONDateWritingVariant.UniversalDate));

Сходу и не понятно где чьи параметры