.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / cli-engine / formatters / table.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/cli-engine/formatters/table.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/cli-engine/formatters/table.js
new file mode 100644 (file)
index 0000000..a74cce0
--- /dev/null
@@ -0,0 +1,159 @@
+/**
+ * @fileoverview "table reporter.
+ * @author Gajus Kuizinas <gajus@gajus.com>
+ */
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+const chalk = require("chalk"),
+    table = require("table").table;
+
+//------------------------------------------------------------------------------
+// Helpers
+//------------------------------------------------------------------------------
+
+/**
+ * Given a word and a count, append an "s" if count is not one.
+ * @param {string} word A word.
+ * @param {number} count Quantity.
+ * @returns {string} The original word with an s on the end if count is not one.
+ */
+function pluralize(word, count) {
+    return (count === 1 ? word : `${word}s`);
+}
+
+/**
+ * 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(`${errorCount} Error`, errorCount))
+        ],
+        [
+            chalk.yellow(pluralize(`${warningCount} Warning`, warningCount))
+        ]
+    ], {
+        columns: {
+            0: {
+                width: 110,
+                wrapWord: true
+            }
+        },
+        drawHorizontalLine() {
+            return true;
+        }
+    })}`;
+
+    return result;
+};