Анонс новых возможностей в релизе 2021.5

С релизом 2021.5 мы научим наш плагин 1C выводить типы локальных переменных в вашем коде, чтобы отлавливать такие "замечательные" ошибки

Как вы возможно знаете, с релизом 2021.3 мы добавили в наш плагин для проверки качества кода 1С, построение графа потока управления, который сделал наши правила (например,  "Функция должна заканчиваться возвратом") более умными. С релизом 2021.4 мы добавили контекст платформы 1С, дающий нам информацию о встроенных глобальных методах и платформенных типах. В будущем релизе 2021.5, мы планируем их совместить и ещё более улучшить качество наших проверок. Каким образом?

У некоторых встроенных типов, есть свойства, которые могут быть доступны, для записи, чтения или для того и другого. Например, у типа "Запрос", есть свойство "Параметры", доступное только для чтения. Если вы попытаетесь присвоить ему какое-то значение, например:

Запрос = Новый Запрос;
Запрос.Параметры = Новый Структура;

Конфигуратор такой код спокойно пропустит, но при выполнении в режиме 1С: Предприятие, вы получите ошибку времени выполнения "Поле объекта недоступно для записи!".

Однако, совместное использование графа потока управления и контекста платформы, позволяет нам выводить возможный тип переменной и проверять характеристики его свойства.

Так например в одной из конфигураций (код изменен для наглядности), в общем модуле, разработчик создал объект типа "ИнтернетПочтовоеСообщение":

Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = Тема;

После чего идет 200 строк различных условий, циклов, по результатам которых заполняются те или иные атрибуты данного объекта и мы приходим к одному из таких условий:

(1)  Если ПараметрыОтправки.Свойство("УведомитьОПрочтении") Тогда
(2)    Письмо.УведомитьОПрочтении = ПараметрыОтправки.УведомитьОПрочтении;
(3)    Письмо.АдресаУведомленияОПрочтении.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты);
(4)  КонецЕсли;

Как мы видим, на строке 2, разработчик присваивает значение свойству "УведомитьОПрочтении", однако если мы посмотрим в синтакс-помощник, то увидим, что оно доступно только для чтения. Таким образом, если при выполнении кода и истинности условия на строке 1, выполнение программы будет прервано исключением.

Теперь же наш плагин умеет выводить типы переменных и благодаря этому, ошибка будет замечена и исправлена до попадания изменений в продуктив.

Из текущих ограничений, вывод типов работает только для локальных переменных метода, но мы активно работаем над построением сложных деревьев потоков управления, чтобы следить за жизненным циклом данных, в том числе и при вызовах других методов.

Релиз версии 2021.5 ожидается в конце июля, ждать осталось недолго.