max-lines-per-function
Ограничение максимального количества строк кода в функции
Некоторые считают большие функции признаком плохого кода. Большие функции, как правило, выполняют много задач, и бывает трудно понять, что в них происходит. Во многих руководствах по стилю кода установлено ограничение на количество строк в функции. Это правило помогает соблюдать такое требование.
Подробности правила
Это правило ограничивает максимальное количество строк в функции, чтобы упростить сопровождение и уменьшить сложность.
Почему вместо этого не использовать max-statements или другие правила измерения сложности?
Длинные цепочки вызовов методов, вложенные друг в друга, как в примере ниже, часто разбивают на отдельные строки для удобства чтения:
function() {
return m("div", [
m("table", {className: "table table-striped latest-data"}, [
m("tbody",
data.map(function(db) {
return m("tr", {key: db.dbname}, [
m("td", {className: "dbname"}, db.dbname),
m("td", {className: "query-count"}, [
m("span", {className: db.lastSample.countClassName}, db.lastSample.nbQueries)
])
])
})
)
])
])
}
-
max-statementsсообщит, что здесь всего 1 инструкция, несмотря на то что код занимает 16 строк. -
complexityсообщит, что сложность равна 1 -
max-nested-callbacksсообщит только значение 1 -
max-depthсообщит, что глубина равна 0
Параметры
Это правило поддерживает следующие параметры, которые можно указать в объекте:
-
"max"(по умолчанию50) задаёт максимальное количество строк в функции. -
"skipBlankLines"(по умолчаниюfalse) игнорирует строки, состоящие только из пробельных символов. -
"skipComments"(по умолчаниюfalse) игнорирует строки, содержащие только комментарии. -
"IIFEs"(по умолчаниюfalse) учитывает код внутри IIFE.
В качестве альтернативы можно указать для параметра max одно целое число:
"max-lines-per-function": ["error", 20]
что эквивалентно
"max-lines-per-function": ["error", { "max": 20 }]
Код
Примеры некорректного кода для этого правила с заданным максимальным значением:
/*eslint max-lines-per-function: ["error", 2]*/
/*eslint max-lines-per-function: ["error", 3]*/
/*eslint max-lines-per-function: ["error", 4]*/
Примеры корректного кода для этого правила с заданным максимальным значением:
/*eslint max-lines-per-function: ["error", 3]*/
function foo() {
const x = 0;
}
/*eslint max-lines-per-function: ["error", 4]*/
function foo() {
// a comment
const x = 0;
}
/*eslint max-lines-per-function: ["error", 5]*/
function foo() {
// a comment followed by a blank line
const x = 0;
}
skipBlankLines
Примеры некорректного кода для этого правила с параметром { "skipBlankLines": true }:
/*eslint max-lines-per-function: ["error", {"max": 2, "skipBlankLines": true}]*/
Примеры корректного кода для этого правила с параметром { "skipBlankLines": true }:
/*eslint max-lines-per-function: ["error", {"max": 3, "skipBlankLines": true}]*/
function foo() {
const x = 0;
}
skipComments
Примеры некорректного кода для этого правила с параметром { "skipComments": true }:
/*eslint max-lines-per-function: ["error", {"max": 2, "skipComments": true}]*/
Примеры корректного кода для этого правила с параметром { "skipComments": true }:
/*eslint max-lines-per-function: ["error", {"max": 3, "skipComments": true}]*/
function foo() {
// a comment
const x = 0;
}
IIFE
Примеры некорректного кода для этого правила с параметром { "IIFEs": true }:
/*eslint max-lines-per-function: ["error", {"max": 2, "IIFEs": true}]*/
(());
()();
Примеры корректного кода для этого правила с параметром { "IIFEs": true }:
/*eslint max-lines-per-function: ["error", {"max": 3, "IIFEs": true}]*/
(function(){
const x = 0;
}());
(() => {
const x = 0;
})();
Когда не следует использовать это правило
Это правило можно отключить, если количество строк в функциях вас не беспокоит.
Связанные правила
Версия
Это правило появилось в ESLint v5.0.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/max-lines-per-function