eslint 8.56.0 → 9.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/conf/ecma-version.js +16 -0
- package/conf/rule-type-list.json +3 -1
- package/lib/api.js +1 -1
- package/lib/cli-engine/cli-engine.js +14 -3
- package/lib/cli-engine/formatters/formatters-meta.json +1 -29
- package/lib/cli-engine/lint-result-cache.js +2 -2
- package/lib/cli.js +46 -25
- package/lib/config/default-config.js +3 -0
- package/lib/config/flat-config-array.js +0 -20
- package/lib/config/flat-config-helpers.js +41 -20
- package/lib/config/flat-config-schema.js +35 -25
- package/lib/config/rule-validator.js +27 -4
- package/lib/eslint/eslint-helpers.js +32 -12
- package/lib/eslint/eslint.js +856 -373
- package/lib/eslint/index.js +2 -2
- package/lib/eslint/legacy-eslint.js +722 -0
- package/lib/linter/apply-disable-directives.js +35 -7
- package/lib/linter/code-path-analysis/code-path.js +5 -19
- package/lib/linter/code-path-analysis/fork-context.js +1 -1
- package/lib/linter/config-comment-parser.js +8 -11
- package/lib/linter/linter.js +196 -100
- package/lib/linter/report-translator.js +2 -2
- package/lib/linter/rules.js +6 -15
- package/lib/linter/source-code-fixer.js +1 -1
- package/lib/options.js +9 -1
- package/lib/rule-tester/rule-tester.js +234 -291
- package/lib/rules/array-bracket-newline.js +1 -1
- package/lib/rules/array-bracket-spacing.js +1 -1
- package/lib/rules/block-scoped-var.js +1 -1
- package/lib/rules/callback-return.js +2 -2
- package/lib/rules/comma-dangle.js +1 -1
- package/lib/rules/comma-style.js +2 -2
- package/lib/rules/complexity.js +1 -1
- package/lib/rules/constructor-super.js +1 -1
- package/lib/rules/default-case.js +1 -1
- package/lib/rules/eol-last.js +2 -2
- package/lib/rules/function-paren-newline.js +2 -2
- package/lib/rules/indent-legacy.js +5 -5
- package/lib/rules/indent.js +5 -5
- package/lib/rules/index.js +1 -2
- package/lib/rules/key-spacing.js +2 -2
- package/lib/rules/line-comment-position.js +1 -1
- package/lib/rules/lines-around-directive.js +2 -2
- package/lib/rules/max-depth.js +1 -1
- package/lib/rules/max-len.js +3 -3
- package/lib/rules/max-lines.js +3 -3
- package/lib/rules/max-nested-callbacks.js +1 -1
- package/lib/rules/max-params.js +1 -1
- package/lib/rules/max-statements.js +1 -1
- package/lib/rules/multiline-comment-style.js +7 -7
- package/lib/rules/new-cap.js +1 -1
- package/lib/rules/newline-after-var.js +1 -1
- package/lib/rules/newline-before-return.js +1 -1
- package/lib/rules/no-constant-binary-expression.js +6 -6
- package/lib/rules/no-constructor-return.js +2 -2
- package/lib/rules/no-dupe-class-members.js +2 -2
- package/lib/rules/no-else-return.js +1 -1
- package/lib/rules/no-empty-function.js +2 -2
- package/lib/rules/no-empty-static-block.js +1 -1
- package/lib/rules/no-extra-semi.js +1 -1
- package/lib/rules/no-fallthrough.js +1 -1
- package/lib/rules/no-implicit-coercion.js +17 -1
- package/lib/rules/no-inner-declarations.js +23 -2
- package/lib/rules/no-invalid-regexp.js +1 -1
- package/lib/rules/no-invalid-this.js +1 -1
- package/lib/rules/no-lone-blocks.js +2 -2
- package/lib/rules/no-loss-of-precision.js +1 -1
- package/lib/rules/no-misleading-character-class.js +174 -65
- package/lib/rules/no-mixed-spaces-and-tabs.js +1 -1
- package/lib/rules/no-multiple-empty-lines.js +1 -1
- package/lib/rules/no-new-native-nonconstructor.js +1 -1
- package/lib/rules/no-new-symbol.js +8 -1
- package/lib/rules/no-restricted-globals.js +1 -1
- package/lib/rules/no-restricted-imports.js +2 -2
- package/lib/rules/no-restricted-modules.js +2 -2
- package/lib/rules/no-return-await.js +1 -1
- package/lib/rules/no-sequences.js +1 -0
- package/lib/rules/no-trailing-spaces.js +2 -3
- package/lib/rules/no-unneeded-ternary.js +1 -1
- package/lib/rules/no-unsafe-optional-chaining.js +1 -1
- package/lib/rules/no-unused-private-class-members.js +1 -1
- package/lib/rules/no-unused-vars.js +6 -8
- package/lib/rules/no-useless-assignment.js +566 -0
- package/lib/rules/no-useless-backreference.js +1 -1
- package/lib/rules/object-curly-spacing.js +3 -3
- package/lib/rules/object-property-newline.js +1 -1
- package/lib/rules/one-var.js +5 -5
- package/lib/rules/padded-blocks.js +7 -7
- package/lib/rules/prefer-arrow-callback.js +3 -3
- package/lib/rules/prefer-reflect.js +1 -1
- package/lib/rules/prefer-regex-literals.js +1 -1
- package/lib/rules/prefer-template.js +1 -1
- package/lib/rules/radix.js +2 -2
- package/lib/rules/semi-style.js +1 -1
- package/lib/rules/sort-imports.js +1 -1
- package/lib/rules/sort-keys.js +1 -1
- package/lib/rules/sort-vars.js +1 -1
- package/lib/rules/space-unary-ops.js +1 -1
- package/lib/rules/strict.js +1 -1
- package/lib/rules/utils/ast-utils.js +7 -7
- package/lib/rules/yield-star-spacing.js +1 -1
- package/lib/shared/types.js +1 -1
- package/lib/source-code/source-code.js +5 -83
- package/lib/source-code/token-store/index.js +2 -2
- package/lib/unsupported-api.js +3 -5
- package/package.json +12 -14
- package/conf/config-schema.js +0 -93
- package/lib/cli-engine/formatters/checkstyle.js +0 -60
- package/lib/cli-engine/formatters/compact.js +0 -60
- package/lib/cli-engine/formatters/jslint-xml.js +0 -41
- package/lib/cli-engine/formatters/junit.js +0 -82
- package/lib/cli-engine/formatters/tap.js +0 -95
- package/lib/cli-engine/formatters/unix.js +0 -58
- package/lib/cli-engine/formatters/visualstudio.js +0 -63
- package/lib/eslint/flat-eslint.js +0 -1142
- package/lib/rule-tester/flat-rule-tester.js +0 -1122
- package/lib/rules/require-jsdoc.js +0 -122
- package/lib/rules/valid-jsdoc.js +0 -516
- package/lib/shared/config-validator.js +0 -347
- package/lib/shared/relative-module-resolver.js +0 -50
@@ -1,60 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview CheckStyle XML reporter
|
3
|
-
* @author Ian Christian Myers
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const xmlEscape = require("../xml-escape");
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Helper Functions
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
/**
|
14
|
-
* Returns the severity of warning or error
|
15
|
-
* @param {Object} message message object to examine
|
16
|
-
* @returns {string} severity level
|
17
|
-
* @private
|
18
|
-
*/
|
19
|
-
function getMessageType(message) {
|
20
|
-
if (message.fatal || message.severity === 2) {
|
21
|
-
return "error";
|
22
|
-
}
|
23
|
-
return "warning";
|
24
|
-
|
25
|
-
}
|
26
|
-
|
27
|
-
//------------------------------------------------------------------------------
|
28
|
-
// Public Interface
|
29
|
-
//------------------------------------------------------------------------------
|
30
|
-
|
31
|
-
module.exports = function(results) {
|
32
|
-
|
33
|
-
let output = "";
|
34
|
-
|
35
|
-
output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
|
36
|
-
output += "<checkstyle version=\"4.3\">";
|
37
|
-
|
38
|
-
results.forEach(result => {
|
39
|
-
const messages = result.messages;
|
40
|
-
|
41
|
-
output += `<file name="${xmlEscape(result.filePath)}">`;
|
42
|
-
|
43
|
-
messages.forEach(message => {
|
44
|
-
output += [
|
45
|
-
`<error line="${xmlEscape(message.line || 0)}"`,
|
46
|
-
`column="${xmlEscape(message.column || 0)}"`,
|
47
|
-
`severity="${xmlEscape(getMessageType(message))}"`,
|
48
|
-
`message="${xmlEscape(message.message)}${message.ruleId ? ` (${message.ruleId})` : ""}"`,
|
49
|
-
`source="${message.ruleId ? xmlEscape(`eslint.rules.${message.ruleId}`) : ""}" />`
|
50
|
-
].join(" ");
|
51
|
-
});
|
52
|
-
|
53
|
-
output += "</file>";
|
54
|
-
|
55
|
-
});
|
56
|
-
|
57
|
-
output += "</checkstyle>";
|
58
|
-
|
59
|
-
return output;
|
60
|
-
};
|
@@ -1,60 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Compact reporter
|
3
|
-
* @author Nicholas C. Zakas
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
//------------------------------------------------------------------------------
|
8
|
-
// Helper Functions
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
|
11
|
-
/**
|
12
|
-
* Returns the severity of warning or error
|
13
|
-
* @param {Object} message message object to examine
|
14
|
-
* @returns {string} severity level
|
15
|
-
* @private
|
16
|
-
*/
|
17
|
-
function getMessageType(message) {
|
18
|
-
if (message.fatal || message.severity === 2) {
|
19
|
-
return "Error";
|
20
|
-
}
|
21
|
-
return "Warning";
|
22
|
-
|
23
|
-
}
|
24
|
-
|
25
|
-
|
26
|
-
//------------------------------------------------------------------------------
|
27
|
-
// Public Interface
|
28
|
-
//------------------------------------------------------------------------------
|
29
|
-
|
30
|
-
module.exports = function(results) {
|
31
|
-
|
32
|
-
let output = "",
|
33
|
-
total = 0;
|
34
|
-
|
35
|
-
results.forEach(result => {
|
36
|
-
|
37
|
-
const messages = result.messages;
|
38
|
-
|
39
|
-
total += messages.length;
|
40
|
-
|
41
|
-
messages.forEach(message => {
|
42
|
-
|
43
|
-
output += `${result.filePath}: `;
|
44
|
-
output += `line ${message.line || 0}`;
|
45
|
-
output += `, col ${message.column || 0}`;
|
46
|
-
output += `, ${getMessageType(message)}`;
|
47
|
-
output += ` - ${message.message}`;
|
48
|
-
output += message.ruleId ? ` (${message.ruleId})` : "";
|
49
|
-
output += "\n";
|
50
|
-
|
51
|
-
});
|
52
|
-
|
53
|
-
});
|
54
|
-
|
55
|
-
if (total > 0) {
|
56
|
-
output += `\n${total} problem${total !== 1 ? "s" : ""}`;
|
57
|
-
}
|
58
|
-
|
59
|
-
return output;
|
60
|
-
};
|
@@ -1,41 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview JSLint XML reporter
|
3
|
-
* @author Ian Christian Myers
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const xmlEscape = require("../xml-escape");
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Public Interface
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module.exports = function(results) {
|
14
|
-
|
15
|
-
let output = "";
|
16
|
-
|
17
|
-
output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
|
18
|
-
output += "<jslint>";
|
19
|
-
|
20
|
-
results.forEach(result => {
|
21
|
-
const messages = result.messages;
|
22
|
-
|
23
|
-
output += `<file name="${result.filePath}">`;
|
24
|
-
|
25
|
-
messages.forEach(message => {
|
26
|
-
output += [
|
27
|
-
`<issue line="${message.line}"`,
|
28
|
-
`char="${message.column}"`,
|
29
|
-
`evidence="${xmlEscape(message.source || "")}"`,
|
30
|
-
`reason="${xmlEscape(message.message || "")}${message.ruleId ? ` (${message.ruleId})` : ""}" />`
|
31
|
-
].join(" ");
|
32
|
-
});
|
33
|
-
|
34
|
-
output += "</file>";
|
35
|
-
|
36
|
-
});
|
37
|
-
|
38
|
-
output += "</jslint>";
|
39
|
-
|
40
|
-
return output;
|
41
|
-
};
|
@@ -1,82 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview jUnit Reporter
|
3
|
-
* @author Jamund Ferguson
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const xmlEscape = require("../xml-escape");
|
8
|
-
const path = require("path");
|
9
|
-
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
// Helper Functions
|
12
|
-
//------------------------------------------------------------------------------
|
13
|
-
|
14
|
-
/**
|
15
|
-
* Returns the severity of warning or error
|
16
|
-
* @param {Object} message message object to examine
|
17
|
-
* @returns {string} severity level
|
18
|
-
* @private
|
19
|
-
*/
|
20
|
-
function getMessageType(message) {
|
21
|
-
if (message.fatal || message.severity === 2) {
|
22
|
-
return "Error";
|
23
|
-
}
|
24
|
-
return "Warning";
|
25
|
-
|
26
|
-
}
|
27
|
-
|
28
|
-
/**
|
29
|
-
* Returns a full file path without extension
|
30
|
-
* @param {string} filePath input file path
|
31
|
-
* @returns {string} file path without extension
|
32
|
-
* @private
|
33
|
-
*/
|
34
|
-
function pathWithoutExt(filePath) {
|
35
|
-
return path.join(path.dirname(filePath), path.basename(filePath, path.extname(filePath)));
|
36
|
-
}
|
37
|
-
|
38
|
-
//------------------------------------------------------------------------------
|
39
|
-
// Public Interface
|
40
|
-
//------------------------------------------------------------------------------
|
41
|
-
|
42
|
-
module.exports = function(results) {
|
43
|
-
|
44
|
-
let output = "";
|
45
|
-
|
46
|
-
output += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
|
47
|
-
output += "<testsuites>\n";
|
48
|
-
|
49
|
-
results.forEach(result => {
|
50
|
-
|
51
|
-
const messages = result.messages;
|
52
|
-
const classname = pathWithoutExt(result.filePath);
|
53
|
-
|
54
|
-
if (messages.length > 0) {
|
55
|
-
output += `<testsuite package="org.eslint" time="0" tests="${messages.length}" errors="${messages.length}" name="${result.filePath}">\n`;
|
56
|
-
messages.forEach(message => {
|
57
|
-
const type = message.fatal ? "error" : "failure";
|
58
|
-
|
59
|
-
output += `<testcase time="0" name="org.eslint.${message.ruleId || "unknown"}" classname="${classname}">`;
|
60
|
-
output += `<${type} message="${xmlEscape(message.message || "")}">`;
|
61
|
-
output += "<![CDATA[";
|
62
|
-
output += `line ${message.line || 0}, col `;
|
63
|
-
output += `${message.column || 0}, ${getMessageType(message)}`;
|
64
|
-
output += ` - ${xmlEscape(message.message || "")}`;
|
65
|
-
output += (message.ruleId ? ` (${message.ruleId})` : "");
|
66
|
-
output += "]]>";
|
67
|
-
output += `</${type}>`;
|
68
|
-
output += "</testcase>\n";
|
69
|
-
});
|
70
|
-
output += "</testsuite>\n";
|
71
|
-
} else {
|
72
|
-
output += `<testsuite package="org.eslint" time="0" tests="1" errors="0" name="${result.filePath}">\n`;
|
73
|
-
output += `<testcase time="0" name="${result.filePath}" classname="${classname}" />\n`;
|
74
|
-
output += "</testsuite>\n";
|
75
|
-
}
|
76
|
-
|
77
|
-
});
|
78
|
-
|
79
|
-
output += "</testsuites>\n";
|
80
|
-
|
81
|
-
return output;
|
82
|
-
};
|
@@ -1,95 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview TAP reporter
|
3
|
-
* @author Jonathan Kingston
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const yaml = require("js-yaml");
|
8
|
-
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
// Helper Functions
|
11
|
-
//------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
/**
|
14
|
-
* Returns a canonical error level string based upon the error message passed in.
|
15
|
-
* @param {Object} message Individual error message provided by eslint
|
16
|
-
* @returns {string} Error level string
|
17
|
-
*/
|
18
|
-
function getMessageType(message) {
|
19
|
-
if (message.fatal || message.severity === 2) {
|
20
|
-
return "error";
|
21
|
-
}
|
22
|
-
return "warning";
|
23
|
-
}
|
24
|
-
|
25
|
-
/**
|
26
|
-
* Takes in a JavaScript object and outputs a TAP diagnostics string
|
27
|
-
* @param {Object} diagnostic JavaScript object to be embedded as YAML into output.
|
28
|
-
* @returns {string} diagnostics string with YAML embedded - TAP version 13 compliant
|
29
|
-
*/
|
30
|
-
function outputDiagnostics(diagnostic) {
|
31
|
-
const prefix = " ";
|
32
|
-
let output = `${prefix}---\n`;
|
33
|
-
|
34
|
-
output += prefix + yaml.dump(diagnostic).split("\n").join(`\n${prefix}`);
|
35
|
-
output += "...\n";
|
36
|
-
return output;
|
37
|
-
}
|
38
|
-
|
39
|
-
//------------------------------------------------------------------------------
|
40
|
-
// Public Interface
|
41
|
-
//------------------------------------------------------------------------------
|
42
|
-
|
43
|
-
module.exports = function(results) {
|
44
|
-
let output = `TAP version 13\n1..${results.length}\n`;
|
45
|
-
|
46
|
-
results.forEach((result, id) => {
|
47
|
-
const messages = result.messages;
|
48
|
-
let testResult = "ok";
|
49
|
-
let diagnostics = {};
|
50
|
-
|
51
|
-
if (messages.length > 0) {
|
52
|
-
messages.forEach(message => {
|
53
|
-
const severity = getMessageType(message);
|
54
|
-
const diagnostic = {
|
55
|
-
message: message.message,
|
56
|
-
severity,
|
57
|
-
data: {
|
58
|
-
line: message.line || 0,
|
59
|
-
column: message.column || 0,
|
60
|
-
ruleId: message.ruleId || ""
|
61
|
-
}
|
62
|
-
};
|
63
|
-
|
64
|
-
// This ensures a warning message is not flagged as error
|
65
|
-
if (severity === "error") {
|
66
|
-
testResult = "not ok";
|
67
|
-
}
|
68
|
-
|
69
|
-
/*
|
70
|
-
* If we have multiple messages place them under a messages key
|
71
|
-
* The first error will be logged as message key
|
72
|
-
* This is to adhere to TAP 13 loosely defined specification of having a message key
|
73
|
-
*/
|
74
|
-
if ("message" in diagnostics) {
|
75
|
-
if (typeof diagnostics.messages === "undefined") {
|
76
|
-
diagnostics.messages = [];
|
77
|
-
}
|
78
|
-
diagnostics.messages.push(diagnostic);
|
79
|
-
} else {
|
80
|
-
diagnostics = diagnostic;
|
81
|
-
}
|
82
|
-
});
|
83
|
-
}
|
84
|
-
|
85
|
-
output += `${testResult} ${id + 1} - ${result.filePath}\n`;
|
86
|
-
|
87
|
-
// If we have an error include diagnostics
|
88
|
-
if (messages.length > 0) {
|
89
|
-
output += outputDiagnostics(diagnostics);
|
90
|
-
}
|
91
|
-
|
92
|
-
});
|
93
|
-
|
94
|
-
return output;
|
95
|
-
};
|
@@ -1,58 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview unix-style formatter.
|
3
|
-
* @author oshi-shinobu
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
//------------------------------------------------------------------------------
|
8
|
-
// Helper Functions
|
9
|
-
//------------------------------------------------------------------------------
|
10
|
-
|
11
|
-
/**
|
12
|
-
* Returns a canonical error level string based upon the error message passed in.
|
13
|
-
* @param {Object} message Individual error message provided by eslint
|
14
|
-
* @returns {string} Error level string
|
15
|
-
*/
|
16
|
-
function getMessageType(message) {
|
17
|
-
if (message.fatal || message.severity === 2) {
|
18
|
-
return "Error";
|
19
|
-
}
|
20
|
-
return "Warning";
|
21
|
-
|
22
|
-
}
|
23
|
-
|
24
|
-
|
25
|
-
//------------------------------------------------------------------------------
|
26
|
-
// Public Interface
|
27
|
-
//------------------------------------------------------------------------------
|
28
|
-
|
29
|
-
module.exports = function(results) {
|
30
|
-
|
31
|
-
let output = "",
|
32
|
-
total = 0;
|
33
|
-
|
34
|
-
results.forEach(result => {
|
35
|
-
|
36
|
-
const messages = result.messages;
|
37
|
-
|
38
|
-
total += messages.length;
|
39
|
-
|
40
|
-
messages.forEach(message => {
|
41
|
-
|
42
|
-
output += `${result.filePath}:`;
|
43
|
-
output += `${message.line || 0}:`;
|
44
|
-
output += `${message.column || 0}:`;
|
45
|
-
output += ` ${message.message} `;
|
46
|
-
output += `[${getMessageType(message)}${message.ruleId ? `/${message.ruleId}` : ""}]`;
|
47
|
-
output += "\n";
|
48
|
-
|
49
|
-
});
|
50
|
-
|
51
|
-
});
|
52
|
-
|
53
|
-
if (total > 0) {
|
54
|
-
output += `\n${total} problem${total !== 1 ? "s" : ""}`;
|
55
|
-
}
|
56
|
-
|
57
|
-
return output;
|
58
|
-
};
|
@@ -1,63 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Visual Studio compatible formatter
|
3
|
-
* @author Ronald Pijnacker
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
|
8
|
-
//------------------------------------------------------------------------------
|
9
|
-
// Helper Functions
|
10
|
-
//------------------------------------------------------------------------------
|
11
|
-
|
12
|
-
/**
|
13
|
-
* Returns the severity of warning or error
|
14
|
-
* @param {Object} message message object to examine
|
15
|
-
* @returns {string} severity level
|
16
|
-
* @private
|
17
|
-
*/
|
18
|
-
function getMessageType(message) {
|
19
|
-
if (message.fatal || message.severity === 2) {
|
20
|
-
return "error";
|
21
|
-
}
|
22
|
-
return "warning";
|
23
|
-
|
24
|
-
}
|
25
|
-
|
26
|
-
|
27
|
-
//------------------------------------------------------------------------------
|
28
|
-
// Public Interface
|
29
|
-
//------------------------------------------------------------------------------
|
30
|
-
|
31
|
-
module.exports = function(results) {
|
32
|
-
|
33
|
-
let output = "",
|
34
|
-
total = 0;
|
35
|
-
|
36
|
-
results.forEach(result => {
|
37
|
-
|
38
|
-
const messages = result.messages;
|
39
|
-
|
40
|
-
total += messages.length;
|
41
|
-
|
42
|
-
messages.forEach(message => {
|
43
|
-
|
44
|
-
output += result.filePath;
|
45
|
-
output += `(${message.line || 0}`;
|
46
|
-
output += message.column ? `,${message.column}` : "";
|
47
|
-
output += `): ${getMessageType(message)}`;
|
48
|
-
output += message.ruleId ? ` ${message.ruleId}` : "";
|
49
|
-
output += ` : ${message.message}`;
|
50
|
-
output += "\n";
|
51
|
-
|
52
|
-
});
|
53
|
-
|
54
|
-
});
|
55
|
-
|
56
|
-
if (total === 0) {
|
57
|
-
output += "no problems";
|
58
|
-
} else {
|
59
|
-
output += `\n${total} problem${total !== 1 ? "s" : ""}`;
|
60
|
-
}
|
61
|
-
|
62
|
-
return output;
|
63
|
-
};
|