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,249 @@
1
+ /**
2
+ * @fileoverview Restrict usage of specified node modules.
3
+ * @author Christian Schulz
4
+ * @deprecated in ESLint v7.0.0
5
+ */
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Rule Definition
16
+ //------------------------------------------------------------------------------
17
+
18
+ const ignore = require("ignore");
19
+
20
+ const arrayOfStrings = {
21
+ type: "array",
22
+ items: { type: "string" },
23
+ uniqueItems: true,
24
+ };
25
+
26
+ const arrayOfStringsOrObjects = {
27
+ type: "array",
28
+ items: {
29
+ anyOf: [
30
+ { type: "string" },
31
+ {
32
+ type: "object",
33
+ properties: {
34
+ name: { type: "string" },
35
+ message: {
36
+ type: "string",
37
+ minLength: 1,
38
+ },
39
+ },
40
+ additionalProperties: false,
41
+ required: ["name"],
42
+ },
43
+ ],
44
+ },
45
+ uniqueItems: true,
46
+ };
47
+
48
+ /** @type {import('../types').Rule.RuleModule} */
49
+ module.exports = {
50
+ meta: {
51
+ deprecated: {
52
+ message: "Node.js rules were moved out of ESLint core.",
53
+ url: "https://eslint.org/docs/latest/use/migrating-to-7.0.0#deprecate-node-rules",
54
+ deprecatedSince: "7.0.0",
55
+ availableUntil: "11.0.0",
56
+ replacedBy: [
57
+ {
58
+ message:
59
+ "eslint-plugin-n now maintains deprecated Node.js-related rules.",
60
+ plugin: {
61
+ name: "eslint-plugin-n",
62
+ url: "https://github.com/eslint-community/eslint-plugin-n",
63
+ },
64
+ rule: {
65
+ name: "no-restricted-require",
66
+ url: "https://github.com/eslint-community/eslint-plugin-n/tree/master/docs/rules/no-restricted-require.md",
67
+ },
68
+ },
69
+ ],
70
+ },
71
+
72
+ type: "suggestion",
73
+
74
+ docs: {
75
+ description: "Disallow specified modules when loaded by `require`",
76
+ recommended: false,
77
+ url: "https://eslint.org/docs/latest/rules/no-restricted-modules",
78
+ },
79
+
80
+ schema: {
81
+ anyOf: [
82
+ arrayOfStringsOrObjects,
83
+ {
84
+ type: "array",
85
+ items: {
86
+ type: "object",
87
+ properties: {
88
+ paths: arrayOfStringsOrObjects,
89
+ patterns: arrayOfStrings,
90
+ },
91
+ additionalProperties: false,
92
+ },
93
+ additionalItems: false,
94
+ },
95
+ ],
96
+ },
97
+
98
+ messages: {
99
+ defaultMessage: "'{{name}}' module is restricted from being used.",
100
+ customMessage:
101
+ // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
102
+ "'{{name}}' module is restricted from being used. {{customMessage}}",
103
+ patternMessage:
104
+ "'{{name}}' module is restricted from being used by a pattern.",
105
+ },
106
+ },
107
+
108
+ create(context) {
109
+ const options = Array.isArray(context.options) ? context.options : [];
110
+ const isPathAndPatternsObject =
111
+ typeof options[0] === "object" &&
112
+ (Object.hasOwn(options[0], "paths") ||
113
+ Object.hasOwn(options[0], "patterns"));
114
+
115
+ const restrictedPaths =
116
+ (isPathAndPatternsObject ? options[0].paths : context.options) ||
117
+ [];
118
+ const restrictedPatterns =
119
+ (isPathAndPatternsObject ? options[0].patterns : []) || [];
120
+
121
+ const restrictedPathMessages = restrictedPaths.reduce(
122
+ (memo, importName) => {
123
+ if (typeof importName === "string") {
124
+ memo[importName] = null;
125
+ } else {
126
+ memo[importName.name] = importName.message;
127
+ }
128
+ return memo;
129
+ },
130
+ {},
131
+ );
132
+
133
+ // if no imports are restricted we don't need to check
134
+ if (
135
+ Object.keys(restrictedPaths).length === 0 &&
136
+ restrictedPatterns.length === 0
137
+ ) {
138
+ return {};
139
+ }
140
+
141
+ // relative paths are supported for this rule
142
+ const ig = ignore({ allowRelativePaths: true }).add(restrictedPatterns);
143
+
144
+ /**
145
+ * Function to check if a node is a string literal.
146
+ * @param {ASTNode} node The node to check.
147
+ * @returns {boolean} If the node is a string literal.
148
+ */
149
+ function isStringLiteral(node) {
150
+ return (
151
+ node &&
152
+ node.type === "Literal" &&
153
+ typeof node.value === "string"
154
+ );
155
+ }
156
+
157
+ /**
158
+ * Function to check if a node is a require call.
159
+ * @param {ASTNode} node The node to check.
160
+ * @returns {boolean} If the node is a require call.
161
+ */
162
+ function isRequireCall(node) {
163
+ return (
164
+ node.callee.type === "Identifier" &&
165
+ node.callee.name === "require"
166
+ );
167
+ }
168
+
169
+ /**
170
+ * Extract string from Literal or TemplateLiteral node
171
+ * @param {ASTNode} node The node to extract from
172
+ * @returns {string|null} Extracted string or null if node doesn't represent a string
173
+ */
174
+ function getFirstArgumentString(node) {
175
+ if (isStringLiteral(node)) {
176
+ return node.value.trim();
177
+ }
178
+
179
+ if (astUtils.isStaticTemplateLiteral(node)) {
180
+ return node.quasis[0].value.cooked.trim();
181
+ }
182
+
183
+ return null;
184
+ }
185
+
186
+ /**
187
+ * Report a restricted path.
188
+ * @param {node} node representing the restricted path reference
189
+ * @param {string} name restricted path
190
+ * @returns {void}
191
+ * @private
192
+ */
193
+ function reportPath(node, name) {
194
+ const customMessage = restrictedPathMessages[name];
195
+ const messageId = customMessage
196
+ ? "customMessage"
197
+ : "defaultMessage";
198
+
199
+ context.report({
200
+ node,
201
+ messageId,
202
+ data: {
203
+ name,
204
+ customMessage,
205
+ },
206
+ });
207
+ }
208
+
209
+ /**
210
+ * Check if the given name is a restricted path name
211
+ * @param {string} name name of a variable
212
+ * @returns {boolean} whether the variable is a restricted path or not
213
+ * @private
214
+ */
215
+ function isRestrictedPath(name) {
216
+ return Object.hasOwn(restrictedPathMessages, name);
217
+ }
218
+
219
+ return {
220
+ CallExpression(node) {
221
+ if (isRequireCall(node)) {
222
+ // node has arguments
223
+ if (node.arguments.length) {
224
+ const name = getFirstArgumentString(node.arguments[0]);
225
+
226
+ // if first argument is a string literal or a static string template literal
227
+ if (name) {
228
+ // check if argument value is in restricted modules array
229
+ if (isRestrictedPath(name)) {
230
+ reportPath(node, name);
231
+ }
232
+
233
+ if (
234
+ restrictedPatterns.length > 0 &&
235
+ ig.ignores(name)
236
+ ) {
237
+ context.report({
238
+ node,
239
+ messageId: "patternMessage",
240
+ data: { name },
241
+ });
242
+ }
243
+ }
244
+ }
245
+ }
246
+ },
247
+ };
248
+ },
249
+ };
@@ -0,0 +1,233 @@
1
+ /**
2
+ * @fileoverview Rule to disallow certain object properties
3
+ * @author Will Klein & Eli White
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const astUtils = require("./utils/ast-utils");
9
+
10
+ //------------------------------------------------------------------------------
11
+ // Rule Definition
12
+ //------------------------------------------------------------------------------
13
+
14
+ /** @type {import('../types').Rule.RuleModule} */
15
+ module.exports = {
16
+ meta: {
17
+ type: "suggestion",
18
+
19
+ docs: {
20
+ description: "Disallow certain properties on certain objects",
21
+ recommended: false,
22
+ url: "https://eslint.org/docs/latest/rules/no-restricted-properties",
23
+ },
24
+
25
+ schema: {
26
+ type: "array",
27
+ items: {
28
+ type: "object",
29
+ properties: {
30
+ object: {
31
+ type: "string",
32
+ },
33
+ property: {
34
+ type: "string",
35
+ },
36
+ allowObjects: {
37
+ type: "array",
38
+ items: {
39
+ type: "string",
40
+ },
41
+ uniqueItems: true,
42
+ },
43
+ allowProperties: {
44
+ type: "array",
45
+ items: {
46
+ type: "string",
47
+ },
48
+ uniqueItems: true,
49
+ },
50
+ message: {
51
+ type: "string",
52
+ },
53
+ },
54
+ anyOf: [
55
+ {
56
+ required: ["object"],
57
+ },
58
+ {
59
+ required: ["property"],
60
+ },
61
+ ],
62
+ not: {
63
+ anyOf: [
64
+ { required: ["allowObjects", "object"] },
65
+ { required: ["allowProperties", "property"] },
66
+ ],
67
+ },
68
+ additionalProperties: false,
69
+ },
70
+ uniqueItems: true,
71
+ },
72
+
73
+ messages: {
74
+ restrictedObjectProperty:
75
+ // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
76
+ "'{{objectName}}.{{propertyName}}' is restricted from being used.{{allowedPropertiesMessage}}{{message}}",
77
+ restrictedProperty:
78
+ // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
79
+ "'{{propertyName}}' is restricted from being used.{{allowedObjectsMessage}}{{message}}",
80
+ },
81
+ },
82
+
83
+ create(context) {
84
+ const restrictedCalls = context.options;
85
+
86
+ if (restrictedCalls.length === 0) {
87
+ return {};
88
+ }
89
+
90
+ const restrictedProperties = new Map();
91
+ const globallyRestrictedObjects = new Map();
92
+ const globallyRestrictedProperties = new Map();
93
+
94
+ restrictedCalls.forEach(option => {
95
+ const objectName = option.object;
96
+ const propertyName = option.property;
97
+
98
+ if (typeof objectName === "undefined") {
99
+ globallyRestrictedProperties.set(propertyName, {
100
+ allowObjects: option.allowObjects,
101
+ message: option.message,
102
+ });
103
+ } else if (typeof propertyName === "undefined") {
104
+ globallyRestrictedObjects.set(objectName, {
105
+ allowProperties: option.allowProperties,
106
+ message: option.message,
107
+ });
108
+ } else {
109
+ if (!restrictedProperties.has(objectName)) {
110
+ restrictedProperties.set(objectName, new Map());
111
+ }
112
+
113
+ restrictedProperties.get(objectName).set(propertyName, {
114
+ message: option.message,
115
+ });
116
+ }
117
+ });
118
+
119
+ /**
120
+ * Checks if a name is in the allowed list.
121
+ * @param {string} name The name to check
122
+ * @param {string[]} [allowedList] The list of allowed names
123
+ * @returns {boolean} True if the name is allowed, false otherwise
124
+ */
125
+ function isAllowed(name, allowedList) {
126
+ if (!allowedList) {
127
+ return false;
128
+ }
129
+
130
+ return allowedList.includes(name);
131
+ }
132
+
133
+ /**
134
+ * Checks to see whether a property access is restricted, and reports it if so.
135
+ * @param {ASTNode} node The node to report
136
+ * @param {string} objectName The name of the object
137
+ * @param {string} propertyName The name of the property
138
+ * @returns {undefined}
139
+ */
140
+ function checkPropertyAccess(node, objectName, propertyName) {
141
+ if (propertyName === null) {
142
+ return;
143
+ }
144
+ const matchedObject = restrictedProperties.get(objectName);
145
+ const matchedObjectProperty = matchedObject
146
+ ? matchedObject.get(propertyName)
147
+ : globallyRestrictedObjects.get(objectName);
148
+ const globalMatchedProperty =
149
+ globallyRestrictedProperties.get(propertyName);
150
+
151
+ if (
152
+ matchedObjectProperty &&
153
+ !isAllowed(propertyName, matchedObjectProperty.allowProperties)
154
+ ) {
155
+ const message = matchedObjectProperty.message
156
+ ? ` ${matchedObjectProperty.message}`
157
+ : "";
158
+ const allowedPropertiesMessage =
159
+ matchedObjectProperty.allowProperties
160
+ ? ` Only these properties are allowed: ${matchedObjectProperty.allowProperties.join(", ")}.`
161
+ : "";
162
+
163
+ context.report({
164
+ node,
165
+ messageId: "restrictedObjectProperty",
166
+ data: {
167
+ objectName,
168
+ propertyName,
169
+ message,
170
+ allowedPropertiesMessage,
171
+ },
172
+ });
173
+ } else if (
174
+ globalMatchedProperty &&
175
+ !isAllowed(objectName, globalMatchedProperty.allowObjects)
176
+ ) {
177
+ const message = globalMatchedProperty.message
178
+ ? ` ${globalMatchedProperty.message}`
179
+ : "";
180
+ const allowedObjectsMessage = globalMatchedProperty.allowObjects
181
+ ? ` Property '${propertyName}' is only allowed on these objects: ${globalMatchedProperty.allowObjects.join(", ")}.`
182
+ : "";
183
+
184
+ context.report({
185
+ node,
186
+ messageId: "restrictedProperty",
187
+ data: {
188
+ propertyName,
189
+ message,
190
+ allowedObjectsMessage,
191
+ },
192
+ });
193
+ }
194
+ }
195
+
196
+ return {
197
+ MemberExpression(node) {
198
+ checkPropertyAccess(
199
+ node,
200
+ node.object && node.object.name,
201
+ astUtils.getStaticPropertyName(node),
202
+ );
203
+ },
204
+ ObjectPattern(node) {
205
+ let objectName = null;
206
+
207
+ if (node.parent.type === "VariableDeclarator") {
208
+ if (
209
+ node.parent.init &&
210
+ node.parent.init.type === "Identifier"
211
+ ) {
212
+ objectName = node.parent.init.name;
213
+ }
214
+ } else if (
215
+ node.parent.type === "AssignmentExpression" ||
216
+ node.parent.type === "AssignmentPattern"
217
+ ) {
218
+ if (node.parent.right.type === "Identifier") {
219
+ objectName = node.parent.right.name;
220
+ }
221
+ }
222
+
223
+ node.properties.forEach(property => {
224
+ checkPropertyAccess(
225
+ node,
226
+ objectName,
227
+ astUtils.getStaticPropertyName(property),
228
+ );
229
+ });
230
+ },
231
+ };
232
+ },
233
+ };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @fileoverview Rule to flag use of certain node types
3
+ * @author Burak Yigit Kaya
4
+ */
5
+ "use strict";
6
+
7
+ //------------------------------------------------------------------------------
8
+ // Rule Definition
9
+ //------------------------------------------------------------------------------
10
+
11
+ /** @type {import('../types').Rule.RuleModule} */
12
+ module.exports = {
13
+ meta: {
14
+ type: "suggestion",
15
+
16
+ docs: {
17
+ description: "Disallow specified syntax",
18
+ recommended: false,
19
+ url: "https://eslint.org/docs/latest/rules/no-restricted-syntax",
20
+ },
21
+
22
+ schema: {
23
+ type: "array",
24
+ items: {
25
+ oneOf: [
26
+ {
27
+ type: "string",
28
+ },
29
+ {
30
+ type: "object",
31
+ properties: {
32
+ selector: { type: "string" },
33
+ message: { type: "string" },
34
+ },
35
+ required: ["selector"],
36
+ additionalProperties: false,
37
+ },
38
+ ],
39
+ },
40
+ uniqueItems: true,
41
+ minItems: 0,
42
+ },
43
+
44
+ messages: {
45
+ // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
46
+ restrictedSyntax: "{{message}}",
47
+ },
48
+ },
49
+
50
+ create(context) {
51
+ return context.options.reduce((result, selectorOrObject) => {
52
+ const isStringFormat = typeof selectorOrObject === "string";
53
+ const hasCustomMessage =
54
+ !isStringFormat && Boolean(selectorOrObject.message);
55
+
56
+ const selector = isStringFormat
57
+ ? selectorOrObject
58
+ : selectorOrObject.selector;
59
+ const message = hasCustomMessage
60
+ ? selectorOrObject.message
61
+ : `Using '${selector}' is not allowed.`;
62
+
63
+ return Object.assign(result, {
64
+ [selector](node) {
65
+ context.report({
66
+ node,
67
+ messageId: "restrictedSyntax",
68
+ data: { message },
69
+ });
70
+ },
71
+ });
72
+ }, {});
73
+ },
74
+ };
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @fileoverview Rule to flag when return statement contains assignment
3
+ * @author Ilya Volodin
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 SENTINEL_TYPE =
18
+ /^(?:[a-zA-Z]+?Statement|ArrowFunctionExpression|FunctionExpression|ClassExpression)$/u;
19
+
20
+ //------------------------------------------------------------------------------
21
+ // Rule Definition
22
+ //------------------------------------------------------------------------------
23
+
24
+ /** @type {import('../types').Rule.RuleModule} */
25
+ module.exports = {
26
+ meta: {
27
+ type: "suggestion",
28
+
29
+ defaultOptions: ["except-parens"],
30
+
31
+ docs: {
32
+ description: "Disallow assignment operators in `return` statements",
33
+ recommended: false,
34
+ url: "https://eslint.org/docs/latest/rules/no-return-assign",
35
+ },
36
+
37
+ schema: [
38
+ {
39
+ enum: ["except-parens", "always"],
40
+ },
41
+ ],
42
+
43
+ messages: {
44
+ returnAssignment: "Return statement should not contain assignment.",
45
+ arrowAssignment: "Arrow function should not return assignment.",
46
+ },
47
+ },
48
+
49
+ create(context) {
50
+ const always = context.options[0] !== "except-parens";
51
+ const sourceCode = context.sourceCode;
52
+
53
+ return {
54
+ AssignmentExpression(node) {
55
+ if (!always && astUtils.isParenthesised(sourceCode, node)) {
56
+ return;
57
+ }
58
+
59
+ let currentChild = node;
60
+ let parent = currentChild.parent;
61
+
62
+ // Find ReturnStatement or ArrowFunctionExpression in ancestors.
63
+ while (parent && !SENTINEL_TYPE.test(parent.type)) {
64
+ currentChild = parent;
65
+ parent = parent.parent;
66
+ }
67
+
68
+ // Reports.
69
+ if (parent && parent.type === "ReturnStatement") {
70
+ context.report({
71
+ node: parent,
72
+ messageId: "returnAssignment",
73
+ });
74
+ } else if (
75
+ parent &&
76
+ parent.type === "ArrowFunctionExpression" &&
77
+ parent.body === currentChild
78
+ ) {
79
+ context.report({
80
+ node: parent,
81
+ messageId: "arrowAssignment",
82
+ });
83
+ }
84
+ },
85
+ };
86
+ },
87
+ };