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.
This rule enforces a maximum number of lines per function, in order to aid in maintainability and reduce complexity.
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
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 }]
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;
}
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;
}
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;
}
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;
})();
You can turn this rule off if you are not concerned with the number of lines in your functions.