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,416 @@
1
+ /**
2
+ * @fileoverview A rule to choose between single and double quote marks
3
+ * @author Matt DuVall <http://www.mattduvall.com/>, Brandon Payton
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Requirements
11
+ //------------------------------------------------------------------------------
12
+
13
+ const astUtils = require("./utils/ast-utils");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Constants
17
+ //------------------------------------------------------------------------------
18
+
19
+ const QUOTE_SETTINGS = {
20
+ double: {
21
+ quote: '"',
22
+ alternateQuote: "'",
23
+ description: "doublequote",
24
+ },
25
+ single: {
26
+ quote: "'",
27
+ alternateQuote: '"',
28
+ description: "singlequote",
29
+ },
30
+ backtick: {
31
+ quote: "`",
32
+ alternateQuote: '"',
33
+ description: "backtick",
34
+ },
35
+ };
36
+
37
+ // An unescaped newline is a newline preceded by an even number of backslashes.
38
+ const UNESCAPED_LINEBREAK_PATTERN = new RegExp(
39
+ String.raw`(^|[^\\])(\\\\)*[${Array.from(astUtils.LINEBREAKS).join("")}]`,
40
+ "u",
41
+ );
42
+
43
+ /**
44
+ * Switches quoting of javascript string between ' " and `
45
+ * escaping and unescaping as necessary.
46
+ * Only escaping of the minimal set of characters is changed.
47
+ * Note: escaping of newlines when switching from backtick to other quotes is not handled.
48
+ * @param {string} str A string to convert.
49
+ * @returns {string} The string with changed quotes.
50
+ * @private
51
+ */
52
+ QUOTE_SETTINGS.double.convert =
53
+ QUOTE_SETTINGS.single.convert =
54
+ QUOTE_SETTINGS.backtick.convert =
55
+ function (str) {
56
+ const newQuote = this.quote;
57
+ const oldQuote = str[0];
58
+
59
+ if (newQuote === oldQuote) {
60
+ return str;
61
+ }
62
+ return (
63
+ newQuote +
64
+ str
65
+ .slice(1, -1)
66
+ .replace(
67
+ /\\(\$\{|\r\n?|\n|.)|["'`]|\$\{|(\r\n?|\n)/gu,
68
+ (match, escaped, newline) => {
69
+ if (
70
+ escaped === oldQuote ||
71
+ (oldQuote === "`" && escaped === "${")
72
+ ) {
73
+ return escaped; // unescape
74
+ }
75
+ if (
76
+ match === newQuote ||
77
+ (newQuote === "`" && match === "${")
78
+ ) {
79
+ return `\\${match}`; // escape
80
+ }
81
+ if (newline && oldQuote === "`") {
82
+ return "\\n"; // escape newlines
83
+ }
84
+ return match;
85
+ },
86
+ ) +
87
+ newQuote
88
+ );
89
+ };
90
+
91
+ const AVOID_ESCAPE = "avoid-escape";
92
+
93
+ //------------------------------------------------------------------------------
94
+ // Rule Definition
95
+ //------------------------------------------------------------------------------
96
+
97
+ /** @type {import('../types').Rule.RuleModule} */
98
+ module.exports = {
99
+ meta: {
100
+ deprecated: {
101
+ message: "Formatting rules are being moved out of ESLint core.",
102
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
103
+ deprecatedSince: "8.53.0",
104
+ availableUntil: "11.0.0",
105
+ replacedBy: [
106
+ {
107
+ message:
108
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
109
+ url: "https://eslint.style/guide/migration",
110
+ plugin: {
111
+ name: "@stylistic/eslint-plugin",
112
+ url: "https://eslint.style",
113
+ },
114
+ rule: {
115
+ name: "quotes",
116
+ url: "https://eslint.style/rules/quotes",
117
+ },
118
+ },
119
+ ],
120
+ },
121
+ type: "layout",
122
+
123
+ docs: {
124
+ description:
125
+ "Enforce the consistent use of either backticks, double, or single quotes",
126
+ recommended: false,
127
+ url: "https://eslint.org/docs/latest/rules/quotes",
128
+ },
129
+
130
+ fixable: "code",
131
+
132
+ schema: [
133
+ {
134
+ enum: ["single", "double", "backtick"],
135
+ },
136
+ {
137
+ anyOf: [
138
+ {
139
+ enum: ["avoid-escape"],
140
+ },
141
+ {
142
+ type: "object",
143
+ properties: {
144
+ avoidEscape: {
145
+ type: "boolean",
146
+ },
147
+ allowTemplateLiterals: {
148
+ type: "boolean",
149
+ },
150
+ },
151
+ additionalProperties: false,
152
+ },
153
+ ],
154
+ },
155
+ ],
156
+
157
+ messages: {
158
+ wrongQuotes: "Strings must use {{description}}.",
159
+ },
160
+ },
161
+
162
+ create(context) {
163
+ const quoteOption = context.options[0],
164
+ settings = QUOTE_SETTINGS[quoteOption || "double"],
165
+ options = context.options[1],
166
+ allowTemplateLiterals =
167
+ options && options.allowTemplateLiterals === true,
168
+ sourceCode = context.sourceCode;
169
+ let avoidEscape = options && options.avoidEscape === true;
170
+
171
+ // deprecated
172
+ if (options === AVOID_ESCAPE) {
173
+ avoidEscape = true;
174
+ }
175
+
176
+ /**
177
+ * Determines if a given node is part of JSX syntax.
178
+ *
179
+ * This function returns `true` in the following cases:
180
+ *
181
+ * - `<div className="foo"></div>` ... If the literal is an attribute value, the parent of the literal is `JSXAttribute`.
182
+ * - `<div>foo</div>` ... If the literal is a text content, the parent of the literal is `JSXElement`.
183
+ * - `<>foo</>` ... If the literal is a text content, the parent of the literal is `JSXFragment`.
184
+ *
185
+ * In particular, this function returns `false` in the following cases:
186
+ *
187
+ * - `<div className={"foo"}></div>`
188
+ * - `<div>{"foo"}</div>`
189
+ *
190
+ * In both cases, inside of the braces is handled as normal JavaScript.
191
+ * The braces are `JSXExpressionContainer` nodes.
192
+ * @param {ASTNode} node The Literal node to check.
193
+ * @returns {boolean} True if the node is a part of JSX, false if not.
194
+ * @private
195
+ */
196
+ function isJSXLiteral(node) {
197
+ return (
198
+ node.parent.type === "JSXAttribute" ||
199
+ node.parent.type === "JSXElement" ||
200
+ node.parent.type === "JSXFragment"
201
+ );
202
+ }
203
+
204
+ /**
205
+ * Checks whether or not a given node is a directive.
206
+ * The directive is a `ExpressionStatement` which has only a string literal not surrounded by
207
+ * parentheses.
208
+ * @param {ASTNode} node A node to check.
209
+ * @returns {boolean} Whether or not the node is a directive.
210
+ * @private
211
+ */
212
+ function isDirective(node) {
213
+ return (
214
+ node.type === "ExpressionStatement" &&
215
+ node.expression.type === "Literal" &&
216
+ typeof node.expression.value === "string" &&
217
+ !astUtils.isParenthesised(sourceCode, node.expression)
218
+ );
219
+ }
220
+
221
+ /**
222
+ * Checks whether a specified node is either part of, or immediately follows a (possibly empty) directive prologue.
223
+ * @see {@link http://www.ecma-international.org/ecma-262/6.0/#sec-directive-prologues-and-the-use-strict-directive}
224
+ * @param {ASTNode} node A node to check.
225
+ * @returns {boolean} Whether a specified node is either part of, or immediately follows a (possibly empty) directive prologue.
226
+ * @private
227
+ */
228
+ function isExpressionInOrJustAfterDirectivePrologue(node) {
229
+ if (!astUtils.isTopLevelExpressionStatement(node.parent)) {
230
+ return false;
231
+ }
232
+ const block = node.parent.parent;
233
+
234
+ // Check the node is at a prologue.
235
+ for (let i = 0; i < block.body.length; ++i) {
236
+ const statement = block.body[i];
237
+
238
+ if (statement === node.parent) {
239
+ return true;
240
+ }
241
+ if (!isDirective(statement)) {
242
+ break;
243
+ }
244
+ }
245
+
246
+ return false;
247
+ }
248
+
249
+ /**
250
+ * Checks whether or not a given node is allowed as non backtick.
251
+ * @param {ASTNode} node A node to check.
252
+ * @returns {boolean} Whether or not the node is allowed as non backtick.
253
+ * @private
254
+ */
255
+ function isAllowedAsNonBacktick(node) {
256
+ const parent = node.parent;
257
+
258
+ switch (parent.type) {
259
+ // Directive Prologues.
260
+ case "ExpressionStatement":
261
+ return (
262
+ !astUtils.isParenthesised(sourceCode, node) &&
263
+ isExpressionInOrJustAfterDirectivePrologue(node)
264
+ );
265
+
266
+ // LiteralPropertyName.
267
+ case "Property":
268
+ case "PropertyDefinition":
269
+ case "MethodDefinition":
270
+ return parent.key === node && !parent.computed;
271
+
272
+ // ModuleSpecifier.
273
+ case "ImportDeclaration":
274
+ case "ExportNamedDeclaration":
275
+ return parent.source === node;
276
+
277
+ // ModuleExportName or ModuleSpecifier.
278
+ case "ExportAllDeclaration":
279
+ return parent.exported === node || parent.source === node;
280
+
281
+ // ModuleExportName.
282
+ case "ImportSpecifier":
283
+ return parent.imported === node;
284
+
285
+ // ModuleExportName.
286
+ case "ExportSpecifier":
287
+ return parent.local === node || parent.exported === node;
288
+
289
+ // Others don't allow.
290
+ default:
291
+ return false;
292
+ }
293
+ }
294
+
295
+ /**
296
+ * Checks whether or not a given TemplateLiteral node is actually using any of the special features provided by template literal strings.
297
+ * @param {ASTNode} node A TemplateLiteral node to check.
298
+ * @returns {boolean} Whether or not the TemplateLiteral node is using any of the special features provided by template literal strings.
299
+ * @private
300
+ */
301
+ function isUsingFeatureOfTemplateLiteral(node) {
302
+ const hasTag =
303
+ node.parent.type === "TaggedTemplateExpression" &&
304
+ node === node.parent.quasi;
305
+
306
+ if (hasTag) {
307
+ return true;
308
+ }
309
+
310
+ const hasStringInterpolation = node.expressions.length > 0;
311
+
312
+ if (hasStringInterpolation) {
313
+ return true;
314
+ }
315
+
316
+ const isMultilineString =
317
+ node.quasis.length >= 1 &&
318
+ UNESCAPED_LINEBREAK_PATTERN.test(node.quasis[0].value.raw);
319
+
320
+ if (isMultilineString) {
321
+ return true;
322
+ }
323
+
324
+ return false;
325
+ }
326
+
327
+ return {
328
+ Literal(node) {
329
+ const val = node.value,
330
+ rawVal = node.raw;
331
+
332
+ if (settings && typeof val === "string") {
333
+ let isValid =
334
+ (quoteOption === "backtick" &&
335
+ isAllowedAsNonBacktick(node)) ||
336
+ isJSXLiteral(node) ||
337
+ astUtils.isSurroundedBy(rawVal, settings.quote);
338
+
339
+ if (!isValid && avoidEscape) {
340
+ isValid =
341
+ astUtils.isSurroundedBy(
342
+ rawVal,
343
+ settings.alternateQuote,
344
+ ) && rawVal.includes(settings.quote);
345
+ }
346
+
347
+ if (!isValid) {
348
+ context.report({
349
+ node,
350
+ messageId: "wrongQuotes",
351
+ data: {
352
+ description: settings.description,
353
+ },
354
+ fix(fixer) {
355
+ if (
356
+ quoteOption === "backtick" &&
357
+ astUtils.hasOctalOrNonOctalDecimalEscapeSequence(
358
+ rawVal,
359
+ )
360
+ ) {
361
+ /*
362
+ * An octal or non-octal decimal escape sequence in a template literal would
363
+ * produce syntax error, even in non-strict mode.
364
+ */
365
+ return null;
366
+ }
367
+
368
+ return fixer.replaceText(
369
+ node,
370
+ settings.convert(node.raw),
371
+ );
372
+ },
373
+ });
374
+ }
375
+ }
376
+ },
377
+
378
+ TemplateLiteral(node) {
379
+ // Don't throw an error if backticks are expected or a template literal feature is in use.
380
+ if (
381
+ allowTemplateLiterals ||
382
+ quoteOption === "backtick" ||
383
+ isUsingFeatureOfTemplateLiteral(node)
384
+ ) {
385
+ return;
386
+ }
387
+
388
+ context.report({
389
+ node,
390
+ messageId: "wrongQuotes",
391
+ data: {
392
+ description: settings.description,
393
+ },
394
+ fix(fixer) {
395
+ if (
396
+ astUtils.isTopLevelExpressionStatement(
397
+ node.parent,
398
+ ) &&
399
+ !astUtils.isParenthesised(sourceCode, node)
400
+ ) {
401
+ /*
402
+ * TemplateLiterals aren't actually directives, but fixing them might turn
403
+ * them into directives and change the behavior of the code.
404
+ */
405
+ return null;
406
+ }
407
+ return fixer.replaceText(
408
+ node,
409
+ settings.convert(sourceCode.getText(node)),
410
+ );
411
+ },
412
+ });
413
+ },
414
+ };
415
+ },
416
+ };
@@ -0,0 +1,193 @@
1
+ /**
2
+ * @fileoverview Rule to flag use of parseInt without a radix argument
3
+ * @author James Allardice
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 validRadixValues = new Set(
19
+ Array.from({ length: 37 - 2 }, (_, index) => index + 2),
20
+ );
21
+
22
+ /**
23
+ * Checks whether a given variable is shadowed or not.
24
+ * @param {eslint-scope.Variable} variable A variable to check.
25
+ * @returns {boolean} `true` if the variable is shadowed.
26
+ */
27
+ function isShadowed(variable) {
28
+ return variable.defs.length >= 1;
29
+ }
30
+
31
+ /**
32
+ * Checks whether a given node is a MemberExpression of `parseInt` method or not.
33
+ * @param {ASTNode} node A node to check.
34
+ * @returns {boolean} `true` if the node is a MemberExpression of `parseInt`
35
+ * method.
36
+ */
37
+ function isParseIntMethod(node) {
38
+ return (
39
+ node.type === "MemberExpression" &&
40
+ !node.computed &&
41
+ node.property.type === "Identifier" &&
42
+ node.property.name === "parseInt"
43
+ );
44
+ }
45
+
46
+ /**
47
+ * Checks whether a given node is a valid value of radix or not.
48
+ *
49
+ * The following values are invalid.
50
+ *
51
+ * - A literal except integers between 2 and 36.
52
+ * - undefined.
53
+ * @param {ASTNode} radix A node of radix to check.
54
+ * @returns {boolean} `true` if the node is valid.
55
+ */
56
+ function isValidRadix(radix) {
57
+ return !(
58
+ (radix.type === "Literal" && !validRadixValues.has(radix.value)) ||
59
+ (radix.type === "Identifier" && radix.name === "undefined")
60
+ );
61
+ }
62
+
63
+ //------------------------------------------------------------------------------
64
+ // Rule Definition
65
+ //------------------------------------------------------------------------------
66
+
67
+ /** @type {import('../types').Rule.RuleModule} */
68
+ module.exports = {
69
+ meta: {
70
+ type: "suggestion",
71
+
72
+ docs: {
73
+ description:
74
+ "Enforce the use of the radix argument when using `parseInt()`",
75
+ recommended: false,
76
+ url: "https://eslint.org/docs/latest/rules/radix",
77
+ },
78
+
79
+ hasSuggestions: true,
80
+
81
+ schema: [
82
+ // deprecated
83
+ {
84
+ enum: ["always", "as-needed"],
85
+ },
86
+ ],
87
+
88
+ messages: {
89
+ missingParameters: "Missing parameters.",
90
+ missingRadix: "Missing radix parameter.",
91
+ invalidRadix:
92
+ "Invalid radix parameter, must be an integer between 2 and 36.",
93
+ addRadixParameter10:
94
+ "Add radix parameter `10` for parsing decimal numbers.",
95
+ },
96
+ },
97
+
98
+ create(context) {
99
+ const sourceCode = context.sourceCode;
100
+
101
+ /**
102
+ * Checks the arguments of a given CallExpression node and reports it if it
103
+ * offends this rule.
104
+ * @param {ASTNode} node A CallExpression node to check.
105
+ * @returns {void}
106
+ */
107
+ function checkArguments(node) {
108
+ const args = node.arguments;
109
+
110
+ switch (args.length) {
111
+ case 0:
112
+ context.report({
113
+ node,
114
+ messageId: "missingParameters",
115
+ });
116
+ break;
117
+
118
+ case 1:
119
+ context.report({
120
+ node,
121
+ messageId: "missingRadix",
122
+ suggest: [
123
+ {
124
+ messageId: "addRadixParameter10",
125
+ fix(fixer) {
126
+ const tokens = sourceCode.getTokens(node);
127
+ const lastToken = tokens.at(-1); // Parenthesis.
128
+ const secondToLastToken = tokens.at(-2); // May or may not be a comma.
129
+ const hasTrailingComma =
130
+ secondToLastToken.type ===
131
+ "Punctuator" &&
132
+ secondToLastToken.value === ",";
133
+
134
+ return fixer.insertTextBefore(
135
+ lastToken,
136
+ hasTrailingComma ? " 10," : ", 10",
137
+ );
138
+ },
139
+ },
140
+ ],
141
+ });
142
+ break;
143
+
144
+ default:
145
+ if (!isValidRadix(args[1])) {
146
+ context.report({
147
+ node,
148
+ messageId: "invalidRadix",
149
+ });
150
+ }
151
+ break;
152
+ }
153
+ }
154
+
155
+ return {
156
+ "Program:exit"(node) {
157
+ const scope = sourceCode.getScope(node);
158
+ let variable;
159
+
160
+ // Check `parseInt()`
161
+ variable = astUtils.getVariableByName(scope, "parseInt");
162
+ if (variable && !isShadowed(variable)) {
163
+ variable.references.forEach(reference => {
164
+ const idNode = reference.identifier;
165
+
166
+ if (astUtils.isCallee(idNode)) {
167
+ checkArguments(idNode.parent);
168
+ }
169
+ });
170
+ }
171
+
172
+ // Check `Number.parseInt()`
173
+ variable = astUtils.getVariableByName(scope, "Number");
174
+ if (variable && !isShadowed(variable)) {
175
+ variable.references.forEach(reference => {
176
+ const parentNode = reference.identifier.parent;
177
+ const maybeCallee =
178
+ parentNode.parent.type === "ChainExpression"
179
+ ? parentNode.parent
180
+ : parentNode;
181
+
182
+ if (
183
+ isParseIntMethod(parentNode) &&
184
+ astUtils.isCallee(maybeCallee)
185
+ ) {
186
+ checkArguments(maybeCallee.parent);
187
+ }
188
+ });
189
+ }
190
+ },
191
+ };
192
+ },
193
+ };