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,170 @@
1
+ /**
2
+ * @fileoverview Rule to flag use of implied eval via setTimeout and setInterval
3
+ * @author James Allardice
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+ const { getStaticValue } = require("@eslint-community/eslint-utils");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Rule Definition
17
+ //------------------------------------------------------------------------------
18
+
19
+ /** @type {import('../types').Rule.RuleModule} */
20
+ module.exports = {
21
+ meta: {
22
+ type: "suggestion",
23
+
24
+ docs: {
25
+ description: "Disallow the use of `eval()`-like methods",
26
+ recommended: false,
27
+ url: "https://eslint.org/docs/latest/rules/no-implied-eval",
28
+ },
29
+
30
+ schema: [],
31
+
32
+ messages: {
33
+ impliedEval:
34
+ "Implied eval. Consider passing a function instead of a string.",
35
+ execScript: "Implied eval. Do not use execScript().",
36
+ },
37
+ },
38
+
39
+ create(context) {
40
+ const GLOBAL_CANDIDATES = Object.freeze([
41
+ "global",
42
+ "window",
43
+ "globalThis",
44
+ ]);
45
+ const EVAL_LIKE_FUNC_PATTERN =
46
+ /^(?:set(?:Interval|Timeout)|execScript)$/u;
47
+ const sourceCode = context.sourceCode;
48
+
49
+ /**
50
+ * Checks whether a node is evaluated as a string or not.
51
+ * @param {ASTNode} node A node to check.
52
+ * @returns {boolean} True if the node is evaluated as a string.
53
+ */
54
+ function isEvaluatedString(node) {
55
+ if (
56
+ (node.type === "Literal" && typeof node.value === "string") ||
57
+ node.type === "TemplateLiteral"
58
+ ) {
59
+ return true;
60
+ }
61
+ if (node.type === "BinaryExpression" && node.operator === "+") {
62
+ return (
63
+ isEvaluatedString(node.left) ||
64
+ isEvaluatedString(node.right)
65
+ );
66
+ }
67
+ return false;
68
+ }
69
+
70
+ /**
71
+ * Reports if the `CallExpression` node has evaluated argument.
72
+ * @param {ASTNode} node A CallExpression to check.
73
+ * @returns {void}
74
+ */
75
+ function reportImpliedEvalCallExpression(node) {
76
+ const [firstArgument] = node.arguments;
77
+
78
+ if (firstArgument) {
79
+ const staticValue = getStaticValue(
80
+ firstArgument,
81
+ sourceCode.getScope(node),
82
+ );
83
+ const isStaticString =
84
+ staticValue && typeof staticValue.value === "string";
85
+ const isString =
86
+ isStaticString || isEvaluatedString(firstArgument);
87
+
88
+ if (isString) {
89
+ const calleeName =
90
+ node.callee.type === "Identifier"
91
+ ? node.callee.name
92
+ : astUtils.getStaticPropertyName(node.callee);
93
+ const isExecScript = calleeName === "execScript";
94
+ context.report({
95
+ node,
96
+ messageId: isExecScript ? "execScript" : "impliedEval",
97
+ });
98
+ }
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Reports calls of `implied eval` via the global references.
104
+ * @param {Variable} globalVar A global variable to check.
105
+ * @returns {void}
106
+ */
107
+ function reportImpliedEvalViaGlobal(globalVar) {
108
+ const { references, name } = globalVar;
109
+
110
+ references.forEach(ref => {
111
+ const identifier = ref.identifier;
112
+ let node = identifier.parent;
113
+
114
+ while (astUtils.isSpecificMemberAccess(node, null, name)) {
115
+ node = node.parent;
116
+ }
117
+
118
+ if (
119
+ astUtils.isSpecificMemberAccess(
120
+ node,
121
+ null,
122
+ EVAL_LIKE_FUNC_PATTERN,
123
+ )
124
+ ) {
125
+ const calleeNode =
126
+ node.parent.type === "ChainExpression"
127
+ ? node.parent
128
+ : node;
129
+ const parent = calleeNode.parent;
130
+
131
+ if (
132
+ parent.type === "CallExpression" &&
133
+ parent.callee === calleeNode
134
+ ) {
135
+ reportImpliedEvalCallExpression(parent);
136
+ }
137
+ }
138
+ });
139
+ }
140
+
141
+ //--------------------------------------------------------------------------
142
+ // Public
143
+ //--------------------------------------------------------------------------
144
+
145
+ return {
146
+ CallExpression(node) {
147
+ if (
148
+ astUtils.isSpecificId(
149
+ node.callee,
150
+ EVAL_LIKE_FUNC_PATTERN,
151
+ ) &&
152
+ sourceCode.isGlobalReference(node.callee)
153
+ ) {
154
+ reportImpliedEvalCallExpression(node);
155
+ }
156
+ },
157
+ "Program:exit"(node) {
158
+ const globalScope = sourceCode.getScope(node);
159
+
160
+ GLOBAL_CANDIDATES.map(candidate =>
161
+ astUtils.getVariableByName(globalScope, candidate),
162
+ )
163
+ .filter(
164
+ globalVar => !!globalVar && globalVar.defs.length === 0,
165
+ )
166
+ .forEach(reportImpliedEvalViaGlobal);
167
+ },
168
+ };
169
+ },
170
+ };
@@ -0,0 +1,227 @@
1
+ /**
2
+ * @fileoverview Rule to flag updates of imported bindings.
3
+ * @author Toru Nagashima <https://github.com/mysticatea>
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Helpers
10
+ //------------------------------------------------------------------------------
11
+
12
+ const { findVariable } = require("@eslint-community/eslint-utils");
13
+ const astUtils = require("./utils/ast-utils");
14
+
15
+ const WellKnownMutationFunctions = {
16
+ Object: /^(?:assign|definePropert(?:y|ies)|freeze|setPrototypeOf)$/u,
17
+ Reflect: /^(?:(?:define|delete)Property|set(?:PrototypeOf)?)$/u,
18
+ };
19
+
20
+ /**
21
+ * Check if a given node is LHS of an assignment node.
22
+ * @param {ASTNode} node The node to check.
23
+ * @returns {boolean} `true` if the node is LHS.
24
+ */
25
+ function isAssignmentLeft(node) {
26
+ const { parent } = node;
27
+
28
+ return (
29
+ (parent.type === "AssignmentExpression" && parent.left === node) ||
30
+ // Destructuring assignments
31
+ parent.type === "ArrayPattern" ||
32
+ (parent.type === "Property" &&
33
+ parent.value === node &&
34
+ parent.parent.type === "ObjectPattern") ||
35
+ parent.type === "RestElement" ||
36
+ (parent.type === "AssignmentPattern" && parent.left === node)
37
+ );
38
+ }
39
+
40
+ /**
41
+ * Check if a given node is the operand of mutation unary operator.
42
+ * @param {ASTNode} node The node to check.
43
+ * @returns {boolean} `true` if the node is the operand of mutation unary operator.
44
+ */
45
+ function isOperandOfMutationUnaryOperator(node) {
46
+ const argumentNode =
47
+ node.parent.type === "ChainExpression" ? node.parent : node;
48
+ const { parent } = argumentNode;
49
+
50
+ return (
51
+ (parent.type === "UpdateExpression" &&
52
+ parent.argument === argumentNode) ||
53
+ (parent.type === "UnaryExpression" &&
54
+ parent.operator === "delete" &&
55
+ parent.argument === argumentNode)
56
+ );
57
+ }
58
+
59
+ /**
60
+ * Check if a given node is the iteration variable of `for-in`/`for-of` syntax.
61
+ * @param {ASTNode} node The node to check.
62
+ * @returns {boolean} `true` if the node is the iteration variable.
63
+ */
64
+ function isIterationVariable(node) {
65
+ const { parent } = node;
66
+
67
+ return (
68
+ (parent.type === "ForInStatement" && parent.left === node) ||
69
+ (parent.type === "ForOfStatement" && parent.left === node)
70
+ );
71
+ }
72
+
73
+ /**
74
+ * Check if a given node is at the first argument of a well-known mutation function.
75
+ * - `Object.assign`
76
+ * - `Object.defineProperty`
77
+ * - `Object.defineProperties`
78
+ * - `Object.freeze`
79
+ * - `Object.setPrototypeOf`
80
+ * - `Reflect.defineProperty`
81
+ * - `Reflect.deleteProperty`
82
+ * - `Reflect.set`
83
+ * - `Reflect.setPrototypeOf`
84
+ * @param {ASTNode} node The node to check.
85
+ * @param {Scope} scope A `escope.Scope` object to find variable (whichever).
86
+ * @returns {boolean} `true` if the node is at the first argument of a well-known mutation function.
87
+ */
88
+ function isArgumentOfWellKnownMutationFunction(node, scope) {
89
+ const { parent } = node;
90
+
91
+ if (parent.type !== "CallExpression" || parent.arguments[0] !== node) {
92
+ return false;
93
+ }
94
+ const callee = astUtils.skipChainExpression(parent.callee);
95
+
96
+ if (
97
+ !astUtils.isSpecificMemberAccess(
98
+ callee,
99
+ "Object",
100
+ WellKnownMutationFunctions.Object,
101
+ ) &&
102
+ !astUtils.isSpecificMemberAccess(
103
+ callee,
104
+ "Reflect",
105
+ WellKnownMutationFunctions.Reflect,
106
+ )
107
+ ) {
108
+ return false;
109
+ }
110
+ const variable = findVariable(scope, callee.object);
111
+
112
+ return variable !== null && variable.scope.type === "global";
113
+ }
114
+
115
+ /**
116
+ * Check if the identifier node is placed at to update members.
117
+ * @param {ASTNode} id The Identifier node to check.
118
+ * @param {Scope} scope A `escope.Scope` object to find variable (whichever).
119
+ * @returns {boolean} `true` if the member of `id` was updated.
120
+ */
121
+ function isMemberWrite(id, scope) {
122
+ const { parent } = id;
123
+
124
+ return (
125
+ (parent.type === "MemberExpression" &&
126
+ parent.object === id &&
127
+ (isAssignmentLeft(parent) ||
128
+ isOperandOfMutationUnaryOperator(parent) ||
129
+ isIterationVariable(parent))) ||
130
+ isArgumentOfWellKnownMutationFunction(id, scope)
131
+ );
132
+ }
133
+
134
+ /**
135
+ * Get the mutation node.
136
+ * @param {ASTNode} id The Identifier node to get.
137
+ * @returns {ASTNode} The mutation node.
138
+ */
139
+ function getWriteNode(id) {
140
+ let node = id.parent;
141
+
142
+ while (
143
+ node &&
144
+ node.type !== "AssignmentExpression" &&
145
+ node.type !== "UpdateExpression" &&
146
+ node.type !== "UnaryExpression" &&
147
+ node.type !== "CallExpression" &&
148
+ node.type !== "ForInStatement" &&
149
+ node.type !== "ForOfStatement"
150
+ ) {
151
+ node = node.parent;
152
+ }
153
+
154
+ return node || id;
155
+ }
156
+
157
+ //------------------------------------------------------------------------------
158
+ // Rule Definition
159
+ //------------------------------------------------------------------------------
160
+
161
+ /** @type {import('../types').Rule.RuleModule} */
162
+ module.exports = {
163
+ meta: {
164
+ type: "problem",
165
+
166
+ docs: {
167
+ description: "Disallow assigning to imported bindings",
168
+ recommended: true,
169
+ url: "https://eslint.org/docs/latest/rules/no-import-assign",
170
+ },
171
+
172
+ schema: [],
173
+
174
+ messages: {
175
+ readonly: "'{{name}}' is read-only.",
176
+ readonlyMember: "The members of '{{name}}' are read-only.",
177
+ },
178
+ },
179
+
180
+ create(context) {
181
+ const sourceCode = context.sourceCode;
182
+
183
+ return {
184
+ ImportDeclaration(node) {
185
+ const scope = sourceCode.getScope(node);
186
+
187
+ for (const variable of sourceCode.getDeclaredVariables(node)) {
188
+ const shouldCheckMembers = variable.defs.some(
189
+ d => d.node.type === "ImportNamespaceSpecifier",
190
+ );
191
+ let prevIdNode = null;
192
+
193
+ for (const reference of variable.references) {
194
+ const idNode = reference.identifier;
195
+
196
+ /*
197
+ * AssignmentPattern (e.g. `[a = 0] = b`) makes two write
198
+ * references for the same identifier. This should skip
199
+ * the one of the two in order to prevent redundant reports.
200
+ */
201
+ if (idNode === prevIdNode) {
202
+ continue;
203
+ }
204
+ prevIdNode = idNode;
205
+
206
+ if (reference.isWrite()) {
207
+ context.report({
208
+ node: getWriteNode(idNode),
209
+ messageId: "readonly",
210
+ data: { name: idNode.name },
211
+ });
212
+ } else if (
213
+ shouldCheckMembers &&
214
+ isMemberWrite(idNode, scope)
215
+ ) {
216
+ context.report({
217
+ node: getWriteNode(idNode),
218
+ messageId: "readonlyMember",
219
+ data: { name: idNode.name },
220
+ });
221
+ }
222
+ }
223
+ }
224
+ },
225
+ };
226
+ },
227
+ };
@@ -0,0 +1,115 @@
1
+ /**
2
+ * @fileoverview Enforces or disallows inline comments.
3
+ * @author Greg Cochard
4
+ */
5
+ "use strict";
6
+
7
+ const astUtils = require("./utils/ast-utils");
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Rule Definition
11
+ //------------------------------------------------------------------------------
12
+
13
+ /** @type {import('../types').Rule.RuleModule} */
14
+ module.exports = {
15
+ meta: {
16
+ type: "suggestion",
17
+
18
+ defaultOptions: [{}],
19
+
20
+ docs: {
21
+ description: "Disallow inline comments after code",
22
+ recommended: false,
23
+ frozen: true,
24
+ url: "https://eslint.org/docs/latest/rules/no-inline-comments",
25
+ },
26
+
27
+ schema: [
28
+ {
29
+ type: "object",
30
+ properties: {
31
+ ignorePattern: {
32
+ type: "string",
33
+ },
34
+ },
35
+ additionalProperties: false,
36
+ },
37
+ ],
38
+
39
+ messages: {
40
+ unexpectedInlineComment: "Unexpected comment inline with code.",
41
+ },
42
+ },
43
+
44
+ create(context) {
45
+ const sourceCode = context.sourceCode;
46
+ const [{ ignorePattern }] = context.options;
47
+ const customIgnoreRegExp =
48
+ ignorePattern && new RegExp(ignorePattern, "u");
49
+
50
+ /**
51
+ * Will check that comments are not on lines starting with or ending with code
52
+ * @param {ASTNode} node The comment node to check
53
+ * @private
54
+ * @returns {void}
55
+ */
56
+ function testCodeAroundComment(node) {
57
+ const startLine = String(sourceCode.lines[node.loc.start.line - 1]),
58
+ endLine = String(sourceCode.lines[node.loc.end.line - 1]),
59
+ preamble = startLine.slice(0, node.loc.start.column).trim(),
60
+ postamble = endLine.slice(node.loc.end.column).trim(),
61
+ isPreambleEmpty = !preamble,
62
+ isPostambleEmpty = !postamble;
63
+
64
+ // Nothing on both sides
65
+ if (isPreambleEmpty && isPostambleEmpty) {
66
+ return;
67
+ }
68
+
69
+ // Matches the ignore pattern
70
+ if (customIgnoreRegExp && customIgnoreRegExp.test(node.value)) {
71
+ return;
72
+ }
73
+
74
+ // JSX Exception
75
+ if (
76
+ (isPreambleEmpty || preamble === "{") &&
77
+ (isPostambleEmpty || postamble === "}")
78
+ ) {
79
+ const enclosingNode = sourceCode.getNodeByRangeIndex(
80
+ node.range[0],
81
+ );
82
+
83
+ if (
84
+ enclosingNode &&
85
+ enclosingNode.type === "JSXEmptyExpression"
86
+ ) {
87
+ return;
88
+ }
89
+ }
90
+
91
+ // Don't report ESLint directive comments
92
+ if (astUtils.isDirectiveComment(node)) {
93
+ return;
94
+ }
95
+
96
+ context.report({
97
+ node,
98
+ messageId: "unexpectedInlineComment",
99
+ });
100
+ }
101
+
102
+ //--------------------------------------------------------------------------
103
+ // Public
104
+ //--------------------------------------------------------------------------
105
+
106
+ return {
107
+ Program() {
108
+ sourceCode
109
+ .getAllComments()
110
+ .filter(token => token.type !== "Shebang")
111
+ .forEach(testCodeAroundComment);
112
+ },
113
+ };
114
+ },
115
+ };
@@ -0,0 +1,147 @@
1
+ /**
2
+ * @fileoverview Rule to enforce declarations in program or function body root.
3
+ * @author Brandon Mills
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
+ const validParent = new Set([
19
+ "Program",
20
+ "StaticBlock",
21
+ "ExportNamedDeclaration",
22
+ "ExportDefaultDeclaration",
23
+ ]);
24
+ const validBlockStatementParent = new Set([
25
+ "FunctionDeclaration",
26
+ "FunctionExpression",
27
+ "ArrowFunctionExpression",
28
+ ]);
29
+
30
+ /**
31
+ * Finds the nearest enclosing context where this rule allows declarations and returns its description.
32
+ * @param {ASTNode} node Node to search from.
33
+ * @returns {string} Description. One of "program", "function body", "class static block body".
34
+ */
35
+ function getAllowedBodyDescription(node) {
36
+ let { parent } = node;
37
+
38
+ while (parent) {
39
+ if (parent.type === "StaticBlock") {
40
+ return "class static block body";
41
+ }
42
+
43
+ if (astUtils.isFunction(parent)) {
44
+ return "function body";
45
+ }
46
+
47
+ ({ parent } = parent);
48
+ }
49
+
50
+ return "program";
51
+ }
52
+
53
+ /** @type {import('../types').Rule.RuleModule} */
54
+ module.exports = {
55
+ meta: {
56
+ type: "problem",
57
+
58
+ defaultOptions: ["functions", { blockScopedFunctions: "allow" }],
59
+
60
+ docs: {
61
+ description:
62
+ "Disallow variable or `function` declarations in nested blocks",
63
+ recommended: false,
64
+ url: "https://eslint.org/docs/latest/rules/no-inner-declarations",
65
+ },
66
+
67
+ schema: [
68
+ {
69
+ enum: ["functions", "both"],
70
+ },
71
+ {
72
+ type: "object",
73
+ properties: {
74
+ blockScopedFunctions: {
75
+ enum: ["allow", "disallow"],
76
+ },
77
+ },
78
+ additionalProperties: false,
79
+ },
80
+ ],
81
+
82
+ messages: {
83
+ moveDeclToRoot: "Move {{type}} declaration to {{body}} root.",
84
+ },
85
+ },
86
+
87
+ create(context) {
88
+ const both = context.options[0] === "both";
89
+ const { blockScopedFunctions } = context.options[1];
90
+
91
+ const sourceCode = context.sourceCode;
92
+ const ecmaVersion = context.languageOptions.ecmaVersion;
93
+
94
+ /**
95
+ * Ensure that a given node is at a program or function body's root.
96
+ * @param {ASTNode} node Declaration node to check.
97
+ * @returns {void}
98
+ */
99
+ function check(node) {
100
+ const parent = node.parent;
101
+
102
+ if (
103
+ parent.type === "BlockStatement" &&
104
+ validBlockStatementParent.has(parent.parent.type)
105
+ ) {
106
+ return;
107
+ }
108
+
109
+ if (validParent.has(parent.type)) {
110
+ return;
111
+ }
112
+
113
+ context.report({
114
+ node,
115
+ messageId: "moveDeclToRoot",
116
+ data: {
117
+ type:
118
+ node.type === "FunctionDeclaration"
119
+ ? "function"
120
+ : "variable",
121
+ body: getAllowedBodyDescription(node),
122
+ },
123
+ });
124
+ }
125
+
126
+ return {
127
+ FunctionDeclaration(node) {
128
+ const isInStrictCode = sourceCode.getScope(node).upper.isStrict;
129
+
130
+ if (
131
+ blockScopedFunctions === "allow" &&
132
+ ecmaVersion >= 2015 &&
133
+ isInStrictCode
134
+ ) {
135
+ return;
136
+ }
137
+
138
+ check(node);
139
+ },
140
+ VariableDeclaration(node) {
141
+ if (both && node.kind === "var") {
142
+ check(node);
143
+ }
144
+ },
145
+ };
146
+ },
147
+ };