# V6086. Suspicious code formatting. 'else' keyword is probably missing.

Анализатор обнаружил фрагмент кода, в котором оператор 'if' расположен на той же строке, что и закрывающая скобка предыдущего оператора 'if'. Возможно, что в этом месте пропущено ключевое слово 'else', из-за чего программа работает не так, как ожидал программист.

Рассмотрим пример подобного кода:

    public void fillTrialMessage(User user, Response response)
    {
      if (user.getTrialTime() > 7) {
        // Do not set message
      } if (user.getTrialTime() > 0) {                // <=
        response.setTrialMessage("Trial ends soon");
      } else {
        response.setTrialMessage("Trial has ended");
      }
    }

Здесь разработчик подразумевал, что сообщение в ответе заполнится только в случае, когда триальный период у пользователя подходит к концу или уже закончился. Однако, из-за пропущенного слова 'else', пользователь будет оповещён даже если до конца этого периода ещё несколько месяцев. После исправления фрагмент кода будет выглядеть следующим образом:

    public void fillTrialMessage(User user, Response response)
    {
      if (user.getTrialTime() > 7) {
        // Do not set message
      } else if (user.getTrialTime() > 0) {
        response.setTrialMessage("Trial ends soon");
      } else {
        response.setTrialMessage("Trial has ended");
      }
    }

Если же использование конструкции else-if не подразумевалось, следует исправить форматирование и перенести второй 'if' на следующую строку:

    public void doSomething()
    {
      if (condition1) {
        foo();
      }

      if (condition2) {
        bar();
      } else {
        baz();
      }
    }

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

Данная диагностика классифицируется как:

CWE-670

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6086.