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,217 @@
1
+ /**
2
+ * @fileoverview Rule that warns when identifier names are shorter or longer
3
+ * than the values provided in configuration.
4
+ * @author Burak Yigit Kaya aka BYK
5
+ */
6
+
7
+ "use strict";
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Requirements
11
+ //------------------------------------------------------------------------------
12
+
13
+ const { getGraphemeCount } = require("../shared/string-utils");
14
+ const {
15
+ getModuleExportName,
16
+ isImportAttributeKey,
17
+ } = require("./utils/ast-utils");
18
+
19
+ //------------------------------------------------------------------------------
20
+ // Rule Definition
21
+ //------------------------------------------------------------------------------
22
+
23
+ /** @type {import('../types').Rule.RuleModule} */
24
+ module.exports = {
25
+ meta: {
26
+ type: "suggestion",
27
+
28
+ defaultOptions: [
29
+ {
30
+ exceptionPatterns: [],
31
+ exceptions: [],
32
+ min: 2,
33
+ properties: "always",
34
+ },
35
+ ],
36
+
37
+ docs: {
38
+ description: "Enforce minimum and maximum identifier lengths",
39
+ recommended: false,
40
+ frozen: true,
41
+ url: "https://eslint.org/docs/latest/rules/id-length",
42
+ },
43
+
44
+ schema: [
45
+ {
46
+ type: "object",
47
+ properties: {
48
+ min: {
49
+ type: "integer",
50
+ },
51
+ max: {
52
+ type: "integer",
53
+ },
54
+ exceptions: {
55
+ type: "array",
56
+ uniqueItems: true,
57
+ items: {
58
+ type: "string",
59
+ },
60
+ },
61
+ exceptionPatterns: {
62
+ type: "array",
63
+ uniqueItems: true,
64
+ items: {
65
+ type: "string",
66
+ },
67
+ },
68
+ properties: {
69
+ enum: ["always", "never"],
70
+ },
71
+ },
72
+ additionalProperties: false,
73
+ },
74
+ ],
75
+ messages: {
76
+ tooShort: "Identifier name '{{name}}' is too short (< {{min}}).",
77
+ tooShortPrivate:
78
+ "Identifier name '#{{name}}' is too short (< {{min}}).",
79
+ tooLong: "Identifier name '{{name}}' is too long (> {{max}}).",
80
+ tooLongPrivate:
81
+ "Identifier name #'{{name}}' is too long (> {{max}}).",
82
+ },
83
+ },
84
+
85
+ create(context) {
86
+ const [options] = context.options;
87
+ const { max: maxLength = Infinity, min: minLength } = options;
88
+ const properties = options.properties !== "never";
89
+ const exceptions = new Set(options.exceptions);
90
+ const exceptionPatterns = options.exceptionPatterns.map(
91
+ pattern => new RegExp(pattern, "u"),
92
+ );
93
+ const reportedNodes = new Set();
94
+
95
+ /**
96
+ * Checks if a string matches the provided exception patterns
97
+ * @param {string} name The string to check.
98
+ * @returns {boolean} if the string is a match
99
+ * @private
100
+ */
101
+ function matchesExceptionPattern(name) {
102
+ return exceptionPatterns.some(pattern => pattern.test(name));
103
+ }
104
+
105
+ const SUPPORTED_EXPRESSIONS = {
106
+ MemberExpression:
107
+ properties &&
108
+ function (parent) {
109
+ return (
110
+ !parent.computed &&
111
+ // regular property assignment
112
+ ((parent.parent.left === parent &&
113
+ parent.parent.type === "AssignmentExpression") ||
114
+ // or the last identifier in an ObjectPattern destructuring
115
+ (parent.parent.type === "Property" &&
116
+ parent.parent.value === parent &&
117
+ parent.parent.parent.type === "ObjectPattern" &&
118
+ parent.parent.parent.parent.left ===
119
+ parent.parent.parent))
120
+ );
121
+ },
122
+ AssignmentPattern(parent, node) {
123
+ return parent.left === node;
124
+ },
125
+ VariableDeclarator(parent, node) {
126
+ return parent.id === node;
127
+ },
128
+ Property(parent, node) {
129
+ if (parent.parent.type === "ObjectPattern") {
130
+ const isKeyAndValueSame =
131
+ parent.value.name === parent.key.name;
132
+
133
+ return (
134
+ (!isKeyAndValueSame && parent.value === node) ||
135
+ (isKeyAndValueSame && parent.key === node && properties)
136
+ );
137
+ }
138
+ return (
139
+ properties &&
140
+ !isImportAttributeKey(node) &&
141
+ !parent.computed &&
142
+ parent.key.name === node.name
143
+ );
144
+ },
145
+ ImportSpecifier(parent, node) {
146
+ return (
147
+ parent.local === node &&
148
+ getModuleExportName(parent.imported) !==
149
+ getModuleExportName(parent.local)
150
+ );
151
+ },
152
+ ImportDefaultSpecifier: true,
153
+ ImportNamespaceSpecifier: true,
154
+ RestElement: true,
155
+ FunctionExpression: true,
156
+ ArrowFunctionExpression: true,
157
+ ClassDeclaration: true,
158
+ FunctionDeclaration: true,
159
+ MethodDefinition: true,
160
+ PropertyDefinition: true,
161
+ CatchClause: true,
162
+ ArrayPattern: true,
163
+ };
164
+
165
+ return {
166
+ [["Identifier", "PrivateIdentifier"]](node) {
167
+ const name = node.name;
168
+ const parent = node.parent;
169
+
170
+ const nameLength = getGraphemeCount(name);
171
+
172
+ const isShort = nameLength < minLength;
173
+ const isLong = nameLength > maxLength;
174
+
175
+ if (
176
+ !(isShort || isLong) ||
177
+ exceptions.has(name) ||
178
+ matchesExceptionPattern(name)
179
+ ) {
180
+ return; // Nothing to report
181
+ }
182
+
183
+ const isValidExpression = SUPPORTED_EXPRESSIONS[parent.type];
184
+
185
+ /*
186
+ * We used the range instead of the node because it's possible
187
+ * for the same identifier to be represented by two different
188
+ * nodes, with the most clear example being shorthand properties:
189
+ * { foo }
190
+ * In this case, "foo" is represented by one node for the name
191
+ * and one for the value. The only way to know they are the same
192
+ * is to look at the range.
193
+ */
194
+ if (
195
+ isValidExpression &&
196
+ !reportedNodes.has(node.range.toString()) &&
197
+ (isValidExpression === true ||
198
+ isValidExpression(parent, node))
199
+ ) {
200
+ reportedNodes.add(node.range.toString());
201
+
202
+ let messageId = isShort ? "tooShort" : "tooLong";
203
+
204
+ if (node.type === "PrivateIdentifier") {
205
+ messageId += "Private";
206
+ }
207
+
208
+ context.report({
209
+ node,
210
+ messageId,
211
+ data: { name, min: minLength, max: maxLength },
212
+ });
213
+ }
214
+ },
215
+ };
216
+ },
217
+ };
@@ -0,0 +1,363 @@
1
+ /**
2
+ * @fileoverview Rule to flag non-matching identifiers
3
+ * @author Matthieu Larcher
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: [
24
+ "^.+$",
25
+ {
26
+ classFields: false,
27
+ ignoreDestructuring: false,
28
+ onlyDeclarations: false,
29
+ properties: false,
30
+ },
31
+ ],
32
+
33
+ docs: {
34
+ description:
35
+ "Require identifiers to match a specified regular expression",
36
+ recommended: false,
37
+ frozen: true,
38
+ url: "https://eslint.org/docs/latest/rules/id-match",
39
+ },
40
+
41
+ schema: [
42
+ {
43
+ type: "string",
44
+ },
45
+ {
46
+ type: "object",
47
+ properties: {
48
+ properties: {
49
+ type: "boolean",
50
+ },
51
+ classFields: {
52
+ type: "boolean",
53
+ },
54
+ onlyDeclarations: {
55
+ type: "boolean",
56
+ },
57
+ ignoreDestructuring: {
58
+ type: "boolean",
59
+ },
60
+ },
61
+ additionalProperties: false,
62
+ },
63
+ ],
64
+ messages: {
65
+ notMatch:
66
+ "Identifier '{{name}}' does not match the pattern '{{pattern}}'.",
67
+ notMatchPrivate:
68
+ "Identifier '#{{name}}' does not match the pattern '{{pattern}}'.",
69
+ },
70
+ },
71
+
72
+ create(context) {
73
+ //--------------------------------------------------------------------------
74
+ // Options
75
+ //--------------------------------------------------------------------------
76
+ const [
77
+ pattern,
78
+ {
79
+ classFields: checkClassFields,
80
+ ignoreDestructuring,
81
+ onlyDeclarations,
82
+ properties: checkProperties,
83
+ },
84
+ ] = context.options;
85
+ const regexp = new RegExp(pattern, "u");
86
+
87
+ const sourceCode = context.sourceCode;
88
+ let globalScope;
89
+
90
+ //--------------------------------------------------------------------------
91
+ // Helpers
92
+ //--------------------------------------------------------------------------
93
+
94
+ // contains reported nodes to avoid reporting twice on destructuring with shorthand notation
95
+ const reportedNodes = new Set();
96
+ const ALLOWED_PARENT_TYPES = new Set([
97
+ "CallExpression",
98
+ "NewExpression",
99
+ ]);
100
+ const DECLARATION_TYPES = new Set([
101
+ "FunctionDeclaration",
102
+ "VariableDeclarator",
103
+ ]);
104
+ const IMPORT_TYPES = new Set([
105
+ "ImportSpecifier",
106
+ "ImportNamespaceSpecifier",
107
+ "ImportDefaultSpecifier",
108
+ ]);
109
+
110
+ /**
111
+ * Checks whether the given node represents a reference to a global variable that is not declared in the source code.
112
+ * These identifiers will be allowed, as it is assumed that user has no control over the names of external global variables.
113
+ * @param {ASTNode} node `Identifier` node to check.
114
+ * @returns {boolean} `true` if the node is a reference to a global variable.
115
+ */
116
+ function isReferenceToGlobalVariable(node) {
117
+ const variable = globalScope.set.get(node.name);
118
+
119
+ return (
120
+ variable &&
121
+ variable.defs.length === 0 &&
122
+ variable.references.some(ref => ref.identifier === node)
123
+ );
124
+ }
125
+
126
+ /**
127
+ * Checks if a string matches the provided pattern
128
+ * @param {string} name The string to check.
129
+ * @returns {boolean} if the string is a match
130
+ * @private
131
+ */
132
+ function isInvalid(name) {
133
+ return !regexp.test(name);
134
+ }
135
+
136
+ /**
137
+ * Checks if a parent of a node is an ObjectPattern.
138
+ * @param {ASTNode} node The node to check.
139
+ * @returns {boolean} if the node is inside an ObjectPattern
140
+ * @private
141
+ */
142
+ function isInsideObjectPattern(node) {
143
+ let { parent } = node;
144
+
145
+ while (parent) {
146
+ if (parent.type === "ObjectPattern") {
147
+ return true;
148
+ }
149
+
150
+ parent = parent.parent;
151
+ }
152
+
153
+ return false;
154
+ }
155
+
156
+ /**
157
+ * Verifies if we should report an error or not based on the effective
158
+ * parent node and the identifier name.
159
+ * @param {ASTNode} effectiveParent The effective parent node of the node to be reported
160
+ * @param {string} name The identifier name of the identifier node
161
+ * @returns {boolean} whether an error should be reported or not
162
+ */
163
+ function shouldReport(effectiveParent, name) {
164
+ return (
165
+ (!onlyDeclarations ||
166
+ DECLARATION_TYPES.has(effectiveParent.type)) &&
167
+ !ALLOWED_PARENT_TYPES.has(effectiveParent.type) &&
168
+ isInvalid(name)
169
+ );
170
+ }
171
+
172
+ /**
173
+ * Reports an AST node as a rule violation.
174
+ * @param {ASTNode} node The node to report.
175
+ * @returns {void}
176
+ * @private
177
+ */
178
+ function report(node) {
179
+ /*
180
+ * We used the range instead of the node because it's possible
181
+ * for the same identifier to be represented by two different
182
+ * nodes, with the most clear example being shorthand properties:
183
+ * { foo }
184
+ * In this case, "foo" is represented by one node for the name
185
+ * and one for the value. The only way to know they are the same
186
+ * is to look at the range.
187
+ */
188
+ if (!reportedNodes.has(node.range.toString())) {
189
+ const messageId =
190
+ node.type === "PrivateIdentifier"
191
+ ? "notMatchPrivate"
192
+ : "notMatch";
193
+
194
+ context.report({
195
+ node,
196
+ messageId,
197
+ data: {
198
+ name: node.name,
199
+ pattern,
200
+ },
201
+ });
202
+ reportedNodes.add(node.range.toString());
203
+ }
204
+ }
205
+
206
+ return {
207
+ Program(node) {
208
+ globalScope = sourceCode.getScope(node);
209
+ },
210
+
211
+ Identifier(node) {
212
+ const name = node.name,
213
+ parent = node.parent,
214
+ effectiveParent =
215
+ parent.type === "MemberExpression"
216
+ ? parent.parent
217
+ : parent;
218
+
219
+ if (
220
+ isReferenceToGlobalVariable(node) ||
221
+ astUtils.isImportAttributeKey(node)
222
+ ) {
223
+ return;
224
+ }
225
+
226
+ if (parent.type === "MemberExpression") {
227
+ if (!checkProperties) {
228
+ return;
229
+ }
230
+
231
+ // Always check object names
232
+ if (
233
+ parent.object.type === "Identifier" &&
234
+ parent.object.name === name
235
+ ) {
236
+ if (isInvalid(name)) {
237
+ report(node);
238
+ }
239
+
240
+ // Report AssignmentExpressions left side's assigned variable id
241
+ } else if (
242
+ effectiveParent.type === "AssignmentExpression" &&
243
+ effectiveParent.left.type === "MemberExpression" &&
244
+ effectiveParent.left.property.name === node.name
245
+ ) {
246
+ if (isInvalid(name)) {
247
+ report(node);
248
+ }
249
+
250
+ // Report AssignmentExpressions only if they are the left side of the assignment
251
+ } else if (
252
+ effectiveParent.type === "AssignmentExpression" &&
253
+ effectiveParent.right.type !== "MemberExpression"
254
+ ) {
255
+ if (isInvalid(name)) {
256
+ report(node);
257
+ }
258
+ }
259
+
260
+ // For https://github.com/eslint/eslint/issues/15123
261
+ } else if (
262
+ parent.type === "Property" &&
263
+ parent.parent.type === "ObjectExpression" &&
264
+ parent.key === node &&
265
+ !parent.computed
266
+ ) {
267
+ if (checkProperties && isInvalid(name)) {
268
+ report(node);
269
+ }
270
+
271
+ /*
272
+ * Properties have their own rules, and
273
+ * AssignmentPattern nodes can be treated like Properties:
274
+ * e.g.: const { no_camelcased = false } = bar;
275
+ */
276
+ } else if (
277
+ parent.type === "Property" ||
278
+ parent.type === "AssignmentPattern"
279
+ ) {
280
+ if (
281
+ parent.parent &&
282
+ parent.parent.type === "ObjectPattern"
283
+ ) {
284
+ if (
285
+ !ignoreDestructuring &&
286
+ parent.shorthand &&
287
+ parent.value.left &&
288
+ isInvalid(name)
289
+ ) {
290
+ report(node);
291
+ }
292
+
293
+ const assignmentKeyEqualsValue =
294
+ parent.key.name === parent.value.name;
295
+
296
+ // prevent checking righthand side of destructured object
297
+ if (!assignmentKeyEqualsValue && parent.key === node) {
298
+ return;
299
+ }
300
+
301
+ const valueIsInvalid =
302
+ parent.value.name && isInvalid(name);
303
+
304
+ // ignore destructuring if the option is set, unless a new identifier is created
305
+ if (
306
+ valueIsInvalid &&
307
+ !(assignmentKeyEqualsValue && ignoreDestructuring)
308
+ ) {
309
+ report(node);
310
+ }
311
+ }
312
+
313
+ // never check properties or always ignore destructuring
314
+ if (
315
+ (!checkProperties && !parent.computed) ||
316
+ (ignoreDestructuring && isInsideObjectPattern(node))
317
+ ) {
318
+ return;
319
+ }
320
+
321
+ // don't check right hand side of AssignmentExpression to prevent duplicate warnings
322
+ if (
323
+ parent.right !== node &&
324
+ shouldReport(effectiveParent, name)
325
+ ) {
326
+ report(node);
327
+ }
328
+
329
+ // Check if it's an import specifier
330
+ } else if (IMPORT_TYPES.has(parent.type)) {
331
+ // Report only if the local imported identifier is invalid
332
+ if (
333
+ parent.local &&
334
+ parent.local.name === node.name &&
335
+ isInvalid(name)
336
+ ) {
337
+ report(node);
338
+ }
339
+ } else if (parent.type === "PropertyDefinition") {
340
+ if (checkClassFields && isInvalid(name)) {
341
+ report(node);
342
+ }
343
+
344
+ // Report anything that is invalid that isn't a CallExpression
345
+ } else if (shouldReport(effectiveParent, name)) {
346
+ report(node);
347
+ }
348
+ },
349
+
350
+ PrivateIdentifier(node) {
351
+ const isClassField = node.parent.type === "PropertyDefinition";
352
+
353
+ if (isClassField && !checkClassFields) {
354
+ return;
355
+ }
356
+
357
+ if (isInvalid(node.name)) {
358
+ report(node);
359
+ }
360
+ },
361
+ };
362
+ },
363
+ };
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @fileoverview enforce the location of arrow function bodies
3
+ * @author Sharmila Jesupaul
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+ "use strict";
7
+
8
+ const { isCommentToken, isNotOpeningParenToken } = require("./utils/ast-utils");
9
+
10
+ //------------------------------------------------------------------------------
11
+ // Rule Definition
12
+ //------------------------------------------------------------------------------
13
+ /** @type {import('../types').Rule.RuleModule} */
14
+ module.exports = {
15
+ meta: {
16
+ deprecated: {
17
+ message: "Formatting rules are being moved out of ESLint core.",
18
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
19
+ deprecatedSince: "8.53.0",
20
+ availableUntil: "11.0.0",
21
+ replacedBy: [
22
+ {
23
+ message:
24
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
25
+ url: "https://eslint.style/guide/migration",
26
+ plugin: {
27
+ name: "@stylistic/eslint-plugin",
28
+ url: "https://eslint.style",
29
+ },
30
+ rule: {
31
+ name: "implicit-arrow-linebreak",
32
+ url: "https://eslint.style/rules/implicit-arrow-linebreak",
33
+ },
34
+ },
35
+ ],
36
+ },
37
+ type: "layout",
38
+
39
+ docs: {
40
+ description: "Enforce the location of arrow function bodies",
41
+ recommended: false,
42
+ url: "https://eslint.org/docs/latest/rules/implicit-arrow-linebreak",
43
+ },
44
+
45
+ fixable: "whitespace",
46
+
47
+ schema: [
48
+ {
49
+ enum: ["beside", "below"],
50
+ },
51
+ ],
52
+ messages: {
53
+ expected: "Expected a linebreak before this expression.",
54
+ unexpected: "Expected no linebreak before this expression.",
55
+ },
56
+ },
57
+
58
+ create(context) {
59
+ const sourceCode = context.sourceCode;
60
+ const option = context.options[0] || "beside";
61
+
62
+ /**
63
+ * Validates the location of an arrow function body
64
+ * @param {ASTNode} node The arrow function body
65
+ * @returns {void}
66
+ */
67
+ function validateExpression(node) {
68
+ if (node.body.type === "BlockStatement") {
69
+ return;
70
+ }
71
+
72
+ const arrowToken = sourceCode.getTokenBefore(
73
+ node.body,
74
+ isNotOpeningParenToken,
75
+ );
76
+ const firstTokenOfBody = sourceCode.getTokenAfter(arrowToken);
77
+
78
+ if (
79
+ arrowToken.loc.end.line === firstTokenOfBody.loc.start.line &&
80
+ option === "below"
81
+ ) {
82
+ context.report({
83
+ node: firstTokenOfBody,
84
+ messageId: "expected",
85
+ fix: fixer =>
86
+ fixer.insertTextBefore(firstTokenOfBody, "\n"),
87
+ });
88
+ } else if (
89
+ arrowToken.loc.end.line !== firstTokenOfBody.loc.start.line &&
90
+ option === "beside"
91
+ ) {
92
+ context.report({
93
+ node: firstTokenOfBody,
94
+ messageId: "unexpected",
95
+ fix(fixer) {
96
+ if (
97
+ sourceCode.getFirstTokenBetween(
98
+ arrowToken,
99
+ firstTokenOfBody,
100
+ {
101
+ includeComments: true,
102
+ filter: isCommentToken,
103
+ },
104
+ )
105
+ ) {
106
+ return null;
107
+ }
108
+
109
+ return fixer.replaceTextRange(
110
+ [arrowToken.range[1], firstTokenOfBody.range[0]],
111
+ " ",
112
+ );
113
+ },
114
+ });
115
+ }
116
+ }
117
+
118
+ //----------------------------------------------------------------------
119
+ // Public
120
+ //----------------------------------------------------------------------
121
+ return {
122
+ ArrowFunctionExpression: node => validateExpression(node),
123
+ };
124
+ },
125
+ };