Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Стандарт 499: Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении. #394

Closed
marmyshev opened this issue Sep 9, 2021 · 3 comments · Fixed by #447
Assignees
Labels
bsl 1C Built-in Script Language good first issue Хорошая задача для новичков standards Поддержка стандартов АПК Доработка совместимоси с функциональностю АПК ред.1

Comments

@marmyshev
Copy link
Collaborator

marmyshev commented Sep 9, 2021

Название проверки

Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении.

Английское название проверки
??

Правило анализа кода/метаданных

Необходимо в коде проверки подписаться на объект модели com._1c.g5.v8.dt.bsl.model.TryExceptStatement и проверить что в исключениях нет кода (логических элементов)

Мета-информация (пожалуйста, заполните если знаете):

  • Номер стандарта: 499
  • Код проверки: ??my-check-id
  • Тип ошибки: WARNING CODE_STYLE
  • Критичность: MINOR TRIVIAL
  • Код ошибки АПК: 280

Параметры проверки

  • Возможно, следует добавить параметр учета комментариев в исключении, которые описывают почему там нет кода
Попытка  
// код, приводящий к вызову исключения  
....  
Исключение
   // Здесь не требуется ничего логировать или реагировать - потому что...
КонецПопытки;

Текст ошибки

Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении.

Пример некорректного решения

Попытка  
// код, приводящий к вызову исключения  
....  
Исключение // перехват любых исключений  
КонецПопытки;

Описание, почему так делать нельзя

Недопустимо перехватывать любые исключения, бесследно для системного
администратора.

Как правило, подобная конструкция скрывает реальную проблему, которую
впоследствие невозможно диагностировать.

Пример корректного решения

Попытка  
// код, приводящий к вызову исключения  
....  
Исключение  
// Пояснение причин перехвата всех исключений "незаметно" от пользователя.  
// ....  
// И запись события в журнал регистрации для системного администратора.  
ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"),  
    УровеньЖурналаРегистрации.Ошибка,,,  
    ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));  
КонецПопытки;

Дополнительные материалы

@marmyshev marmyshev added standards Поддержка стандартов АПК Доработка совместимоси с функциональностю АПК ред.1 Черновик Задача не отредактирована, шаблон, или не дописана. labels Sep 9, 2021
@EightM
Copy link
Contributor

EightM commented Sep 9, 2021

Забираю себе

@marmyshev marmyshev added good first issue Хорошая задача для новичков bsl 1C Built-in Script Language and removed Черновик Задача не отредактирована, шаблон, или не дописана. labels Sep 9, 2021
@EightM
Copy link
Contributor

EightM commented Sep 10, 2021

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

Во-первых, нельзя проверить, что комментарий содержит действительно полезную информацию, а не является простой заглушкой типа // ... или банально закомментированным кодом.

Во-вторых, включение такого параметра вызывает соблазн не писать корректный блок исключения (например добавлять запись в ЖР), а просто писать комментарии для будущего расследования // Если выпало исключение ошибка будет там-то

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

В целом, можно сделать вывод, что наличие такого параметра приведет скорее к поощрению написания плохого кода, чем к его улучшению

@marmyshev
Copy link
Collaborator Author

Было бы классно, в доке для пользователей привести пример как правильно указывать подавление проверки (естественно с комментами):

// @skip-check this-check-try-exception - не отлавливаем исключение потому что...
Попытка
  ... 
Исключение
КонецПопытки;

EightM added a commit to EightM/v8-code-style that referenced this issue Sep 10, 2021
@marmyshev marmyshev added Черновик Задача не отредактирована, шаблон, или не дописана. and removed Черновик Задача не отредактирована, шаблон, или не дописана. labels Sep 16, 2021
@marmyshev marmyshev added this to the 0.1 для EDT 2021.2 milestone Oct 1, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bsl 1C Built-in Script Language good first issue Хорошая задача для новичков standards Поддержка стандартов АПК Доработка совместимоси с функциональностю АПК ред.1
Projects
None yet
2 participants