.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / linter / rules.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/linter/rules.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/linter/rules.js
new file mode 100644 (file)
index 0000000..a153266
--- /dev/null
@@ -0,0 +1,77 @@
+/**
+ * @fileoverview Defines a storage for rules.
+ * @author Nicholas C. Zakas
+ * @author aladdin-add
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+const builtInRules = require("../rules");
+
+//------------------------------------------------------------------------------
+// Helpers
+//------------------------------------------------------------------------------
+
+/**
+ * Normalizes a rule module to the new-style API
+ * @param {(Function|{create: Function})} rule A rule object, which can either be a function
+ * ("old-style") or an object with a `create` method ("new-style")
+ * @returns {{create: Function}} A new-style rule.
+ */
+function normalizeRule(rule) {
+    return typeof rule === "function" ? Object.assign({ create: rule }, rule) : rule;
+}
+
+//------------------------------------------------------------------------------
+// Public Interface
+//------------------------------------------------------------------------------
+
+class Rules {
+    constructor() {
+        this._rules = Object.create(null);
+    }
+
+    /**
+     * Registers a rule module for rule id in storage.
+     * @param {string} ruleId Rule id (file name).
+     * @param {Function} ruleModule Rule handler.
+     * @returns {void}
+     */
+    define(ruleId, ruleModule) {
+        this._rules[ruleId] = normalizeRule(ruleModule);
+    }
+
+    /**
+     * Access rule handler by id (file name).
+     * @param {string} ruleId Rule id (file name).
+     * @returns {{create: Function, schema: JsonSchema[]}}
+     * A rule. This is normalized to always have the new-style shape with a `create` method.
+     */
+    get(ruleId) {
+        if (typeof this._rules[ruleId] === "string") {
+            this.define(ruleId, require(this._rules[ruleId]));
+        }
+        if (this._rules[ruleId]) {
+            return this._rules[ruleId];
+        }
+        if (builtInRules.has(ruleId)) {
+            return builtInRules.get(ruleId);
+        }
+
+        return null;
+    }
+
+    *[Symbol.iterator]() {
+        yield* builtInRules;
+
+        for (const ruleId of Object.keys(this._rules)) {
+            yield [ruleId, this.get(ruleId)];
+        }
+    }
+}
+
+module.exports = Rules;