summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/lib/formatters/table.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/lib/formatters/table.js')
-rw-r--r--tools/node_modules/eslint/lib/formatters/table.js150
1 files changed, 150 insertions, 0 deletions
diff --git a/tools/node_modules/eslint/lib/formatters/table.js b/tools/node_modules/eslint/lib/formatters/table.js
new file mode 100644
index 0000000000..ebc3314e7a
--- /dev/null
+++ b/tools/node_modules/eslint/lib/formatters/table.js
@@ -0,0 +1,150 @@
+/**
+ * @fileoverview "table reporter.
+ * @author Gajus Kuizinas <gajus@gajus.com>
+ */
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+const chalk = require("chalk"),
+ table = require("table").table,
+ 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;
+};