bahlint 28.58.6934-dev-001

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 +354 -0
  3. package/bin/bahlint.js +267 -0
  4. package/bin/eslint.js +194 -0
  5. package/conf/ecma-version.js +16 -0
  6. package/conf/globals.js +169 -0
  7. package/conf/replacements.json +26 -0
  8. package/conf/rule-type-list.json +91 -0
  9. package/lib/api.js +39 -0
  10. package/lib/cli-engine/formatters/formatters-meta.json +18 -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 +521 -0
  18. package/lib/config/config-loader.js +668 -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 +1989 -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,219 @@
1
+ /**
2
+ * @fileoverview Rule to count multiple spaces in regular expressions
3
+ * @author Matt DuVall <http://www.mattduvall.com/>
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+ const regexpp = require("@eslint-community/regexpp");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Helpers
17
+ //------------------------------------------------------------------------------
18
+
19
+ const regExpParser = new regexpp.RegExpParser();
20
+ const DOUBLE_SPACE = / {2}/u;
21
+
22
+ /**
23
+ * Check if node is a string
24
+ * @param {ASTNode} node node to evaluate
25
+ * @returns {boolean} True if its a string
26
+ * @private
27
+ */
28
+ function isString(node) {
29
+ return node && node.type === "Literal" && typeof node.value === "string";
30
+ }
31
+
32
+ //------------------------------------------------------------------------------
33
+ // Rule Definition
34
+ //------------------------------------------------------------------------------
35
+
36
+ /** @type {import('../types').Rule.RuleModule} */
37
+ module.exports = {
38
+ meta: {
39
+ type: "suggestion",
40
+
41
+ docs: {
42
+ description: "Disallow multiple spaces in regular expressions",
43
+ recommended: true,
44
+ url: "https://eslint.org/docs/latest/rules/no-regex-spaces",
45
+ },
46
+
47
+ schema: [],
48
+ fixable: "code",
49
+
50
+ messages: {
51
+ multipleSpaces: "Spaces are hard to count. Use {{{length}}}.",
52
+ },
53
+ },
54
+
55
+ create(context) {
56
+ const sourceCode = context.sourceCode;
57
+
58
+ /**
59
+ * Validate regular expression
60
+ * @param {ASTNode} nodeToReport Node to report.
61
+ * @param {string} pattern Regular expression pattern to validate.
62
+ * @param {string} rawPattern Raw representation of the pattern in the source code.
63
+ * @param {number} rawPatternStartRange Start range of the pattern in the source code.
64
+ * @param {string} flags Regular expression flags.
65
+ * @returns {void}
66
+ * @private
67
+ */
68
+ function checkRegex(
69
+ nodeToReport,
70
+ pattern,
71
+ rawPattern,
72
+ rawPatternStartRange,
73
+ flags,
74
+ ) {
75
+ // Skip if there are no consecutive spaces in the source code, to avoid reporting e.g., RegExp(' \ ').
76
+ if (!DOUBLE_SPACE.test(rawPattern)) {
77
+ return;
78
+ }
79
+
80
+ const characterClassNodes = [];
81
+ let regExpAST;
82
+
83
+ try {
84
+ regExpAST = regExpParser.parsePattern(
85
+ pattern,
86
+ 0,
87
+ pattern.length,
88
+ {
89
+ unicode: flags.includes("u"),
90
+ unicodeSets: flags.includes("v"),
91
+ },
92
+ );
93
+ } catch {
94
+ // Ignore regular expressions with syntax errors
95
+ return;
96
+ }
97
+
98
+ regexpp.visitRegExpAST(regExpAST, {
99
+ onCharacterClassEnter(ccNode) {
100
+ characterClassNodes.push(ccNode);
101
+ },
102
+ });
103
+
104
+ const spacesPattern = /( {2,})(?: [+*{?]|[^+*{?]|$)/gu;
105
+ let match;
106
+
107
+ while ((match = spacesPattern.exec(pattern))) {
108
+ const {
109
+ 1: { length },
110
+ index,
111
+ } = match;
112
+
113
+ // Report only consecutive spaces that are not in character classes.
114
+ if (
115
+ characterClassNodes.every(
116
+ ({ start, end }) => index < start || end <= index,
117
+ )
118
+ ) {
119
+ context.report({
120
+ node: nodeToReport,
121
+ messageId: "multipleSpaces",
122
+ data: { length },
123
+ fix(fixer) {
124
+ if (pattern !== rawPattern) {
125
+ return null;
126
+ }
127
+ return fixer.replaceTextRange(
128
+ [
129
+ rawPatternStartRange + index,
130
+ rawPatternStartRange + index + length,
131
+ ],
132
+ ` {${length}}`,
133
+ );
134
+ },
135
+ });
136
+
137
+ // Report only the first occurrence of consecutive spaces
138
+ return;
139
+ }
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Validate regular expression literals
145
+ * @param {ASTNode} node node to validate
146
+ * @returns {void}
147
+ * @private
148
+ */
149
+ function checkLiteral(node) {
150
+ if (node.regex) {
151
+ const pattern = node.regex.pattern;
152
+ const rawPattern = node.raw.slice(1, node.raw.lastIndexOf("/"));
153
+ const rawPatternStartRange = node.range[0] + 1;
154
+ const flags = node.regex.flags;
155
+
156
+ checkRegex(
157
+ node,
158
+ pattern,
159
+ rawPattern,
160
+ rawPatternStartRange,
161
+ flags,
162
+ );
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Validate strings passed to the RegExp constructor
168
+ * @param {ASTNode} node node to validate
169
+ * @returns {void}
170
+ * @private
171
+ */
172
+ function checkFunction(node) {
173
+ const scope = sourceCode.getScope(node);
174
+ const regExpVar = astUtils.getVariableByName(scope, "RegExp");
175
+ const shadowed = regExpVar && regExpVar.defs.length > 0;
176
+ const patternNode = node.arguments[0];
177
+
178
+ if (
179
+ node.callee.type === "Identifier" &&
180
+ node.callee.name === "RegExp" &&
181
+ isString(patternNode) &&
182
+ !shadowed
183
+ ) {
184
+ const pattern = patternNode.value;
185
+ const rawPattern = patternNode.raw.slice(1, -1);
186
+ const rawPatternStartRange = patternNode.range[0] + 1;
187
+ let flags;
188
+
189
+ if (node.arguments.length < 2) {
190
+ // It has no flags.
191
+ flags = "";
192
+ } else {
193
+ const flagsNode = node.arguments[1];
194
+
195
+ if (isString(flagsNode)) {
196
+ flags = flagsNode.value;
197
+ } else {
198
+ // The flags cannot be determined.
199
+ return;
200
+ }
201
+ }
202
+
203
+ checkRegex(
204
+ node,
205
+ pattern,
206
+ rawPattern,
207
+ rawPatternStartRange,
208
+ flags,
209
+ );
210
+ }
211
+ }
212
+
213
+ return {
214
+ Literal: checkLiteral,
215
+ CallExpression: checkFunction,
216
+ NewExpression: checkFunction,
217
+ };
218
+ },
219
+ };
@@ -0,0 +1,227 @@
1
+ /**
2
+ * @fileoverview Rule to disallow specified names in exports
3
+ * @author Milos Djermanovic
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Rule Definition
16
+ //------------------------------------------------------------------------------
17
+
18
+ /** @type {import('../types').Rule.RuleModule} */
19
+ module.exports = {
20
+ meta: {
21
+ type: "suggestion",
22
+
23
+ docs: {
24
+ description: "Disallow specified names in exports",
25
+ recommended: false,
26
+ url: "https://eslint.org/docs/latest/rules/no-restricted-exports",
27
+ },
28
+
29
+ schema: [
30
+ {
31
+ anyOf: [
32
+ {
33
+ type: "object",
34
+ properties: {
35
+ restrictedNamedExports: {
36
+ type: "array",
37
+ items: {
38
+ type: "string",
39
+ },
40
+ uniqueItems: true,
41
+ },
42
+ restrictedNamedExportsPattern: { type: "string" },
43
+ },
44
+ additionalProperties: false,
45
+ },
46
+ {
47
+ type: "object",
48
+ properties: {
49
+ restrictedNamedExports: {
50
+ type: "array",
51
+ items: {
52
+ type: "string",
53
+ pattern: "^(?!default$)",
54
+ },
55
+ uniqueItems: true,
56
+ },
57
+ restrictedNamedExportsPattern: { type: "string" },
58
+ restrictDefaultExports: {
59
+ type: "object",
60
+ properties: {
61
+ // Allow/Disallow `export default foo; export default 42; export default function foo() {}` format
62
+ direct: {
63
+ type: "boolean",
64
+ },
65
+
66
+ // Allow/Disallow `export { foo as default };` declarations
67
+ named: {
68
+ type: "boolean",
69
+ },
70
+
71
+ // Allow/Disallow `export { default } from "mod"; export { default as default } from "mod";` declarations
72
+ defaultFrom: {
73
+ type: "boolean",
74
+ },
75
+
76
+ // Allow/Disallow `export { foo as default } from "mod";` declarations
77
+ namedFrom: {
78
+ type: "boolean",
79
+ },
80
+
81
+ // Allow/Disallow `export * as default from "mod"`; declarations
82
+ namespaceFrom: {
83
+ type: "boolean",
84
+ },
85
+ },
86
+ additionalProperties: false,
87
+ },
88
+ },
89
+ additionalProperties: false,
90
+ },
91
+ ],
92
+ },
93
+ ],
94
+
95
+ messages: {
96
+ restrictedNamed:
97
+ "'{{name}}' is restricted from being used as an exported name.",
98
+ restrictedDefault: "Exporting 'default' is restricted.",
99
+ },
100
+ },
101
+
102
+ create(context) {
103
+ const restrictedNames = new Set(
104
+ context.options[0] && context.options[0].restrictedNamedExports,
105
+ );
106
+ const restrictedNamePattern =
107
+ context.options[0] &&
108
+ context.options[0].restrictedNamedExportsPattern;
109
+ const restrictDefaultExports =
110
+ context.options[0] && context.options[0].restrictDefaultExports;
111
+ const sourceCode = context.sourceCode;
112
+
113
+ /**
114
+ * Checks and reports given exported name.
115
+ * @param {ASTNode} node exported `Identifier` or string `Literal` node to check.
116
+ * @returns {void}
117
+ */
118
+ function checkExportedName(node) {
119
+ const name = astUtils.getModuleExportName(node);
120
+
121
+ let matchesRestrictedNamePattern = false;
122
+
123
+ if (restrictedNamePattern && name !== "default") {
124
+ const patternRegex = new RegExp(restrictedNamePattern, "u");
125
+
126
+ matchesRestrictedNamePattern = patternRegex.test(name);
127
+ }
128
+
129
+ if (matchesRestrictedNamePattern || restrictedNames.has(name)) {
130
+ context.report({
131
+ node,
132
+ messageId: "restrictedNamed",
133
+ data: { name },
134
+ });
135
+ return;
136
+ }
137
+
138
+ if (name === "default") {
139
+ if (node.parent.type === "ExportAllDeclaration") {
140
+ if (
141
+ restrictDefaultExports &&
142
+ restrictDefaultExports.namespaceFrom
143
+ ) {
144
+ context.report({
145
+ node,
146
+ messageId: "restrictedDefault",
147
+ });
148
+ }
149
+ } else {
150
+ // ExportSpecifier
151
+ const isSourceSpecified = !!node.parent.parent.source;
152
+ const specifierLocalName = astUtils.getModuleExportName(
153
+ node.parent.local,
154
+ );
155
+
156
+ if (
157
+ !isSourceSpecified &&
158
+ restrictDefaultExports &&
159
+ restrictDefaultExports.named
160
+ ) {
161
+ context.report({
162
+ node,
163
+ messageId: "restrictedDefault",
164
+ });
165
+ return;
166
+ }
167
+
168
+ if (isSourceSpecified && restrictDefaultExports) {
169
+ if (
170
+ (specifierLocalName === "default" &&
171
+ restrictDefaultExports.defaultFrom) ||
172
+ (specifierLocalName !== "default" &&
173
+ restrictDefaultExports.namedFrom)
174
+ ) {
175
+ context.report({
176
+ node,
177
+ messageId: "restrictedDefault",
178
+ });
179
+ }
180
+ }
181
+ }
182
+ }
183
+ }
184
+
185
+ return {
186
+ ExportAllDeclaration(node) {
187
+ if (node.exported) {
188
+ checkExportedName(node.exported);
189
+ }
190
+ },
191
+
192
+ ExportDefaultDeclaration(node) {
193
+ if (restrictDefaultExports && restrictDefaultExports.direct) {
194
+ context.report({
195
+ node,
196
+ messageId: "restrictedDefault",
197
+ });
198
+ }
199
+ },
200
+
201
+ ExportNamedDeclaration(node) {
202
+ const declaration = node.declaration;
203
+
204
+ if (declaration) {
205
+ if (
206
+ declaration.type === "FunctionDeclaration" ||
207
+ declaration.type === "ClassDeclaration"
208
+ ) {
209
+ checkExportedName(declaration.id);
210
+ } else if (declaration.type === "VariableDeclaration") {
211
+ sourceCode
212
+ .getDeclaredVariables(declaration)
213
+ .map(v =>
214
+ v.defs.find(d => d.parent === declaration),
215
+ )
216
+ .map(d => d.name) // Identifier nodes
217
+ .forEach(checkExportedName);
218
+ }
219
+ } else {
220
+ node.specifiers
221
+ .map(s => s.exported)
222
+ .forEach(checkExportedName);
223
+ }
224
+ },
225
+ };
226
+ },
227
+ };
@@ -0,0 +1,266 @@
1
+ /**
2
+ * @fileoverview Restrict usage of specified globals.
3
+ * @author Benoît Zugmeyer
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Requirements
9
+ //------------------------------------------------------------------------------
10
+
11
+ const astUtils = require("./utils/ast-utils");
12
+
13
+ //------------------------------------------------------------------------------
14
+ // Helpers
15
+ //------------------------------------------------------------------------------
16
+
17
+ const TYPE_NODES = new Set([
18
+ "TSTypeReference",
19
+ "TSInterfaceHeritage",
20
+ "TSClassImplements",
21
+ "TSTypeQuery",
22
+ "TSQualifiedName",
23
+ ]);
24
+
25
+ const GLOBAL_OBJECTS = new Set(["globalThis", "self", "window"]);
26
+
27
+ //------------------------------------------------------------------------------
28
+ // Rule Definition
29
+ //------------------------------------------------------------------------------
30
+
31
+ const arrayOfGlobals = {
32
+ type: "array",
33
+ items: {
34
+ oneOf: [
35
+ {
36
+ type: "string",
37
+ },
38
+ {
39
+ type: "object",
40
+ properties: {
41
+ name: { type: "string" },
42
+ message: { type: "string" },
43
+ },
44
+ required: ["name"],
45
+ additionalProperties: false,
46
+ },
47
+ ],
48
+ },
49
+ uniqueItems: true,
50
+ minItems: 0,
51
+ };
52
+
53
+ /** @type {import('../types').Rule.RuleModule} */
54
+ module.exports = {
55
+ meta: {
56
+ dialects: ["javascript", "typescript"],
57
+ language: "javascript",
58
+ type: "suggestion",
59
+
60
+ docs: {
61
+ description: "Disallow specified global variables",
62
+ recommended: false,
63
+ url: "https://eslint.org/docs/latest/rules/no-restricted-globals",
64
+ },
65
+
66
+ schema: {
67
+ anyOf: [
68
+ arrayOfGlobals,
69
+ {
70
+ type: "array",
71
+ items: [
72
+ {
73
+ type: "object",
74
+ properties: {
75
+ globals: arrayOfGlobals,
76
+ checkGlobalObject: {
77
+ type: "boolean",
78
+ },
79
+ globalObjects: {
80
+ type: "array",
81
+ items: {
82
+ type: "string",
83
+ },
84
+ uniqueItems: true,
85
+ },
86
+ },
87
+ required: ["globals"],
88
+ additionalProperties: false,
89
+ },
90
+ ],
91
+ additionalItems: false,
92
+ },
93
+ ],
94
+ },
95
+
96
+ messages: {
97
+ defaultMessage: "Unexpected use of '{{name}}'.",
98
+ // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
99
+ customMessage: "Unexpected use of '{{name}}'. {{customMessage}}",
100
+ },
101
+ },
102
+
103
+ create(context) {
104
+ const { sourceCode, options } = context;
105
+
106
+ const isGlobalsObject =
107
+ typeof options[0] === "object" &&
108
+ Object.hasOwn(options[0], "globals");
109
+
110
+ const restrictedGlobals = isGlobalsObject
111
+ ? options[0].globals
112
+ : options;
113
+ const checkGlobalObject = isGlobalsObject
114
+ ? options[0].checkGlobalObject
115
+ : false;
116
+ const userGlobalObjects = isGlobalsObject
117
+ ? options[0].globalObjects || []
118
+ : [];
119
+
120
+ const globalObjects = new Set([
121
+ ...GLOBAL_OBJECTS,
122
+ ...userGlobalObjects,
123
+ ]);
124
+
125
+ // If no globals are restricted, we don't need to do anything
126
+ if (restrictedGlobals.length === 0) {
127
+ return {};
128
+ }
129
+
130
+ const restrictedGlobalMessages = restrictedGlobals.reduce(
131
+ (memo, option) => {
132
+ if (typeof option === "string") {
133
+ memo[option] = null;
134
+ } else {
135
+ memo[option.name] = option.message;
136
+ }
137
+
138
+ return memo;
139
+ },
140
+ {},
141
+ );
142
+
143
+ /**
144
+ * Report a variable to be used as a restricted global.
145
+ * @param {Reference} reference the variable reference
146
+ * @returns {void}
147
+ * @private
148
+ */
149
+ function reportReference(reference) {
150
+ const name = reference.identifier.name,
151
+ customMessage = restrictedGlobalMessages[name],
152
+ messageId = customMessage ? "customMessage" : "defaultMessage";
153
+
154
+ context.report({
155
+ node: reference.identifier,
156
+ messageId,
157
+ data: {
158
+ name,
159
+ customMessage,
160
+ },
161
+ });
162
+ }
163
+
164
+ /**
165
+ * Check if the given name is a restricted global name.
166
+ * @param {string} name name of a variable
167
+ * @returns {boolean} whether the variable is a restricted global or not
168
+ * @private
169
+ */
170
+ function isRestricted(name) {
171
+ return Object.hasOwn(restrictedGlobalMessages, name);
172
+ }
173
+
174
+ /**
175
+ * Check if the given reference occurs within a TypeScript type context.
176
+ * @param {Reference} reference The variable reference to check.
177
+ * @returns {boolean} Whether the reference is in a type context.
178
+ * @private
179
+ */
180
+ function isInTypeContext(reference) {
181
+ const parent = reference.identifier.parent;
182
+
183
+ return TYPE_NODES.has(parent.type);
184
+ }
185
+
186
+ return {
187
+ Program(node) {
188
+ const scope = sourceCode.getScope(node);
189
+
190
+ // Report variables declared elsewhere (ex: variables defined as "global" by eslint)
191
+ scope.variables.forEach(variable => {
192
+ if (!variable.defs.length && isRestricted(variable.name)) {
193
+ variable.references.forEach(reference => {
194
+ if (!isInTypeContext(reference)) {
195
+ reportReference(reference);
196
+ }
197
+ });
198
+ }
199
+ });
200
+
201
+ // Report variables not declared at all
202
+ scope.through.forEach(reference => {
203
+ if (
204
+ isRestricted(reference.identifier.name) &&
205
+ !isInTypeContext(reference)
206
+ ) {
207
+ reportReference(reference);
208
+ }
209
+ });
210
+ },
211
+
212
+ "Program:exit"(node) {
213
+ if (!checkGlobalObject) {
214
+ return;
215
+ }
216
+
217
+ const globalScope = sourceCode.getScope(node);
218
+ globalObjects.forEach(globalObjectName => {
219
+ const variable = astUtils.getVariableByName(
220
+ globalScope,
221
+ globalObjectName,
222
+ );
223
+
224
+ if (!variable) {
225
+ return;
226
+ }
227
+
228
+ variable.references.forEach(reference => {
229
+ const identifier = reference.identifier;
230
+ let parent = identifier.parent;
231
+
232
+ // To detect code like `window.window.Promise`.
233
+ while (
234
+ astUtils.isSpecificMemberAccess(
235
+ parent,
236
+ null,
237
+ globalObjectName,
238
+ )
239
+ ) {
240
+ parent = parent.parent;
241
+ }
242
+
243
+ const propertyName =
244
+ astUtils.getStaticPropertyName(parent);
245
+ if (propertyName && isRestricted(propertyName)) {
246
+ const customMessage =
247
+ restrictedGlobalMessages[propertyName];
248
+ const messageId = customMessage
249
+ ? "customMessage"
250
+ : "defaultMessage";
251
+
252
+ context.report({
253
+ node: parent.property,
254
+ messageId,
255
+ data: {
256
+ name: propertyName,
257
+ customMessage,
258
+ },
259
+ });
260
+ }
261
+ });
262
+ });
263
+ },
264
+ };
265
+ },
266
+ };