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.
Files changed (201) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +111 -95
  3. package/bin/eslint.js +41 -41
  4. package/conf/environments.js +87 -81
  5. package/conf/eslint.json +186 -179
  6. package/lib/api.js +13 -12
  7. package/lib/cli-engine.js +441 -451
  8. package/lib/cli.js +196 -196
  9. package/lib/config-initializer.js +145 -145
  10. package/lib/config-validator.js +110 -110
  11. package/lib/config.js +428 -416
  12. package/lib/eslint.js +1072 -1073
  13. package/lib/file-finder.js +167 -167
  14. package/lib/formatters/checkstyle.js +68 -68
  15. package/lib/formatters/compact.js +53 -53
  16. package/lib/formatters/jslint-xml.js +40 -40
  17. package/lib/formatters/junit.js +63 -63
  18. package/lib/formatters/stylish.js +90 -90
  19. package/lib/formatters/tap.js +86 -86
  20. package/lib/ignored-paths.js +137 -137
  21. package/lib/load-rules.js +39 -39
  22. package/lib/options.js +132 -126
  23. package/lib/rule-context.js +107 -107
  24. package/lib/rules/accessor-pairs.js +65 -65
  25. package/lib/rules/array-bracket-spacing.js +180 -0
  26. package/lib/rules/block-scoped-var.js +339 -320
  27. package/lib/rules/brace-style.js +228 -228
  28. package/lib/rules/camelcase.js +111 -111
  29. package/lib/rules/comma-dangle.js +67 -64
  30. package/lib/rules/comma-spacing.js +191 -191
  31. package/lib/rules/comma-style.js +195 -195
  32. package/lib/rules/complexity.js +94 -94
  33. package/lib/rules/computed-property-spacing.js +144 -0
  34. package/lib/rules/consistent-return.js +75 -75
  35. package/lib/rules/consistent-this.js +119 -119
  36. package/lib/rules/constructor-super.js +108 -0
  37. package/lib/rules/curly.js +109 -109
  38. package/lib/rules/default-case.js +66 -66
  39. package/lib/rules/dot-location.js +63 -63
  40. package/lib/rules/dot-notation.js +119 -119
  41. package/lib/rules/eol-last.js +38 -38
  42. package/lib/rules/eqeqeq.js +96 -96
  43. package/lib/rules/func-names.js +45 -45
  44. package/lib/rules/func-style.js +49 -49
  45. package/lib/rules/generator-star-spacing.js +104 -87
  46. package/lib/rules/generator-star.js +76 -76
  47. package/lib/rules/global-strict.js +49 -49
  48. package/lib/rules/guard-for-in.js +32 -32
  49. package/lib/rules/handle-callback-err.js +81 -124
  50. package/lib/rules/indent.js +486 -486
  51. package/lib/rules/key-spacing.js +325 -325
  52. package/lib/rules/linebreak-style.js +44 -44
  53. package/lib/rules/lines-around-comment.js +228 -160
  54. package/lib/rules/max-depth.js +89 -89
  55. package/lib/rules/max-len.js +76 -76
  56. package/lib/rules/max-nested-callbacks.js +73 -73
  57. package/lib/rules/max-params.js +45 -45
  58. package/lib/rules/max-statements.js +61 -61
  59. package/lib/rules/new-cap.js +224 -224
  60. package/lib/rules/new-parens.js +29 -29
  61. package/lib/rules/newline-after-var.js +127 -127
  62. package/lib/rules/no-alert.js +153 -153
  63. package/lib/rules/no-array-constructor.js +31 -31
  64. package/lib/rules/no-bitwise.js +57 -57
  65. package/lib/rules/no-caller.js +29 -29
  66. package/lib/rules/no-catch-shadow.js +52 -52
  67. package/lib/rules/no-comma-dangle.js +45 -45
  68. package/lib/rules/no-cond-assign.js +123 -123
  69. package/lib/rules/no-console.js +27 -27
  70. package/lib/rules/no-constant-condition.js +73 -73
  71. package/lib/rules/no-continue.js +23 -23
  72. package/lib/rules/no-control-regex.js +58 -58
  73. package/lib/rules/no-debugger.js +22 -22
  74. package/lib/rules/no-delete-var.js +25 -25
  75. package/lib/rules/no-div-regex.js +27 -27
  76. package/lib/rules/no-dupe-args.js +89 -85
  77. package/lib/rules/no-dupe-keys.js +43 -43
  78. package/lib/rules/no-duplicate-case.js +67 -67
  79. package/lib/rules/no-else-return.js +125 -125
  80. package/lib/rules/no-empty-character-class.js +43 -43
  81. package/lib/rules/no-empty-class.js +45 -45
  82. package/lib/rules/no-empty-label.js +27 -27
  83. package/lib/rules/no-empty.js +49 -49
  84. package/lib/rules/no-eq-null.js +29 -29
  85. package/lib/rules/no-eval.js +26 -26
  86. package/lib/rules/no-ex-assign.js +42 -42
  87. package/lib/rules/no-extend-native.js +103 -103
  88. package/lib/rules/no-extra-bind.js +81 -81
  89. package/lib/rules/no-extra-boolean-cast.js +71 -71
  90. package/lib/rules/no-extra-parens.js +368 -355
  91. package/lib/rules/no-extra-semi.js +70 -23
  92. package/lib/rules/no-extra-strict.js +86 -86
  93. package/lib/rules/no-fallthrough.js +97 -97
  94. package/lib/rules/no-floating-decimal.js +30 -30
  95. package/lib/rules/no-func-assign.js +83 -83
  96. package/lib/rules/no-implied-eval.js +76 -76
  97. package/lib/rules/no-inline-comments.js +49 -49
  98. package/lib/rules/no-inner-declarations.js +78 -78
  99. package/lib/rules/no-invalid-regexp.js +53 -53
  100. package/lib/rules/no-irregular-whitespace.js +135 -135
  101. package/lib/rules/no-iterator.js +28 -28
  102. package/lib/rules/no-label-var.js +64 -64
  103. package/lib/rules/no-labels.js +44 -44
  104. package/lib/rules/no-lone-blocks.js +106 -27
  105. package/lib/rules/no-lonely-if.js +30 -30
  106. package/lib/rules/no-loop-func.js +58 -58
  107. package/lib/rules/no-mixed-requires.js +165 -165
  108. package/lib/rules/no-mixed-spaces-and-tabs.js +74 -74
  109. package/lib/rules/no-multi-spaces.js +119 -119
  110. package/lib/rules/no-multi-str.js +43 -43
  111. package/lib/rules/no-multiple-empty-lines.js +98 -98
  112. package/lib/rules/no-native-reassign.js +62 -62
  113. package/lib/rules/no-negated-in-lhs.js +25 -25
  114. package/lib/rules/no-nested-ternary.js +24 -24
  115. package/lib/rules/no-new-func.js +25 -25
  116. package/lib/rules/no-new-object.js +25 -25
  117. package/lib/rules/no-new-require.js +25 -25
  118. package/lib/rules/no-new-wrappers.js +26 -26
  119. package/lib/rules/no-new.js +27 -27
  120. package/lib/rules/no-obj-calls.js +28 -28
  121. package/lib/rules/no-octal-escape.js +39 -39
  122. package/lib/rules/no-octal.js +25 -25
  123. package/lib/rules/no-param-reassign.js +87 -87
  124. package/lib/rules/no-path-concat.js +39 -39
  125. package/lib/rules/no-plusplus.js +24 -24
  126. package/lib/rules/no-process-env.js +30 -30
  127. package/lib/rules/no-process-exit.js +33 -33
  128. package/lib/rules/no-proto.js +28 -28
  129. package/lib/rules/no-redeclare.js +68 -68
  130. package/lib/rules/no-regex-spaces.js +35 -35
  131. package/lib/rules/no-reserved-keys.js +56 -56
  132. package/lib/rules/no-restricted-modules.js +85 -85
  133. package/lib/rules/no-return-assign.js +53 -24
  134. package/lib/rules/no-script-url.js +34 -34
  135. package/lib/rules/no-self-compare.js +29 -29
  136. package/lib/rules/no-sequences.js +94 -94
  137. package/lib/rules/no-shadow-restricted-names.js +51 -51
  138. package/lib/rules/no-shadow.js +181 -136
  139. package/lib/rules/no-space-before-semi.js +98 -98
  140. package/lib/rules/no-spaced-func.js +37 -37
  141. package/lib/rules/no-sparse-arrays.js +33 -33
  142. package/lib/rules/no-sync.js +30 -30
  143. package/lib/rules/no-ternary.js +24 -24
  144. package/lib/rules/no-this-before-super.js +144 -0
  145. package/lib/rules/no-throw-literal.js +33 -33
  146. package/lib/rules/no-trailing-spaces.js +74 -63
  147. package/lib/rules/no-undef-init.js +28 -28
  148. package/lib/rules/no-undef.js +92 -92
  149. package/lib/rules/no-undefined.js +27 -27
  150. package/lib/rules/no-underscore-dangle.js +73 -73
  151. package/lib/rules/no-unexpected-multiline.js +58 -0
  152. package/lib/rules/no-unneeded-ternary.js +48 -48
  153. package/lib/rules/no-unreachable.js +98 -98
  154. package/lib/rules/no-unused-expressions.js +76 -76
  155. package/lib/rules/no-unused-vars.js +252 -250
  156. package/lib/rules/no-use-before-define.js +105 -105
  157. package/lib/rules/no-var.js +26 -26
  158. package/lib/rules/no-void.js +28 -28
  159. package/lib/rules/no-warning-comments.js +102 -102
  160. package/lib/rules/no-with.js +22 -22
  161. package/lib/rules/no-wrap-func.js +65 -65
  162. package/lib/rules/object-curly-spacing.js +231 -206
  163. package/lib/rules/object-shorthand.js +74 -73
  164. package/lib/rules/one-var.js +311 -304
  165. package/lib/rules/operator-assignment.js +118 -118
  166. package/lib/rules/operator-linebreak.js +114 -114
  167. package/lib/rules/padded-blocks.js +98 -98
  168. package/lib/rules/prefer-const.js +91 -0
  169. package/lib/rules/quote-props.js +72 -72
  170. package/lib/rules/quotes.js +92 -92
  171. package/lib/rules/radix.js +41 -41
  172. package/lib/rules/semi-spacing.js +167 -167
  173. package/lib/rules/semi.js +136 -136
  174. package/lib/rules/sort-vars.js +49 -49
  175. package/lib/rules/space-after-function-name.js +49 -49
  176. package/lib/rules/space-after-keywords.js +82 -82
  177. package/lib/rules/space-before-blocks.js +91 -91
  178. package/lib/rules/space-before-function-paren.js +139 -139
  179. package/lib/rules/space-before-function-parentheses.js +139 -139
  180. package/lib/rules/space-in-brackets.js +305 -305
  181. package/lib/rules/space-in-parens.js +281 -281
  182. package/lib/rules/space-infix-ops.js +106 -106
  183. package/lib/rules/space-return-throw-case.js +38 -38
  184. package/lib/rules/space-unary-ops.js +124 -133
  185. package/lib/rules/spaced-comment.js +143 -0
  186. package/lib/rules/spaced-line-comment.js +89 -89
  187. package/lib/rules/strict.js +242 -242
  188. package/lib/rules/use-isnan.js +26 -26
  189. package/lib/rules/valid-jsdoc.js +215 -215
  190. package/lib/rules/valid-typeof.js +42 -42
  191. package/lib/rules/vars-on-top.js +115 -115
  192. package/lib/rules/wrap-iife.js +48 -48
  193. package/lib/rules/wrap-regex.js +38 -38
  194. package/lib/rules/yoda.js +242 -225
  195. package/lib/rules.js +88 -88
  196. package/lib/timing.js +109 -109
  197. package/lib/token-store.js +201 -201
  198. package/lib/util/traverse.js +105 -105
  199. package/lib/util.js +125 -85
  200. package/package.json +6 -6
  201. package/CHANGELOG.md +0 -1638
@@ -1,105 +1,105 @@
1
- /**
2
- * @fileoverview Simple directory traversal logic.
3
- * @author Nicholas C. Zakas
4
- */
5
-
6
- "use strict";
7
-
8
- //------------------------------------------------------------------------------
9
- // Requirements
10
- //------------------------------------------------------------------------------
11
-
12
- var fs = require("fs"),
13
- path = require("path"),
14
- debug = require("debug");
15
-
16
- //------------------------------------------------------------------------------
17
- // Helpers
18
- //------------------------------------------------------------------------------
19
-
20
- debug = debug("eslint:traverse");
21
-
22
- /**
23
- * Walks a path recursively calling the callback on each file.
24
- * @param {string} name The file or directory path.
25
- * @param {string[]} extensions The file extensions that should cause the callback
26
- * to be called.
27
- * @param {Function} exclude The function to check if file/path should be excluded.
28
- * @param {Function} callback The function to call on each file.
29
- * @returns {void}
30
- * @private
31
- */
32
- function walk(name, extensions, exclude, callback) {
33
-
34
- var stat, basename;
35
-
36
- stat = fs.statSync(name);
37
-
38
- function traverse(dir, stack) {
39
- stack.push(dir);
40
-
41
- fs.readdirSync(path.join.apply(path, stack)).forEach(function(file) {
42
- var filePath, fileStat;
43
-
44
- // skip all hidded things (dirs, files, links)
45
- if (file[0] === ".") {
46
- return;
47
- }
48
-
49
- filePath = path.join.apply(path, stack.concat([file]));
50
- fileStat = fs.statSync(filePath);
51
-
52
- // if this file or directory is excluded from linting, skip over it.
53
- if (exclude && exclude(filePath)) {
54
- // console.log("Ignoring " + filePath);
55
- debug("Ignoring " + filePath);
56
- return;
57
- }
58
-
59
- // only call callback for files with correct extensions
60
- if (fileStat.isFile() && extensions.indexOf(path.extname(filePath)) > -1) {
61
- callback(filePath);
62
- } else if (fileStat.isDirectory()) {
63
- traverse(file, stack);
64
- }
65
- });
66
- stack.pop();
67
- }
68
-
69
- basename = path.basename(name);
70
-
71
- // don't ignore cases like 'eslint ./'
72
- if ((basename !== "." && basename !== ".." && basename[0] === ".") ||
73
- (exclude && exclude(name))) {
74
-
75
- debug("Ignoring " + name);
76
- return;
77
- }
78
-
79
- // always call callback for any files that are passed on the command line
80
- if (stat.isFile()) {
81
- callback(name);
82
- } else {
83
- traverse(name, []);
84
- }
85
- }
86
-
87
- /**
88
- * Traverses multiple directories and calls a callback on each file.
89
- * @param {Object} options The option for the traversal.
90
- * param {string[]} options.files An array of file and directory paths to traverse.
91
- * param {Function} options.exclude The function to check if file/path should be excluded.
92
- * @param {Function} callback A function to call for each file.
93
- * @returns {void}
94
- */
95
- module.exports = function traverse(options, callback) {
96
-
97
- var files = options.files,
98
- exclude = options.exclude,
99
- extensions = options.extensions;
100
-
101
- files.forEach(function(file) {
102
- walk(file, extensions, exclude, callback);
103
- });
104
-
105
- };
1
+ /**
2
+ * @fileoverview Simple directory traversal logic.
3
+ * @author Nicholas C. Zakas
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ var fs = require("fs"),
13
+ path = require("path"),
14
+ debug = require("debug");
15
+
16
+ //------------------------------------------------------------------------------
17
+ // Helpers
18
+ //------------------------------------------------------------------------------
19
+
20
+ debug = debug("eslint:traverse");
21
+
22
+ /**
23
+ * Walks a path recursively calling the callback on each file.
24
+ * @param {string} name The file or directory path.
25
+ * @param {string[]} extensions The file extensions that should cause the callback
26
+ * to be called.
27
+ * @param {Function} exclude The function to check if file/path should be excluded.
28
+ * @param {Function} callback The function to call on each file.
29
+ * @returns {void}
30
+ * @private
31
+ */
32
+ function walk(name, extensions, exclude, callback) {
33
+
34
+ var stat, basename;
35
+
36
+ stat = fs.statSync(name);
37
+
38
+ function traverse(dir, stack) {
39
+ stack.push(dir);
40
+
41
+ fs.readdirSync(path.join.apply(path, stack)).forEach(function(file) {
42
+ var filePath, fileStat;
43
+
44
+ // skip all hidded things (dirs, files, links)
45
+ if (file[0] === ".") {
46
+ return;
47
+ }
48
+
49
+ filePath = path.join.apply(path, stack.concat([file]));
50
+ fileStat = fs.statSync(filePath);
51
+
52
+ // if this file or directory is excluded from linting, skip over it.
53
+ if (exclude && exclude(filePath)) {
54
+ // console.log("Ignoring " + filePath);
55
+ debug("Ignoring " + filePath);
56
+ return;
57
+ }
58
+
59
+ // only call callback for files with correct extensions
60
+ if (fileStat.isFile() && extensions.indexOf(path.extname(filePath)) > -1) {
61
+ callback(filePath);
62
+ } else if (fileStat.isDirectory()) {
63
+ traverse(file, stack);
64
+ }
65
+ });
66
+ stack.pop();
67
+ }
68
+
69
+ basename = path.basename(name);
70
+
71
+ // don't ignore cases like 'eslint ./'
72
+ if ((basename !== "." && basename !== ".." && basename[0] === ".") ||
73
+ (exclude && exclude(name))) {
74
+
75
+ debug("Ignoring " + name);
76
+ return;
77
+ }
78
+
79
+ // always call callback for any files that are passed on the command line
80
+ if (stat.isFile()) {
81
+ callback(name);
82
+ } else {
83
+ traverse(name, []);
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Traverses multiple directories and calls a callback on each file.
89
+ * @param {Object} options The option for the traversal.
90
+ * param {string[]} options.files An array of file and directory paths to traverse.
91
+ * param {Function} options.exclude The function to check if file/path should be excluded.
92
+ * @param {Function} callback A function to call for each file.
93
+ * @returns {void}
94
+ */
95
+ module.exports = function traverse(options, callback) {
96
+
97
+ var files = options.files,
98
+ exclude = options.exclude,
99
+ extensions = options.extensions;
100
+
101
+ files.forEach(function(file) {
102
+ walk(file, extensions, exclude, callback);
103
+ });
104
+
105
+ };
package/lib/util.js CHANGED
@@ -1,85 +1,125 @@
1
- /**
2
- * @fileoverview Common utilities.
3
- */
4
- "use strict";
5
-
6
- //------------------------------------------------------------------------------
7
- // Constants
8
- //------------------------------------------------------------------------------
9
-
10
- var PLUGIN_NAME_PREFIX = "eslint-plugin-",
11
- NAMESPACE_REGEX = /^@.*\//i;
12
-
13
- //------------------------------------------------------------------------------
14
- // Public Interface
15
- //------------------------------------------------------------------------------
16
-
17
- /**
18
- * Merges two config objects. This will not only add missing keys, but will also modify values to match.
19
- * @param {Object} base config object
20
- * @param {Object} custom config object. Overrides in this config object will take priority over base.
21
- * @returns {Object} merged config object.
22
- */
23
- exports.mergeConfigs = function mergeConfigs(base, custom) {
24
-
25
- Object.keys(custom).forEach(function (key) {
26
- var property = custom[key];
27
-
28
- if (key === "plugins") {
29
- if (!base[key]) {
30
- base[key] = [];
31
- }
32
-
33
- property.forEach(function (plugin) {
34
- // skip duplicates
35
- if (base[key].indexOf(plugin) === -1) {
36
- base[key].push(plugin);
37
- }
38
- });
39
- return;
40
- }
41
-
42
- if (Array.isArray(base[key]) && !Array.isArray(property) && typeof property === "number") {
43
- // assume that we are just overriding first attribute
44
- base[key][0] = custom[key];
45
- return;
46
- }
47
-
48
- if (typeof property === "object" && !Array.isArray(property) && property !== null) {
49
- // base[key] might not exist, so be careful with recursion here
50
- base[key] = mergeConfigs(base[key] || {}, custom[key]);
51
- } else {
52
- base[key] = custom[key];
53
- }
54
- });
55
-
56
- return base;
57
- };
58
-
59
- /**
60
- * Removes the prefix `eslint-plugin-` from a plugin name.
61
- * @param {string} pluginName The name of the plugin which may have the prefix.
62
- * @returns {string} The name of the plugin without prefix.
63
- */
64
- exports.removePluginPrefix = function removePluginPrefix(pluginName) {
65
- return pluginName.indexOf(PLUGIN_NAME_PREFIX) === 0 ? pluginName.substring(PLUGIN_NAME_PREFIX.length) : pluginName;
66
- };
67
-
68
- /**
69
- * @param {string} pluginName The name of the plugin which may have the prefix.
70
- * @returns {string} The name of the plugins namepace if it has one.
71
- */
72
- exports.getNamespace = function getNamespace(pluginName) {
73
- return pluginName.match(NAMESPACE_REGEX) ? pluginName.match(NAMESPACE_REGEX)[0] : "";
74
- };
75
-
76
- /**
77
- * Removes the namespace from a plugin name.
78
- * @param {string} pluginName The name of the plugin which may have the prefix.
79
- * @returns {string} The name of the plugin without the namespace.
80
- */
81
- exports.removeNameSpace = function removeNameSpace(pluginName) {
82
- return pluginName.replace(NAMESPACE_REGEX, "");
83
- };
84
-
85
- exports.PLUGIN_NAME_PREFIX = PLUGIN_NAME_PREFIX;
1
+ /**
2
+ * @fileoverview Common utilities.
3
+ */
4
+ "use strict";
5
+
6
+ //------------------------------------------------------------------------------
7
+ // Constants
8
+ //------------------------------------------------------------------------------
9
+
10
+ var PLUGIN_NAME_PREFIX = "eslint-plugin-",
11
+ NAMESPACE_REGEX = /^@.*\//i;
12
+
13
+ //------------------------------------------------------------------------------
14
+ // Public Interface
15
+ //------------------------------------------------------------------------------
16
+
17
+ /**
18
+ * Merges two config objects. This will not only add missing keys, but will also modify values to match.
19
+ * @param {Object} target config object
20
+ * @param {Object} src config object. Overrides in this config object will take priority over base.
21
+ * @param {boolean} [combine] Whether to combine arrays or not
22
+ * @returns {Object} merged config object.
23
+ */
24
+ exports.mergeConfigs = function deepmerge(target, src, combine) {
25
+ /*
26
+ The MIT License (MIT)
27
+
28
+ Copyright (c) 2012 Nicholas Fisher
29
+
30
+ Permission is hereby granted, free of charge, to any person obtaining a copy
31
+ of this software and associated documentation files (the "Software"), to deal
32
+ in the Software without restriction, including without limitation the rights
33
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
34
+ copies of the Software, and to permit persons to whom the Software is
35
+ furnished to do so, subject to the following conditions:
36
+
37
+ The above copyright notice and this permission notice shall be included in
38
+ all copies or substantial portions of the Software.
39
+
40
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
42
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
43
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
44
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
45
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
46
+ THE SOFTWARE.
47
+ */
48
+ // This code is taken from deepmerge repo (https://github.com/KyleAMathews/deepmerge) and modified to meet our needs.
49
+ var array = Array.isArray(src) || Array.isArray(target);
50
+ var dst = array && [] || {};
51
+
52
+ combine = !!combine;
53
+ if (array) {
54
+ target = target || [];
55
+ dst = dst.concat(target);
56
+ if (typeof src !== "object" && !Array.isArray(src)) {
57
+ src = [src];
58
+ }
59
+ Object.keys(src).forEach(function(e, i) {
60
+ e = src[i];
61
+ if (typeof dst[i] === "undefined") {
62
+ dst[i] = e;
63
+ } else if (typeof e === "object") {
64
+ dst[i] = deepmerge(target[i], e);
65
+ } else {
66
+ if (!combine) {
67
+ dst[i] = e;
68
+ } else {
69
+ if (dst.indexOf(e) === -1) {
70
+ dst.push(e);
71
+ }
72
+ }
73
+ }
74
+ });
75
+ } else {
76
+ if (target && typeof target === "object") {
77
+ Object.keys(target).forEach(function (key) {
78
+ dst[key] = target[key];
79
+ });
80
+ }
81
+ Object.keys(src).forEach(function (key) {
82
+ if (Array.isArray(src[key]) || Array.isArray(target[key])) {
83
+ dst[key] = deepmerge(target[key], src[key], key === "plugins");
84
+ } else if (typeof src[key] !== "object" || !src[key]) {
85
+ dst[key] = src[key];
86
+ } else {
87
+ if (!target[key]) {
88
+ dst[key] = src[key];
89
+ } else {
90
+ dst[key] = deepmerge(target[key], src[key]);
91
+ }
92
+ }
93
+ });
94
+ }
95
+
96
+ return dst;
97
+ };
98
+
99
+ /**
100
+ * Removes the prefix `eslint-plugin-` from a plugin name.
101
+ * @param {string} pluginName The name of the plugin which may have the prefix.
102
+ * @returns {string} The name of the plugin without prefix.
103
+ */
104
+ exports.removePluginPrefix = function removePluginPrefix(pluginName) {
105
+ return pluginName.indexOf(PLUGIN_NAME_PREFIX) === 0 ? pluginName.substring(PLUGIN_NAME_PREFIX.length) : pluginName;
106
+ };
107
+
108
+ /**
109
+ * @param {string} pluginName The name of the plugin which may have the prefix.
110
+ * @returns {string} The name of the plugins namepace if it has one.
111
+ */
112
+ exports.getNamespace = function getNamespace(pluginName) {
113
+ return pluginName.match(NAMESPACE_REGEX) ? pluginName.match(NAMESPACE_REGEX)[0] : "";
114
+ };
115
+
116
+ /**
117
+ * Removes the namespace from a plugin name.
118
+ * @param {string} pluginName The name of the plugin which may have the prefix.
119
+ * @returns {string} The name of the plugin without the namespace.
120
+ */
121
+ exports.removeNameSpace = function removeNameSpace(pluginName) {
122
+ return pluginName.replace(NAMESPACE_REGEX, "");
123
+ };
124
+
125
+ exports.PLUGIN_NAME_PREFIX = PLUGIN_NAME_PREFIX;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint",
3
- "version": "0.22.0",
3
+ "version": "0.24.1",
4
4
  "author": "Nicholas C. Zakas <nicholas+npm@nczconsulting.com>",
5
5
  "description": "An AST-based pattern checker for JavaScript.",
6
6
  "bin": {
@@ -41,9 +41,9 @@
41
41
  "escape-string-regexp": "^1.0.2",
42
42
  "escope": "^3.1.0",
43
43
  "espree": "^2.0.1",
44
- "estraverse": "^2.0.0",
44
+ "estraverse": "^4.1.0",
45
45
  "estraverse-fb": "^1.3.1",
46
- "globals": "^6.1.0",
46
+ "globals": "^8.0.0",
47
47
  "inquirer": "^0.8.2",
48
48
  "is-my-json-valid": "^2.10.0",
49
49
  "js-yaml": "^3.2.5",
@@ -64,13 +64,13 @@
64
64
  "chai": "^1.9.1",
65
65
  "coveralls": "2.11.2",
66
66
  "dateformat": "^1.0.8",
67
- "eslint-tester": "^0.7.0",
67
+ "eslint-tester": "^0.8.1",
68
68
  "esprima-fb": "^10001.1.0-dev-harmony-fb",
69
69
  "gh-got": "^1.0.3",
70
70
  "istanbul": "^0.3.5",
71
71
  "jsdoc": "^3.3.0-beta1",
72
72
  "jsonlint": "^1.6.2",
73
- "markdownlint": "^0.0.5",
73
+ "markdownlint": "^0.0.6",
74
74
  "mocha": "^2.1.0",
75
75
  "mocha-phantomjs": "^3.5.0",
76
76
  "npm-license": "^0.2.3",
@@ -79,7 +79,7 @@
79
79
  "semver": "^4.1.0",
80
80
  "shelljs": "^0.3.0",
81
81
  "shelljs-nodecli": "~0.1.0",
82
- "sinon": "^1.12.2",
82
+ "sinon": "1.14.1",
83
83
  "through": "^2.3.6"
84
84
  },
85
85
  "keywords": [