1c-syntax / bsl-language-server

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

[NEW] Подозрительная проверка результата поиска в Найти\СтрНайти #1550

Open artbear opened 3 years ago

artbear commented 3 years ago

Описание проблемы, ошибки, которую надо диагностировать

Разработчики иногда ошибаются в условиях на проверку результат поиска глобальных функций поиска в строках, неточно используя методы СтрНайти \ Найти

Указанные методы возвращают 0, если значение не найдено.

Поэтому условие Найти(ГдеИщем, ЧтоИщем) >= 0 не имеет смысла, т.к. всегда истинно. Или СтрНайти(ГдеИщем, ЧтоИщем)< 0 всегда ложно и также бессмысленно.

Правильные варианты

Если Найти(ГдеИщем, ЧтоИщем) > 0 Тогда
Если СтрНайти(ГдеИщем, ЧтоИщем) = 0 Тогда

Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы

Похожие ишузы

Параметры диагностики

Тип Статья на русском

Важность Статья на русском

Тэги Статья на русском

Время на исправление (минут)

1

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

zeegin commented 3 years ago

Найти - депрекейтед.

zeegin commented 3 years ago

Периодически встречаю

Если СтрНайти(ГдеИщем, ЧтоИщем) Тогда

И не могу сказать что мне это не нравится. Такой питонский стиль. Хочется к теме добавить обсужденияюе что делать в этом случае.

Так же надо понимать что эта же конструкция может быть не только в Если-Тогда ветках, проверять только в них?

artbear commented 3 years ago

1 Да, вполне можно заменять на Если СтрНайти(ГдеИщем, ЧтоИщем) Тогда

2 проверять в разных выражениях, конечно, не только в Если

@zeegin

zeegin commented 3 years ago

По проверке не только в Если-Тогда надо уметь вычленить СтрНайти из сложной булевой функции, как ее часть. Например

СтрНайти > 0 И Флаг1 СтрНайти < 0 ИЛИ Флаг2 (Флаг1 ИЛИ Флаг2) И (СтрНайти = 0 ИЛИ СтрНайти < 0)

artbear commented 3 years ago

Конечно, выделение подвыражения подразумевается