eslint 0.22.0 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +111 -95
- package/bin/eslint.js +41 -41
- package/conf/environments.js +87 -81
- package/conf/eslint.json +186 -179
- package/lib/api.js +13 -12
- package/lib/cli-engine.js +441 -451
- package/lib/cli.js +196 -196
- package/lib/config-initializer.js +145 -145
- package/lib/config-validator.js +110 -110
- package/lib/config.js +428 -416
- package/lib/eslint.js +1072 -1073
- package/lib/file-finder.js +167 -167
- package/lib/formatters/checkstyle.js +68 -68
- package/lib/formatters/compact.js +53 -53
- package/lib/formatters/jslint-xml.js +40 -40
- package/lib/formatters/junit.js +63 -63
- package/lib/formatters/stylish.js +90 -90
- package/lib/formatters/tap.js +86 -86
- package/lib/ignored-paths.js +137 -137
- package/lib/load-rules.js +39 -39
- package/lib/options.js +132 -126
- package/lib/rule-context.js +107 -107
- package/lib/rules/accessor-pairs.js +65 -65
- package/lib/rules/array-bracket-spacing.js +180 -0
- package/lib/rules/block-scoped-var.js +339 -320
- package/lib/rules/brace-style.js +228 -228
- package/lib/rules/camelcase.js +111 -111
- package/lib/rules/comma-dangle.js +67 -64
- package/lib/rules/comma-spacing.js +191 -191
- package/lib/rules/comma-style.js +195 -195
- package/lib/rules/complexity.js +94 -94
- package/lib/rules/computed-property-spacing.js +144 -0
- package/lib/rules/consistent-return.js +75 -75
- package/lib/rules/consistent-this.js +119 -119
- package/lib/rules/constructor-super.js +108 -0
- package/lib/rules/curly.js +109 -109
- package/lib/rules/default-case.js +66 -66
- package/lib/rules/dot-location.js +63 -63
- package/lib/rules/dot-notation.js +119 -119
- package/lib/rules/eol-last.js +38 -38
- package/lib/rules/eqeqeq.js +96 -96
- package/lib/rules/func-names.js +45 -45
- package/lib/rules/func-style.js +49 -49
- package/lib/rules/generator-star-spacing.js +104 -87
- package/lib/rules/generator-star.js +76 -76
- package/lib/rules/global-strict.js +49 -49
- package/lib/rules/guard-for-in.js +32 -32
- package/lib/rules/handle-callback-err.js +81 -124
- package/lib/rules/indent.js +486 -486
- package/lib/rules/key-spacing.js +325 -325
- package/lib/rules/linebreak-style.js +44 -44
- package/lib/rules/lines-around-comment.js +228 -160
- package/lib/rules/max-depth.js +89 -89
- package/lib/rules/max-len.js +76 -76
- package/lib/rules/max-nested-callbacks.js +73 -73
- package/lib/rules/max-params.js +45 -45
- package/lib/rules/max-statements.js +61 -61
- package/lib/rules/new-cap.js +224 -224
- package/lib/rules/new-parens.js +29 -29
- package/lib/rules/newline-after-var.js +127 -127
- package/lib/rules/no-alert.js +153 -153
- package/lib/rules/no-array-constructor.js +31 -31
- package/lib/rules/no-bitwise.js +57 -57
- package/lib/rules/no-caller.js +29 -29
- package/lib/rules/no-catch-shadow.js +52 -52
- package/lib/rules/no-comma-dangle.js +45 -45
- package/lib/rules/no-cond-assign.js +123 -123
- package/lib/rules/no-console.js +27 -27
- package/lib/rules/no-constant-condition.js +73 -73
- package/lib/rules/no-continue.js +23 -23
- package/lib/rules/no-control-regex.js +58 -58
- package/lib/rules/no-debugger.js +22 -22
- package/lib/rules/no-delete-var.js +25 -25
- package/lib/rules/no-div-regex.js +27 -27
- package/lib/rules/no-dupe-args.js +89 -85
- package/lib/rules/no-dupe-keys.js +43 -43
- package/lib/rules/no-duplicate-case.js +67 -67
- package/lib/rules/no-else-return.js +125 -125
- package/lib/rules/no-empty-character-class.js +43 -43
- package/lib/rules/no-empty-class.js +45 -45
- package/lib/rules/no-empty-label.js +27 -27
- package/lib/rules/no-empty.js +49 -49
- package/lib/rules/no-eq-null.js +29 -29
- package/lib/rules/no-eval.js +26 -26
- package/lib/rules/no-ex-assign.js +42 -42
- package/lib/rules/no-extend-native.js +103 -103
- package/lib/rules/no-extra-bind.js +81 -81
- package/lib/rules/no-extra-boolean-cast.js +71 -71
- package/lib/rules/no-extra-parens.js +368 -355
- package/lib/rules/no-extra-semi.js +70 -23
- package/lib/rules/no-extra-strict.js +86 -86
- package/lib/rules/no-fallthrough.js +97 -97
- package/lib/rules/no-floating-decimal.js +30 -30
- package/lib/rules/no-func-assign.js +83 -83
- package/lib/rules/no-implied-eval.js +76 -76
- package/lib/rules/no-inline-comments.js +49 -49
- package/lib/rules/no-inner-declarations.js +78 -78
- package/lib/rules/no-invalid-regexp.js +53 -53
- package/lib/rules/no-irregular-whitespace.js +135 -135
- package/lib/rules/no-iterator.js +28 -28
- package/lib/rules/no-label-var.js +64 -64
- package/lib/rules/no-labels.js +44 -44
- package/lib/rules/no-lone-blocks.js +106 -27
- package/lib/rules/no-lonely-if.js +30 -30
- package/lib/rules/no-loop-func.js +58 -58
- package/lib/rules/no-mixed-requires.js +165 -165
- package/lib/rules/no-mixed-spaces-and-tabs.js +74 -74
- package/lib/rules/no-multi-spaces.js +119 -119
- package/lib/rules/no-multi-str.js +43 -43
- package/lib/rules/no-multiple-empty-lines.js +98 -98
- package/lib/rules/no-native-reassign.js +62 -62
- package/lib/rules/no-negated-in-lhs.js +25 -25
- package/lib/rules/no-nested-ternary.js +24 -24
- package/lib/rules/no-new-func.js +25 -25
- package/lib/rules/no-new-object.js +25 -25
- package/lib/rules/no-new-require.js +25 -25
- package/lib/rules/no-new-wrappers.js +26 -26
- package/lib/rules/no-new.js +27 -27
- package/lib/rules/no-obj-calls.js +28 -28
- package/lib/rules/no-octal-escape.js +39 -39
- package/lib/rules/no-octal.js +25 -25
- package/lib/rules/no-param-reassign.js +87 -87
- package/lib/rules/no-path-concat.js +39 -39
- package/lib/rules/no-plusplus.js +24 -24
- package/lib/rules/no-process-env.js +30 -30
- package/lib/rules/no-process-exit.js +33 -33
- package/lib/rules/no-proto.js +28 -28
- package/lib/rules/no-redeclare.js +68 -68
- package/lib/rules/no-regex-spaces.js +35 -35
- package/lib/rules/no-reserved-keys.js +56 -56
- package/lib/rules/no-restricted-modules.js +85 -85
- package/lib/rules/no-return-assign.js +53 -24
- package/lib/rules/no-script-url.js +34 -34
- package/lib/rules/no-self-compare.js +29 -29
- package/lib/rules/no-sequences.js +94 -94
- package/lib/rules/no-shadow-restricted-names.js +51 -51
- package/lib/rules/no-shadow.js +181 -136
- package/lib/rules/no-space-before-semi.js +98 -98
- package/lib/rules/no-spaced-func.js +37 -37
- package/lib/rules/no-sparse-arrays.js +33 -33
- package/lib/rules/no-sync.js +30 -30
- package/lib/rules/no-ternary.js +24 -24
- package/lib/rules/no-this-before-super.js +144 -0
- package/lib/rules/no-throw-literal.js +33 -33
- package/lib/rules/no-trailing-spaces.js +74 -63
- package/lib/rules/no-undef-init.js +28 -28
- package/lib/rules/no-undef.js +92 -92
- package/lib/rules/no-undefined.js +27 -27
- package/lib/rules/no-underscore-dangle.js +73 -73
- package/lib/rules/no-unexpected-multiline.js +58 -0
- package/lib/rules/no-unneeded-ternary.js +48 -48
- package/lib/rules/no-unreachable.js +98 -98
- package/lib/rules/no-unused-expressions.js +76 -76
- package/lib/rules/no-unused-vars.js +252 -250
- package/lib/rules/no-use-before-define.js +105 -105
- package/lib/rules/no-var.js +26 -26
- package/lib/rules/no-void.js +28 -28
- package/lib/rules/no-warning-comments.js +102 -102
- package/lib/rules/no-with.js +22 -22
- package/lib/rules/no-wrap-func.js +65 -65
- package/lib/rules/object-curly-spacing.js +231 -206
- package/lib/rules/object-shorthand.js +74 -73
- package/lib/rules/one-var.js +311 -304
- package/lib/rules/operator-assignment.js +118 -118
- package/lib/rules/operator-linebreak.js +114 -114
- package/lib/rules/padded-blocks.js +98 -98
- package/lib/rules/prefer-const.js +91 -0
- package/lib/rules/quote-props.js +72 -72
- package/lib/rules/quotes.js +92 -92
- package/lib/rules/radix.js +41 -41
- package/lib/rules/semi-spacing.js +167 -167
- package/lib/rules/semi.js +136 -136
- package/lib/rules/sort-vars.js +49 -49
- package/lib/rules/space-after-function-name.js +49 -49
- package/lib/rules/space-after-keywords.js +82 -82
- package/lib/rules/space-before-blocks.js +91 -91
- package/lib/rules/space-before-function-paren.js +139 -139
- package/lib/rules/space-before-function-parentheses.js +139 -139
- package/lib/rules/space-in-brackets.js +305 -305
- package/lib/rules/space-in-parens.js +281 -281
- package/lib/rules/space-infix-ops.js +106 -106
- package/lib/rules/space-return-throw-case.js +38 -38
- package/lib/rules/space-unary-ops.js +124 -133
- package/lib/rules/spaced-comment.js +143 -0
- package/lib/rules/spaced-line-comment.js +89 -89
- package/lib/rules/strict.js +242 -242
- package/lib/rules/use-isnan.js +26 -26
- package/lib/rules/valid-jsdoc.js +215 -215
- package/lib/rules/valid-typeof.js +42 -42
- package/lib/rules/vars-on-top.js +115 -115
- package/lib/rules/wrap-iife.js +48 -48
- package/lib/rules/wrap-regex.js +38 -38
- package/lib/rules/yoda.js +242 -225
- package/lib/rules.js +88 -88
- package/lib/timing.js +109 -109
- package/lib/token-store.js +201 -201
- package/lib/util/traverse.js +105 -105
- package/lib/util.js +125 -85
- package/package.json +6 -6
- package/CHANGELOG.md +0 -1638
@@ -1,145 +1,145 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Config initialization wizard.
|
3
|
-
* @author Ilya Volodin
|
4
|
-
* @copyright 2015 Ilya Volodin. All rights reserved.
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
var exec = require("child_process").exec,
|
10
|
-
fs = require("fs"),
|
11
|
-
inquirer = require("inquirer"),
|
12
|
-
yaml = require("js-yaml");
|
13
|
-
|
14
|
-
/* istanbul ignore next: hard to test fs function */
|
15
|
-
/**
|
16
|
-
* Create .eslintrc file in the current working directory
|
17
|
-
* @param {object} config object that contains user's answers
|
18
|
-
* @param {bool} isJson should config file be json or yaml
|
19
|
-
* @param {function} callback function to call once the file is written.
|
20
|
-
* @returns {void}
|
21
|
-
*/
|
22
|
-
function writeFile(config, isJson, callback) {
|
23
|
-
try {
|
24
|
-
fs.writeFileSync("./.eslintrc", isJson ? JSON.stringify(config, null, 4) : yaml.safeDump(config));
|
25
|
-
} catch (e) {
|
26
|
-
callback(e);
|
27
|
-
return;
|
28
|
-
}
|
29
|
-
if (config.plugins && config.plugins.indexOf("react") >= 0) {
|
30
|
-
exec("npm i eslint-plugin-react --save-dev", callback);
|
31
|
-
} else {
|
32
|
-
callback();
|
33
|
-
}
|
34
|
-
}
|
35
|
-
|
36
|
-
/**
|
37
|
-
* process user's answers and create config object
|
38
|
-
* @param {object} answers answers received from inquirer
|
39
|
-
* @returns {object} config object
|
40
|
-
*/
|
41
|
-
function processAnswers(answers) {
|
42
|
-
var config = {rules: {}, env: {}};
|
43
|
-
config.rules.indent = [2, answers.indent];
|
44
|
-
config.rules.quotes = [2, answers.quotes];
|
45
|
-
config.rules["linebreak-style"] = [2, answers.linebreak];
|
46
|
-
config.rules.semi = [2, answers.semi ? "always" : "never"];
|
47
|
-
if (answers.es6) {
|
48
|
-
config.env.es6 = true;
|
49
|
-
}
|
50
|
-
answers.env.forEach(function(env) {
|
51
|
-
config.env[env] = true;
|
52
|
-
});
|
53
|
-
if (answers.jsx) {
|
54
|
-
config.ecmaFeatures = {jsx: true};
|
55
|
-
if (answers.react) {
|
56
|
-
config.plugins = ["react"];
|
57
|
-
}
|
58
|
-
}
|
59
|
-
return config;
|
60
|
-
}
|
61
|
-
|
62
|
-
/* istanbul ignore next: no need to test inquirer*/
|
63
|
-
/**
|
64
|
-
* Ask use a few questions on command prompt
|
65
|
-
* @param {function} callback callback function when file has been written
|
66
|
-
* @returns {void}
|
67
|
-
*/
|
68
|
-
function promptUser(callback) {
|
69
|
-
inquirer.prompt([
|
70
|
-
{
|
71
|
-
type: "list",
|
72
|
-
name: "indent",
|
73
|
-
message: "What style of indentation do you use?",
|
74
|
-
default: "tabs",
|
75
|
-
choices: [{name: "Tabs", value: "tab"}, {name: "Spaces", value: 4}]
|
76
|
-
},
|
77
|
-
{
|
78
|
-
type: "list",
|
79
|
-
name: "quotes",
|
80
|
-
message: "What quotes do you use for strings?",
|
81
|
-
default: "double",
|
82
|
-
choices: [{name: "Double", value: "double"}, {name: "Single", value: "single"}]
|
83
|
-
},
|
84
|
-
{
|
85
|
-
type: "list",
|
86
|
-
name: "linebreak",
|
87
|
-
message: "What line endings do you use?",
|
88
|
-
default: "unix",
|
89
|
-
choices: [{name: "Unix", value: "unix"}, {name: "Windows", value: "windows"}]
|
90
|
-
},
|
91
|
-
{
|
92
|
-
type: "confirm",
|
93
|
-
name: "semi",
|
94
|
-
message: "Do you require semicolons?",
|
95
|
-
default: true
|
96
|
-
},
|
97
|
-
{
|
98
|
-
type: "confirm",
|
99
|
-
name: "es6",
|
100
|
-
message: "Are you using ECMAScript 6 features?",
|
101
|
-
default: false
|
102
|
-
},
|
103
|
-
{
|
104
|
-
type: "checkbox",
|
105
|
-
name: "env",
|
106
|
-
message: "Where will your code run?",
|
107
|
-
default: ["browser"],
|
108
|
-
choices: [{name: "Node", value: "node"}, {name: "Browser", value: "browser"}]
|
109
|
-
},
|
110
|
-
{
|
111
|
-
type: "confirm",
|
112
|
-
name: "jsx",
|
113
|
-
message: "Do you use JSX?",
|
114
|
-
default: false
|
115
|
-
},
|
116
|
-
{
|
117
|
-
type: "confirm",
|
118
|
-
name: "react",
|
119
|
-
message: "Do you use React",
|
120
|
-
default: false,
|
121
|
-
when: function (answers) {
|
122
|
-
return answers.jsx;
|
123
|
-
}
|
124
|
-
},
|
125
|
-
{
|
126
|
-
type: "list",
|
127
|
-
name: "format",
|
128
|
-
message: "What format do you want your config file to be in?",
|
129
|
-
default: "JSON",
|
130
|
-
choices: ["JSON", "YAML"]
|
131
|
-
}
|
132
|
-
], function(answers) {
|
133
|
-
var config = processAnswers(answers);
|
134
|
-
writeFile(config, answers.format === "JSON", callback);
|
135
|
-
});
|
136
|
-
}
|
137
|
-
|
138
|
-
var init = {
|
139
|
-
processAnswers: processAnswers,
|
140
|
-
initializeConfig: /* istanbul ignore next */ function(callback) {
|
141
|
-
promptUser(callback);
|
142
|
-
}
|
143
|
-
};
|
144
|
-
|
145
|
-
module.exports = init;
|
1
|
+
/**
|
2
|
+
* @fileoverview Config initialization wizard.
|
3
|
+
* @author Ilya Volodin
|
4
|
+
* @copyright 2015 Ilya Volodin. All rights reserved.
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
var exec = require("child_process").exec,
|
10
|
+
fs = require("fs"),
|
11
|
+
inquirer = require("inquirer"),
|
12
|
+
yaml = require("js-yaml");
|
13
|
+
|
14
|
+
/* istanbul ignore next: hard to test fs function */
|
15
|
+
/**
|
16
|
+
* Create .eslintrc file in the current working directory
|
17
|
+
* @param {object} config object that contains user's answers
|
18
|
+
* @param {bool} isJson should config file be json or yaml
|
19
|
+
* @param {function} callback function to call once the file is written.
|
20
|
+
* @returns {void}
|
21
|
+
*/
|
22
|
+
function writeFile(config, isJson, callback) {
|
23
|
+
try {
|
24
|
+
fs.writeFileSync("./.eslintrc", isJson ? JSON.stringify(config, null, 4) : yaml.safeDump(config));
|
25
|
+
} catch (e) {
|
26
|
+
callback(e);
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
if (config.plugins && config.plugins.indexOf("react") >= 0) {
|
30
|
+
exec("npm i eslint-plugin-react --save-dev", callback);
|
31
|
+
} else {
|
32
|
+
callback();
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* process user's answers and create config object
|
38
|
+
* @param {object} answers answers received from inquirer
|
39
|
+
* @returns {object} config object
|
40
|
+
*/
|
41
|
+
function processAnswers(answers) {
|
42
|
+
var config = {rules: {}, env: {}};
|
43
|
+
config.rules.indent = [2, answers.indent];
|
44
|
+
config.rules.quotes = [2, answers.quotes];
|
45
|
+
config.rules["linebreak-style"] = [2, answers.linebreak];
|
46
|
+
config.rules.semi = [2, answers.semi ? "always" : "never"];
|
47
|
+
if (answers.es6) {
|
48
|
+
config.env.es6 = true;
|
49
|
+
}
|
50
|
+
answers.env.forEach(function(env) {
|
51
|
+
config.env[env] = true;
|
52
|
+
});
|
53
|
+
if (answers.jsx) {
|
54
|
+
config.ecmaFeatures = {jsx: true};
|
55
|
+
if (answers.react) {
|
56
|
+
config.plugins = ["react"];
|
57
|
+
}
|
58
|
+
}
|
59
|
+
return config;
|
60
|
+
}
|
61
|
+
|
62
|
+
/* istanbul ignore next: no need to test inquirer*/
|
63
|
+
/**
|
64
|
+
* Ask use a few questions on command prompt
|
65
|
+
* @param {function} callback callback function when file has been written
|
66
|
+
* @returns {void}
|
67
|
+
*/
|
68
|
+
function promptUser(callback) {
|
69
|
+
inquirer.prompt([
|
70
|
+
{
|
71
|
+
type: "list",
|
72
|
+
name: "indent",
|
73
|
+
message: "What style of indentation do you use?",
|
74
|
+
default: "tabs",
|
75
|
+
choices: [{name: "Tabs", value: "tab"}, {name: "Spaces", value: 4}]
|
76
|
+
},
|
77
|
+
{
|
78
|
+
type: "list",
|
79
|
+
name: "quotes",
|
80
|
+
message: "What quotes do you use for strings?",
|
81
|
+
default: "double",
|
82
|
+
choices: [{name: "Double", value: "double"}, {name: "Single", value: "single"}]
|
83
|
+
},
|
84
|
+
{
|
85
|
+
type: "list",
|
86
|
+
name: "linebreak",
|
87
|
+
message: "What line endings do you use?",
|
88
|
+
default: "unix",
|
89
|
+
choices: [{name: "Unix", value: "unix"}, {name: "Windows", value: "windows"}]
|
90
|
+
},
|
91
|
+
{
|
92
|
+
type: "confirm",
|
93
|
+
name: "semi",
|
94
|
+
message: "Do you require semicolons?",
|
95
|
+
default: true
|
96
|
+
},
|
97
|
+
{
|
98
|
+
type: "confirm",
|
99
|
+
name: "es6",
|
100
|
+
message: "Are you using ECMAScript 6 features?",
|
101
|
+
default: false
|
102
|
+
},
|
103
|
+
{
|
104
|
+
type: "checkbox",
|
105
|
+
name: "env",
|
106
|
+
message: "Where will your code run?",
|
107
|
+
default: ["browser"],
|
108
|
+
choices: [{name: "Node", value: "node"}, {name: "Browser", value: "browser"}]
|
109
|
+
},
|
110
|
+
{
|
111
|
+
type: "confirm",
|
112
|
+
name: "jsx",
|
113
|
+
message: "Do you use JSX?",
|
114
|
+
default: false
|
115
|
+
},
|
116
|
+
{
|
117
|
+
type: "confirm",
|
118
|
+
name: "react",
|
119
|
+
message: "Do you use React",
|
120
|
+
default: false,
|
121
|
+
when: function (answers) {
|
122
|
+
return answers.jsx;
|
123
|
+
}
|
124
|
+
},
|
125
|
+
{
|
126
|
+
type: "list",
|
127
|
+
name: "format",
|
128
|
+
message: "What format do you want your config file to be in?",
|
129
|
+
default: "JSON",
|
130
|
+
choices: ["JSON", "YAML"]
|
131
|
+
}
|
132
|
+
], function(answers) {
|
133
|
+
var config = processAnswers(answers);
|
134
|
+
writeFile(config, answers.format === "JSON", callback);
|
135
|
+
});
|
136
|
+
}
|
137
|
+
|
138
|
+
var init = {
|
139
|
+
processAnswers: processAnswers,
|
140
|
+
initializeConfig: /* istanbul ignore next */ function(callback) {
|
141
|
+
promptUser(callback);
|
142
|
+
}
|
143
|
+
};
|
144
|
+
|
145
|
+
module.exports = init;
|
package/lib/config-validator.js
CHANGED
@@ -1,110 +1,110 @@
|
|
1
|
-
/**
|
2
|
-
* @fileoverview Validates configs.
|
3
|
-
* @author Brandon Mills
|
4
|
-
* @copyright 2015 Brandon Mills
|
5
|
-
*/
|
6
|
-
|
7
|
-
"use strict";
|
8
|
-
|
9
|
-
var rules = require("./rules"),
|
10
|
-
schemaValidator = require("is-my-json-valid");
|
11
|
-
|
12
|
-
var validators = {
|
13
|
-
rules: Object.create(null)
|
14
|
-
};
|
15
|
-
|
16
|
-
/**
|
17
|
-
* Gets a complete options schema for a rule.
|
18
|
-
* @param {string} id The rule's unique name.
|
19
|
-
* @returns {object} JSON Schema for the rule's options.
|
20
|
-
*/
|
21
|
-
function getRuleOptionsSchema(id) {
|
22
|
-
var rule = rules.get(id),
|
23
|
-
schema = rule && rule.schema;
|
24
|
-
|
25
|
-
if (!schema) {
|
26
|
-
return {
|
27
|
-
"type": "array",
|
28
|
-
"items": [
|
29
|
-
{
|
30
|
-
"enum": [0, 1, 2]
|
31
|
-
}
|
32
|
-
],
|
33
|
-
"minItems": 1
|
34
|
-
};
|
35
|
-
}
|
36
|
-
|
37
|
-
// Given a tuple of schemas, insert warning level at the beginning
|
38
|
-
if (Array.isArray(schema)) {
|
39
|
-
return {
|
40
|
-
"type": "array",
|
41
|
-
"items": [
|
42
|
-
{
|
43
|
-
"enum": [0, 1, 2]
|
44
|
-
}
|
45
|
-
].concat(schema),
|
46
|
-
"minItems": 1,
|
47
|
-
"maxItems": schema.length + 1
|
48
|
-
};
|
49
|
-
}
|
50
|
-
|
51
|
-
// Given a full schema, leave it alone
|
52
|
-
return schema;
|
53
|
-
}
|
54
|
-
|
55
|
-
/**
|
56
|
-
* Validates a rule's options against its schema.
|
57
|
-
* @param {string} id The rule's unique name.
|
58
|
-
* @param {array|number} options The given options for the rule.
|
59
|
-
* @param {string} source The name of the configuration source.
|
60
|
-
* @returns {void}
|
61
|
-
*/
|
62
|
-
function validateRuleOptions(id, options, source) {
|
63
|
-
var validateRule = validators.rules[id],
|
64
|
-
message;
|
65
|
-
|
66
|
-
if (!validateRule) {
|
67
|
-
validateRule = schemaValidator(getRuleOptionsSchema(id), { verbose: true });
|
68
|
-
validators.rules[id] = validateRule;
|
69
|
-
}
|
70
|
-
|
71
|
-
if (typeof options === "number") {
|
72
|
-
options = [options];
|
73
|
-
}
|
74
|
-
|
75
|
-
validateRule(options);
|
76
|
-
|
77
|
-
if (validateRule.errors) {
|
78
|
-
message = [
|
79
|
-
source, ":\n",
|
80
|
-
"\tConfiguration for rule \"", id, "\" is invalid:\n"
|
81
|
-
];
|
82
|
-
validateRule.errors.forEach(function (error) {
|
83
|
-
message.push(
|
84
|
-
"\tValue \"", error.value, "\" ", error.message, ".\n"
|
85
|
-
);
|
86
|
-
});
|
87
|
-
|
88
|
-
throw new Error(message.join(""));
|
89
|
-
}
|
90
|
-
}
|
91
|
-
|
92
|
-
/**
|
93
|
-
* Validates an entire config object.
|
94
|
-
* @param {object} config The config object to validate.
|
95
|
-
* @param {string} source The location to report with any errors.
|
96
|
-
* @returns {void}
|
97
|
-
*/
|
98
|
-
function validate(config, source) {
|
99
|
-
if (typeof config.rules === "object") {
|
100
|
-
Object.keys(config.rules).forEach(function (id) {
|
101
|
-
validateRuleOptions(id, config.rules[id], source);
|
102
|
-
});
|
103
|
-
}
|
104
|
-
}
|
105
|
-
|
106
|
-
module.exports = {
|
107
|
-
getRuleOptionsSchema: getRuleOptionsSchema,
|
108
|
-
validate: validate,
|
109
|
-
validateRuleOptions: validateRuleOptions
|
110
|
-
};
|
1
|
+
/**
|
2
|
+
* @fileoverview Validates configs.
|
3
|
+
* @author Brandon Mills
|
4
|
+
* @copyright 2015 Brandon Mills
|
5
|
+
*/
|
6
|
+
|
7
|
+
"use strict";
|
8
|
+
|
9
|
+
var rules = require("./rules"),
|
10
|
+
schemaValidator = require("is-my-json-valid");
|
11
|
+
|
12
|
+
var validators = {
|
13
|
+
rules: Object.create(null)
|
14
|
+
};
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Gets a complete options schema for a rule.
|
18
|
+
* @param {string} id The rule's unique name.
|
19
|
+
* @returns {object} JSON Schema for the rule's options.
|
20
|
+
*/
|
21
|
+
function getRuleOptionsSchema(id) {
|
22
|
+
var rule = rules.get(id),
|
23
|
+
schema = rule && rule.schema;
|
24
|
+
|
25
|
+
if (!schema) {
|
26
|
+
return {
|
27
|
+
"type": "array",
|
28
|
+
"items": [
|
29
|
+
{
|
30
|
+
"enum": [0, 1, 2]
|
31
|
+
}
|
32
|
+
],
|
33
|
+
"minItems": 1
|
34
|
+
};
|
35
|
+
}
|
36
|
+
|
37
|
+
// Given a tuple of schemas, insert warning level at the beginning
|
38
|
+
if (Array.isArray(schema)) {
|
39
|
+
return {
|
40
|
+
"type": "array",
|
41
|
+
"items": [
|
42
|
+
{
|
43
|
+
"enum": [0, 1, 2]
|
44
|
+
}
|
45
|
+
].concat(schema),
|
46
|
+
"minItems": 1,
|
47
|
+
"maxItems": schema.length + 1
|
48
|
+
};
|
49
|
+
}
|
50
|
+
|
51
|
+
// Given a full schema, leave it alone
|
52
|
+
return schema;
|
53
|
+
}
|
54
|
+
|
55
|
+
/**
|
56
|
+
* Validates a rule's options against its schema.
|
57
|
+
* @param {string} id The rule's unique name.
|
58
|
+
* @param {array|number} options The given options for the rule.
|
59
|
+
* @param {string} source The name of the configuration source.
|
60
|
+
* @returns {void}
|
61
|
+
*/
|
62
|
+
function validateRuleOptions(id, options, source) {
|
63
|
+
var validateRule = validators.rules[id],
|
64
|
+
message;
|
65
|
+
|
66
|
+
if (!validateRule) {
|
67
|
+
validateRule = schemaValidator(getRuleOptionsSchema(id), { verbose: true });
|
68
|
+
validators.rules[id] = validateRule;
|
69
|
+
}
|
70
|
+
|
71
|
+
if (typeof options === "number") {
|
72
|
+
options = [options];
|
73
|
+
}
|
74
|
+
|
75
|
+
validateRule(options);
|
76
|
+
|
77
|
+
if (validateRule.errors) {
|
78
|
+
message = [
|
79
|
+
source, ":\n",
|
80
|
+
"\tConfiguration for rule \"", id, "\" is invalid:\n"
|
81
|
+
];
|
82
|
+
validateRule.errors.forEach(function (error) {
|
83
|
+
message.push(
|
84
|
+
"\tValue \"", error.value, "\" ", error.message, ".\n"
|
85
|
+
);
|
86
|
+
});
|
87
|
+
|
88
|
+
throw new Error(message.join(""));
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* Validates an entire config object.
|
94
|
+
* @param {object} config The config object to validate.
|
95
|
+
* @param {string} source The location to report with any errors.
|
96
|
+
* @returns {void}
|
97
|
+
*/
|
98
|
+
function validate(config, source) {
|
99
|
+
if (typeof config.rules === "object") {
|
100
|
+
Object.keys(config.rules).forEach(function (id) {
|
101
|
+
validateRuleOptions(id, config.rules[id], source);
|
102
|
+
});
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
module.exports = {
|
107
|
+
getRuleOptionsSchema: getRuleOptionsSchema,
|
108
|
+
validate: validate,
|
109
|
+
validateRuleOptions: validateRuleOptions
|
110
|
+
};
|