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,295 @@
1
+ /**
2
+ * @fileoverview Rule to flag use of eval() statement
3
+ * @author Nicholas C. Zakas
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 candidatesOfGlobalObject = Object.freeze([
19
+ "global",
20
+ "window",
21
+ "globalThis",
22
+ ]);
23
+
24
+ /**
25
+ * Checks a given node is a MemberExpression node which has the specified name's
26
+ * property.
27
+ * @param {ASTNode} node A node to check.
28
+ * @param {string} name A name to check.
29
+ * @returns {boolean} `true` if the node is a MemberExpression node which has
30
+ * the specified name's property
31
+ */
32
+ function isMember(node, name) {
33
+ return astUtils.isSpecificMemberAccess(node, null, name);
34
+ }
35
+
36
+ //------------------------------------------------------------------------------
37
+ // Rule Definition
38
+ //------------------------------------------------------------------------------
39
+
40
+ /** @type {import('../types').Rule.RuleModule} */
41
+ module.exports = {
42
+ meta: {
43
+ type: "suggestion",
44
+
45
+ defaultOptions: [
46
+ {
47
+ allowIndirect: false,
48
+ },
49
+ ],
50
+
51
+ docs: {
52
+ description: "Disallow the use of `eval()`",
53
+ recommended: false,
54
+ url: "https://eslint.org/docs/latest/rules/no-eval",
55
+ },
56
+
57
+ schema: [
58
+ {
59
+ type: "object",
60
+ properties: {
61
+ allowIndirect: { type: "boolean" },
62
+ },
63
+ additionalProperties: false,
64
+ },
65
+ ],
66
+
67
+ messages: {
68
+ unexpected: "`eval` can be harmful.",
69
+ },
70
+ },
71
+
72
+ create(context) {
73
+ const [{ allowIndirect }] = context.options;
74
+ const sourceCode = context.sourceCode;
75
+ let funcInfo = null;
76
+
77
+ /**
78
+ * Pushes a `this` scope (non-arrow function, class static block, or class field initializer) information to the stack.
79
+ * Top-level scopes are handled separately.
80
+ *
81
+ * This is used in order to check whether or not `this` binding is a
82
+ * reference to the global object.
83
+ * @param {ASTNode} node A node of the scope.
84
+ * For functions, this is one of FunctionDeclaration, FunctionExpression.
85
+ * For class static blocks, this is StaticBlock.
86
+ * For class field initializers, this can be any node that is PropertyDefinition#value.
87
+ * @returns {void}
88
+ */
89
+ function enterThisScope(node) {
90
+ const strict = sourceCode.getScope(node).isStrict;
91
+
92
+ funcInfo = {
93
+ upper: funcInfo,
94
+ node,
95
+ strict,
96
+ isTopLevelOfScript: false,
97
+ defaultThis: false,
98
+ initialized: strict,
99
+ };
100
+ }
101
+
102
+ /**
103
+ * Pops a variable scope from the stack.
104
+ * @returns {void}
105
+ */
106
+ function exitThisScope() {
107
+ funcInfo = funcInfo.upper;
108
+ }
109
+
110
+ /**
111
+ * Reports a given node.
112
+ *
113
+ * `node` is `Identifier` or `MemberExpression`.
114
+ * The parent of `node` might be `CallExpression`.
115
+ *
116
+ * The location of the report is always `eval` `Identifier` (or possibly
117
+ * `Literal`). The type of the report is `CallExpression` if the parent is
118
+ * `CallExpression`. Otherwise, it's the given node type.
119
+ * @param {ASTNode} node A node to report.
120
+ * @returns {void}
121
+ */
122
+ function report(node) {
123
+ const parent = node.parent;
124
+ const locationNode =
125
+ node.type === "MemberExpression" ? node.property : node;
126
+
127
+ const reportNode =
128
+ parent.type === "CallExpression" && parent.callee === node
129
+ ? parent
130
+ : node;
131
+
132
+ context.report({
133
+ node: reportNode,
134
+ loc: locationNode.loc,
135
+ messageId: "unexpected",
136
+ });
137
+ }
138
+
139
+ /**
140
+ * Reports accesses of `eval` via the global object.
141
+ * @param {eslint-scope.Scope} globalScope The global scope.
142
+ * @returns {void}
143
+ */
144
+ function reportAccessingEvalViaGlobalObject(globalScope) {
145
+ for (let i = 0; i < candidatesOfGlobalObject.length; ++i) {
146
+ const name = candidatesOfGlobalObject[i];
147
+ const variable = astUtils.getVariableByName(globalScope, name);
148
+
149
+ if (!variable) {
150
+ continue;
151
+ }
152
+
153
+ const references = variable.references;
154
+
155
+ for (let j = 0; j < references.length; ++j) {
156
+ const identifier = references[j].identifier;
157
+ let node = identifier.parent;
158
+
159
+ // To detect code like `window.window.eval`.
160
+ while (isMember(node, name)) {
161
+ node = node.parent;
162
+ }
163
+
164
+ // Reports.
165
+ if (isMember(node, "eval")) {
166
+ report(node);
167
+ }
168
+ }
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Reports all accesses of `eval` (excludes direct calls to eval).
174
+ * @param {eslint-scope.Scope} globalScope The global scope.
175
+ * @returns {void}
176
+ */
177
+ function reportAccessingEval(globalScope) {
178
+ const variable = astUtils.getVariableByName(globalScope, "eval");
179
+
180
+ if (!variable) {
181
+ return;
182
+ }
183
+
184
+ const references = variable.references;
185
+
186
+ for (let i = 0; i < references.length; ++i) {
187
+ const reference = references[i];
188
+ const id = reference.identifier;
189
+
190
+ if (id.name === "eval" && !astUtils.isCallee(id)) {
191
+ // Is accessing to eval (excludes direct calls to eval)
192
+ report(id);
193
+ }
194
+ }
195
+ }
196
+
197
+ if (allowIndirect) {
198
+ // Checks only direct calls to eval. It's simple!
199
+ return {
200
+ "CallExpression:exit"(node) {
201
+ const callee = node.callee;
202
+
203
+ /*
204
+ * Optional call (`eval?.("code")`) is not direct eval.
205
+ * The direct eval is only step 6.a.vi of https://tc39.es/ecma262/#sec-function-calls-runtime-semantics-evaluation
206
+ * But the optional call is https://tc39.es/ecma262/#sec-optional-chaining-chain-evaluation
207
+ */
208
+ if (
209
+ !node.optional &&
210
+ astUtils.isSpecificId(callee, "eval")
211
+ ) {
212
+ report(callee);
213
+ }
214
+ },
215
+ };
216
+ }
217
+
218
+ return {
219
+ "CallExpression:exit"(node) {
220
+ const callee = node.callee;
221
+
222
+ if (astUtils.isSpecificId(callee, "eval")) {
223
+ report(callee);
224
+ }
225
+ },
226
+
227
+ Program(node) {
228
+ const scope = sourceCode.getScope(node),
229
+ features =
230
+ context.languageOptions.parserOptions.ecmaFeatures ||
231
+ {},
232
+ strict =
233
+ scope.isStrict ||
234
+ node.sourceType === "module" ||
235
+ (features.globalReturn &&
236
+ scope.childScopes[0].isStrict),
237
+ isTopLevelOfScript =
238
+ node.sourceType !== "module" && !features.globalReturn;
239
+
240
+ funcInfo = {
241
+ upper: null,
242
+ node,
243
+ strict,
244
+ isTopLevelOfScript,
245
+ defaultThis: true,
246
+ initialized: true,
247
+ };
248
+ },
249
+
250
+ "Program:exit"(node) {
251
+ const globalScope = sourceCode.getScope(node);
252
+
253
+ exitThisScope();
254
+ reportAccessingEval(globalScope);
255
+ reportAccessingEvalViaGlobalObject(globalScope);
256
+ },
257
+
258
+ FunctionDeclaration: enterThisScope,
259
+ "FunctionDeclaration:exit": exitThisScope,
260
+ FunctionExpression: enterThisScope,
261
+ "FunctionExpression:exit": exitThisScope,
262
+ "PropertyDefinition > *.value": enterThisScope,
263
+ "PropertyDefinition > *.value:exit": exitThisScope,
264
+ StaticBlock: enterThisScope,
265
+ "StaticBlock:exit": exitThisScope,
266
+
267
+ ThisExpression(node) {
268
+ if (!isMember(node.parent, "eval")) {
269
+ return;
270
+ }
271
+
272
+ /*
273
+ * `this.eval` is found.
274
+ * Checks whether or not the value of `this` is the global object.
275
+ */
276
+ if (!funcInfo.initialized) {
277
+ funcInfo.initialized = true;
278
+ funcInfo.defaultThis = astUtils.isDefaultThisBinding(
279
+ funcInfo.node,
280
+ sourceCode,
281
+ );
282
+ }
283
+
284
+ // `this` at the top level of scripts always refers to the global object
285
+ if (
286
+ funcInfo.isTopLevelOfScript ||
287
+ (!funcInfo.strict && funcInfo.defaultThis)
288
+ ) {
289
+ // `this.eval` is possible built-in `eval`.
290
+ report(node.parent);
291
+ }
292
+ },
293
+ };
294
+ },
295
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @fileoverview Rule to flag assignment of the exception parameter
3
+ * @author Stephen Murray <spmurrayzzz>
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const astUtils = require("./utils/ast-utils");
9
+
10
+ //------------------------------------------------------------------------------
11
+ // Rule Definition
12
+ //------------------------------------------------------------------------------
13
+
14
+ /** @type {import('../types').Rule.RuleModule} */
15
+ module.exports = {
16
+ meta: {
17
+ type: "problem",
18
+
19
+ docs: {
20
+ description: "Disallow reassigning exceptions in `catch` clauses",
21
+ recommended: true,
22
+ url: "https://eslint.org/docs/latest/rules/no-ex-assign",
23
+ },
24
+
25
+ schema: [],
26
+
27
+ messages: {
28
+ unexpected: "Do not assign to the exception parameter.",
29
+ },
30
+ },
31
+
32
+ create(context) {
33
+ const sourceCode = context.sourceCode;
34
+
35
+ /**
36
+ * Finds and reports references that are non initializer and writable.
37
+ * @param {Variable} variable A variable to check.
38
+ * @returns {void}
39
+ */
40
+ function checkVariable(variable) {
41
+ astUtils
42
+ .getModifyingReferences(variable.references)
43
+ .forEach(reference => {
44
+ context.report({
45
+ node: reference.identifier,
46
+ messageId: "unexpected",
47
+ });
48
+ });
49
+ }
50
+
51
+ return {
52
+ CatchClause(node) {
53
+ sourceCode.getDeclaredVariables(node).forEach(checkVariable);
54
+ },
55
+ };
56
+ },
57
+ };
@@ -0,0 +1,180 @@
1
+ /**
2
+ * @fileoverview Rule to flag adding properties to native object's prototypes.
3
+ * @author David Nelson
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: [{ exceptions: [] }],
24
+
25
+ docs: {
26
+ description: "Disallow extending native types",
27
+ recommended: false,
28
+ url: "https://eslint.org/docs/latest/rules/no-extend-native",
29
+ },
30
+
31
+ schema: [
32
+ {
33
+ type: "object",
34
+ properties: {
35
+ exceptions: {
36
+ type: "array",
37
+ items: {
38
+ type: "string",
39
+ },
40
+ uniqueItems: true,
41
+ },
42
+ },
43
+ additionalProperties: false,
44
+ },
45
+ ],
46
+
47
+ messages: {
48
+ unexpected:
49
+ "{{builtin}} prototype is read only, properties should not be added.",
50
+ },
51
+ },
52
+
53
+ create(context) {
54
+ const sourceCode = context.sourceCode;
55
+ const exceptions = new Set(context.options[0].exceptions);
56
+ const modifiedBuiltins = new Set(
57
+ Object.keys(astUtils.ECMASCRIPT_GLOBALS)
58
+ .filter(builtin => builtin[0].toUpperCase() === builtin[0])
59
+ .filter(builtin => !exceptions.has(builtin)),
60
+ );
61
+
62
+ /**
63
+ * Reports a lint error for the given node.
64
+ * @param {ASTNode} node The node to report.
65
+ * @param {string} builtin The name of the native builtin being extended.
66
+ * @returns {void}
67
+ */
68
+ function reportNode(node, builtin) {
69
+ context.report({
70
+ node,
71
+ messageId: "unexpected",
72
+ data: {
73
+ builtin,
74
+ },
75
+ });
76
+ }
77
+
78
+ /**
79
+ * Check to see if the `prototype` property of the given object
80
+ * identifier node is being accessed.
81
+ * @param {ASTNode} identifierNode The Identifier representing the object
82
+ * to check.
83
+ * @returns {boolean} True if the identifier is the object of a
84
+ * MemberExpression and its `prototype` property is being accessed,
85
+ * false otherwise.
86
+ */
87
+ function isPrototypePropertyAccessed(identifierNode) {
88
+ return Boolean(
89
+ identifierNode &&
90
+ identifierNode.parent &&
91
+ identifierNode.parent.type === "MemberExpression" &&
92
+ identifierNode.parent.object === identifierNode &&
93
+ astUtils.getStaticPropertyName(identifierNode.parent) ===
94
+ "prototype",
95
+ );
96
+ }
97
+
98
+ /**
99
+ * Check if it's an assignment to the property of the given node.
100
+ * Example: `*.prop = 0` // the `*` is the given node.
101
+ * @param {ASTNode} node The node to check.
102
+ * @returns {boolean} True if an assignment to the property of the node.
103
+ */
104
+ function isAssigningToPropertyOf(node) {
105
+ return (
106
+ node.parent.type === "MemberExpression" &&
107
+ node.parent.object === node &&
108
+ node.parent.parent.type === "AssignmentExpression" &&
109
+ node.parent.parent.left === node.parent
110
+ );
111
+ }
112
+
113
+ /**
114
+ * Checks if the given node is at the first argument of the method call of `Object.defineProperty()` or `Object.defineProperties()`.
115
+ * @param {ASTNode} node The node to check.
116
+ * @returns {boolean} True if the node is at the first argument of the method call of `Object.defineProperty()` or `Object.defineProperties()`.
117
+ */
118
+ function isInDefinePropertyCall(node) {
119
+ return (
120
+ node.parent.type === "CallExpression" &&
121
+ node.parent.arguments[0] === node &&
122
+ astUtils.isSpecificMemberAccess(
123
+ node.parent.callee,
124
+ "Object",
125
+ /^definePropert(?:y|ies)$/u,
126
+ )
127
+ );
128
+ }
129
+
130
+ /**
131
+ * Check to see if object prototype access is part of a prototype
132
+ * extension. There are three ways a prototype can be extended:
133
+ * 1. Assignment to prototype property (Object.prototype.foo = 1)
134
+ * 2. Object.defineProperty()/Object.defineProperties() on a prototype
135
+ * If prototype extension is detected, report the AssignmentExpression
136
+ * or CallExpression node.
137
+ * @param {ASTNode} identifierNode The Identifier representing the object
138
+ * which prototype is being accessed and possibly extended.
139
+ * @returns {void}
140
+ */
141
+ function checkAndReportPrototypeExtension(identifierNode) {
142
+ if (!isPrototypePropertyAccessed(identifierNode)) {
143
+ return; // This is not `*.prototype` access.
144
+ }
145
+
146
+ /*
147
+ * `identifierNode.parent` is a MemberExpression `*.prototype`.
148
+ * If it's an optional member access, it may be wrapped by a `ChainExpression` node.
149
+ */
150
+ const prototypeNode =
151
+ identifierNode.parent.parent.type === "ChainExpression"
152
+ ? identifierNode.parent.parent
153
+ : identifierNode.parent;
154
+
155
+ if (isAssigningToPropertyOf(prototypeNode)) {
156
+ // `*.prototype` -> MemberExpression -> AssignmentExpression
157
+ reportNode(prototypeNode.parent.parent, identifierNode.name);
158
+ } else if (isInDefinePropertyCall(prototypeNode)) {
159
+ // `*.prototype` -> CallExpression
160
+ reportNode(prototypeNode.parent, identifierNode.name);
161
+ }
162
+ }
163
+
164
+ return {
165
+ "Program:exit"(node) {
166
+ const globalScope = sourceCode.getScope(node);
167
+
168
+ modifiedBuiltins.forEach(builtin => {
169
+ const builtinVar = globalScope.set.get(builtin);
170
+
171
+ if (builtinVar && builtinVar.references) {
172
+ builtinVar.references
173
+ .map(ref => ref.identifier)
174
+ .forEach(checkAndReportPrototypeExtension);
175
+ }
176
+ });
177
+ },
178
+ };
179
+ },
180
+ };