Spec-Zone.ru › ESLint

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 }]

Код

Примеры некорректного кода для этого правила с заданным максимальным значением:

Открыть в Playground
/*eslint max-lines-per-function: ["error", 2]*/
functionfoo(){const x =0;}
Открыть в Playground
/*eslint max-lines-per-function: ["error", 3]*/
functionfoo(){// a commentconst x =0;}
Открыть в Playground
/*eslint max-lines-per-function: ["error", 4]*/
functionfoo(){// a comment followed by a blank lineconst x =0;}

Примеры корректного кода для этого правила с заданным максимальным значением:

Открыть в Playground
/*eslint max-lines-per-function: ["error", 3]*/
function foo() {
    const x = 0;
}
Открыть в Playground
/*eslint max-lines-per-function: ["error", 4]*/
function foo() {
    // a comment
    const x = 0;
}
Открыть в Playground
/*eslint max-lines-per-function: ["error", 5]*/
function foo() {
    // a comment followed by a blank line

    const x = 0;
}

skipBlankLines

Примеры некорректного кода для этого правила с параметром { "skipBlankLines": true }:

Открыть в Playground
/*eslint max-lines-per-function: ["error", {"max": 2, "skipBlankLines": true}]*/
functionfoo(){const x =0;}

Примеры корректного кода для этого правила с параметром { "skipBlankLines": true }:

Открыть в Playground
/*eslint max-lines-per-function: ["error", {"max": 3, "skipBlankLines": true}]*/
function foo() {

    const x = 0;
}

skipComments

Примеры некорректного кода для этого правила с параметром { "skipComments": true }:

Открыть в Playground
/*eslint max-lines-per-function: ["error", {"max": 2, "skipComments": true}]*/
functionfoo(){// a commentconst x =0;}

Примеры корректного кода для этого правила с параметром { "skipComments": true }:

Открыть в Playground
/*eslint max-lines-per-function: ["error", {"max": 3, "skipComments": true}]*/
function foo() {
    // a comment
    const x = 0;
}

IIFE

Примеры некорректного кода для этого правила с параметром { "IIFEs": true }:

Открыть в Playground
/*eslint max-lines-per-function: ["error", {"max": 2, "IIFEs": true}]*/
(function(){const x =0;}());

(()=>{const x =0;})();

Примеры корректного кода для этого правила с параметром { "IIFEs": true }:

Открыть в Playground
/*eslint max-lines-per-function: ["error", {"max": 3, "IIFEs": true}]*/
(function(){
    const x = 0;
}());

(() => {
    const x = 0;
})();

Когда не следует использовать это правило

Это правило можно отключить, если количество строк в функциях вас не беспокоит.

Связанные правила

  • complexity
  • max-depth
  • max-lines
  • max-nested-callbacks
  • max-params
  • max-statements
  • max-statements-per-line

Версия

Это правило появилось в ESLint v5.0.0.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/max-lines-per-function

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API