infostart-hub / snegopat

Snegopat для 1С 8.Х (32x)- Snegopat for 1C:Enterprise
https://snegopat.ru
70 stars 21 forks source link

система проверки типов на основе стандарта комментирования процедур и функций 1с #116

Open arcanist123 opened 3 years ago

arcanist123 commented 3 years ago

Существует проблема Изменение типа значения возвращаемой функции приводит к каскаду ошибок которые происходят в рантайме.

Хотелось бы иметь следующую функциональность Функции и процедуры 1с уже имеют возможность почти полного описания параметров и возращаемого значения согласно стандарту описания процедур и функций. Стандартный вычислитель типов в EDT умеет парсить такого рода комментарии и использовать их для создания контекстной подсказки, что показывает, что этот стандрат продолжит свое существование Новая функциональность позволит проверять соответствие декларации параметра/возвращаемого значения и его реального использования. Например, если функция декларирует, что она возвращает структуру из двух полей, например так // Возвращаемое значение: // Структура: // КодАдресногоОбъекта - Строка // Наименование - Строка функция тест() моя_структура = новый структура; моя_структура.Вставить("КодАдресногоОбъекта","123"); моя_структура.Вставить("Наименование","456"); возврат моя_структура; Конецфункции

то использование незадекларированного поля должно вызывать предупреждение о несоответствии типов, например в таком примере структура_адресного_объекта = тест(); сообщить( структура_адресного_объекта.номер_дома);

Эта функциональность по сути будет являться опциональной системой типов

Дополнительный контекст Стандарт описания процедур и функций https://its.1c.ru/db/v8std/content/453/hdoc Опциональные типы в Python 2 https://realpython.com/lessons/type-comments/

artbear commented 3 years ago

Хороший ишуз. По большей части подобные задачи должны решаться системой статического анализа кода. Для 1С - это проект https://github.com/1c-syntax/bsl-language-server у нас есть скрипт для проверки на его базе - Расширенный анализ кода

ArtanoMayarov commented 3 years ago

Поддерживаю. Функциональность нужна. В своё время решалась подобная проблема на базе старого стандарта и обработк по написанию кода (в режиме 1с предприятие). Сейчас мучительно без такого. Если есть вопросы по общей логике готов подсказать и поучаствовать в выработке методики