格式化程序参考
ESLint 附带几个内置的格式化程序来控制代码检查结果的外观,并且也支持第三方格式化程序。
您可以在 CLI 中使用--format
或-f
标志指定格式化程序。例如,--format json
使用json
格式化程序。
内置格式化程序选项为
示例源代码
每个格式化程序的示例都是通过使用下面显示的.eslintrc.json
配置对fullOfProblems.js
进行代码检查创建的。
fullOfProblems.js
:
function addOne(i) {
if (i != NaN) {
return i ++
} else {
return
}
};
.eslintrc.json
:
{
"extends": "eslint:recommended",
"rules": {
"consistent-return": 2,
"indent" : [1, 4],
"no-else-return" : 1,
"semi" : [1, "always"],
"space-unary-ops" : 2
}
}
使用 CLI 测试格式化程序
npx eslint --format <Add formatter here> fullOfProblems.js
内置格式化程序选项
html
将结果输出到 HTML。html
格式化程序可用于在浏览器中进行视觉呈现。
示例输出
json-with-metadata
输出 JSON 序列化结果。json-with-metadata
提供了与json
格式化程序相同的代码检查结果,以及有关应用规则的其他元数据。代码检查结果包含在results
属性中,规则元数据包含在metadata
属性中。
或者,您可以使用ESLint Node.js API以编程方式使用 ESLint。
示例输出(格式化以方便阅读)
{
"results": [
{
"filePath": "/var/lib/jenkins/workspace/eslint Release/eslint/fullOfProblems.js",
"messages": [
{
"ruleId": "no-unused-vars",
"severity": 2,
"message": "'addOne' is defined but never used.",
"line": 1,
"column": 10,
"nodeType": "Identifier",
"messageId": "unusedVar",
"endLine": 1,
"endColumn": 16
},
{
"ruleId": "use-isnan",
"severity": 2,
"message": "Use the isNaN function to compare with NaN.",
"line": 2,
"column": 9,
"nodeType": "BinaryExpression",
"messageId": "comparisonWithNaN",
"endLine": 2,
"endColumn": 17,
"suggestions": [
{
"messageId": "replaceWithIsNaN",
"fix": {
"range": [
29,
37
],
"text": "!Number.isNaN(i)"
},
"desc": "Replace with Number.isNaN."
},
{
"messageId": "replaceWithCastingAndIsNaN",
"fix": {
"range": [
29,
37
],
"text": "!Number.isNaN(Number(i))"
},
"desc": "Replace with Number.isNaN and cast to a Number."
}
]
},
{
"ruleId": "space-unary-ops",
"severity": 2,
"message": "Unexpected space before unary operator '++'.",
"line": 3,
"column": 16,
"nodeType": "UpdateExpression",
"messageId": "unexpectedBefore",
"endLine": 3,
"endColumn": 20,
"fix": {
"range": [
57,
58
],
"text": ""
}
},
{
"ruleId": "semi",
"severity": 1,
"message": "Missing semicolon.",
"line": 3,
"column": 20,
"nodeType": "ReturnStatement",
"messageId": "missingSemi",
"endLine": 4,
"endColumn": 1,
"fix": {
"range": [
60,
60
],
"text": ";"
}
},
{
"ruleId": "no-else-return",
"severity": 1,
"message": "Unnecessary 'else' after 'return'.",
"line": 4,
"column": 12,
"nodeType": "BlockStatement",
"messageId": "unexpected",
"endLine": 6,
"endColumn": 6,
"fix": {
"range": [
0,
94
],
"text": "function addOne(i) {\n if (i != NaN) {\n return i ++\n } \n return\n \n}"
}
},
{
"ruleId": "indent",
"severity": 1,
"message": "Expected indentation of 8 spaces but found 6.",
"line": 5,
"column": 1,
"nodeType": "Keyword",
"messageId": "wrongIndentation",
"endLine": 5,
"endColumn": 7,
"fix": {
"range": [
74,
80
],
"text": " "
}
},
{
"ruleId": "consistent-return",
"severity": 2,
"message": "Function 'addOne' expected a return value.",
"line": 5,
"column": 7,
"nodeType": "ReturnStatement",
"messageId": "missingReturnValue",
"endLine": 5,
"endColumn": 13
},
{
"ruleId": "semi",
"severity": 1,
"message": "Missing semicolon.",
"line": 5,
"column": 13,
"nodeType": "ReturnStatement",
"messageId": "missingSemi",
"endLine": 6,
"endColumn": 1,
"fix": {
"range": [
86,
86
],
"text": ";"
}
}
],
"suppressedMessages": [],
"errorCount": 4,
"fatalErrorCount": 0,
"warningCount": 4,
"fixableErrorCount": 1,
"fixableWarningCount": 4,
"source": "function addOne(i) {\n if (i != NaN) {\n return i ++\n } else {\n return\n }\n};"
}
],
"metadata": {
"rulesMeta": {
"no-else-return": {
"type": "suggestion",
"docs": {
"description": "Disallow `else` blocks after `return` statements in `if` statements",
"recommended": false,
"url": "https://eslint.org.cn/docs/latest/rules/no-else-return"
},
"schema": [
{
"type": "object",
"properties": {
"allowElseIf": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
}
],
"fixable": "code",
"messages": {
"unexpected": "Unnecessary 'else' after 'return'."
}
},
"indent": {
"deprecated": true,
"replacedBy": [],
"type": "layout",
"docs": {
"description": "Enforce consistent indentation",
"recommended": false,
"url": "https://eslint.org.cn/docs/latest/rules/indent"
},
"fixable": "whitespace",
"schema": [
{
"oneOf": [
{
"enum": [
"tab"
]
},
{
"type": "integer",
"minimum": 0
}
]
},
{
"type": "object",
"properties": {
"SwitchCase": {
"type": "integer",
"minimum": 0,
"default": 0
},
"VariableDeclarator": {
"oneOf": [
{
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
},
{
"type": "object",
"properties": {
"var": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
},
"let": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
},
"const": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
}
},
"additionalProperties": false
}
]
},
"outerIIFEBody": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"off"
]
}
]
},
"MemberExpression": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"off"
]
}
]
},
"FunctionDeclaration": {
"type": "object",
"properties": {
"parameters": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
},
"body": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"FunctionExpression": {
"type": "object",
"properties": {
"parameters": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
},
"body": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"StaticBlock": {
"type": "object",
"properties": {
"body": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"CallExpression": {
"type": "object",
"properties": {
"arguments": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
}
},
"additionalProperties": false
},
"ArrayExpression": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
},
"ObjectExpression": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
},
"ImportDeclaration": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"enum": [
"first",
"off"
]
}
]
},
"flatTernaryExpressions": {
"type": "boolean",
"default": false
},
"offsetTernaryExpressions": {
"type": "boolean",
"default": false
},
"ignoredNodes": {
"type": "array",
"items": {
"type": "string",
"not": {
"pattern": ":exit$"
}
}
},
"ignoreComments": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}
],
"messages": {
"wrongIndentation": "Expected indentation of but found ."
}
},
"space-unary-ops": {
"deprecated": true,
"replacedBy": [],
"type": "layout",
"docs": {
"description": "Enforce consistent spacing before or after unary operators",
"recommended": false,
"url": "https://eslint.org.cn/docs/latest/rules/space-unary-ops"
},
"fixable": "whitespace",
"schema": [
{
"type": "object",
"properties": {
"words": {
"type": "boolean",
"default": true
},
"nonwords": {
"type": "boolean",
"default": false
},
"overrides": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
}
},
"additionalProperties": false
}
],
"messages": {
"unexpectedBefore": "Unexpected space before unary operator ''.",
"unexpectedAfter": "Unexpected space after unary operator ''.",
"unexpectedAfterWord": "Unexpected space after unary word operator ''.",
"wordOperator": "Unary word operator '' must be followed by whitespace.",
"operator": "Unary operator '' must be followed by whitespace.",
"beforeUnaryExpressions": "Space is required before unary expressions ''."
}
},
"semi": {
"deprecated": true,
"replacedBy": [],
"type": "layout",
"docs": {
"description": "Require or disallow semicolons instead of ASI",
"recommended": false,
"url": "https://eslint.org.cn/docs/latest/rules/semi"
},
"fixable": "code",
"schema": {
"anyOf": [
{
"type": "array",
"items": [
{
"enum": [
"never"
]
},
{
"type": "object",
"properties": {
"beforeStatementContinuationChars": {
"enum": [
"always",
"any",
"never"
]
}
},
"additionalProperties": false
}
],
"minItems": 0,
"maxItems": 2
},
{
"type": "array",
"items": [
{
"enum": [
"always"
]
},
{
"type": "object",
"properties": {
"omitLastInOneLineBlock": {
"type": "boolean"
},
"omitLastInOneLineClassBody": {
"type": "boolean"
}
},
"additionalProperties": false
}
],
"minItems": 0,
"maxItems": 2
}
]
},
"messages": {
"missingSemi": "Missing semicolon.",
"extraSemi": "Extra semicolon."
}
},
"consistent-return": {
"type": "suggestion",
"docs": {
"description": "Require `return` statements to either always or never specify values",
"recommended": false,
"url": "https://eslint.org.cn/docs/latest/rules/consistent-return"
},
"schema": [
{
"type": "object",
"properties": {
"treatUndefinedAsUnspecified": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}
],
"messages": {
"missingReturn": "Expected to return a value at the end of .",
"missingReturnValue": " expected a return value.",
"unexpectedReturnValue": " expected no return value."
}
}
}
}
}
json
输出 JSON 序列化结果。当您想要以编程方式处理 CLI 的代码检查结果时,json
格式化程序很有用。
或者,您可以使用ESLint Node.js API以编程方式使用 ESLint。
示例输出(格式化以方便阅读)
[
{
"filePath": "/var/lib/jenkins/workspace/eslint Release/eslint/fullOfProblems.js",
"messages": [
{
"ruleId": "no-unused-vars",
"severity": 2,
"message": "'addOne' is defined but never used.",
"line": 1,
"column": 10,
"nodeType": "Identifier",
"messageId": "unusedVar",
"endLine": 1,
"endColumn": 16
},
{
"ruleId": "use-isnan",
"severity": 2,
"message": "Use the isNaN function to compare with NaN.",
"line": 2,
"column": 9,
"nodeType": "BinaryExpression",
"messageId": "comparisonWithNaN",
"endLine": 2,
"endColumn": 17,
"suggestions": [
{
"messageId": "replaceWithIsNaN",
"fix": {
"range": [
29,
37
],
"text": "!Number.isNaN(i)"
},
"desc": "Replace with Number.isNaN."
},
{
"messageId": "replaceWithCastingAndIsNaN",
"fix": {
"range": [
29,
37
],
"text": "!Number.isNaN(Number(i))"
},
"desc": "Replace with Number.isNaN and cast to a Number."
}
]
},
{
"ruleId": "space-unary-ops",
"severity": 2,
"message": "Unexpected space before unary operator '++'.",
"line": 3,
"column": 16,
"nodeType": "UpdateExpression",
"messageId": "unexpectedBefore",
"endLine": 3,
"endColumn": 20,
"fix": {
"range": [
57,
58
],
"text": ""
}
},
{
"ruleId": "semi",
"severity": 1,
"message": "Missing semicolon.",
"line": 3,
"column": 20,
"nodeType": "ReturnStatement",
"messageId": "missingSemi",
"endLine": 4,
"endColumn": 1,
"fix": {
"range": [
60,
60
],
"text": ";"
}
},
{
"ruleId": "no-else-return",
"severity": 1,
"message": "Unnecessary 'else' after 'return'.",
"line": 4,
"column": 12,
"nodeType": "BlockStatement",
"messageId": "unexpected",
"endLine": 6,
"endColumn": 6,
"fix": {
"range": [
0,
94
],
"text": "function addOne(i) {\n if (i != NaN) {\n return i ++\n } \n return\n \n}"
}
},
{
"ruleId": "indent",
"severity": 1,
"message": "Expected indentation of 8 spaces but found 6.",
"line": 5,
"column": 1,
"nodeType": "Keyword",
"messageId": "wrongIndentation",
"endLine": 5,
"endColumn": 7,
"fix": {
"range": [
74,
80
],
"text": " "
}
},
{
"ruleId": "consistent-return",
"severity": 2,
"message": "Function 'addOne' expected a return value.",
"line": 5,
"column": 7,
"nodeType": "ReturnStatement",
"messageId": "missingReturnValue",
"endLine": 5,
"endColumn": 13
},
{
"ruleId": "semi",
"severity": 1,
"message": "Missing semicolon.",
"line": 5,
"column": 13,
"nodeType": "ReturnStatement",
"messageId": "missingSemi",
"endLine": 6,
"endColumn": 1,
"fix": {
"range": [
86,
86
],
"text": ";"
}
}
],
"suppressedMessages": [],
"errorCount": 4,
"fatalErrorCount": 0,
"warningCount": 4,
"fixableErrorCount": 1,
"fixableWarningCount": 4,
"source": "function addOne(i) {\n if (i != NaN) {\n return i ++\n } else {\n return\n }\n};"
}
]
stylish
人类可读的输出格式。这是默认格式化程序。
示例输出
/var/lib/jenkins/workspace/eslint Release/eslint/fullOfProblems.js
1:10 error 'addOne' is defined but never used no-unused-vars
2:9 error Use the isNaN function to compare with NaN use-isnan
3:16 error Unexpected space before unary operator '++' space-unary-ops
3:20 warning Missing semicolon semi
4:12 warning Unnecessary 'else' after 'return' no-else-return
5:1 warning Expected indentation of 8 spaces but found 6 indent
5:7 error Function 'addOne' expected a return value consistent-return
5:13 warning Missing semicolon semi
✖ 8 problems (4 errors, 4 warnings)
1 error and 4 warnings potentially fixable with the `--fix` option.