1 | /**
|
2 | * @fileoverview Defines a storage for rules.
|
3 | * @author Nicholas C. Zakas
|
4 | */
|
5 |
|
6 | ;
|
7 |
|
8 | //------------------------------------------------------------------------------
|
9 | // Requirements
|
10 | //------------------------------------------------------------------------------
|
11 |
|
12 | var loadRules = require("./load-rules");
|
13 |
|
14 | //------------------------------------------------------------------------------
|
15 | // Privates
|
16 | //------------------------------------------------------------------------------
|
17 |
|
18 | var 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 | */
|
30 | function define(ruleId, ruleModule) {
|
31 | rules[ruleId] = ruleModule;
|
32 | }
|
33 |
|
34 | exports.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 | */
|
41 | function load(rulesDir) {
|
42 | var newRules = loadRules(rulesDir);
|
43 | Object.keys(newRules).forEach(function(ruleId) {
|
44 | define(ruleId, newRules[ruleId]);
|
45 | });
|
46 | }
|
47 |
|
48 | exports.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 | */
|
56 | exports.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 | */
|
70 | exports.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 | */
|
79 | exports.testClear = function() {
|
80 | rules = Object.create(null);
|
81 | };
|
82 |
|
83 | //------------------------------------------------------------------------------
|
84 | // Initialization
|
85 | //------------------------------------------------------------------------------
|
86 |
|
87 | // loads built-in rules
|
88 | load();
|