eslint 5.7.0 → 5.11.0

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 (284) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +2 -2
  3. package/conf/eslint-recommended.js +1 -0
  4. package/lib/cli-engine.js +129 -32
  5. package/lib/cli.js +6 -1
  6. package/lib/config/autoconfig.js +0 -1
  7. package/lib/config/config-rule.js +4 -4
  8. package/lib/config/config-validator.js +2 -2
  9. package/lib/config.js +15 -2
  10. package/lib/linter.js +17 -120
  11. package/lib/options.js +5 -0
  12. package/lib/rules/accessor-pairs.js +4 -0
  13. package/lib/rules/array-bracket-newline.js +5 -0
  14. package/lib/rules/array-bracket-spacing.js +5 -0
  15. package/lib/rules/array-callback-return.js +2 -0
  16. package/lib/rules/array-element-newline.js +4 -1
  17. package/lib/rules/arrow-body-style.js +2 -0
  18. package/lib/rules/arrow-parens.js +2 -0
  19. package/lib/rules/arrow-spacing.js +2 -0
  20. package/lib/rules/block-scoped-var.js +2 -0
  21. package/lib/rules/block-spacing.js +2 -0
  22. package/lib/rules/brace-style.js +2 -0
  23. package/lib/rules/callback-return.js +2 -0
  24. package/lib/rules/camelcase.js +26 -14
  25. package/lib/rules/capitalized-comments.js +4 -0
  26. package/lib/rules/class-methods-use-this.js +3 -0
  27. package/lib/rules/comma-dangle.js +4 -0
  28. package/lib/rules/comma-spacing.js +2 -0
  29. package/lib/rules/comma-style.js +12 -2
  30. package/lib/rules/complexity.js +2 -0
  31. package/lib/rules/computed-property-spacing.js +2 -0
  32. package/lib/rules/consistent-return.js +2 -0
  33. package/lib/rules/consistent-this.js +2 -0
  34. package/lib/rules/constructor-super.js +2 -0
  35. package/lib/rules/curly.js +2 -0
  36. package/lib/rules/default-case.js +2 -0
  37. package/lib/rules/dot-location.js +2 -0
  38. package/lib/rules/dot-notation.js +2 -0
  39. package/lib/rules/eol-last.js +5 -0
  40. package/lib/rules/eqeqeq.js +2 -1
  41. package/lib/rules/for-direction.js +4 -0
  42. package/lib/rules/func-call-spacing.js +4 -0
  43. package/lib/rules/func-name-matching.js +3 -0
  44. package/lib/rules/func-names.js +3 -0
  45. package/lib/rules/func-style.js +3 -0
  46. package/lib/rules/function-paren-newline.js +5 -0
  47. package/lib/rules/generator-star-spacing.js +3 -0
  48. package/lib/rules/getter-return.js +5 -0
  49. package/lib/rules/global-require.js +2 -0
  50. package/lib/rules/guard-for-in.js +2 -0
  51. package/lib/rules/handle-callback-err.js +3 -1
  52. package/lib/rules/id-blacklist.js +2 -0
  53. package/lib/rules/id-length.js +2 -0
  54. package/lib/rules/id-match.js +101 -27
  55. package/lib/rules/implicit-arrow-linebreak.js +147 -2
  56. package/lib/rules/indent-legacy.js +4 -4
  57. package/lib/rules/indent.js +31 -23
  58. package/lib/rules/init-declarations.js +2 -0
  59. package/lib/rules/jsx-quotes.js +2 -0
  60. package/lib/rules/key-spacing.js +4 -3
  61. package/lib/rules/keyword-spacing.js +7 -1
  62. package/lib/rules/line-comment-position.js +2 -0
  63. package/lib/rules/linebreak-style.js +2 -0
  64. package/lib/rules/lines-around-comment.js +2 -0
  65. package/lib/rules/lines-around-directive.js +6 -2
  66. package/lib/rules/lines-between-class-members.js +2 -0
  67. package/lib/rules/max-classes-per-file.js +4 -0
  68. package/lib/rules/max-depth.js +2 -0
  69. package/lib/rules/max-len.js +2 -0
  70. package/lib/rules/max-lines-per-function.js +2 -0
  71. package/lib/rules/max-lines.js +2 -0
  72. package/lib/rules/max-nested-callbacks.js +2 -0
  73. package/lib/rules/max-params.js +2 -0
  74. package/lib/rules/max-statements-per-line.js +2 -0
  75. package/lib/rules/max-statements.js +2 -0
  76. package/lib/rules/multiline-comment-style.js +3 -0
  77. package/lib/rules/multiline-ternary.js +3 -0
  78. package/lib/rules/new-cap.js +2 -0
  79. package/lib/rules/new-parens.js +2 -1
  80. package/lib/rules/newline-after-var.js +5 -2
  81. package/lib/rules/newline-before-return.js +6 -3
  82. package/lib/rules/newline-per-chained-call.js +4 -0
  83. package/lib/rules/no-alert.js +2 -0
  84. package/lib/rules/no-array-constructor.js +2 -0
  85. package/lib/rules/no-async-promise-executor.js +3 -0
  86. package/lib/rules/no-await-in-loop.js +4 -0
  87. package/lib/rules/no-bitwise.js +2 -0
  88. package/lib/rules/no-buffer-constructor.js +4 -0
  89. package/lib/rules/no-caller.js +2 -0
  90. package/lib/rules/no-case-declarations.js +2 -0
  91. package/lib/rules/no-catch-shadow.js +6 -3
  92. package/lib/rules/no-class-assign.js +2 -0
  93. package/lib/rules/no-compare-neg-zero.js +4 -0
  94. package/lib/rules/no-cond-assign.js +2 -0
  95. package/lib/rules/no-confusing-arrow.js +2 -0
  96. package/lib/rules/no-console.js +2 -0
  97. package/lib/rules/no-const-assign.js +2 -0
  98. package/lib/rules/no-constant-condition.js +2 -1
  99. package/lib/rules/no-continue.js +2 -0
  100. package/lib/rules/no-control-regex.js +4 -2
  101. package/lib/rules/no-debugger.js +4 -0
  102. package/lib/rules/no-delete-var.js +2 -0
  103. package/lib/rules/no-div-regex.js +2 -0
  104. package/lib/rules/no-dupe-args.js +2 -0
  105. package/lib/rules/no-dupe-class-members.js +2 -0
  106. package/lib/rules/no-dupe-keys.js +2 -0
  107. package/lib/rules/no-duplicate-case.js +2 -0
  108. package/lib/rules/no-duplicate-imports.js +2 -0
  109. package/lib/rules/no-else-return.js +2 -1
  110. package/lib/rules/no-empty-character-class.js +2 -0
  111. package/lib/rules/no-empty-function.js +2 -0
  112. package/lib/rules/no-empty-pattern.js +2 -0
  113. package/lib/rules/no-empty.js +2 -0
  114. package/lib/rules/no-eq-null.js +2 -0
  115. package/lib/rules/no-eval.js +2 -0
  116. package/lib/rules/no-ex-assign.js +2 -0
  117. package/lib/rules/no-extend-native.js +2 -0
  118. package/lib/rules/no-extra-bind.js +2 -1
  119. package/lib/rules/no-extra-boolean-cast.js +2 -1
  120. package/lib/rules/no-extra-label.js +2 -1
  121. package/lib/rules/no-extra-parens.js +5 -6
  122. package/lib/rules/no-extra-semi.js +2 -0
  123. package/lib/rules/no-fallthrough.js +2 -0
  124. package/lib/rules/no-floating-decimal.js +2 -1
  125. package/lib/rules/no-func-assign.js +2 -0
  126. package/lib/rules/no-global-assign.js +2 -0
  127. package/lib/rules/no-implicit-coercion.js +3 -0
  128. package/lib/rules/no-implicit-globals.js +2 -0
  129. package/lib/rules/no-implied-eval.js +3 -1
  130. package/lib/rules/no-inline-comments.js +2 -0
  131. package/lib/rules/no-inner-declarations.js +2 -0
  132. package/lib/rules/no-invalid-regexp.js +2 -0
  133. package/lib/rules/no-invalid-this.js +2 -0
  134. package/lib/rules/no-irregular-whitespace.js +7 -9
  135. package/lib/rules/no-iterator.js +2 -0
  136. package/lib/rules/no-label-var.js +2 -0
  137. package/lib/rules/no-labels.js +2 -0
  138. package/lib/rules/no-lone-blocks.js +2 -0
  139. package/lib/rules/no-lonely-if.js +2 -1
  140. package/lib/rules/no-loop-func.js +2 -0
  141. package/lib/rules/no-magic-numbers.js +3 -0
  142. package/lib/rules/no-misleading-character-class.js +4 -0
  143. package/lib/rules/no-mixed-operators.js +3 -0
  144. package/lib/rules/no-mixed-requires.js +2 -0
  145. package/lib/rules/no-mixed-spaces-and-tabs.js +2 -0
  146. package/lib/rules/no-multi-assign.js +3 -0
  147. package/lib/rules/no-multi-spaces.js +2 -0
  148. package/lib/rules/no-multi-str.js +2 -0
  149. package/lib/rules/no-multiple-empty-lines.js +2 -0
  150. package/lib/rules/no-native-reassign.js +4 -1
  151. package/lib/rules/no-negated-condition.js +2 -0
  152. package/lib/rules/no-negated-in-lhs.js +5 -2
  153. package/lib/rules/no-nested-ternary.js +2 -0
  154. package/lib/rules/no-new-func.js +2 -0
  155. package/lib/rules/no-new-object.js +2 -0
  156. package/lib/rules/no-new-require.js +2 -0
  157. package/lib/rules/no-new-symbol.js +2 -0
  158. package/lib/rules/no-new-wrappers.js +2 -0
  159. package/lib/rules/no-new.js +2 -0
  160. package/lib/rules/no-obj-calls.js +2 -0
  161. package/lib/rules/no-octal-escape.js +2 -0
  162. package/lib/rules/no-octal.js +2 -0
  163. package/lib/rules/no-param-reassign.js +2 -0
  164. package/lib/rules/no-path-concat.js +2 -0
  165. package/lib/rules/no-plusplus.js +2 -0
  166. package/lib/rules/no-process-env.js +2 -0
  167. package/lib/rules/no-process-exit.js +2 -0
  168. package/lib/rules/no-proto.js +2 -0
  169. package/lib/rules/no-prototype-builtins.js +2 -0
  170. package/lib/rules/no-redeclare.js +2 -0
  171. package/lib/rules/no-regex-spaces.js +2 -1
  172. package/lib/rules/no-restricted-globals.js +2 -0
  173. package/lib/rules/no-restricted-imports.js +41 -23
  174. package/lib/rules/no-restricted-modules.js +2 -0
  175. package/lib/rules/no-restricted-properties.js +2 -0
  176. package/lib/rules/no-restricted-syntax.js +2 -0
  177. package/lib/rules/no-return-assign.js +2 -0
  178. package/lib/rules/no-return-await.js +4 -0
  179. package/lib/rules/no-script-url.js +2 -0
  180. package/lib/rules/no-self-assign.js +2 -0
  181. package/lib/rules/no-self-compare.js +2 -0
  182. package/lib/rules/no-sequences.js +2 -0
  183. package/lib/rules/no-shadow-restricted-names.js +2 -0
  184. package/lib/rules/no-shadow.js +2 -0
  185. package/lib/rules/no-spaced-func.js +4 -1
  186. package/lib/rules/no-sparse-arrays.js +2 -0
  187. package/lib/rules/no-sync.js +2 -0
  188. package/lib/rules/no-tabs.js +2 -0
  189. package/lib/rules/no-template-curly-in-string.js +2 -0
  190. package/lib/rules/no-ternary.js +2 -0
  191. package/lib/rules/no-this-before-super.js +2 -1
  192. package/lib/rules/no-throw-literal.js +2 -0
  193. package/lib/rules/no-trailing-spaces.js +2 -0
  194. package/lib/rules/no-undef-init.js +2 -1
  195. package/lib/rules/no-undef.js +2 -0
  196. package/lib/rules/no-undefined.js +2 -0
  197. package/lib/rules/no-underscore-dangle.js +2 -0
  198. package/lib/rules/no-unexpected-multiline.js +2 -0
  199. package/lib/rules/no-unmodified-loop-condition.js +2 -0
  200. package/lib/rules/no-unneeded-ternary.js +2 -0
  201. package/lib/rules/no-unreachable.js +2 -1
  202. package/lib/rules/no-unsafe-finally.js +2 -0
  203. package/lib/rules/no-unsafe-negation.js +3 -0
  204. package/lib/rules/no-unused-expressions.js +2 -0
  205. package/lib/rules/no-unused-labels.js +2 -1
  206. package/lib/rules/no-unused-vars.js +36 -12
  207. package/lib/rules/no-use-before-define.js +2 -0
  208. package/lib/rules/no-useless-call.js +2 -0
  209. package/lib/rules/no-useless-catch.js +51 -0
  210. package/lib/rules/no-useless-computed-key.js +2 -1
  211. package/lib/rules/no-useless-concat.js +2 -0
  212. package/lib/rules/no-useless-constructor.js +2 -0
  213. package/lib/rules/no-useless-escape.js +2 -0
  214. package/lib/rules/no-useless-rename.js +4 -0
  215. package/lib/rules/no-useless-return.js +3 -0
  216. package/lib/rules/no-var.js +2 -0
  217. package/lib/rules/no-void.js +2 -0
  218. package/lib/rules/no-warning-comments.js +2 -0
  219. package/lib/rules/no-whitespace-before-property.js +2 -0
  220. package/lib/rules/no-with.js +2 -0
  221. package/lib/rules/nonblock-statement-body-position.js +4 -0
  222. package/lib/rules/object-curly-newline.js +4 -1
  223. package/lib/rules/object-curly-spacing.js +2 -0
  224. package/lib/rules/object-property-newline.js +3 -2
  225. package/lib/rules/object-shorthand.js +2 -0
  226. package/lib/rules/one-var-declaration-per-line.js +2 -0
  227. package/lib/rules/one-var.js +2 -1
  228. package/lib/rules/operator-assignment.js +2 -0
  229. package/lib/rules/operator-linebreak.js +2 -0
  230. package/lib/rules/padded-blocks.js +2 -0
  231. package/lib/rules/padding-line-between-statements.js +41 -0
  232. package/lib/rules/prefer-arrow-callback.js +2 -0
  233. package/lib/rules/prefer-const.js +116 -11
  234. package/lib/rules/prefer-destructuring.js +3 -0
  235. package/lib/rules/prefer-numeric-literals.js +2 -1
  236. package/lib/rules/prefer-object-spread.js +4 -0
  237. package/lib/rules/prefer-promise-reject-errors.js +4 -0
  238. package/lib/rules/prefer-reflect.js +4 -1
  239. package/lib/rules/prefer-rest-params.js +2 -0
  240. package/lib/rules/prefer-spread.js +2 -1
  241. package/lib/rules/prefer-template.js +2 -1
  242. package/lib/rules/quote-props.js +2 -0
  243. package/lib/rules/quotes.js +50 -25
  244. package/lib/rules/radix.js +2 -0
  245. package/lib/rules/require-atomic-updates.js +4 -0
  246. package/lib/rules/require-await.js +3 -0
  247. package/lib/rules/require-jsdoc.js +6 -1
  248. package/lib/rules/require-unicode-regexp.js +4 -0
  249. package/lib/rules/require-yield.js +2 -0
  250. package/lib/rules/rest-spread-spacing.js +4 -0
  251. package/lib/rules/semi-spacing.js +2 -0
  252. package/lib/rules/semi-style.js +3 -0
  253. package/lib/rules/semi.js +2 -0
  254. package/lib/rules/sort-imports.js +2 -0
  255. package/lib/rules/sort-keys.js +3 -0
  256. package/lib/rules/sort-vars.js +2 -0
  257. package/lib/rules/space-before-blocks.js +46 -35
  258. package/lib/rules/space-before-function-paren.js +2 -0
  259. package/lib/rules/space-in-parens.js +2 -1
  260. package/lib/rules/space-infix-ops.js +6 -1
  261. package/lib/rules/space-unary-ops.js +2 -0
  262. package/lib/rules/spaced-comment.js +2 -0
  263. package/lib/rules/strict.js +2 -0
  264. package/lib/rules/switch-colon-spacing.js +4 -0
  265. package/lib/rules/symbol-description.js +2 -0
  266. package/lib/rules/template-curly-spacing.js +2 -0
  267. package/lib/rules/template-tag-spacing.js +2 -0
  268. package/lib/rules/unicode-bom.js +2 -0
  269. package/lib/rules/use-isnan.js +2 -0
  270. package/lib/rules/valid-jsdoc.js +6 -1
  271. package/lib/rules/valid-typeof.js +2 -0
  272. package/lib/rules/vars-on-top.js +2 -0
  273. package/lib/rules/wrap-iife.js +2 -0
  274. package/lib/rules/wrap-regex.js +3 -1
  275. package/lib/rules/yield-star-spacing.js +2 -0
  276. package/lib/rules/yoda.js +2 -0
  277. package/lib/testers/rule-tester.js +2 -2
  278. package/lib/util/config-comment-parser.js +144 -0
  279. package/lib/util/glob-utils.js +1 -1
  280. package/lib/{ignored-paths.js → util/ignored-paths.js} +4 -4
  281. package/lib/{report-translator.js → util/report-translator.js} +2 -2
  282. package/lib/util/source-code.js +2 -1
  283. package/messages/all-files-ignored.txt +1 -1
  284. package/package.json +10 -11
@@ -76,6 +76,8 @@ const AVOID_ESCAPE = "avoid-escape";
76
76
 
77
77
  module.exports = {
78
78
  meta: {
79
+ type: "layout",
80
+
79
81
  docs: {
80
82
  description: "enforce the consistent use of either backticks, double, or single quotes",
81
83
  category: "Stylistic Issues",
@@ -226,6 +228,34 @@ module.exports = {
226
228
  }
227
229
  }
228
230
 
231
+ /**
232
+ * Checks whether or not a given TemplateLiteral node is actually using any of the special features provided by template literal strings.
233
+ * @param {ASTNode} node - A TemplateLiteral node to check.
234
+ * @returns {boolean} Whether or not the TemplateLiteral node is using any of the special features provided by template literal strings.
235
+ * @private
236
+ */
237
+ function isUsingFeatureOfTemplateLiteral(node) {
238
+ const hasTag = node.parent.type === "TaggedTemplateExpression" && node === node.parent.quasi;
239
+
240
+ if (hasTag) {
241
+ return true;
242
+ }
243
+
244
+ const hasStringInterpolation = node.expressions.length > 0;
245
+
246
+ if (hasStringInterpolation) {
247
+ return true;
248
+ }
249
+
250
+ const isMultilineString = node.quasis.length >= 1 && UNESCAPED_LINEBREAK_PATTERN.test(node.quasis[0].value.raw);
251
+
252
+ if (isMultilineString) {
253
+ return true;
254
+ }
255
+
256
+ return false;
257
+ }
258
+
229
259
  return {
230
260
 
231
261
  Literal(node) {
@@ -258,39 +288,34 @@ module.exports = {
258
288
 
259
289
  TemplateLiteral(node) {
260
290
 
261
- // If backticks are expected or it's a tagged template, then this shouldn't throw an errors
291
+ // Don't throw an error if backticks are expected or a template literal feature is in use.
262
292
  if (
263
293
  allowTemplateLiterals ||
264
294
  quoteOption === "backtick" ||
265
- node.parent.type === "TaggedTemplateExpression" && node === node.parent.quasi
295
+ isUsingFeatureOfTemplateLiteral(node)
266
296
  ) {
267
297
  return;
268
298
  }
269
299
 
270
- // A warning should be produced if the template literal only has one TemplateElement, and has no unescaped newlines.
271
- const shouldWarn = node.quasis.length === 1 && !UNESCAPED_LINEBREAK_PATTERN.test(node.quasis[0].value.raw);
272
-
273
- if (shouldWarn) {
274
- context.report({
275
- node,
276
- message: "Strings must use {{description}}.",
277
- data: {
278
- description: settings.description
279
- },
280
- fix(fixer) {
281
- if (isPartOfDirectivePrologue(node)) {
282
-
283
- /*
284
- * TemplateLiterals in a directive prologue aren't actually directives, but if they're
285
- * in the directive prologue, then fixing them might turn them into directives and change
286
- * the behavior of the code.
287
- */
288
- return null;
289
- }
290
- return fixer.replaceText(node, settings.convert(sourceCode.getText(node)));
300
+ context.report({
301
+ node,
302
+ message: "Strings must use {{description}}.",
303
+ data: {
304
+ description: settings.description
305
+ },
306
+ fix(fixer) {
307
+ if (isPartOfDirectivePrologue(node)) {
308
+
309
+ /*
310
+ * TemplateLiterals in a directive prologue aren't actually directives, but if they're
311
+ * in the directive prologue, then fixing them might turn them into directives and change
312
+ * the behavior of the code.
313
+ */
314
+ return null;
291
315
  }
292
- });
293
- }
316
+ return fixer.replaceText(node, settings.convert(sourceCode.getText(node)));
317
+ }
318
+ });
294
319
  }
295
320
  };
296
321
 
@@ -78,6 +78,8 @@ function isDefaultRadix(radix) {
78
78
 
79
79
  module.exports = {
80
80
  meta: {
81
+ type: "suggestion",
82
+
81
83
  docs: {
82
84
  description: "enforce the consistent use of the radix argument when using `parseInt()`",
83
85
  category: "Best Practices",
@@ -12,14 +12,18 @@ const astUtils = require("../util/ast-utils");
12
12
 
13
13
  module.exports = {
14
14
  meta: {
15
+ type: "problem",
16
+
15
17
  docs: {
16
18
  description: "disallow assignments that can lead to race conditions due to usage of `await` or `yield`",
17
19
  category: "Possible Errors",
18
20
  recommended: false,
19
21
  url: "https://eslint.org/docs/rules/require-atomic-updates"
20
22
  },
23
+
21
24
  fixable: null,
22
25
  schema: [],
26
+
23
27
  messages: {
24
28
  nonAtomicUpdate: "Possible race condition: `{{value}}` might be reassigned based on an outdated value of `{{value}}`."
25
29
  }
@@ -31,12 +31,15 @@ function capitalizeFirstLetter(text) {
31
31
 
32
32
  module.exports = {
33
33
  meta: {
34
+ type: "suggestion",
35
+
34
36
  docs: {
35
37
  description: "disallow async functions which have no `await` expression",
36
38
  category: "Best Practices",
37
39
  recommended: false,
38
40
  url: "https://eslint.org/docs/rules/require-await"
39
41
  },
42
+
40
43
  schema: []
41
44
  },
42
45
 
@@ -6,6 +6,8 @@
6
6
 
7
7
  module.exports = {
8
8
  meta: {
9
+ type: "suggestion",
10
+
9
11
  docs: {
10
12
  description: "require JSDoc comments",
11
13
  category: "Stylistic Issues",
@@ -41,7 +43,10 @@ module.exports = {
41
43
  },
42
44
  additionalProperties: false
43
45
  }
44
- ]
46
+ ],
47
+
48
+ deprecated: true,
49
+ replacedBy: []
45
50
  },
46
51
 
47
52
  create(context) {
@@ -22,15 +22,19 @@ const {
22
22
 
23
23
  module.exports = {
24
24
  meta: {
25
+ type: "suggestion",
26
+
25
27
  docs: {
26
28
  description: "enforce the use of `u` flag on RegExp",
27
29
  category: "Best Practices",
28
30
  recommended: false,
29
31
  url: "https://eslint.org/docs/rules/require-unicode-regexp"
30
32
  },
33
+
31
34
  messages: {
32
35
  requireUFlag: "Use the 'u' flag."
33
36
  },
37
+
34
38
  schema: []
35
39
  },
36
40
 
@@ -11,6 +11,8 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "suggestion",
15
+
14
16
  docs: {
15
17
  description: "require generator functions to contain `yield`",
16
18
  category: "ECMAScript 6",
@@ -11,13 +11,17 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "layout",
15
+
14
16
  docs: {
15
17
  description: "enforce spacing between rest and spread operators and their expressions",
16
18
  category: "ECMAScript 6",
17
19
  recommended: false,
18
20
  url: "https://eslint.org/docs/rules/rest-spread-spacing"
19
21
  },
22
+
20
23
  fixable: "whitespace",
24
+
21
25
  schema: [
22
26
  {
23
27
  enum: ["always", "never"]
@@ -13,6 +13,8 @@ const astUtils = require("../util/ast-utils");
13
13
 
14
14
  module.exports = {
15
15
  meta: {
16
+ type: "layout",
17
+
16
18
  docs: {
17
19
  description: "enforce consistent spacing before and after semicolons",
18
20
  category: "Stylistic Issues",
@@ -65,12 +65,15 @@ function isLastChild(node) {
65
65
 
66
66
  module.exports = {
67
67
  meta: {
68
+ type: "layout",
69
+
68
70
  docs: {
69
71
  description: "enforce location of semicolons",
70
72
  category: "Stylistic Issues",
71
73
  recommended: false,
72
74
  url: "https://eslint.org/docs/rules/semi-style"
73
75
  },
76
+
74
77
  schema: [{ enum: ["last", "first"] }],
75
78
  fixable: "whitespace"
76
79
  },
package/lib/rules/semi.js CHANGED
@@ -17,6 +17,8 @@ const astUtils = require("../util/ast-utils");
17
17
 
18
18
  module.exports = {
19
19
  meta: {
20
+ type: "layout",
21
+
20
22
  docs: {
21
23
  description: "require or disallow semicolons instead of ASI",
22
24
  category: "Stylistic Issues",
@@ -11,6 +11,8 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "suggestion",
15
+
14
16
  docs: {
15
17
  description: "enforce sorted import declarations within modules",
16
18
  category: "ECMAScript 6",
@@ -73,12 +73,15 @@ const isValidOrders = {
73
73
 
74
74
  module.exports = {
75
75
  meta: {
76
+ type: "suggestion",
77
+
76
78
  docs: {
77
79
  description: "require object keys to be sorted",
78
80
  category: "Stylistic Issues",
79
81
  recommended: false,
80
82
  url: "https://eslint.org/docs/rules/sort-keys"
81
83
  },
84
+
82
85
  schema: [
83
86
  {
84
87
  enum: ["asc", "desc"]
@@ -11,6 +11,8 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "suggestion",
15
+
14
16
  docs: {
15
17
  description: "require variables within the same declaration block to be sorted",
16
18
  category: "Stylistic Issues",
@@ -13,6 +13,8 @@ const astUtils = require("../util/ast-utils");
13
13
 
14
14
  module.exports = {
15
15
  meta: {
16
+ type: "layout",
17
+
16
18
  docs: {
17
19
  description: "enforce consistent spacing before blocks",
18
20
  category: "Stylistic Issues",
@@ -32,13 +34,13 @@ module.exports = {
32
34
  type: "object",
33
35
  properties: {
34
36
  keywords: {
35
- enum: ["always", "never"]
37
+ enum: ["always", "never", "off"]
36
38
  },
37
39
  functions: {
38
- enum: ["always", "never"]
40
+ enum: ["always", "never", "off"]
39
41
  },
40
42
  classes: {
41
- enum: ["always", "never"]
43
+ enum: ["always", "never", "off"]
42
44
  }
43
45
  },
44
46
  additionalProperties: false
@@ -51,18 +53,27 @@ module.exports = {
51
53
  create(context) {
52
54
  const config = context.options[0],
53
55
  sourceCode = context.getSourceCode();
54
- let checkFunctions = true,
55
- checkKeywords = true,
56
- checkClasses = true;
56
+ let alwaysFunctions = true,
57
+ alwaysKeywords = true,
58
+ alwaysClasses = true,
59
+ neverFunctions = false,
60
+ neverKeywords = false,
61
+ neverClasses = false;
57
62
 
58
63
  if (typeof config === "object") {
59
- checkFunctions = config.functions !== "never";
60
- checkKeywords = config.keywords !== "never";
61
- checkClasses = config.classes !== "never";
64
+ alwaysFunctions = config.functions === "always";
65
+ alwaysKeywords = config.keywords === "always";
66
+ alwaysClasses = config.classes === "always";
67
+ neverFunctions = config.functions === "never";
68
+ neverKeywords = config.keywords === "never";
69
+ neverClasses = config.classes === "never";
62
70
  } else if (config === "never") {
63
- checkFunctions = false;
64
- checkKeywords = false;
65
- checkClasses = false;
71
+ alwaysFunctions = false;
72
+ alwaysKeywords = false;
73
+ alwaysClasses = false;
74
+ neverFunctions = true;
75
+ neverKeywords = true;
76
+ neverClasses = true;
66
77
  }
67
78
 
68
79
  /**
@@ -88,35 +99,35 @@ module.exports = {
88
99
  const hasSpace = sourceCode.isSpaceBetweenTokens(precedingToken, node);
89
100
  const parent = context.getAncestors().pop();
90
101
  let requireSpace;
102
+ let requireNoSpace;
91
103
 
92
104
  if (parent.type === "FunctionExpression" || parent.type === "FunctionDeclaration") {
93
- requireSpace = checkFunctions;
105
+ requireSpace = alwaysFunctions;
106
+ requireNoSpace = neverFunctions;
94
107
  } else if (node.type === "ClassBody") {
95
- requireSpace = checkClasses;
108
+ requireSpace = alwaysClasses;
109
+ requireNoSpace = neverClasses;
96
110
  } else {
97
- requireSpace = checkKeywords;
111
+ requireSpace = alwaysKeywords;
112
+ requireNoSpace = neverKeywords;
98
113
  }
99
114
 
100
- if (requireSpace) {
101
- if (!hasSpace) {
102
- context.report({
103
- node,
104
- message: "Missing space before opening brace.",
105
- fix(fixer) {
106
- return fixer.insertTextBefore(node, " ");
107
- }
108
- });
109
- }
110
- } else {
111
- if (hasSpace) {
112
- context.report({
113
- node,
114
- message: "Unexpected space before opening brace.",
115
- fix(fixer) {
116
- return fixer.removeRange([precedingToken.range[1], node.range[0]]);
117
- }
118
- });
119
- }
115
+ if (requireSpace && !hasSpace) {
116
+ context.report({
117
+ node,
118
+ message: "Missing space before opening brace.",
119
+ fix(fixer) {
120
+ return fixer.insertTextBefore(node, " ");
121
+ }
122
+ });
123
+ } else if (requireNoSpace && hasSpace) {
124
+ context.report({
125
+ node,
126
+ message: "Unexpected space before opening brace.",
127
+ fix(fixer) {
128
+ return fixer.removeRange([precedingToken.range[1], node.range[0]]);
129
+ }
130
+ });
120
131
  }
121
132
  }
122
133
  }
@@ -16,6 +16,8 @@ const astUtils = require("../util/ast-utils");
16
16
 
17
17
  module.exports = {
18
18
  meta: {
19
+ type: "layout",
20
+
19
21
  docs: {
20
22
  description: "enforce consistent spacing before `function` definition opening parenthesis",
21
23
  category: "Stylistic Issues",
@@ -12,6 +12,8 @@ const astUtils = require("../util/ast-utils");
12
12
 
13
13
  module.exports = {
14
14
  meta: {
15
+ type: "layout",
16
+
15
17
  docs: {
16
18
  description: "enforce consistent spacing inside parentheses",
17
19
  category: "Stylistic Issues",
@@ -59,7 +61,6 @@ module.exports = {
59
61
 
60
62
  /**
61
63
  * Produces an object with the opener and closer exception values
62
- * @param {Object} opts The exception options
63
64
  * @returns {Object} `openers` and `closers` exception values
64
65
  * @private
65
66
  */
@@ -10,6 +10,8 @@
10
10
 
11
11
  module.exports = {
12
12
  meta: {
13
+ type: "layout",
14
+
13
15
  docs: {
14
16
  description: "require spacing around infix operators",
15
17
  category: "Stylistic Issues",
@@ -67,7 +69,10 @@ module.exports = {
67
69
  context.report({
68
70
  node: mainNode,
69
71
  loc: culpritToken.loc.start,
70
- message: "Infix operators must be spaced.",
72
+ message: "Operator '{{operator}}' must be spaced.",
73
+ data: {
74
+ operator: culpritToken.value
75
+ },
71
76
  fix(fixer) {
72
77
  const previousToken = sourceCode.getTokenBefore(culpritToken);
73
78
  const afterToken = sourceCode.getTokenAfter(culpritToken);
@@ -16,6 +16,8 @@ const astUtils = require("../util/ast-utils");
16
16
 
17
17
  module.exports = {
18
18
  meta: {
19
+ type: "layout",
20
+
19
21
  docs: {
20
22
  description: "enforce consistent spacing before or after unary operators",
21
23
  category: "Stylistic Issues",
@@ -151,6 +151,8 @@ function createNeverStylePattern(markers) {
151
151
 
152
152
  module.exports = {
153
153
  meta: {
154
+ type: "suggestion",
155
+
154
156
  docs: {
155
157
  description: "enforce consistent spacing after the `//` or `/*` in a comment",
156
158
  category: "Stylistic Issues",
@@ -80,6 +80,8 @@ function isSimpleParameterList(params) {
80
80
 
81
81
  module.exports = {
82
82
  meta: {
83
+ type: "suggestion",
84
+
83
85
  docs: {
84
86
  description: "require or disallow strict mode directives",
85
87
  category: "Strict Mode",
@@ -17,12 +17,15 @@ const astUtils = require("../util/ast-utils");
17
17
 
18
18
  module.exports = {
19
19
  meta: {
20
+ type: "layout",
21
+
20
22
  docs: {
21
23
  description: "enforce spacing around colons of switch statements",
22
24
  category: "Stylistic Issues",
23
25
  recommended: false,
24
26
  url: "https://eslint.org/docs/rules/switch-colon-spacing"
25
27
  },
28
+
26
29
  schema: [
27
30
  {
28
31
  type: "object",
@@ -33,6 +36,7 @@ module.exports = {
33
36
  additionalProperties: false
34
37
  }
35
38
  ],
39
+
36
40
  fixable: "whitespace"
37
41
  },
38
42
 
@@ -18,6 +18,8 @@ const astUtils = require("../util/ast-utils");
18
18
 
19
19
  module.exports = {
20
20
  meta: {
21
+ type: "suggestion",
22
+
21
23
  docs: {
22
24
  description: "require symbol descriptions",
23
25
  category: "ECMAScript 6",
@@ -24,6 +24,8 @@ const CLOSE_PAREN = /^\}/;
24
24
 
25
25
  module.exports = {
26
26
  meta: {
27
+ type: "layout",
28
+
27
29
  docs: {
28
30
  description: "require or disallow spacing around embedded expressions of template strings",
29
31
  category: "ECMAScript 6",
@@ -11,6 +11,8 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "layout",
15
+
14
16
  docs: {
15
17
  description: "require or disallow spacing between template tags and their literals",
16
18
  category: "Stylistic Issues",
@@ -10,6 +10,8 @@
10
10
 
11
11
  module.exports = {
12
12
  meta: {
13
+ type: "layout",
14
+
13
15
  docs: {
14
16
  description: "require or disallow Unicode byte order mark (BOM)",
15
17
  category: "Stylistic Issues",
@@ -11,6 +11,8 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "problem",
15
+
14
16
  docs: {
15
17
  description: "require calls to `isNaN()` when checking for `NaN`",
16
18
  category: "Possible Errors",
@@ -16,6 +16,8 @@ const doctrine = require("doctrine");
16
16
 
17
17
  module.exports = {
18
18
  meta: {
19
+ type: "suggestion",
20
+
19
21
  docs: {
20
22
  description: "enforce valid JSDoc comments",
21
23
  category: "Possible Errors",
@@ -62,7 +64,10 @@ module.exports = {
62
64
  }
63
65
  ],
64
66
 
65
- fixable: "code"
67
+ fixable: "code",
68
+
69
+ deprecated: true,
70
+ replacedBy: []
66
71
  },
67
72
 
68
73
  create(context) {
@@ -10,6 +10,8 @@
10
10
 
11
11
  module.exports = {
12
12
  meta: {
13
+ type: "problem",
14
+
13
15
  docs: {
14
16
  description: "enforce comparing `typeof` expressions against valid strings",
15
17
  category: "Possible Errors",
@@ -11,6 +11,8 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "suggestion",
15
+
14
16
  docs: {
15
17
  description: "require `var` declarations be placed at the top of their containing scope",
16
18
  category: "Best Practices",
@@ -17,6 +17,8 @@ const astUtils = require("../util/ast-utils");
17
17
 
18
18
  module.exports = {
19
19
  meta: {
20
+ type: "layout",
21
+
20
22
  docs: {
21
23
  description: "require parentheses around immediate `function` invocations",
22
24
  category: "Best Practices",
@@ -11,6 +11,8 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "layout",
15
+
14
16
  docs: {
15
17
  description: "require parenthesis around regex literals",
16
18
  category: "Stylistic Issues",
@@ -19,8 +21,8 @@ module.exports = {
19
21
  },
20
22
 
21
23
  schema: [],
22
-
23
24
  fixable: "code",
25
+
24
26
  messages: {
25
27
  requireParens: "Wrap the regexp literal in parens to disambiguate the slash."
26
28
  }
@@ -11,6 +11,8 @@
11
11
 
12
12
  module.exports = {
13
13
  meta: {
14
+ type: "layout",
15
+
14
16
  docs: {
15
17
  description: "require or disallow spacing around the `*` in `yield*` expressions",
16
18
  category: "ECMAScript 6",