Versions

max-lines-per-function

Enforce a maximum number of lines of code in a 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)包括任何包含在 IIFEs 中的代码。

另外,你可以为 max 选项指定一个整数。

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

相当于

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

code

使用此规则与最大值 2错误示例:

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

    var x = 0;
}

使用此规则与最大值 3正确代码示例:

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

    var x = 0;
}

skipBlankLines

使用此规则与 { "skipBlankLines": true } 选项的错误示例:

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

    var x = 0;
}

使用此规则与 { "skipBlankLines": true } 选项的正确示例:

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

    var x = 0;
}

skipComments

使用此规则与 { "skipComments": true } 选项的错误示例:

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

使用此规则与 { "skipComments": true } 选项的正确示例:

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

IIFEs

使用此规则与 { "IIFEs": true } 选项的错误示例:

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

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

使用此规则与 { "IIFEs": true } 选项的正确示例:

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

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

何时不用

如果你不关心你的函数中的行数,你可以关闭这个规则。

Version

This rule was introduced in ESLint v5.0.0.

Resources

更改语言