enforce a maximum function length (max-lines-per-function)

Some people consider large functions a code smell. Large functions tend to do a lot of things and can make it hard following what's going on. Many coding style guides dictate a limit of the number of lines that a function can comprise of. This rule can help enforce that style.

Rule Details

This rule enforces a maximum number of lines per function, in order to aid in maintainability and reduce complexity.

Why not use max-statements or other complexity measurement rules instead?

Nested long method chains like the below example are often broken onto separate lines for readability:

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

Options

This rule has the following options that can be specified using an object:

Alternatively, you may specify a single integer for the max option:

"max-lines-per-function": ["error", 20]

is equivalent to

"max-lines-per-function": ["error", { "max": 20 }]

code

Examples of incorrect code for this rule with a max value of 2:

/*eslint max-lines-per-function: ["error", 2]*/
function foo() {
    var x = 0;
}
/*eslint max-lines-per-function: ["error", 2]*/
function foo() {
    // a comment
    var x = 0;
}
/*eslint max-lines-per-function: ["error", 2]*/
function foo() {
    // a comment followed by a blank line

    var x = 0;
}

Examples of correct code for this rule with a max value of 3:

/*eslint max-lines-per-function: ["error", 3]*/
function foo() {
    var x = 0;
}
/*eslint max-lines-per-function: ["error", 3]*/
function foo() {
    // a comment
    var x = 0;
}
/*eslint max-lines-per-function: ["error", 3]*/
function foo() {
    // a comment followed by a blank line

    var x = 0;
}

skipBlankLines

Examples of incorrect code for this rule with the { "skipBlankLines": true } option:

/*eslint max-lines-per-function: ["error", {"max": 2, "skipBlankLines": true}]*/
function foo() {

    var x = 0;
}

Examples of correct code for this rule with the { "skipBlankLines": true } option:

/*eslint max-lines-per-function: ["error", {"max": 3, "skipBlankLines": true}]*/
function foo() {

    var x = 0;
}

skipComments

Examples of incorrect code for this rule with the { "skipComments": true } option:

/*eslint max-lines-per-function: ["error", {"max": 2, "skipComments": true}]*/
function foo() {
    // a comment
    var x = 0;
}

Examples of correct code for this rule with the { "skipComments": true } option:

/*eslint max-lines-per-function: ["error", {"max": 3, "skipComments": true}]*/
function foo() {
    // a comment
    var x = 0;
}

IIFEs

Examples of incorrect code for this rule with the { "IIFEs": true } option:

/*eslint max-lines-per-function: ["error", {"max": 2, "IIFEs": true}]*/
(function(){
    var x = 0;
}());

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

Examples of correct code for this rule with the { "IIFEs": true } option:

/*eslint max-lines-per-function: ["error", {"max": 3, "IIFEs": true}]*/
(function(){
    var x = 0;
}());

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

When Not To Use It

You can turn this rule off if you are not concerned with the number of lines in your functions.

Version

This rule was introduced in ESLint 5.0.0.

Resources