bahlint 28.58.6934

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 (420) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +370 -0
  3. package/bin/eslint.js +195 -0
  4. package/conf/ecma-version.js +16 -0
  5. package/conf/globals.js +169 -0
  6. package/conf/replacements.json +26 -0
  7. package/conf/rule-type-list.json +91 -0
  8. package/lib/api.js +39 -0
  9. package/lib/cli-engine/formatters/formatters-meta.json +22 -0
  10. package/lib/cli-engine/formatters/gasoline.js +168 -0
  11. package/lib/cli-engine/formatters/html.js +359 -0
  12. package/lib/cli-engine/formatters/json-with-metadata.js +16 -0
  13. package/lib/cli-engine/formatters/json.js +13 -0
  14. package/lib/cli-engine/formatters/stylish.js +153 -0
  15. package/lib/cli-engine/hash.js +35 -0
  16. package/lib/cli-engine/lint-result-cache.js +220 -0
  17. package/lib/cli.js +607 -0
  18. package/lib/config/config-loader.js +683 -0
  19. package/lib/config/config.js +674 -0
  20. package/lib/config/default-config.js +78 -0
  21. package/lib/config/flat-config-array.js +217 -0
  22. package/lib/config/flat-config-schema.js +598 -0
  23. package/lib/config-api.js +12 -0
  24. package/lib/eslint/eslint-helpers.js +1462 -0
  25. package/lib/eslint/eslint.js +1364 -0
  26. package/lib/eslint/index.js +7 -0
  27. package/lib/eslint/worker.js +173 -0
  28. package/lib/languages/js/index.js +336 -0
  29. package/lib/languages/js/source-code/index.js +7 -0
  30. package/lib/languages/js/source-code/source-code.js +1178 -0
  31. package/lib/languages/js/source-code/token-store/backward-token-comment-cursor.js +61 -0
  32. package/lib/languages/js/source-code/token-store/backward-token-cursor.js +57 -0
  33. package/lib/languages/js/source-code/token-store/cursor.js +76 -0
  34. package/lib/languages/js/source-code/token-store/cursors.js +120 -0
  35. package/lib/languages/js/source-code/token-store/decorative-cursor.js +38 -0
  36. package/lib/languages/js/source-code/token-store/filter-cursor.js +42 -0
  37. package/lib/languages/js/source-code/token-store/forward-token-comment-cursor.js +65 -0
  38. package/lib/languages/js/source-code/token-store/forward-token-cursor.js +62 -0
  39. package/lib/languages/js/source-code/token-store/index.js +695 -0
  40. package/lib/languages/js/source-code/token-store/limit-cursor.js +39 -0
  41. package/lib/languages/js/source-code/token-store/padded-token-cursor.js +45 -0
  42. package/lib/languages/js/source-code/token-store/skip-cursor.js +41 -0
  43. package/lib/languages/js/source-code/token-store/utils.js +131 -0
  44. package/lib/languages/js/validate-language-options.js +196 -0
  45. package/lib/linter/apply-disable-directives.js +583 -0
  46. package/lib/linter/code-path-analysis/code-path-analyzer.js +828 -0
  47. package/lib/linter/code-path-analysis/code-path-segment.js +262 -0
  48. package/lib/linter/code-path-analysis/code-path-state.js +2370 -0
  49. package/lib/linter/code-path-analysis/code-path.js +332 -0
  50. package/lib/linter/code-path-analysis/debug-helpers.js +223 -0
  51. package/lib/linter/code-path-analysis/fork-context.js +374 -0
  52. package/lib/linter/code-path-analysis/id-generator.js +44 -0
  53. package/lib/linter/esquery.js +332 -0
  54. package/lib/linter/file-context.js +88 -0
  55. package/lib/linter/file-report.js +604 -0
  56. package/lib/linter/index.js +11 -0
  57. package/lib/linter/interpolate.js +50 -0
  58. package/lib/linter/linter.js +1614 -0
  59. package/lib/linter/rule-fixer.js +199 -0
  60. package/lib/linter/source-code-fixer.js +154 -0
  61. package/lib/linter/source-code-traverser.js +333 -0
  62. package/lib/linter/source-code-visitor.js +81 -0
  63. package/lib/linter/timing.js +209 -0
  64. package/lib/linter/vfile.js +115 -0
  65. package/lib/options.js +416 -0
  66. package/lib/rule-tester/index.js +7 -0
  67. package/lib/rule-tester/rule-tester.js +1817 -0
  68. package/lib/rules/accessor-pairs.js +420 -0
  69. package/lib/rules/array-bracket-newline.js +291 -0
  70. package/lib/rules/array-bracket-spacing.js +301 -0
  71. package/lib/rules/array-callback-return.js +493 -0
  72. package/lib/rules/array-element-newline.js +374 -0
  73. package/lib/rules/arrow-body-style.js +418 -0
  74. package/lib/rules/arrow-parens.js +237 -0
  75. package/lib/rules/arrow-spacing.js +188 -0
  76. package/lib/rules/block-scoped-var.js +137 -0
  77. package/lib/rules/block-spacing.js +202 -0
  78. package/lib/rules/brace-style.js +278 -0
  79. package/lib/rules/callback-return.js +216 -0
  80. package/lib/rules/camelcase.js +422 -0
  81. package/lib/rules/capitalized-comments.js +325 -0
  82. package/lib/rules/class-methods-use-this.js +250 -0
  83. package/lib/rules/comma-dangle.js +424 -0
  84. package/lib/rules/comma-spacing.js +205 -0
  85. package/lib/rules/comma-style.js +391 -0
  86. package/lib/rules/complexity.js +201 -0
  87. package/lib/rules/computed-property-spacing.js +251 -0
  88. package/lib/rules/consistent-return.js +221 -0
  89. package/lib/rules/consistent-this.js +179 -0
  90. package/lib/rules/constructor-super.js +453 -0
  91. package/lib/rules/curly.js +425 -0
  92. package/lib/rules/default-case-last.js +51 -0
  93. package/lib/rules/default-case.js +103 -0
  94. package/lib/rules/default-param-last.js +78 -0
  95. package/lib/rules/dot-location.js +138 -0
  96. package/lib/rules/dot-notation.js +216 -0
  97. package/lib/rules/eol-last.js +135 -0
  98. package/lib/rules/eqeqeq.js +210 -0
  99. package/lib/rules/for-direction.js +168 -0
  100. package/lib/rules/func-call-spacing.js +281 -0
  101. package/lib/rules/func-name-matching.js +338 -0
  102. package/lib/rules/func-names.js +194 -0
  103. package/lib/rules/func-style.js +221 -0
  104. package/lib/rules/function-call-argument-newline.js +166 -0
  105. package/lib/rules/function-paren-newline.js +368 -0
  106. package/lib/rules/generator-star-spacing.js +246 -0
  107. package/lib/rules/getter-return.js +242 -0
  108. package/lib/rules/global-require.js +117 -0
  109. package/lib/rules/grouped-accessor-pairs.js +268 -0
  110. package/lib/rules/guard-for-in.js +85 -0
  111. package/lib/rules/handle-callback-err.js +122 -0
  112. package/lib/rules/id-blacklist.js +241 -0
  113. package/lib/rules/id-denylist.js +223 -0
  114. package/lib/rules/id-length.js +217 -0
  115. package/lib/rules/id-match.js +363 -0
  116. package/lib/rules/implicit-arrow-linebreak.js +125 -0
  117. package/lib/rules/indent-legacy.js +1369 -0
  118. package/lib/rules/indent.js +2334 -0
  119. package/lib/rules/index.js +332 -0
  120. package/lib/rules/init-declarations.js +172 -0
  121. package/lib/rules/jsx-quotes.js +128 -0
  122. package/lib/rules/key-spacing.js +822 -0
  123. package/lib/rules/keyword-spacing.js +701 -0
  124. package/lib/rules/line-comment-position.js +157 -0
  125. package/lib/rules/linebreak-style.js +135 -0
  126. package/lib/rules/lines-around-comment.js +581 -0
  127. package/lib/rules/lines-around-directive.js +249 -0
  128. package/lib/rules/lines-between-class-members.js +358 -0
  129. package/lib/rules/logical-assignment-operators.js +688 -0
  130. package/lib/rules/max-classes-per-file.js +90 -0
  131. package/lib/rules/max-depth.js +159 -0
  132. package/lib/rules/max-len.js +497 -0
  133. package/lib/rules/max-lines-per-function.js +238 -0
  134. package/lib/rules/max-lines.js +189 -0
  135. package/lib/rules/max-nested-callbacks.js +115 -0
  136. package/lib/rules/max-params.js +148 -0
  137. package/lib/rules/max-statements-per-line.js +224 -0
  138. package/lib/rules/max-statements.js +188 -0
  139. package/lib/rules/multiline-comment-style.js +652 -0
  140. package/lib/rules/multiline-ternary.js +257 -0
  141. package/lib/rules/new-cap.js +277 -0
  142. package/lib/rules/new-parens.js +120 -0
  143. package/lib/rules/newline-after-var.js +307 -0
  144. package/lib/rules/newline-before-return.js +242 -0
  145. package/lib/rules/newline-per-chained-call.js +159 -0
  146. package/lib/rules/no-alert.js +149 -0
  147. package/lib/rules/no-array-constructor.js +195 -0
  148. package/lib/rules/no-async-promise-executor.js +45 -0
  149. package/lib/rules/no-await-in-loop.js +115 -0
  150. package/lib/rules/no-bitwise.js +145 -0
  151. package/lib/rules/no-buffer-constructor.js +74 -0
  152. package/lib/rules/no-caller.js +52 -0
  153. package/lib/rules/no-case-declarations.js +80 -0
  154. package/lib/rules/no-catch-shadow.js +96 -0
  155. package/lib/rules/no-class-assign.js +66 -0
  156. package/lib/rules/no-compare-neg-zero.js +74 -0
  157. package/lib/rules/no-cond-assign.js +175 -0
  158. package/lib/rules/no-confusing-arrow.js +127 -0
  159. package/lib/rules/no-console.js +221 -0
  160. package/lib/rules/no-const-assign.js +73 -0
  161. package/lib/rules/no-constant-binary-expression.js +603 -0
  162. package/lib/rules/no-constant-condition.js +177 -0
  163. package/lib/rules/no-constructor-return.js +62 -0
  164. package/lib/rules/no-continue.js +38 -0
  165. package/lib/rules/no-control-regex.js +142 -0
  166. package/lib/rules/no-debugger.js +41 -0
  167. package/lib/rules/no-delete-var.js +42 -0
  168. package/lib/rules/no-div-regex.js +60 -0
  169. package/lib/rules/no-dupe-args.js +92 -0
  170. package/lib/rules/no-dupe-class-members.js +117 -0
  171. package/lib/rules/no-dupe-else-if.js +145 -0
  172. package/lib/rules/no-dupe-keys.js +165 -0
  173. package/lib/rules/no-duplicate-case.js +78 -0
  174. package/lib/rules/no-duplicate-imports.js +368 -0
  175. package/lib/rules/no-else-return.js +450 -0
  176. package/lib/rules/no-empty-character-class.js +83 -0
  177. package/lib/rules/no-empty-function.js +236 -0
  178. package/lib/rules/no-empty-pattern.js +85 -0
  179. package/lib/rules/no-empty-static-block.js +73 -0
  180. package/lib/rules/no-empty.js +153 -0
  181. package/lib/rules/no-eq-null.js +51 -0
  182. package/lib/rules/no-eval.js +295 -0
  183. package/lib/rules/no-ex-assign.js +57 -0
  184. package/lib/rules/no-extend-native.js +180 -0
  185. package/lib/rules/no-extra-bind.js +224 -0
  186. package/lib/rules/no-extra-boolean-cast.js +420 -0
  187. package/lib/rules/no-extra-label.js +169 -0
  188. package/lib/rules/no-extra-parens.js +1669 -0
  189. package/lib/rules/no-extra-semi.js +167 -0
  190. package/lib/rules/no-fallthrough.js +260 -0
  191. package/lib/rules/no-floating-decimal.js +99 -0
  192. package/lib/rules/no-func-assign.js +77 -0
  193. package/lib/rules/no-global-assign.js +101 -0
  194. package/lib/rules/no-implicit-coercion.js +468 -0
  195. package/lib/rules/no-implicit-globals.js +187 -0
  196. package/lib/rules/no-implied-eval.js +170 -0
  197. package/lib/rules/no-import-assign.js +227 -0
  198. package/lib/rules/no-inline-comments.js +115 -0
  199. package/lib/rules/no-inner-declarations.js +147 -0
  200. package/lib/rules/no-invalid-regexp.js +244 -0
  201. package/lib/rules/no-invalid-this.js +178 -0
  202. package/lib/rules/no-irregular-whitespace.js +292 -0
  203. package/lib/rules/no-iterator.js +48 -0
  204. package/lib/rules/no-label-var.js +78 -0
  205. package/lib/rules/no-labels.js +156 -0
  206. package/lib/rules/no-lone-blocks.js +140 -0
  207. package/lib/rules/no-lonely-if.js +126 -0
  208. package/lib/rules/no-loop-func.js +267 -0
  209. package/lib/rules/no-loss-of-precision.js +249 -0
  210. package/lib/rules/no-magic-numbers.js +365 -0
  211. package/lib/rules/no-misleading-character-class.js +595 -0
  212. package/lib/rules/no-mixed-operators.js +253 -0
  213. package/lib/rules/no-mixed-requires.js +267 -0
  214. package/lib/rules/no-mixed-spaces-and-tabs.js +148 -0
  215. package/lib/rules/no-multi-assign.js +66 -0
  216. package/lib/rules/no-multi-spaces.js +179 -0
  217. package/lib/rules/no-multi-str.js +67 -0
  218. package/lib/rules/no-multiple-empty-lines.js +210 -0
  219. package/lib/rules/no-native-reassign.js +114 -0
  220. package/lib/rules/no-negated-condition.js +100 -0
  221. package/lib/rules/no-negated-in-lhs.js +59 -0
  222. package/lib/rules/no-nested-ternary.js +46 -0
  223. package/lib/rules/no-new-func.js +96 -0
  224. package/lib/rules/no-new-native-nonconstructor.js +70 -0
  225. package/lib/rules/no-new-object.js +76 -0
  226. package/lib/rules/no-new-require.js +67 -0
  227. package/lib/rules/no-new-symbol.js +74 -0
  228. package/lib/rules/no-new-wrappers.js +62 -0
  229. package/lib/rules/no-new.js +42 -0
  230. package/lib/rules/no-nonoctal-decimal-escape.js +176 -0
  231. package/lib/rules/no-obj-calls.js +99 -0
  232. package/lib/rules/no-object-constructor.js +124 -0
  233. package/lib/rules/no-octal-escape.js +53 -0
  234. package/lib/rules/no-octal.js +42 -0
  235. package/lib/rules/no-param-reassign.js +248 -0
  236. package/lib/rules/no-path-concat.js +79 -0
  237. package/lib/rules/no-plusplus.js +102 -0
  238. package/lib/rules/no-process-env.js +68 -0
  239. package/lib/rules/no-process-exit.js +67 -0
  240. package/lib/rules/no-promise-executor-return.js +264 -0
  241. package/lib/rules/no-proto.js +45 -0
  242. package/lib/rules/no-prototype-builtins.js +181 -0
  243. package/lib/rules/no-redeclare.js +173 -0
  244. package/lib/rules/no-regex-spaces.js +219 -0
  245. package/lib/rules/no-restricted-exports.js +227 -0
  246. package/lib/rules/no-restricted-globals.js +266 -0
  247. package/lib/rules/no-restricted-imports.js +892 -0
  248. package/lib/rules/no-restricted-modules.js +249 -0
  249. package/lib/rules/no-restricted-properties.js +233 -0
  250. package/lib/rules/no-restricted-syntax.js +74 -0
  251. package/lib/rules/no-return-assign.js +87 -0
  252. package/lib/rules/no-return-await.js +162 -0
  253. package/lib/rules/no-script-url.js +68 -0
  254. package/lib/rules/no-self-assign.js +186 -0
  255. package/lib/rules/no-self-compare.js +77 -0
  256. package/lib/rules/no-sequences.js +158 -0
  257. package/lib/rules/no-setter-return.js +224 -0
  258. package/lib/rules/no-shadow-restricted-names.js +113 -0
  259. package/lib/rules/no-shadow.js +624 -0
  260. package/lib/rules/no-spaced-func.js +105 -0
  261. package/lib/rules/no-sparse-arrays.js +68 -0
  262. package/lib/rules/no-sync.js +81 -0
  263. package/lib/rules/no-tabs.js +110 -0
  264. package/lib/rules/no-template-curly-in-string.js +45 -0
  265. package/lib/rules/no-ternary.js +38 -0
  266. package/lib/rules/no-this-before-super.js +365 -0
  267. package/lib/rules/no-throw-literal.js +46 -0
  268. package/lib/rules/no-trailing-spaces.js +227 -0
  269. package/lib/rules/no-unassigned-vars.js +80 -0
  270. package/lib/rules/no-undef-init.js +101 -0
  271. package/lib/rules/no-undef.js +84 -0
  272. package/lib/rules/no-undefined.js +85 -0
  273. package/lib/rules/no-underscore-dangle.js +383 -0
  274. package/lib/rules/no-unexpected-multiline.js +130 -0
  275. package/lib/rules/no-unmodified-loop-condition.js +360 -0
  276. package/lib/rules/no-unneeded-ternary.js +232 -0
  277. package/lib/rules/no-unreachable-loop.js +190 -0
  278. package/lib/rules/no-unreachable.js +300 -0
  279. package/lib/rules/no-unsafe-finally.js +119 -0
  280. package/lib/rules/no-unsafe-negation.js +152 -0
  281. package/lib/rules/no-unsafe-optional-chaining.js +221 -0
  282. package/lib/rules/no-unused-expressions.js +227 -0
  283. package/lib/rules/no-unused-labels.js +158 -0
  284. package/lib/rules/no-unused-private-class-members.js +219 -0
  285. package/lib/rules/no-unused-vars.js +1739 -0
  286. package/lib/rules/no-use-before-define.js +446 -0
  287. package/lib/rules/no-useless-assignment.js +657 -0
  288. package/lib/rules/no-useless-backreference.js +263 -0
  289. package/lib/rules/no-useless-call.js +95 -0
  290. package/lib/rules/no-useless-catch.js +57 -0
  291. package/lib/rules/no-useless-computed-key.js +204 -0
  292. package/lib/rules/no-useless-concat.js +121 -0
  293. package/lib/rules/no-useless-constructor.js +262 -0
  294. package/lib/rules/no-useless-escape.js +406 -0
  295. package/lib/rules/no-useless-rename.js +202 -0
  296. package/lib/rules/no-useless-return.js +401 -0
  297. package/lib/rules/no-var.js +367 -0
  298. package/lib/rules/no-void.js +69 -0
  299. package/lib/rules/no-warning-comments.js +209 -0
  300. package/lib/rules/no-whitespace-before-property.js +150 -0
  301. package/lib/rules/no-with.js +37 -0
  302. package/lib/rules/nonblock-statement-body-position.js +164 -0
  303. package/lib/rules/object-curly-newline.js +383 -0
  304. package/lib/rules/object-curly-spacing.js +369 -0
  305. package/lib/rules/object-property-newline.js +151 -0
  306. package/lib/rules/object-shorthand.js +652 -0
  307. package/lib/rules/one-var-declaration-per-line.js +117 -0
  308. package/lib/rules/one-var.js +717 -0
  309. package/lib/rules/operator-assignment.js +270 -0
  310. package/lib/rules/operator-linebreak.js +315 -0
  311. package/lib/rules/padded-blocks.js +366 -0
  312. package/lib/rules/padding-line-between-statements.js +612 -0
  313. package/lib/rules/prefer-arrow-callback.js +437 -0
  314. package/lib/rules/prefer-const.js +546 -0
  315. package/lib/rules/prefer-destructuring.js +332 -0
  316. package/lib/rules/prefer-exponentiation-operator.js +235 -0
  317. package/lib/rules/prefer-named-capture-group.js +197 -0
  318. package/lib/rules/prefer-numeric-literals.js +157 -0
  319. package/lib/rules/prefer-object-has-own.js +148 -0
  320. package/lib/rules/prefer-object-spread.js +319 -0
  321. package/lib/rules/prefer-promise-reject-errors.js +154 -0
  322. package/lib/rules/prefer-reflect.js +150 -0
  323. package/lib/rules/prefer-regex-literals.js +605 -0
  324. package/lib/rules/prefer-rest-params.js +117 -0
  325. package/lib/rules/prefer-spread.js +91 -0
  326. package/lib/rules/prefer-template.js +347 -0
  327. package/lib/rules/preserve-caught-error.js +535 -0
  328. package/lib/rules/quote-props.js +394 -0
  329. package/lib/rules/quotes.js +416 -0
  330. package/lib/rules/radix.js +193 -0
  331. package/lib/rules/require-atomic-updates.js +365 -0
  332. package/lib/rules/require-await.js +184 -0
  333. package/lib/rules/require-unicode-regexp.js +317 -0
  334. package/lib/rules/require-yield.js +86 -0
  335. package/lib/rules/rest-spread-spacing.js +150 -0
  336. package/lib/rules/semi-spacing.js +297 -0
  337. package/lib/rules/semi-style.js +218 -0
  338. package/lib/rules/semi.js +476 -0
  339. package/lib/rules/sort-imports.js +319 -0
  340. package/lib/rules/sort-keys.js +268 -0
  341. package/lib/rules/sort-vars.js +140 -0
  342. package/lib/rules/space-before-blocks.js +232 -0
  343. package/lib/rules/space-before-function-paren.js +202 -0
  344. package/lib/rules/space-in-parens.js +374 -0
  345. package/lib/rules/space-infix-ops.js +249 -0
  346. package/lib/rules/space-unary-ops.js +400 -0
  347. package/lib/rules/spaced-comment.js +447 -0
  348. package/lib/rules/strict.js +314 -0
  349. package/lib/rules/switch-colon-spacing.js +158 -0
  350. package/lib/rules/symbol-description.js +70 -0
  351. package/lib/rules/template-curly-spacing.js +168 -0
  352. package/lib/rules/template-tag-spacing.js +121 -0
  353. package/lib/rules/unicode-bom.js +73 -0
  354. package/lib/rules/use-isnan.js +268 -0
  355. package/lib/rules/utils/ast-utils.js +2828 -0
  356. package/lib/rules/utils/char-source.js +247 -0
  357. package/lib/rules/utils/fix-tracker.js +125 -0
  358. package/lib/rules/utils/keywords.js +67 -0
  359. package/lib/rules/utils/lazy-loading-rule-map.js +118 -0
  360. package/lib/rules/utils/regular-expressions.js +58 -0
  361. package/lib/rules/utils/unicode/index.js +16 -0
  362. package/lib/rules/utils/unicode/is-combining-character.js +13 -0
  363. package/lib/rules/utils/unicode/is-emoji-modifier.js +13 -0
  364. package/lib/rules/utils/unicode/is-regional-indicator-symbol.js +13 -0
  365. package/lib/rules/utils/unicode/is-surrogate-pair.js +14 -0
  366. package/lib/rules/valid-typeof.js +171 -0
  367. package/lib/rules/vars-on-top.js +165 -0
  368. package/lib/rules/wrap-iife.js +238 -0
  369. package/lib/rules/wrap-regex.js +91 -0
  370. package/lib/rules/yield-star-spacing.js +158 -0
  371. package/lib/rules/yoda.js +362 -0
  372. package/lib/services/parser-service.js +64 -0
  373. package/lib/services/processor-service.js +100 -0
  374. package/lib/services/suppressions-service.js +302 -0
  375. package/lib/services/warning-service.js +87 -0
  376. package/lib/shared/ajv.js +34 -0
  377. package/lib/shared/assert.js +21 -0
  378. package/lib/shared/ast-utils.js +30 -0
  379. package/lib/shared/deep-merge-arrays.js +62 -0
  380. package/lib/shared/directives.js +16 -0
  381. package/lib/shared/flags.js +89 -0
  382. package/lib/shared/logging.js +38 -0
  383. package/lib/shared/naming.js +109 -0
  384. package/lib/shared/option-utils.js +63 -0
  385. package/lib/shared/relative-module-resolver.js +28 -0
  386. package/lib/shared/runtime-info.js +177 -0
  387. package/lib/shared/serialization.js +78 -0
  388. package/lib/shared/severity.js +49 -0
  389. package/lib/shared/stats.js +30 -0
  390. package/lib/shared/string-utils.js +58 -0
  391. package/lib/shared/text-table.js +68 -0
  392. package/lib/shared/translate-cli-options.js +223 -0
  393. package/lib/shared/traverser.js +202 -0
  394. package/lib/types/config-api.d.ts +12 -0
  395. package/lib/types/index.d.ts +1482 -0
  396. package/lib/types/rules.d.ts +5603 -0
  397. package/lib/types/universal.d.ts +6 -0
  398. package/lib/types/use-at-your-own-risk.d.ts +34 -0
  399. package/lib/universal.js +10 -0
  400. package/lib/unsupported-api.js +26 -0
  401. package/messages/all-files-ignored.js +16 -0
  402. package/messages/all-matched-files-ignored.js +21 -0
  403. package/messages/config-file-missing.js +16 -0
  404. package/messages/config-plugin-missing.js +14 -0
  405. package/messages/config-serialize-function.js +30 -0
  406. package/messages/eslintrc-incompat.js +117 -0
  407. package/messages/eslintrc-plugins.js +27 -0
  408. package/messages/extend-config-missing.js +13 -0
  409. package/messages/failed-to-read-json.js +11 -0
  410. package/messages/file-not-found.js +10 -0
  411. package/messages/invalid-rule-options.js +17 -0
  412. package/messages/invalid-rule-severity.js +13 -0
  413. package/messages/no-config-found.js +15 -0
  414. package/messages/plugin-conflict.js +22 -0
  415. package/messages/plugin-invalid.js +16 -0
  416. package/messages/plugin-missing.js +19 -0
  417. package/messages/print-config-with-directory-path.js +8 -0
  418. package/messages/shared.js +23 -0
  419. package/messages/whitespace-found.js +11 -0
  420. package/package.json +220 -0
@@ -0,0 +1,367 @@
1
+ /**
2
+ * @fileoverview Rule to check for the usage of var.
3
+ * @author Jamund Ferguson
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Helpers
16
+ //------------------------------------------------------------------------------
17
+
18
+ /**
19
+ * Check whether a given variable is a global variable or not.
20
+ * @param {eslint-scope.Variable} variable The variable to check.
21
+ * @returns {boolean} `true` if the variable is a global variable.
22
+ */
23
+ function isGlobal(variable) {
24
+ return Boolean(variable.scope) && variable.scope.type === "global";
25
+ }
26
+
27
+ /**
28
+ * Finds the nearest function scope or global scope walking up the scope
29
+ * hierarchy.
30
+ * @param {eslint-scope.Scope} scope The scope to traverse.
31
+ * @returns {eslint-scope.Scope} a function scope or global scope containing the given
32
+ * scope.
33
+ */
34
+ function getEnclosingFunctionScope(scope) {
35
+ let currentScope = scope;
36
+
37
+ while (currentScope.type !== "function" && currentScope.type !== "global") {
38
+ currentScope = currentScope.upper;
39
+ }
40
+ return currentScope;
41
+ }
42
+
43
+ /**
44
+ * Checks whether the given variable has any references from a more specific
45
+ * function expression (i.e. a closure).
46
+ * @param {eslint-scope.Variable} variable A variable to check.
47
+ * @returns {boolean} `true` if the variable is used from a closure.
48
+ */
49
+ function isReferencedInClosure(variable) {
50
+ const enclosingFunctionScope = getEnclosingFunctionScope(variable.scope);
51
+
52
+ return variable.references.some(
53
+ reference =>
54
+ getEnclosingFunctionScope(reference.from) !==
55
+ enclosingFunctionScope,
56
+ );
57
+ }
58
+
59
+ /**
60
+ * Checks whether the given node is the assignee of a loop.
61
+ * @param {ASTNode} node A VariableDeclaration node to check.
62
+ * @returns {boolean} `true` if the declaration is assigned as part of loop
63
+ * iteration.
64
+ */
65
+ function isLoopAssignee(node) {
66
+ return (
67
+ (node.parent.type === "ForOfStatement" ||
68
+ node.parent.type === "ForInStatement") &&
69
+ node === node.parent.left
70
+ );
71
+ }
72
+
73
+ /**
74
+ * Checks whether the given variable declaration is immediately initialized.
75
+ * @param {ASTNode} node A VariableDeclaration node to check.
76
+ * @returns {boolean} `true` if the declaration has an initializer.
77
+ */
78
+ function isDeclarationInitialized(node) {
79
+ return node.declarations.every(declarator => declarator.init !== null);
80
+ }
81
+
82
+ const SCOPE_NODE_TYPE =
83
+ /^(?:Program|BlockStatement|SwitchStatement|ForStatement|ForInStatement|ForOfStatement)$/u;
84
+
85
+ /**
86
+ * Gets the scope node which directly contains a given node.
87
+ * @param {ASTNode} node A node to get. This is a `VariableDeclaration` or
88
+ * an `Identifier`.
89
+ * @returns {ASTNode} A scope node. This is one of `Program`, `BlockStatement`,
90
+ * `SwitchStatement`, `ForStatement`, `ForInStatement`, and
91
+ * `ForOfStatement`.
92
+ */
93
+ function getScopeNode(node) {
94
+ for (
95
+ let currentNode = node;
96
+ currentNode;
97
+ currentNode = currentNode.parent
98
+ ) {
99
+ if (SCOPE_NODE_TYPE.test(currentNode.type)) {
100
+ return currentNode;
101
+ }
102
+ }
103
+
104
+ /* c8 ignore next */
105
+ return null;
106
+ }
107
+
108
+ /**
109
+ * Checks whether a given variable is redeclared or not.
110
+ * @param {eslint-scope.Variable} variable A variable to check.
111
+ * @returns {boolean} `true` if the variable is redeclared.
112
+ */
113
+ function isRedeclared(variable) {
114
+ return variable.defs.length >= 2;
115
+ }
116
+
117
+ /**
118
+ * Checks whether a given variable is used from outside of the specified scope.
119
+ * @param {ASTNode} scopeNode A scope node to check.
120
+ * @returns {Function} The predicate function which checks whether a given
121
+ * variable is used from outside of the specified scope.
122
+ */
123
+ function isUsedFromOutsideOf(scopeNode) {
124
+ /**
125
+ * Checks whether a given reference is inside of the specified scope or not.
126
+ * @param {eslint-scope.Reference} reference A reference to check.
127
+ * @returns {boolean} `true` if the reference is inside of the specified
128
+ * scope.
129
+ */
130
+ function isOutsideOfScope(reference) {
131
+ const scope = scopeNode.range;
132
+ const id = reference.identifier.range;
133
+
134
+ return id[0] < scope[0] || id[1] > scope[1];
135
+ }
136
+
137
+ return function (variable) {
138
+ return variable.references.some(isOutsideOfScope);
139
+ };
140
+ }
141
+
142
+ /**
143
+ * Creates the predicate function which checks whether a variable has their references in TDZ.
144
+ *
145
+ * The predicate function would return `true`:
146
+ *
147
+ * - if a reference is before the declarator. E.g. (var a = b, b = 1;)(var {a = b, b} = {};)
148
+ * - if a reference is in the expression of their default value. E.g. (var {a = a} = {};)
149
+ * - if a reference is in the expression of their initializer. E.g. (var a = a;)
150
+ * @param {ASTNode} node The initializer node of VariableDeclarator.
151
+ * @returns {Function} The predicate function.
152
+ * @private
153
+ */
154
+ function hasReferenceInTDZ(node) {
155
+ const initStart = node.range[0];
156
+ const initEnd = node.range[1];
157
+
158
+ return variable => {
159
+ const id = variable.defs[0].name;
160
+ const idStart = id.range[0];
161
+ const defaultValue =
162
+ id.parent.type === "AssignmentPattern" ? id.parent.right : null;
163
+ const defaultStart = defaultValue && defaultValue.range[0];
164
+ const defaultEnd = defaultValue && defaultValue.range[1];
165
+
166
+ return variable.references.some(reference => {
167
+ const start = reference.identifier.range[0];
168
+ const end = reference.identifier.range[1];
169
+
170
+ return (
171
+ !reference.init &&
172
+ (start < idStart ||
173
+ (defaultValue !== null &&
174
+ start >= defaultStart &&
175
+ end <= defaultEnd) ||
176
+ (!astUtils.isFunction(node) &&
177
+ start >= initStart &&
178
+ end <= initEnd))
179
+ );
180
+ });
181
+ };
182
+ }
183
+
184
+ /**
185
+ * Checks whether a given variable has name that is allowed for 'var' declarations,
186
+ * but disallowed for `let` declarations.
187
+ * @param {eslint-scope.Variable} variable The variable to check.
188
+ * @returns {boolean} `true` if the variable has a disallowed name.
189
+ */
190
+ function hasNameDisallowedForLetDeclarations(variable) {
191
+ return variable.name === "let";
192
+ }
193
+
194
+ //------------------------------------------------------------------------------
195
+ // Rule Definition
196
+ //------------------------------------------------------------------------------
197
+
198
+ /** @type {import('../types').Rule.RuleModule} */
199
+ module.exports = {
200
+ meta: {
201
+ type: "suggestion",
202
+ dialects: ["typescript", "javascript"],
203
+ language: "javascript",
204
+
205
+ docs: {
206
+ description: "Require `let` or `const` instead of `var`",
207
+ recommended: false,
208
+ url: "https://eslint.org/docs/latest/rules/no-var",
209
+ },
210
+
211
+ schema: [],
212
+ fixable: "code",
213
+
214
+ messages: {
215
+ unexpectedVar: "Unexpected var, use let or const instead.",
216
+ },
217
+ },
218
+
219
+ create(context) {
220
+ const sourceCode = context.sourceCode;
221
+
222
+ /**
223
+ * Checks whether the variables which are defined by the given declarator node have their references in TDZ.
224
+ * @param {ASTNode} declarator The VariableDeclarator node to check.
225
+ * @returns {boolean} `true` if one of the variables which are defined by the given declarator node have their references in TDZ.
226
+ */
227
+ function hasSelfReferenceInTDZ(declarator) {
228
+ if (!declarator.init) {
229
+ return false;
230
+ }
231
+ const variables = sourceCode.getDeclaredVariables(declarator);
232
+
233
+ return variables.some(hasReferenceInTDZ(declarator.init));
234
+ }
235
+
236
+ /**
237
+ * Checks whether it can fix a given variable declaration or not.
238
+ * It cannot fix if the following cases:
239
+ *
240
+ * - A variable is a global variable.
241
+ * - A variable is declared on a SwitchCase node.
242
+ * - A variable is redeclared.
243
+ * - A variable is used from outside the scope.
244
+ * - A variable is used from a closure within a loop.
245
+ * - A variable might be used before it is assigned within a loop.
246
+ * - A variable might be used in TDZ.
247
+ * - A variable is declared in statement position (e.g. a single-line `IfStatement`)
248
+ * - A variable has name that is disallowed for `let` declarations.
249
+ *
250
+ * ## A variable is declared on a SwitchCase node.
251
+ *
252
+ * If this rule modifies 'var' declarations on a SwitchCase node, it
253
+ * would generate the warnings of 'no-case-declarations' rule. And the
254
+ * 'eslint:recommended' preset includes 'no-case-declarations' rule, so
255
+ * this rule doesn't modify those declarations.
256
+ *
257
+ * ## A variable is redeclared.
258
+ *
259
+ * The language spec disallows redeclarations of `let` declarations.
260
+ * Those variables would cause syntax errors.
261
+ *
262
+ * ## A variable is used from outside the scope.
263
+ *
264
+ * The language spec disallows accesses from outside of the scope for
265
+ * `let` declarations. Those variables would cause reference errors.
266
+ *
267
+ * ## A variable is used from a closure within a loop.
268
+ *
269
+ * A `var` declaration within a loop shares the same variable instance
270
+ * across all loop iterations, while a `let` declaration creates a new
271
+ * instance for each iteration. This means if a variable in a loop is
272
+ * referenced by any closure, changing it from `var` to `let` would
273
+ * change the behavior in a way that is generally unsafe.
274
+ *
275
+ * ## A variable might be used before it is assigned within a loop.
276
+ *
277
+ * Within a loop, a `let` declaration without an initializer will be
278
+ * initialized to null, while a `var` declaration will retain its value
279
+ * from the previous iteration, so it is only safe to change `var` to
280
+ * `let` if we can statically determine that the variable is always
281
+ * assigned a value before its first access in the loop body. To keep
282
+ * the implementation simple, we only convert `var` to `let` within
283
+ * loops when the variable is a loop assignee or the declaration has an
284
+ * initializer.
285
+ * @param {ASTNode} node A variable declaration node to check.
286
+ * @returns {boolean} `true` if it can fix the node.
287
+ */
288
+ function canFix(node) {
289
+ const variables = sourceCode.getDeclaredVariables(node);
290
+ const scopeNode = getScopeNode(node);
291
+
292
+ if (
293
+ node.parent.type === "SwitchCase" ||
294
+ node.declarations.some(hasSelfReferenceInTDZ) ||
295
+ variables.some(isGlobal) ||
296
+ variables.some(isRedeclared) ||
297
+ variables.some(isUsedFromOutsideOf(scopeNode)) ||
298
+ variables.some(hasNameDisallowedForLetDeclarations)
299
+ ) {
300
+ return false;
301
+ }
302
+
303
+ if (astUtils.isInLoop(node)) {
304
+ if (variables.some(isReferencedInClosure)) {
305
+ return false;
306
+ }
307
+ if (!isLoopAssignee(node) && !isDeclarationInitialized(node)) {
308
+ return false;
309
+ }
310
+ }
311
+
312
+ if (
313
+ !isLoopAssignee(node) &&
314
+ !(
315
+ node.parent.type === "ForStatement" &&
316
+ node.parent.init === node
317
+ ) &&
318
+ !astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)
319
+ ) {
320
+ // If the declaration is not in a block, e.g. `if (foo) var bar = 1;`, then it can't be fixed.
321
+ return false;
322
+ }
323
+
324
+ return true;
325
+ }
326
+
327
+ /**
328
+ * Reports a given variable declaration node.
329
+ * @param {ASTNode} node A variable declaration node to report.
330
+ * @returns {void}
331
+ */
332
+ function report(node) {
333
+ context.report({
334
+ node,
335
+ messageId: "unexpectedVar",
336
+
337
+ fix(fixer) {
338
+ const varToken = sourceCode.getFirstToken(node, {
339
+ filter: t => t.value === "var",
340
+ });
341
+
342
+ return canFix(node)
343
+ ? fixer.replaceText(varToken, "let")
344
+ : null;
345
+ },
346
+ });
347
+ }
348
+
349
+ return {
350
+ "VariableDeclaration:exit"(node) {
351
+ if (node.kind !== "var") {
352
+ return;
353
+ }
354
+
355
+ if (
356
+ node.parent.type === "TSModuleBlock" &&
357
+ node.parent.parent.type === "TSModuleDeclaration" &&
358
+ node.parent.parent.global
359
+ ) {
360
+ return;
361
+ }
362
+
363
+ report(node);
364
+ },
365
+ };
366
+ },
367
+ };
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @fileoverview Rule to disallow use of void operator.
3
+ * @author Mike Sidorov
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Rule Definition
9
+ //------------------------------------------------------------------------------
10
+
11
+ /** @type {import('../types').Rule.RuleModule} */
12
+ module.exports = {
13
+ meta: {
14
+ type: "suggestion",
15
+
16
+ defaultOptions: [
17
+ {
18
+ allowAsStatement: false,
19
+ },
20
+ ],
21
+
22
+ docs: {
23
+ description: "Disallow `void` operators",
24
+ recommended: false,
25
+ frozen: true,
26
+ url: "https://eslint.org/docs/latest/rules/no-void",
27
+ },
28
+
29
+ messages: {
30
+ noVoid: "Expected 'undefined' and instead saw 'void'.",
31
+ },
32
+
33
+ schema: [
34
+ {
35
+ type: "object",
36
+ properties: {
37
+ allowAsStatement: {
38
+ type: "boolean",
39
+ },
40
+ },
41
+ additionalProperties: false,
42
+ },
43
+ ],
44
+ },
45
+
46
+ create(context) {
47
+ const [{ allowAsStatement }] = context.options;
48
+
49
+ //--------------------------------------------------------------------------
50
+ // Public
51
+ //--------------------------------------------------------------------------
52
+
53
+ return {
54
+ 'UnaryExpression[operator="void"]'(node) {
55
+ if (
56
+ allowAsStatement &&
57
+ node.parent &&
58
+ node.parent.type === "ExpressionStatement"
59
+ ) {
60
+ return;
61
+ }
62
+ context.report({
63
+ node,
64
+ messageId: "noVoid",
65
+ });
66
+ },
67
+ };
68
+ },
69
+ };
@@ -0,0 +1,209 @@
1
+ /**
2
+ * @fileoverview Rule that warns about used warning comments
3
+ * @author Alexander Schmidt <https://github.com/lxanders>
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const escapeRegExp = require("escape-string-regexp");
9
+ const astUtils = require("./utils/ast-utils");
10
+
11
+ const CHAR_LIMIT = 40;
12
+
13
+ //------------------------------------------------------------------------------
14
+ // Rule Definition
15
+ //------------------------------------------------------------------------------
16
+
17
+ /** @type {import('../types').Rule.RuleModule} */
18
+ module.exports = {
19
+ meta: {
20
+ type: "suggestion",
21
+
22
+ defaultOptions: [
23
+ {
24
+ location: "start",
25
+ terms: ["todo", "fixme", "xxx"],
26
+ },
27
+ ],
28
+
29
+ docs: {
30
+ description: "Disallow specified warning terms in comments",
31
+ recommended: false,
32
+ frozen: true,
33
+ url: "https://eslint.org/docs/latest/rules/no-warning-comments",
34
+ },
35
+
36
+ schema: [
37
+ {
38
+ type: "object",
39
+ properties: {
40
+ terms: {
41
+ type: "array",
42
+ items: {
43
+ type: "string",
44
+ },
45
+ },
46
+ location: {
47
+ enum: ["start", "anywhere"],
48
+ },
49
+ decoration: {
50
+ type: "array",
51
+ items: {
52
+ type: "string",
53
+ pattern: "^\\S$",
54
+ },
55
+ minItems: 1,
56
+ uniqueItems: true,
57
+ },
58
+ },
59
+ additionalProperties: false,
60
+ },
61
+ ],
62
+
63
+ messages: {
64
+ unexpectedComment:
65
+ "Unexpected '{{matchedTerm}}' comment: '{{comment}}'.",
66
+ },
67
+ },
68
+
69
+ create(context) {
70
+ const sourceCode = context.sourceCode;
71
+ const [{ decoration, location, terms: warningTerms }] = context.options;
72
+ const escapedDecoration = escapeRegExp(
73
+ decoration ? decoration.join("") : "",
74
+ );
75
+ const selfConfigRegEx = /\bno-warning-comments\b/u;
76
+
77
+ /**
78
+ * Convert a warning term into a RegExp which will match a comment containing that whole word in the specified
79
+ * location ("start" or "anywhere"). If the term starts or ends with non word characters, then the match will not
80
+ * require word boundaries on that side.
81
+ * @param {string} term A term to convert to a RegExp
82
+ * @returns {RegExp} The term converted to a RegExp
83
+ */
84
+ function convertToRegExp(term) {
85
+ const escaped = escapeRegExp(term);
86
+
87
+ /*
88
+ * When matching at the start, ignore leading whitespace, and
89
+ * there's no need to worry about word boundaries.
90
+ *
91
+ * These expressions for the prefix and suffix are designed as follows:
92
+ * ^ handles any terms at the beginning of a comment.
93
+ * e.g. terms ["TODO"] matches `//TODO something`
94
+ * $ handles any terms at the end of a comment
95
+ * e.g. terms ["TODO"] matches `// something TODO`
96
+ * \b handles terms preceded/followed by word boundary
97
+ * e.g. terms: ["!FIX", "FIX!"] matches `// FIX!something` or `// something!FIX`
98
+ * terms: ["FIX"] matches `// FIX!` or `// !FIX`, but not `// fixed or affix`
99
+ *
100
+ * For location start:
101
+ * [\s]* handles optional leading spaces
102
+ * e.g. terms ["TODO"] matches `// TODO something`
103
+ * [\s\*]* (where "\*" is the escaped string of decoration)
104
+ * handles optional leading spaces or decoration characters (for "start" location only)
105
+ * e.g. terms ["TODO"] matches `/**** TODO something ... `
106
+ */
107
+ const wordBoundary = "\\b";
108
+
109
+ let prefix = "";
110
+
111
+ if (location === "start") {
112
+ prefix = `^[\\s${escapedDecoration}]*`;
113
+ } else if (/^\w/u.test(term)) {
114
+ prefix = wordBoundary;
115
+ }
116
+
117
+ const suffix = /\w$/u.test(term) ? wordBoundary : "";
118
+ const flags = "iu"; // Case-insensitive with Unicode case folding.
119
+
120
+ /*
121
+ * For location "start", the typical regex is:
122
+ * /^[\s]*ESCAPED_TERM\b/iu.
123
+ * Or if decoration characters are specified (e.g. "*"), then any of
124
+ * those characters may appear in any order at the start:
125
+ * /^[\s\*]*ESCAPED_TERM\b/iu.
126
+ *
127
+ * For location "anywhere" the typical regex is
128
+ * /\bESCAPED_TERM\b/iu
129
+ *
130
+ * If it starts or ends with non-word character, the prefix and suffix are empty, respectively.
131
+ */
132
+ return new RegExp(`${prefix}${escaped}${suffix}`, flags);
133
+ }
134
+
135
+ const warningRegExps = warningTerms.map(convertToRegExp);
136
+
137
+ /**
138
+ * Checks the specified comment for matches of the configured warning terms and returns the matches.
139
+ * @param {string} comment The comment which is checked.
140
+ * @returns {Array} All matched warning terms for this comment.
141
+ */
142
+ function commentContainsWarningTerm(comment) {
143
+ const matches = [];
144
+
145
+ warningRegExps.forEach((regex, index) => {
146
+ if (regex.test(comment)) {
147
+ matches.push(warningTerms[index]);
148
+ }
149
+ });
150
+
151
+ return matches;
152
+ }
153
+
154
+ /**
155
+ * Checks the specified node for matching warning comments and reports them.
156
+ * @param {ASTNode} node The AST node being checked.
157
+ * @returns {void} undefined.
158
+ */
159
+ function checkComment(node) {
160
+ const comment = node.value;
161
+
162
+ if (
163
+ astUtils.isDirectiveComment(node) &&
164
+ selfConfigRegEx.test(comment)
165
+ ) {
166
+ return;
167
+ }
168
+
169
+ const matches = commentContainsWarningTerm(comment);
170
+
171
+ matches.forEach(matchedTerm => {
172
+ let commentToDisplay = "";
173
+ let truncated = false;
174
+
175
+ for (const c of comment.trim().split(/\s+/u)) {
176
+ const tmp = commentToDisplay
177
+ ? `${commentToDisplay} ${c}`
178
+ : c;
179
+
180
+ if (tmp.length <= CHAR_LIMIT) {
181
+ commentToDisplay = tmp;
182
+ } else {
183
+ truncated = true;
184
+ break;
185
+ }
186
+ }
187
+
188
+ context.report({
189
+ node,
190
+ messageId: "unexpectedComment",
191
+ data: {
192
+ matchedTerm,
193
+ comment: `${commentToDisplay}${truncated ? "..." : ""}`,
194
+ },
195
+ });
196
+ });
197
+ }
198
+
199
+ return {
200
+ Program() {
201
+ const comments = sourceCode.getAllComments();
202
+
203
+ comments
204
+ .filter(token => token.type !== "Shebang")
205
+ .forEach(checkComment);
206
+ },
207
+ };
208
+ },
209
+ };