V7030. Suspicious code formatting. The 'else' keyword is probably missing.
Анализатор обнаружил фрагмент кода, в котором конструкция if расположена на той же строке, что и закрывающая скобка предыдущей конструкции if. Возможно, в этом месте пропущено ключевое слово else, из-за чего программа работает не так, как ожидал программист.
Рассмотрим пример:
function setPermissions(role) {
let permissions = Permissions.NONE;
if (role == ADMIN) {
permissions = Permissions.ANY;
} if (role == USER) { // <=
permissions = Permissions.ONLY_READ;
} else {
permissions = Permissions.NONE;
}
}
В этом фрагменте устанавливаются права в системе в зависимости от роли пользователя. Если роль соответствует ADMIN, то переменной rights присваивается Permissions.ANY. Однако после этого проверки продолжаются. Условие role == USER будет ложным, и переменной permissions будет присвоено значение NONE.
Корректный вариант:
function setPermissions(role) {
let permissions = Permissions.NONE;
if (role == ADMIN) {
permissions = Permissions.ANY;
} else if (role == USER) {
permissions = Permissions.ONLY_READ;
} else {
permissions = Permissions.NONE;
}
}
В ситуациях, когда цепь из else-if не подразумевается, следует изменить форматирование для упрощения понимания кода:
if (x > 10) {
Do1();
}
if (x > 7) {
Do2();
} else {
Do3();
}