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,242 @@
1
+ /**
2
+ * @fileoverview Enforces that a return statement is present in property getters.
3
+ * @author Aladdin-ADD(hh_2013@foxmail.com)
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
+ const TARGET_NODE_TYPE = /^(?:Arrow)?FunctionExpression$/u;
19
+
20
+ /**
21
+ * Checks all segments in a set and returns true if any are reachable.
22
+ * @param {Set<CodePathSegment>} segments The segments to check.
23
+ * @returns {boolean} True if any segment is reachable; false otherwise.
24
+ */
25
+ function isAnySegmentReachable(segments) {
26
+ for (const segment of segments) {
27
+ if (segment.reachable) {
28
+ return true;
29
+ }
30
+ }
31
+
32
+ return false;
33
+ }
34
+
35
+ //------------------------------------------------------------------------------
36
+ // Rule Definition
37
+ //------------------------------------------------------------------------------
38
+
39
+ /** @type {import('../types').Rule.RuleModule} */
40
+ module.exports = {
41
+ meta: {
42
+ type: "problem",
43
+
44
+ defaultOptions: [
45
+ {
46
+ allowImplicit: false,
47
+ },
48
+ ],
49
+
50
+ docs: {
51
+ description: "Enforce `return` statements in getters",
52
+ recommended: true,
53
+ url: "https://eslint.org/docs/latest/rules/getter-return",
54
+ },
55
+
56
+ fixable: null,
57
+
58
+ schema: [
59
+ {
60
+ type: "object",
61
+ properties: {
62
+ allowImplicit: {
63
+ type: "boolean",
64
+ },
65
+ },
66
+ additionalProperties: false,
67
+ },
68
+ ],
69
+
70
+ messages: {
71
+ expected: "Expected to return a value in {{name}}.",
72
+ expectedAlways: "Expected {{name}} to always return a value.",
73
+ },
74
+ },
75
+
76
+ create(context) {
77
+ const [{ allowImplicit }] = context.options;
78
+ const sourceCode = context.sourceCode;
79
+
80
+ let funcInfo = {
81
+ upper: null,
82
+ codePath: null,
83
+ hasReturn: false,
84
+ shouldCheck: false,
85
+ node: null,
86
+ currentSegments: [],
87
+ };
88
+
89
+ /**
90
+ * Checks whether or not the last code path segment is reachable.
91
+ * Then reports this function if the segment is reachable.
92
+ *
93
+ * If the last code path segment is reachable, there are paths which are not
94
+ * returned or thrown.
95
+ * @param {ASTNode} node A node to check.
96
+ * @returns {void}
97
+ */
98
+ function checkLastSegment(node) {
99
+ if (
100
+ funcInfo.shouldCheck &&
101
+ isAnySegmentReachable(funcInfo.currentSegments)
102
+ ) {
103
+ context.report({
104
+ node,
105
+ loc: astUtils.getFunctionHeadLoc(node, sourceCode),
106
+ messageId: funcInfo.hasReturn
107
+ ? "expectedAlways"
108
+ : "expected",
109
+ data: {
110
+ name: astUtils.getFunctionNameWithKind(funcInfo.node),
111
+ },
112
+ });
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Checks whether a node means a getter function.
118
+ * @param {ASTNode} node a node to check.
119
+ * @returns {boolean} if node means a getter, return true; else return false.
120
+ */
121
+ function isGetter(node) {
122
+ const parent = node.parent;
123
+
124
+ if (
125
+ TARGET_NODE_TYPE.test(node.type) &&
126
+ node.body.type === "BlockStatement"
127
+ ) {
128
+ if (parent.kind === "get") {
129
+ return true;
130
+ }
131
+ if (
132
+ parent.type === "Property" &&
133
+ astUtils.getStaticPropertyName(parent) === "get" &&
134
+ parent.parent.type === "ObjectExpression"
135
+ ) {
136
+ // Object.defineProperty() or Reflect.defineProperty()
137
+ if (parent.parent.parent.type === "CallExpression") {
138
+ const callNode = parent.parent.parent.callee;
139
+
140
+ if (
141
+ astUtils.isSpecificMemberAccess(
142
+ callNode,
143
+ "Object",
144
+ "defineProperty",
145
+ ) ||
146
+ astUtils.isSpecificMemberAccess(
147
+ callNode,
148
+ "Reflect",
149
+ "defineProperty",
150
+ )
151
+ ) {
152
+ return true;
153
+ }
154
+ }
155
+
156
+ // Object.defineProperties() or Object.create()
157
+ if (
158
+ parent.parent.parent.type === "Property" &&
159
+ parent.parent.parent.parent.type ===
160
+ "ObjectExpression" &&
161
+ parent.parent.parent.parent.parent.type ===
162
+ "CallExpression"
163
+ ) {
164
+ const callNode =
165
+ parent.parent.parent.parent.parent.callee;
166
+
167
+ return (
168
+ astUtils.isSpecificMemberAccess(
169
+ callNode,
170
+ "Object",
171
+ "defineProperties",
172
+ ) ||
173
+ astUtils.isSpecificMemberAccess(
174
+ callNode,
175
+ "Object",
176
+ "create",
177
+ )
178
+ );
179
+ }
180
+ }
181
+ }
182
+ return false;
183
+ }
184
+ return {
185
+ // Stacks this function's information.
186
+ onCodePathStart(codePath, node) {
187
+ funcInfo = {
188
+ upper: funcInfo,
189
+ codePath,
190
+ hasReturn: false,
191
+ shouldCheck: isGetter(node),
192
+ node,
193
+ currentSegments: new Set(),
194
+ };
195
+ },
196
+
197
+ // Pops this function's information.
198
+ onCodePathEnd() {
199
+ funcInfo = funcInfo.upper;
200
+ },
201
+ onUnreachableCodePathSegmentStart(segment) {
202
+ funcInfo.currentSegments.add(segment);
203
+ },
204
+
205
+ onUnreachableCodePathSegmentEnd(segment) {
206
+ funcInfo.currentSegments.delete(segment);
207
+ },
208
+
209
+ onCodePathSegmentStart(segment) {
210
+ funcInfo.currentSegments.add(segment);
211
+ },
212
+
213
+ onCodePathSegmentEnd(segment) {
214
+ funcInfo.currentSegments.delete(segment);
215
+ },
216
+
217
+ // Checks the return statement is valid.
218
+ ReturnStatement(node) {
219
+ if (funcInfo.shouldCheck) {
220
+ funcInfo.hasReturn = true;
221
+
222
+ // if allowImplicit: false, should also check node.argument
223
+ if (!allowImplicit && !node.argument) {
224
+ context.report({
225
+ node,
226
+ messageId: "expected",
227
+ data: {
228
+ name: astUtils.getFunctionNameWithKind(
229
+ funcInfo.node,
230
+ ),
231
+ },
232
+ });
233
+ }
234
+ }
235
+ },
236
+
237
+ // Reports a given function if the last path is reachable.
238
+ "FunctionExpression:exit": checkLastSegment,
239
+ "ArrowFunctionExpression:exit": checkLastSegment,
240
+ };
241
+ },
242
+ };
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @fileoverview Rule for disallowing require() outside of the top-level module context
3
+ * @author Jamund Ferguson
4
+ * @deprecated in ESLint v7.0.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ const ACCEPTABLE_PARENTS = new Set([
10
+ "AssignmentExpression",
11
+ "VariableDeclarator",
12
+ "MemberExpression",
13
+ "ExpressionStatement",
14
+ "CallExpression",
15
+ "ConditionalExpression",
16
+ "Program",
17
+ "VariableDeclaration",
18
+ "ChainExpression",
19
+ ]);
20
+
21
+ /**
22
+ * Finds the eslint-scope reference in the given scope.
23
+ * @param {Object} scope The scope to search.
24
+ * @param {ASTNode} node The identifier node.
25
+ * @returns {Reference|null} Returns the found reference or null if none were found.
26
+ */
27
+ function findReference(scope, node) {
28
+ const references = scope.references.filter(
29
+ reference =>
30
+ reference.identifier.range[0] === node.range[0] &&
31
+ reference.identifier.range[1] === node.range[1],
32
+ );
33
+
34
+ if (references.length === 1) {
35
+ return references[0];
36
+ }
37
+
38
+ /* c8 ignore next */
39
+ return null;
40
+ }
41
+
42
+ /**
43
+ * Checks if the given identifier node is shadowed in the given scope.
44
+ * @param {Object} scope The current scope.
45
+ * @param {ASTNode} node The identifier node to check.
46
+ * @returns {boolean} Whether or not the name is shadowed.
47
+ */
48
+ function isShadowed(scope, node) {
49
+ const reference = findReference(scope, node);
50
+
51
+ return (
52
+ reference && reference.resolved && reference.resolved.defs.length > 0
53
+ );
54
+ }
55
+
56
+ /** @type {import('../types').Rule.RuleModule} */
57
+ module.exports = {
58
+ meta: {
59
+ deprecated: {
60
+ message: "Node.js rules were moved out of ESLint core.",
61
+ url: "https://eslint.org/docs/latest/use/migrating-to-7.0.0#deprecate-node-rules",
62
+ deprecatedSince: "7.0.0",
63
+ availableUntil: "11.0.0",
64
+ replacedBy: [
65
+ {
66
+ message:
67
+ "eslint-plugin-n now maintains deprecated Node.js-related rules.",
68
+ plugin: {
69
+ name: "eslint-plugin-n",
70
+ url: "https://github.com/eslint-community/eslint-plugin-n",
71
+ },
72
+ rule: {
73
+ name: "global-require",
74
+ url: "https://github.com/eslint-community/eslint-plugin-n/tree/master/docs/rules/global-require.md",
75
+ },
76
+ },
77
+ ],
78
+ },
79
+
80
+ type: "suggestion",
81
+
82
+ docs: {
83
+ description:
84
+ "Require `require()` calls to be placed at top-level module scope",
85
+ recommended: false,
86
+ url: "https://eslint.org/docs/latest/rules/global-require",
87
+ },
88
+
89
+ schema: [],
90
+ messages: {
91
+ unexpected: "Unexpected require().",
92
+ },
93
+ },
94
+
95
+ create(context) {
96
+ const sourceCode = context.sourceCode;
97
+
98
+ return {
99
+ CallExpression(node) {
100
+ const currentScope = sourceCode.getScope(node);
101
+
102
+ if (
103
+ node.callee.name === "require" &&
104
+ !isShadowed(currentScope, node.callee)
105
+ ) {
106
+ const isGoodRequire = sourceCode
107
+ .getAncestors(node)
108
+ .every(parent => ACCEPTABLE_PARENTS.has(parent.type));
109
+
110
+ if (!isGoodRequire) {
111
+ context.report({ node, messageId: "unexpected" });
112
+ }
113
+ }
114
+ },
115
+ };
116
+ },
117
+ };
@@ -0,0 +1,268 @@
1
+ /**
2
+ * @fileoverview Rule to require grouped accessor pairs in object literals and classes
3
+ * @author Milos Djermanovic
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Typedefs
16
+ //------------------------------------------------------------------------------
17
+
18
+ /**
19
+ * Property name if it can be computed statically, otherwise the list of the tokens of the key node.
20
+ * @typedef {string|Token[]} Key
21
+ */
22
+
23
+ /**
24
+ * Accessor nodes with the same key.
25
+ * @typedef {Object} AccessorData
26
+ * @property {Key} key Accessor's key
27
+ * @property {ASTNode[]} getters List of getter nodes.
28
+ * @property {ASTNode[]} setters List of setter nodes.
29
+ */
30
+
31
+ //------------------------------------------------------------------------------
32
+ // Helpers
33
+ //------------------------------------------------------------------------------
34
+
35
+ /**
36
+ * Checks whether or not the given lists represent the equal tokens in the same order.
37
+ * Tokens are compared by their properties, not by instance.
38
+ * @param {Token[]} left First list of tokens.
39
+ * @param {Token[]} right Second list of tokens.
40
+ * @returns {boolean} `true` if the lists have same tokens.
41
+ */
42
+ function areEqualTokenLists(left, right) {
43
+ if (left.length !== right.length) {
44
+ return false;
45
+ }
46
+
47
+ for (let i = 0; i < left.length; i++) {
48
+ const leftToken = left[i],
49
+ rightToken = right[i];
50
+
51
+ if (
52
+ leftToken.type !== rightToken.type ||
53
+ leftToken.value !== rightToken.value
54
+ ) {
55
+ return false;
56
+ }
57
+ }
58
+
59
+ return true;
60
+ }
61
+
62
+ /**
63
+ * Checks whether or not the given keys are equal.
64
+ * @param {Key} left First key.
65
+ * @param {Key} right Second key.
66
+ * @returns {boolean} `true` if the keys are equal.
67
+ */
68
+ function areEqualKeys(left, right) {
69
+ if (typeof left === "string" && typeof right === "string") {
70
+ // Statically computed names.
71
+ return left === right;
72
+ }
73
+ if (Array.isArray(left) && Array.isArray(right)) {
74
+ // Token lists.
75
+ return areEqualTokenLists(left, right);
76
+ }
77
+
78
+ return false;
79
+ }
80
+
81
+ /**
82
+ * Checks whether or not a given node is of an accessor kind ('get' or 'set').
83
+ * @param {ASTNode} node A node to check.
84
+ * @returns {boolean} `true` if the node is of an accessor kind.
85
+ */
86
+ function isAccessorKind(node) {
87
+ return node.kind === "get" || node.kind === "set";
88
+ }
89
+
90
+ //------------------------------------------------------------------------------
91
+ // Rule Definition
92
+ //------------------------------------------------------------------------------
93
+
94
+ /** @type {import('../types').Rule.RuleModule} */
95
+ module.exports = {
96
+ meta: {
97
+ type: "suggestion",
98
+
99
+ defaultOptions: [
100
+ "anyOrder",
101
+ {
102
+ enforceForTSTypes: false,
103
+ },
104
+ ],
105
+
106
+ docs: {
107
+ description:
108
+ "Require grouped accessor pairs in object literals and classes",
109
+ recommended: false,
110
+ url: "https://eslint.org/docs/latest/rules/grouped-accessor-pairs",
111
+ },
112
+
113
+ schema: [
114
+ { enum: ["anyOrder", "getBeforeSet", "setBeforeGet"] },
115
+ {
116
+ type: "object",
117
+ properties: {
118
+ enforceForTSTypes: {
119
+ type: "boolean",
120
+ },
121
+ },
122
+ additionalProperties: false,
123
+ },
124
+ ],
125
+
126
+ messages: {
127
+ notGrouped:
128
+ "Accessor pair {{ formerName }} and {{ latterName }} should be grouped.",
129
+ invalidOrder:
130
+ "Expected {{ latterName }} to be before {{ formerName }}.",
131
+ },
132
+ },
133
+
134
+ create(context) {
135
+ const [order, { enforceForTSTypes }] = context.options;
136
+ const { sourceCode } = context;
137
+
138
+ /**
139
+ * Reports the given accessor pair.
140
+ * @param {string} messageId messageId to report.
141
+ * @param {ASTNode} formerNode getter/setter node that is defined before `latterNode`.
142
+ * @param {ASTNode} latterNode getter/setter node that is defined after `formerNode`.
143
+ * @returns {void}
144
+ * @private
145
+ */
146
+ function report(messageId, formerNode, latterNode) {
147
+ context.report({
148
+ node: latterNode,
149
+ messageId,
150
+ loc: astUtils.getFunctionHeadLoc(
151
+ latterNode.type !== "TSMethodSignature"
152
+ ? latterNode.value
153
+ : latterNode,
154
+ sourceCode,
155
+ ),
156
+ data: {
157
+ formerName: astUtils.getFunctionNameWithKind(
158
+ formerNode.type !== "TSMethodSignature"
159
+ ? formerNode.value
160
+ : formerNode,
161
+ ),
162
+ latterName: astUtils.getFunctionNameWithKind(
163
+ latterNode.type !== "TSMethodSignature"
164
+ ? latterNode.value
165
+ : latterNode,
166
+ ),
167
+ },
168
+ });
169
+ }
170
+
171
+ /**
172
+ * Checks accessor pairs in the given list of nodes.
173
+ * @param {ASTNode[]} nodes The list to check.
174
+ * @param {Function} shouldCheck – Predicate that returns `true` if the node should be checked.
175
+ * @returns {void}
176
+ * @private
177
+ */
178
+ function checkList(nodes, shouldCheck) {
179
+ const accessors = [];
180
+ let found = false;
181
+
182
+ for (let i = 0; i < nodes.length; i++) {
183
+ const node = nodes[i];
184
+
185
+ if (shouldCheck(node) && isAccessorKind(node)) {
186
+ // Creates a new `AccessorData` object for the given getter or setter node.
187
+ const name = astUtils.getStaticPropertyName(node);
188
+ const key =
189
+ name !== null ? name : sourceCode.getTokens(node.key);
190
+
191
+ // Merges the given `AccessorData` object into the given accessors list.
192
+ for (let j = 0; j < accessors.length; j++) {
193
+ const accessor = accessors[j];
194
+
195
+ if (areEqualKeys(accessor.key, key)) {
196
+ accessor.getters.push(
197
+ ...(node.kind === "get" ? [node] : []),
198
+ );
199
+ accessor.setters.push(
200
+ ...(node.kind === "set" ? [node] : []),
201
+ );
202
+ found = true;
203
+ break;
204
+ }
205
+ }
206
+ if (!found) {
207
+ accessors.push({
208
+ key,
209
+ getters: node.kind === "get" ? [node] : [],
210
+ setters: node.kind === "set" ? [node] : [],
211
+ });
212
+ }
213
+ found = false;
214
+ }
215
+ }
216
+
217
+ for (const { getters, setters } of accessors) {
218
+ // Don't report accessor properties that have duplicate getters or setters.
219
+ if (getters.length === 1 && setters.length === 1) {
220
+ const [getter] = getters,
221
+ [setter] = setters,
222
+ getterIndex = nodes.indexOf(getter),
223
+ setterIndex = nodes.indexOf(setter),
224
+ formerNode =
225
+ getterIndex < setterIndex ? getter : setter,
226
+ latterNode =
227
+ getterIndex < setterIndex ? setter : getter;
228
+
229
+ if (Math.abs(getterIndex - setterIndex) > 1) {
230
+ report("notGrouped", formerNode, latterNode);
231
+ } else if (
232
+ (order === "getBeforeSet" &&
233
+ getterIndex > setterIndex) ||
234
+ (order === "setBeforeGet" && getterIndex < setterIndex)
235
+ ) {
236
+ report("invalidOrder", formerNode, latterNode);
237
+ }
238
+ }
239
+ }
240
+ }
241
+
242
+ return {
243
+ ObjectExpression(node) {
244
+ checkList(node.properties, n => n.type === "Property");
245
+ },
246
+ ClassBody(node) {
247
+ checkList(
248
+ node.body,
249
+ n => n.type === "MethodDefinition" && !n.static,
250
+ );
251
+ checkList(
252
+ node.body,
253
+ n => n.type === "MethodDefinition" && n.static,
254
+ );
255
+ },
256
+ "TSTypeLiteral, TSInterfaceBody"(node) {
257
+ if (enforceForTSTypes) {
258
+ checkList(
259
+ node.type === "TSTypeLiteral"
260
+ ? node.members
261
+ : node.body,
262
+ n => n.type === "TSMethodSignature",
263
+ );
264
+ }
265
+ },
266
+ };
267
+ },
268
+ };
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @fileoverview Rule to flag for-in loops without if statements inside
3
+ * @author Nicholas C. Zakas
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Rule Definition
10
+ //------------------------------------------------------------------------------
11
+
12
+ /** @type {import('../types').Rule.RuleModule} */
13
+ module.exports = {
14
+ meta: {
15
+ type: "suggestion",
16
+
17
+ docs: {
18
+ description: "Require `for-in` loops to include an `if` statement",
19
+ recommended: false,
20
+ url: "https://eslint.org/docs/latest/rules/guard-for-in",
21
+ },
22
+
23
+ schema: [],
24
+ messages: {
25
+ wrap: "The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype.",
26
+ },
27
+ },
28
+
29
+ create(context) {
30
+ return {
31
+ ForInStatement(node) {
32
+ const body = node.body;
33
+
34
+ // empty statement
35
+ if (body.type === "EmptyStatement") {
36
+ return;
37
+ }
38
+
39
+ // if statement
40
+ if (body.type === "IfStatement") {
41
+ return;
42
+ }
43
+
44
+ // empty block
45
+ if (body.type === "BlockStatement" && body.body.length === 0) {
46
+ return;
47
+ }
48
+
49
+ // block with just if statement
50
+ if (
51
+ body.type === "BlockStatement" &&
52
+ body.body.length === 1 &&
53
+ body.body[0].type === "IfStatement"
54
+ ) {
55
+ return;
56
+ }
57
+
58
+ // block that starts with if statement
59
+ if (
60
+ body.type === "BlockStatement" &&
61
+ body.body.length >= 1 &&
62
+ body.body[0].type === "IfStatement"
63
+ ) {
64
+ const i = body.body[0];
65
+
66
+ // ... whose consequent is a continue
67
+ if (i.consequent.type === "ContinueStatement") {
68
+ return;
69
+ }
70
+
71
+ // ... whose consequent is a block that contains only a continue
72
+ if (
73
+ i.consequent.type === "BlockStatement" &&
74
+ i.consequent.body.length === 1 &&
75
+ i.consequent.body[0].type === "ContinueStatement"
76
+ ) {
77
+ return;
78
+ }
79
+ }
80
+
81
+ context.report({ node, messageId: "wrap" });
82
+ },
83
+ };
84
+ },
85
+ };