UNPKG

2.41 kBJavaScriptView Raw
1/**
2 * @fileoverview Defines a storage for rules.
3 * @author Nicholas C. Zakas
4 */
5
6"use strict";
7
8//------------------------------------------------------------------------------
9// Requirements
10//------------------------------------------------------------------------------
11
12var loadRules = require("./load-rules");
13
14//------------------------------------------------------------------------------
15// Privates
16//------------------------------------------------------------------------------
17
18var rules = Object.create(null);
19
20//------------------------------------------------------------------------------
21// Public Interface
22//------------------------------------------------------------------------------
23
24/**
25 * Registers a rule module for rule id in storage.
26 * @param {String} ruleId Rule id (file name).
27 * @param {Function} ruleModule Rule handler.
28 * @returns {void}
29 */
30function define(ruleId, ruleModule) {
31 rules[ruleId] = ruleModule;
32}
33
34exports.define = define;
35
36/**
37 * Loads and registers all rules from passed rules directory.
38 * @param {String} [rulesDir] Path to rules directory, may be relative. Defaults to `lib/rules`.
39 * @returns {void}
40 */
41function load(rulesDir) {
42 var newRules = loadRules(rulesDir);
43 Object.keys(newRules).forEach(function(ruleId) {
44 define(ruleId, newRules[ruleId]);
45 });
46}
47
48exports.load = load;
49
50/**
51 * Registers all given rules of a plugin.
52 * @param {Object} pluginRules A key/value map of rule definitions.
53 * @param {String} pluginName The name of the plugin without prefix (`eslint-plugin-`).
54 * @returns {void}
55 */
56exports.import = function(pluginRules, pluginName) {
57 Object.keys(pluginRules).forEach(function(ruleId) {
58 var qualifiedRuleId = pluginName + "/" + ruleId,
59 rule = pluginRules[ruleId];
60
61 define(qualifiedRuleId, rule);
62 });
63};
64
65/**
66 * Access rule handler by id (file name).
67 * @param {String} ruleId Rule id (file name).
68 * @returns {Function} Rule handler.
69 */
70exports.get = function(ruleId) {
71 return rules[ruleId];
72};
73
74/**
75 * Reset rules storage.
76 * Should be used only in tests.
77 * @returns {void}
78 */
79exports.testClear = function() {
80 rules = Object.create(null);
81};
82
83//------------------------------------------------------------------------------
84// Initialization
85//------------------------------------------------------------------------------
86
87// loads built-in rules
88load();