We have been stalled on ESLint 3.8.0 for some time. Current ESLint is 3.13.0. We have been unable to upgrade because of more aggressive reporting on some rules, including indentation. ESLint configuration options and bugfixes are now such that we can reasonably upgrade. PR-URL: https://github.com/nodejs/node/pull/10561 Reviewed-By: Teddy Katz <teddy.katz@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
150 lines
3.4 KiB
JavaScript
150 lines
3.4 KiB
JavaScript
/**
|
|
* @fileoverview "table reporter.
|
|
* @author Gajus Kuizinas <gajus@gajus.com>
|
|
*/
|
|
"use strict";
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Requirements
|
|
//------------------------------------------------------------------------------
|
|
|
|
const chalk = require("chalk"),
|
|
table = require("table").default,
|
|
pluralize = require("pluralize");
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Helpers
|
|
//------------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Draws text table.
|
|
* @param {Array<Object>} messages Error messages relating to a specific file.
|
|
* @returns {string} A text table.
|
|
*/
|
|
function drawTable(messages) {
|
|
const rows = [];
|
|
|
|
if (messages.length === 0) {
|
|
return "";
|
|
}
|
|
|
|
rows.push([
|
|
chalk.bold("Line"),
|
|
chalk.bold("Column"),
|
|
chalk.bold("Type"),
|
|
chalk.bold("Message"),
|
|
chalk.bold("Rule ID")
|
|
]);
|
|
|
|
messages.forEach(message => {
|
|
let messageType;
|
|
|
|
if (message.fatal || message.severity === 2) {
|
|
messageType = chalk.red("error");
|
|
} else {
|
|
messageType = chalk.yellow("warning");
|
|
}
|
|
|
|
rows.push([
|
|
message.line || 0,
|
|
message.column || 0,
|
|
messageType,
|
|
message.message,
|
|
message.ruleId || ""
|
|
]);
|
|
});
|
|
|
|
return table(rows, {
|
|
columns: {
|
|
0: {
|
|
width: 8,
|
|
wrapWord: true
|
|
},
|
|
1: {
|
|
width: 8,
|
|
wrapWord: true
|
|
},
|
|
2: {
|
|
width: 8,
|
|
wrapWord: true
|
|
},
|
|
3: {
|
|
paddingRight: 5,
|
|
width: 50,
|
|
wrapWord: true
|
|
},
|
|
4: {
|
|
width: 20,
|
|
wrapWord: true
|
|
}
|
|
},
|
|
drawHorizontalLine(index) {
|
|
return index === 1;
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Draws a report (multiple tables).
|
|
* @param {Array} results Report results for every file.
|
|
* @returns {string} A column of text tables.
|
|
*/
|
|
function drawReport(results) {
|
|
let files;
|
|
|
|
files = results.map(result => {
|
|
if (!result.messages.length) {
|
|
return "";
|
|
}
|
|
|
|
return `\n${result.filePath}\n\n${drawTable(result.messages)}`;
|
|
});
|
|
|
|
files = files.filter(content => content.trim());
|
|
|
|
return files.join("");
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Public Interface
|
|
//------------------------------------------------------------------------------
|
|
|
|
module.exports = function(report) {
|
|
let result,
|
|
errorCount,
|
|
warningCount;
|
|
|
|
result = "";
|
|
errorCount = 0;
|
|
warningCount = 0;
|
|
|
|
report.forEach(fileReport => {
|
|
errorCount += fileReport.errorCount;
|
|
warningCount += fileReport.warningCount;
|
|
});
|
|
|
|
if (errorCount || warningCount) {
|
|
result = drawReport(report);
|
|
}
|
|
|
|
result += `\n${table([
|
|
[
|
|
chalk.red(pluralize("Error", errorCount, true))
|
|
],
|
|
[
|
|
chalk.yellow(pluralize("Warning", warningCount, true))
|
|
]
|
|
], {
|
|
columns: {
|
|
0: {
|
|
width: 110,
|
|
wrapWord: true
|
|
}
|
|
},
|
|
drawHorizontalLine() {
|
|
return true;
|
|
}
|
|
})}`;
|
|
|
|
return result;
|
|
};
|