сложность
Навязывает максимальную цикломатическую сложность, разрешенную в программе
Цикломатическая сложность измеряет количество линейно независимых путей через исходный код программы. Это правило позволяет установить порог цикломатической сложности.
function a(x) {
if (true) {
return x; // 1st path
} else if (false) {
return x+1; // 2nd path
} else {
return 4; // 3rd path
}
}
Подробное описание правила
Это правило направлено на снижение сложности кода, ограничивая количество цикломатической сложности, разрешенной в программе. Таким образом, оно будет предупреждать, когда цикломатическая сложность превысит настроенный порог (по умолчанию 20).
Примеры неправильного кода для максимального значения 2:
/*eslint complexity: ["error", 2]*/
Примеры правильного кода для максимального значения 2:
/*eslint complexity: ["error", 2]*/
function a(x) {
if (true) {
return x;
} else {
return 4;
}
}
function b() {
foo ||= 1;
}
Инициализаторы полей класса и статические блоки класса являются неявными функциями. Поэтому их сложность вычисляется отдельно для каждой инициализации и каждого статического блока, и она не влияет на сложность окружающего кода.
Примеры дополнительного неправильного кода для максимального значения 2:
/*eslint complexity: ["error", 2]*/
class C {
x = ; // this initializer has complexity = 3
}
class D { // this static block has complexity = 3
}
Примеры дополнительного правильного кода для максимального значения 2:
/*eslint complexity: ["error", 2]*/
function foo() { // this function has complexity = 1
class C {
x = a + b; // this initializer has complexity = 1
y = c || d; // this initializer has complexity = 2
z = e && f; // this initializer has complexity = 2
static p = g || h; // this initializer has complexity = 2
static q = i ? j : k; // this initializer has complexity = 2
static { // this static block has complexity = 2
if (foo) {
baz = bar;
}
}
static { // this static block has complexity = 2
qux = baz || quux;
}
}
}
Параметры
Это правило имеет параметр в виде числа или объекта:
-
"max"(по умолчанию20) принудительно устанавливает максимальную сложность -
"variant": "classic" | "modified"(по умолчанию"classic") используемая разновидность цикломатической сложности
max
Настройте порог с помощью свойства max.
"complexity": ["error", { "max": 2 }]
Устарело: свойство объекта maximum устарело. Используйте свойство max вместо него.
Или используйте сокращенную запись:
"complexity": ["error", 2]
variant
Разновидность цикломатической сложности для использования:
-
"classic"(по умолчанию) - классическая цикломатическая сложность МакКэбба -
"modified"- модифицированная цикломатическая сложность
Модифицированная цикломатическая сложность такая же, как и классическая цикломатическая сложность, но каждое операторное утверждение switch увеличивает значение сложности только на 1, независимо от того, сколько операторных утверждений case оно содержит.
Примеры правильного кода для этого правила с параметром { "max": 3, "variant": "modified" }:
/*eslint complexity: ["error", {"max": 3, "variant": "modified"}]*/
function a(x) { // initial modified complexity is 1
switch (x) { // switch statement increases modified complexity by 1
case 1:
1;
break;
case 2:
2;
break;
case 3:
if (x === 'foo') { // if block increases modified complexity by 1
3;
}
break;
default:
4;
}
}
Классическая цикломатическая сложность указанной выше функции составляет 5, а модифицированная цикломатическая сложность — только 3.
Когда не следует его использовать
Если вы не можете определить подходящий предел сложности для своего кода, лучше всего отключить это правило.
Связанные правила
Версия
Это правило было введено в ESLint v0.0.9.
Дополнительные материалы для чтения
Ссылки
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/complexity