v8-code-style icon indicating copy to clipboard operation
v8-code-style copied to clipboard

strict-types: Рассчитанный тип возвращаемого значения отличается от декларированного в документирующем комментарии (Новая проверка)

Open sfaqer opened this issue 3 years ago • 6 comments

Описание проблемы

image

На текущий момент система не контролирует что тип фактически возвращаемого значения не соответствует типу возвращаемого значения из документирующего комментария

Описание решения проблемы

Хотелось бы чтобы система проверяла рассчитываемый тип возвращаемого значения и сверяла его с тем что обозначен в типе возвращаемого значения в документирующем комментарии

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

// Данные.
// 
// Возвращаемое значение:
//  Массив из Строка, Число - Данные
Функция Данные() Экспорт
	
	Результат = Новый Массив(); // Массив Из Строка, Число - Тест
	
	Результат.Добавить(1);
	Результат.Добавить("Один");
	Результат.Добавить('00010101');
	Результат.Добавить(ПредопределенноеЗначение("Справочник.Справочник.ПустаяСсылка"));
	
	Возврат Результат;
	
КонецФункции

sfaqer avatar Feb 09 '22 00:02 sfaqer

Проверка на возвращаемое значение уже есть, но отключена пока (из-за технических проблем)

https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/strict/check/FunctionCtorReturnSectionCheck.java

Нужно дорабатывать тут при добавлении в массив #952 :

// Возвращаемое значение:
//  Массив из Строка, Число - Данные
Функция Данные() Экспорт
	
	Результат = Новый Массив(); // Массив Из Строка, Число - Тест
	
        // Тут надо валидировать метод Добавить() что пытаемся передать в массив не тот тип
	Результат.Добавить(ПредопределенноеЗначение("Справочник.Справочник.ПустаяСсылка"));
	
	Возврат Результат;
	
КонецФункции

marmyshev avatar Feb 09 '22 08:02 marmyshev

Теперь после #952 контроль осуществляется при добавлении в коллекцию.

Так же включена проверка - контроллирующая декларативные свойства типа с тем что по факту - но проверяется ограниченный список типов.

marmyshev avatar Feb 16 '22 21:02 marmyshev

Закрываем? т.к. всё реализовано, если что-то упустил - предлагаю выделить и тут явно написать.

marmyshev avatar Jun 25 '22 14:06 marmyshev

@marmyshev а это уже в добавлено в ЕДТ? Я сейчас перепроверил но немного не понял что конкретно изменилось. Суть этого тикета в том что бы проверить тип возвращаемого значения метода и тип описанного возвращаемого значения метода

image

В данном случае мы возвращаем массив в котором лежит Число, Строка, Дата, хотя согласно док комментарию должны вернуть массив в котором лежит Число, Строка

sfaqer avatar Jul 04 '22 04:07 sfaqer

image

RedMammoth avatar Jul 04 '22 06:07 RedMammoth

@sfaqer Ну вот теперь ты написал новый пример, по смыслу отличающийся от первого :)

Что есть сейчас:

  1. Проверяются наличие свойств для Структуры, Таблиц и Деревьев значений (это то что было раньше отключено, к релизу 2021.3 включено) если описаны в возвращаемом значение - проверяется каждый возврат что свойства с указанными типами есть.
  2. Сделана проверка добавления в типизированную коллекцию в #952

Чего нет, согласно новому примеру:

  1. нет контроля типов элементов коллекций - нужно делать, но нужно придумать что делать с Соответствием, СпискомЗначений и другими коллекциями, которые невозможно записать в строку при инициализации переменной в строке.
  2. Нет контроля любых произвольных совпадений типов возвращаемых значений - тут возможно, следует сделать отдельную проверку - т.к. ситуаций перехода от нетипизированного кода (или слабо-типизированного) к типизированному через описание более обширных док.комментов - будет много в конфигурации, что не хочется заставлять людей писать @skip-check постоянно. Тут есть идеи как сократить лишнюю работу?

marmyshev avatar Jul 04 '22 08:07 marmyshev