max-lines-per-function
Enforce a maximum number of lines of code in a 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)
])
])
})
)
])
])
}
max-statements
will only report this as 1 statement, despite being 16 lines of code.complexity
will only report a complexity of 1max-nested-callbacks
will only report 1max-depth
will report a depth of 0
Options
This rule has the following options that can be specified using an object:
-
"max"
(default50
) enforces a maximum number of lines in a function. -
"skipBlankLines"
(defaultfalse
) ignore lines made up purely of whitespace. -
"skipComments"
(defaultfalse
) ignore lines containing just comments. -
"IIFEs"
(defaultfalse
) include any code included in IIFEs.
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 particular max value:
/*eslint max-lines-per-function: ["error", 2]*/
/*eslint max-lines-per-function: ["error", 3]*/
/*eslint max-lines-per-function: ["error", 4]*/
Examples of correct code for this rule with a particular max value:
/*eslint max-lines-per-function: ["error", 3]*/
function foo() {
var x = 0;
}
/*eslint max-lines-per-function: ["error", 4]*/
function foo() {
// a comment
var x = 0;
}
/*eslint max-lines-per-function: ["error", 5]*/
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}]*/
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}]*/
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}]*/
(());
()();
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.
Related Rules
Version
This rule was introduced in ESLint v5.0.0.