pve-eslint/eslint/docs/rules/max-lines-per-function.md
Thomas Lamprecht ebb53d86fb update to 7.1.0 sources
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-05-25 13:00:39 +02:00

200 lines
4.6 KiB
Markdown

# 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)
])
])
})
)
])
])
}
```
* `max-statements` will only report this as 1 statement, despite being 16 lines of code.
* `complexity` will only report a complexity of 1
* `max-nested-callbacks` will only report 1
* `max-depth` will report a depth of 0
## Options
This rule has the following options that can be specified using an object:
* `"max"` (default `50`) enforces a maximum number of lines in a function.
* `"skipBlankLines"` (default `false`) ignore lines made up purely of whitespace.
* `"skipComments"` (default `false`) ignore lines containing just comments.
* `"IIFEs"` (default `false`) include any code included in IIFEs.
Alternatively, you may specify a single integer for the `max` option:
```json
"max-lines-per-function": ["error", 20]
```
is equivalent to
```json
"max-lines-per-function": ["error", { "max": 20 }]
```
### code
Examples of **incorrect** code for this rule with a max value of `2`:
```js
/*eslint max-lines-per-function: ["error", 2]*/
function foo() {
var x = 0;
}
```
```js
/*eslint max-lines-per-function: ["error", 2]*/
function foo() {
// a comment
var x = 0;
}
```
```js
/*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`:
```js
/*eslint max-lines-per-function: ["error", 3]*/
function foo() {
var x = 0;
}
```
```js
/*eslint max-lines-per-function: ["error", 3]*/
function foo() {
// a comment
var x = 0;
}
```
```js
/*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:
```js
/*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:
```js
/*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:
```js
/*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:
```js
/*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:
```js
/*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:
```js
/*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
* [complexity](complexity.md)
* [max-depth](max-depth.md)
* [max-lines](max-lines.md)
* [max-nested-callbacks](max-nested-callbacks.md)
* [max-params](max-params.md)
* [max-statements](max-statements.md)
* [max-statements-per-line](max-statements-per-line.md)