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,264 @@
1
+ /**
2
+ * @fileoverview Rule to disallow returning values from Promise executor functions
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
+ // Helpers
16
+ //------------------------------------------------------------------------------
17
+
18
+ const functionTypesToCheck = new Set([
19
+ "ArrowFunctionExpression",
20
+ "FunctionExpression",
21
+ ]);
22
+
23
+ /**
24
+ * Determines whether the given function node is used as a Promise executor.
25
+ * @param {ASTNode} node The node to check.
26
+ * @param {SourceCode} sourceCode Source code to which the node belongs.
27
+ * @returns {boolean} `true` if the node is a Promise executor.
28
+ */
29
+ function isPromiseExecutor(node, sourceCode) {
30
+ const parent = node.parent;
31
+
32
+ return (
33
+ parent.type === "NewExpression" &&
34
+ parent.arguments[0] === node &&
35
+ parent.callee.type === "Identifier" &&
36
+ parent.callee.name === "Promise" &&
37
+ sourceCode.isGlobalReference(parent.callee)
38
+ );
39
+ }
40
+
41
+ /**
42
+ * Checks if the given node is a void expression.
43
+ * @param {ASTNode} node The node to check.
44
+ * @returns {boolean} - `true` if the node is a void expression
45
+ */
46
+ function expressionIsVoid(node) {
47
+ return node.type === "UnaryExpression" && node.operator === "void";
48
+ }
49
+
50
+ /**
51
+ * Fixes the linting error by prepending "void " to the given node
52
+ * @param {Object} sourceCode context given by context.sourceCode
53
+ * @param {ASTNode} node The node to fix.
54
+ * @param {Object} fixer The fixer object provided by ESLint.
55
+ * @returns {Array<Object>} - An array of fix objects to apply to the node.
56
+ */
57
+ function voidPrependFixer(sourceCode, node, fixer) {
58
+ const requiresParens =
59
+ // prepending `void ` will fail if the node has a lower precedence than void
60
+ astUtils.getPrecedence(node) <
61
+ astUtils.getPrecedence({
62
+ type: "UnaryExpression",
63
+ operator: "void",
64
+ }) &&
65
+ // check if there are parentheses around the node to avoid redundant parentheses
66
+ !astUtils.isParenthesised(sourceCode, node);
67
+
68
+ // avoid parentheses issues
69
+ const returnOrArrowToken = sourceCode.getTokenBefore(
70
+ node,
71
+ node.parent.type === "ArrowFunctionExpression"
72
+ ? astUtils.isArrowToken
73
+ : // isReturnToken
74
+ token => token.type === "Keyword" && token.value === "return",
75
+ );
76
+
77
+ const firstToken = sourceCode.getTokenAfter(returnOrArrowToken);
78
+
79
+ const prependSpace =
80
+ // is return token, as => allows void to be adjacent
81
+ returnOrArrowToken.value === "return" &&
82
+ // If two tokens (return and "(") are adjacent
83
+ returnOrArrowToken.range[1] === firstToken.range[0];
84
+
85
+ return [
86
+ fixer.insertTextBefore(
87
+ firstToken,
88
+ `${prependSpace ? " " : ""}void ${requiresParens ? "(" : ""}`,
89
+ ),
90
+ fixer.insertTextAfter(node, requiresParens ? ")" : ""),
91
+ ];
92
+ }
93
+
94
+ /**
95
+ * Fixes the linting error by `wrapping {}` around the given node's body.
96
+ * @param {Object} sourceCode context given by context.sourceCode
97
+ * @param {ASTNode} node The node to fix.
98
+ * @param {Object} fixer The fixer object provided by ESLint.
99
+ * @returns {Array<Object>} - An array of fix objects to apply to the node.
100
+ */
101
+ function curlyWrapFixer(sourceCode, node, fixer) {
102
+ // https://github.com/eslint/eslint/pull/17282#issuecomment-1592795923
103
+ const arrowToken = sourceCode.getTokenBefore(
104
+ node.body,
105
+ astUtils.isArrowToken,
106
+ );
107
+ const firstToken = sourceCode.getTokenAfter(arrowToken);
108
+ const lastToken = sourceCode.getLastToken(node);
109
+
110
+ return [
111
+ fixer.insertTextBefore(firstToken, "{"),
112
+ fixer.insertTextAfter(lastToken, "}"),
113
+ ];
114
+ }
115
+
116
+ //------------------------------------------------------------------------------
117
+ // Rule Definition
118
+ //------------------------------------------------------------------------------
119
+
120
+ /** @type {import('../types').Rule.RuleModule} */
121
+ module.exports = {
122
+ meta: {
123
+ type: "problem",
124
+
125
+ defaultOptions: [
126
+ {
127
+ allowVoid: false,
128
+ },
129
+ ],
130
+
131
+ docs: {
132
+ description:
133
+ "Disallow returning values from Promise executor functions",
134
+ recommended: false,
135
+ url: "https://eslint.org/docs/latest/rules/no-promise-executor-return",
136
+ },
137
+
138
+ hasSuggestions: true,
139
+
140
+ schema: [
141
+ {
142
+ type: "object",
143
+ properties: {
144
+ allowVoid: {
145
+ type: "boolean",
146
+ },
147
+ },
148
+ additionalProperties: false,
149
+ },
150
+ ],
151
+
152
+ messages: {
153
+ returnsValue:
154
+ "Return values from promise executor functions cannot be read.",
155
+
156
+ // arrow and function suggestions
157
+ prependVoid: "Prepend `void` to the expression.",
158
+
159
+ // only arrow suggestions
160
+ wrapBraces: "Wrap the expression in `{}`.",
161
+ },
162
+ },
163
+
164
+ create(context) {
165
+ let funcInfo = null;
166
+ const sourceCode = context.sourceCode;
167
+ const [{ allowVoid }] = context.options;
168
+
169
+ return {
170
+ onCodePathStart(_, node) {
171
+ funcInfo = {
172
+ upper: funcInfo,
173
+ shouldCheck:
174
+ functionTypesToCheck.has(node.type) &&
175
+ isPromiseExecutor(node, sourceCode),
176
+ };
177
+
178
+ if (
179
+ // Is a Promise executor
180
+ funcInfo.shouldCheck &&
181
+ node.type === "ArrowFunctionExpression" &&
182
+ node.expression &&
183
+ // Except void
184
+ !(allowVoid && expressionIsVoid(node.body))
185
+ ) {
186
+ const suggest = [];
187
+
188
+ // prevent useless refactors
189
+ if (allowVoid) {
190
+ suggest.push({
191
+ messageId: "prependVoid",
192
+ fix(fixer) {
193
+ return voidPrependFixer(
194
+ sourceCode,
195
+ node.body,
196
+ fixer,
197
+ );
198
+ },
199
+ });
200
+ }
201
+
202
+ // Do not suggest wrapping an unnamed FunctionExpression in braces as that would be invalid syntax.
203
+ if (
204
+ !(
205
+ node.body.type === "FunctionExpression" &&
206
+ !node.body.id
207
+ )
208
+ ) {
209
+ suggest.push({
210
+ messageId: "wrapBraces",
211
+ fix(fixer) {
212
+ return curlyWrapFixer(sourceCode, node, fixer);
213
+ },
214
+ });
215
+ }
216
+
217
+ context.report({
218
+ node: node.body,
219
+ messageId: "returnsValue",
220
+ suggest,
221
+ });
222
+ }
223
+ },
224
+
225
+ onCodePathEnd() {
226
+ funcInfo = funcInfo.upper;
227
+ },
228
+
229
+ ReturnStatement(node) {
230
+ if (!(funcInfo.shouldCheck && node.argument)) {
231
+ return;
232
+ }
233
+
234
+ // node is `return <expression>`
235
+ if (!allowVoid) {
236
+ context.report({ node, messageId: "returnsValue" });
237
+ return;
238
+ }
239
+
240
+ if (expressionIsVoid(node.argument)) {
241
+ return;
242
+ }
243
+
244
+ // allowVoid && !expressionIsVoid
245
+ context.report({
246
+ node,
247
+ messageId: "returnsValue",
248
+ suggest: [
249
+ {
250
+ messageId: "prependVoid",
251
+ fix(fixer) {
252
+ return voidPrependFixer(
253
+ sourceCode,
254
+ node.argument,
255
+ fixer,
256
+ );
257
+ },
258
+ },
259
+ ],
260
+ });
261
+ },
262
+ };
263
+ },
264
+ };
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @fileoverview Rule to flag usage of __proto__ property
3
+ * @author Ilya Volodin
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const { getStaticPropertyName } = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Rule Definition
16
+ //------------------------------------------------------------------------------
17
+
18
+ /** @type {import('../types').Rule.RuleModule} */
19
+ module.exports = {
20
+ meta: {
21
+ type: "suggestion",
22
+
23
+ docs: {
24
+ description: "Disallow the use of the `__proto__` property",
25
+ recommended: false,
26
+ url: "https://eslint.org/docs/latest/rules/no-proto",
27
+ },
28
+
29
+ schema: [],
30
+
31
+ messages: {
32
+ unexpectedProto: "The '__proto__' property is deprecated.",
33
+ },
34
+ },
35
+
36
+ create(context) {
37
+ return {
38
+ MemberExpression(node) {
39
+ if (getStaticPropertyName(node) === "__proto__") {
40
+ context.report({ node, messageId: "unexpectedProto" });
41
+ }
42
+ },
43
+ };
44
+ },
45
+ };
@@ -0,0 +1,181 @@
1
+ /**
2
+ * @fileoverview Rule to disallow use of Object.prototype builtins on objects
3
+ * @author Andrew Levine
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Requirements
9
+ //------------------------------------------------------------------------------
10
+
11
+ const astUtils = require("./utils/ast-utils");
12
+
13
+ //------------------------------------------------------------------------------
14
+ // Helpers
15
+ //------------------------------------------------------------------------------
16
+
17
+ /**
18
+ * Returns true if the node or any of the objects
19
+ * to the left of it in the member/call chain is optional.
20
+ *
21
+ * e.g. `a?.b`, `a?.b.c`, `a?.()`, `a()?.()`
22
+ * @param {ASTNode} node The expression to check
23
+ * @returns {boolean} `true` if there is a short-circuiting optional `?.`
24
+ * in the same option chain to the left of this call or member expression,
25
+ * or the node itself is an optional call or member `?.`.
26
+ */
27
+ function isAfterOptional(node) {
28
+ let leftNode;
29
+
30
+ if (node.type === "MemberExpression") {
31
+ leftNode = node.object;
32
+ } else if (node.type === "CallExpression") {
33
+ leftNode = node.callee;
34
+ } else {
35
+ return false;
36
+ }
37
+ if (node.optional) {
38
+ return true;
39
+ }
40
+ return isAfterOptional(leftNode);
41
+ }
42
+
43
+ //------------------------------------------------------------------------------
44
+ // Rule Definition
45
+ //------------------------------------------------------------------------------
46
+
47
+ /** @type {import('../types').Rule.RuleModule} */
48
+ module.exports = {
49
+ meta: {
50
+ type: "problem",
51
+
52
+ docs: {
53
+ description:
54
+ "Disallow calling some `Object.prototype` methods directly on objects",
55
+ recommended: true,
56
+ url: "https://eslint.org/docs/latest/rules/no-prototype-builtins",
57
+ },
58
+
59
+ hasSuggestions: true,
60
+
61
+ schema: [],
62
+
63
+ messages: {
64
+ prototypeBuildIn:
65
+ "Do not access Object.prototype method '{{prop}}' from target object.",
66
+ callObjectPrototype: "Call Object.prototype.{{prop}} explicitly.",
67
+ },
68
+ },
69
+
70
+ create(context) {
71
+ const DISALLOWED_PROPS = new Set([
72
+ "hasOwnProperty",
73
+ "isPrototypeOf",
74
+ "propertyIsEnumerable",
75
+ ]);
76
+
77
+ /**
78
+ * Reports if a disallowed property is used in a CallExpression
79
+ * @param {ASTNode} node The CallExpression node.
80
+ * @returns {void}
81
+ */
82
+ function disallowBuiltIns(node) {
83
+ const callee = astUtils.skipChainExpression(node.callee);
84
+
85
+ if (callee.type !== "MemberExpression") {
86
+ return;
87
+ }
88
+
89
+ const propName = astUtils.getStaticPropertyName(callee);
90
+
91
+ if (propName !== null && DISALLOWED_PROPS.has(propName)) {
92
+ context.report({
93
+ messageId: "prototypeBuildIn",
94
+ loc: callee.property.loc,
95
+ data: { prop: propName },
96
+ node,
97
+ suggest: [
98
+ {
99
+ messageId: "callObjectPrototype",
100
+ data: { prop: propName },
101
+ fix(fixer) {
102
+ const sourceCode = context.sourceCode;
103
+
104
+ /*
105
+ * A call after an optional chain (e.g. a?.b.hasOwnProperty(c))
106
+ * must be fixed manually because the call can be short-circuited
107
+ */
108
+ if (isAfterOptional(node)) {
109
+ return null;
110
+ }
111
+
112
+ /*
113
+ * A call on a ChainExpression (e.g. (a?.hasOwnProperty)(c)) will trigger
114
+ * no-unsafe-optional-chaining which should be fixed before this suggestion
115
+ */
116
+ if (node.callee.type === "ChainExpression") {
117
+ return null;
118
+ }
119
+
120
+ const objectVariable =
121
+ astUtils.getVariableByName(
122
+ sourceCode.getScope(node),
123
+ "Object",
124
+ );
125
+
126
+ /*
127
+ * We can't use Object if the global Object was shadowed,
128
+ * or Object does not exist in the global scope for some reason
129
+ */
130
+ if (
131
+ !objectVariable ||
132
+ objectVariable.scope.type !== "global" ||
133
+ objectVariable.defs.length > 0
134
+ ) {
135
+ return null;
136
+ }
137
+
138
+ let objectText = sourceCode.getText(
139
+ callee.object,
140
+ );
141
+
142
+ if (
143
+ astUtils.getPrecedence(callee.object) <=
144
+ astUtils.getPrecedence({
145
+ type: "SequenceExpression",
146
+ })
147
+ ) {
148
+ objectText = `(${objectText})`;
149
+ }
150
+
151
+ const openParenToken = sourceCode.getTokenAfter(
152
+ node.callee,
153
+ astUtils.isOpeningParenToken,
154
+ );
155
+ const isEmptyParameters =
156
+ node.arguments.length === 0;
157
+ const delim = isEmptyParameters ? "" : ", ";
158
+ const fixes = [
159
+ fixer.replaceText(
160
+ callee,
161
+ `Object.prototype.${propName}.call`,
162
+ ),
163
+ fixer.insertTextAfter(
164
+ openParenToken,
165
+ objectText + delim,
166
+ ),
167
+ ];
168
+
169
+ return fixes;
170
+ },
171
+ },
172
+ ],
173
+ });
174
+ }
175
+ }
176
+
177
+ return {
178
+ CallExpression: disallowBuiltIns,
179
+ };
180
+ },
181
+ };
@@ -0,0 +1,173 @@
1
+ /**
2
+ * @fileoverview Rule to flag when the same variable is declared more then once.
3
+ * @author Ilya Volodin
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Rule Definition
16
+ //------------------------------------------------------------------------------
17
+
18
+ /** @type {import('../types').Rule.RuleModule} */
19
+ module.exports = {
20
+ meta: {
21
+ type: "suggestion",
22
+
23
+ defaultOptions: [{ builtinGlobals: true }],
24
+
25
+ docs: {
26
+ description: "Disallow variable redeclaration",
27
+ recommended: true,
28
+ url: "https://eslint.org/docs/latest/rules/no-redeclare",
29
+ },
30
+
31
+ messages: {
32
+ redeclared: "'{{id}}' is already defined.",
33
+ redeclaredAsBuiltin:
34
+ "'{{id}}' is already defined as a built-in global variable.",
35
+ redeclaredBySyntax:
36
+ "'{{id}}' is already defined by a variable declaration.",
37
+ },
38
+
39
+ schema: [
40
+ {
41
+ type: "object",
42
+ properties: {
43
+ builtinGlobals: { type: "boolean" },
44
+ },
45
+ additionalProperties: false,
46
+ },
47
+ ],
48
+ },
49
+
50
+ create(context) {
51
+ const [{ builtinGlobals }] = context.options;
52
+ const sourceCode = context.sourceCode;
53
+
54
+ /**
55
+ * Iterate declarations of a given variable.
56
+ * @param {escope.variable} variable The variable object to iterate declarations.
57
+ * @returns {IterableIterator<{type:string,node:ASTNode,loc:SourceLocation}>} The declarations.
58
+ */
59
+ function* iterateDeclarations(variable) {
60
+ if (
61
+ builtinGlobals &&
62
+ (variable.eslintImplicitGlobalSetting === "readonly" ||
63
+ variable.eslintImplicitGlobalSetting === "writable")
64
+ ) {
65
+ yield { type: "builtin" };
66
+ }
67
+
68
+ for (const id of variable.identifiers) {
69
+ yield { type: "syntax", node: id, loc: id.loc };
70
+ }
71
+
72
+ if (variable.eslintExplicitGlobalComments) {
73
+ for (const comment of variable.eslintExplicitGlobalComments) {
74
+ yield {
75
+ type: "comment",
76
+ node: comment,
77
+ loc: astUtils.getNameLocationInGlobalDirectiveComment(
78
+ sourceCode,
79
+ comment,
80
+ variable.name,
81
+ ),
82
+ };
83
+ }
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Find variables in a given scope and flag redeclared ones.
89
+ * @param {Scope} scope An eslint-scope scope object.
90
+ * @returns {void}
91
+ * @private
92
+ */
93
+ function findVariablesInScope(scope) {
94
+ for (const variable of scope.variables) {
95
+ const [declaration, ...extraDeclarations] =
96
+ iterateDeclarations(variable);
97
+
98
+ if (extraDeclarations.length === 0) {
99
+ continue;
100
+ }
101
+
102
+ /*
103
+ * If the type of a declaration is different from the type of
104
+ * the first declaration, it shows the location of the first
105
+ * declaration.
106
+ */
107
+ const detailMessageId =
108
+ declaration.type === "builtin"
109
+ ? "redeclaredAsBuiltin"
110
+ : "redeclaredBySyntax";
111
+ const data = { id: variable.name };
112
+
113
+ // Report extra declarations.
114
+ for (const { type, node, loc } of extraDeclarations) {
115
+ const messageId =
116
+ type === declaration.type
117
+ ? "redeclared"
118
+ : detailMessageId;
119
+
120
+ context.report({ node, loc, messageId, data });
121
+ }
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Find variables in the current scope.
127
+ * @param {ASTNode} node The node of the current scope.
128
+ * @returns {void}
129
+ * @private
130
+ */
131
+ function checkForBlock(node) {
132
+ const scope = sourceCode.getScope(node);
133
+
134
+ /*
135
+ * In ES5, some node type such as `BlockStatement` doesn't have that scope.
136
+ * `scope.block` is a different node in such a case.
137
+ */
138
+ if (scope.block === node) {
139
+ findVariablesInScope(scope);
140
+ }
141
+ }
142
+
143
+ return {
144
+ Program(node) {
145
+ const scope = sourceCode.getScope(node);
146
+
147
+ findVariablesInScope(scope);
148
+
149
+ // Node.js or ES modules has a special scope.
150
+ if (
151
+ scope.type === "global" &&
152
+ scope.childScopes[0] &&
153
+ // The special scope's block is the Program node.
154
+ scope.block === scope.childScopes[0].block
155
+ ) {
156
+ findVariablesInScope(scope.childScopes[0]);
157
+ }
158
+ },
159
+
160
+ FunctionDeclaration: checkForBlock,
161
+ FunctionExpression: checkForBlock,
162
+ ArrowFunctionExpression: checkForBlock,
163
+
164
+ StaticBlock: checkForBlock,
165
+
166
+ BlockStatement: checkForBlock,
167
+ ForStatement: checkForBlock,
168
+ ForInStatement: checkForBlock,
169
+ ForOfStatement: checkForBlock,
170
+ SwitchStatement: checkForBlock,
171
+ };
172
+ },
173
+ };