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,152 @@
1
+ /**
2
+ * @fileoverview Rule to disallow negating the left operand of relational operators
3
+ * @author Toru Nagashima
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Helpers
16
+ //------------------------------------------------------------------------------
17
+
18
+ /**
19
+ * Checks whether the given operator is `in` or `instanceof`
20
+ * @param {string} op The operator type to check.
21
+ * @returns {boolean} `true` if the operator is `in` or `instanceof`
22
+ */
23
+ function isInOrInstanceOfOperator(op) {
24
+ return op === "in" || op === "instanceof";
25
+ }
26
+
27
+ /**
28
+ * Checks whether the given operator is an ordering relational operator or not.
29
+ * @param {string} op The operator type to check.
30
+ * @returns {boolean} `true` if the operator is an ordering relational operator.
31
+ */
32
+ function isOrderingRelationalOperator(op) {
33
+ return op === "<" || op === ">" || op === ">=" || op === "<=";
34
+ }
35
+
36
+ /**
37
+ * Checks whether the given node is a logical negation expression or not.
38
+ * @param {ASTNode} node The node to check.
39
+ * @returns {boolean} `true` if the node is a logical negation expression.
40
+ */
41
+ function isNegation(node) {
42
+ return node.type === "UnaryExpression" && node.operator === "!";
43
+ }
44
+
45
+ //------------------------------------------------------------------------------
46
+ // Rule Definition
47
+ //------------------------------------------------------------------------------
48
+
49
+ /** @type {import('../types').Rule.RuleModule} */
50
+ module.exports = {
51
+ meta: {
52
+ type: "problem",
53
+
54
+ defaultOptions: [
55
+ {
56
+ enforceForOrderingRelations: false,
57
+ },
58
+ ],
59
+
60
+ docs: {
61
+ description:
62
+ "Disallow negating the left operand of relational operators",
63
+ recommended: true,
64
+ url: "https://eslint.org/docs/latest/rules/no-unsafe-negation",
65
+ },
66
+
67
+ hasSuggestions: true,
68
+
69
+ schema: [
70
+ {
71
+ type: "object",
72
+ properties: {
73
+ enforceForOrderingRelations: {
74
+ type: "boolean",
75
+ },
76
+ },
77
+ additionalProperties: false,
78
+ },
79
+ ],
80
+
81
+ fixable: null,
82
+
83
+ messages: {
84
+ unexpected:
85
+ "Unexpected negating the left operand of '{{operator}}' operator.",
86
+ suggestNegatedExpression:
87
+ "Negate '{{operator}}' expression instead of its left operand. This changes the current behavior.",
88
+ suggestParenthesisedNegation:
89
+ "Wrap negation in '()' to make the intention explicit. This preserves the current behavior.",
90
+ },
91
+ },
92
+
93
+ create(context) {
94
+ const sourceCode = context.sourceCode;
95
+ const [{ enforceForOrderingRelations }] = context.options;
96
+
97
+ return {
98
+ BinaryExpression(node) {
99
+ const operator = node.operator;
100
+ const orderingRelationRuleApplies =
101
+ enforceForOrderingRelations &&
102
+ isOrderingRelationalOperator(operator);
103
+
104
+ if (
105
+ (isInOrInstanceOfOperator(operator) ||
106
+ orderingRelationRuleApplies) &&
107
+ isNegation(node.left) &&
108
+ !astUtils.isParenthesised(sourceCode, node.left)
109
+ ) {
110
+ context.report({
111
+ node,
112
+ loc: node.left.loc,
113
+ messageId: "unexpected",
114
+ data: { operator },
115
+ suggest: [
116
+ {
117
+ messageId: "suggestNegatedExpression",
118
+ data: { operator },
119
+ fix(fixer) {
120
+ const negationToken =
121
+ sourceCode.getFirstToken(node.left);
122
+ const fixRange = [
123
+ negationToken.range[1],
124
+ node.range[1],
125
+ ];
126
+ const text = sourceCode.text.slice(
127
+ fixRange[0],
128
+ fixRange[1],
129
+ );
130
+
131
+ return fixer.replaceTextRange(
132
+ fixRange,
133
+ `(${text})`,
134
+ );
135
+ },
136
+ },
137
+ {
138
+ messageId: "suggestParenthesisedNegation",
139
+ fix(fixer) {
140
+ return fixer.replaceText(
141
+ node.left,
142
+ `(${sourceCode.getText(node.left)})`,
143
+ );
144
+ },
145
+ },
146
+ ],
147
+ });
148
+ }
149
+ },
150
+ };
151
+ },
152
+ };
@@ -0,0 +1,221 @@
1
+ /**
2
+ * @fileoverview Rule to disallow unsafe optional chaining
3
+ * @author Yeon JuAn
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const UNSAFE_ARITHMETIC_OPERATORS = new Set(["+", "-", "/", "*", "%", "**"]);
9
+ const UNSAFE_ASSIGNMENT_OPERATORS = new Set([
10
+ "+=",
11
+ "-=",
12
+ "/=",
13
+ "*=",
14
+ "%=",
15
+ "**=",
16
+ ]);
17
+ const UNSAFE_RELATIONAL_OPERATORS = new Set(["in", "instanceof"]);
18
+
19
+ /**
20
+ * Checks whether a node is a destructuring pattern or not
21
+ * @param {ASTNode} node node to check
22
+ * @returns {boolean} `true` if a node is a destructuring pattern, otherwise `false`
23
+ */
24
+ function isDestructuringPattern(node) {
25
+ return node.type === "ObjectPattern" || node.type === "ArrayPattern";
26
+ }
27
+
28
+ /** @type {import('../types').Rule.RuleModule} */
29
+ module.exports = {
30
+ meta: {
31
+ type: "problem",
32
+
33
+ defaultOptions: [
34
+ {
35
+ disallowArithmeticOperators: false,
36
+ },
37
+ ],
38
+
39
+ docs: {
40
+ description:
41
+ "Disallow use of optional chaining in contexts where the `undefined` value is not allowed",
42
+ recommended: true,
43
+ url: "https://eslint.org/docs/latest/rules/no-unsafe-optional-chaining",
44
+ },
45
+ schema: [
46
+ {
47
+ type: "object",
48
+ properties: {
49
+ disallowArithmeticOperators: {
50
+ type: "boolean",
51
+ },
52
+ },
53
+ additionalProperties: false,
54
+ },
55
+ ],
56
+ fixable: null,
57
+ messages: {
58
+ unsafeOptionalChain:
59
+ "Unsafe usage of optional chaining. If it short-circuits with 'undefined' the evaluation will throw TypeError.",
60
+ unsafeArithmetic:
61
+ "Unsafe arithmetic operation on optional chaining. It can result in NaN.",
62
+ },
63
+ },
64
+
65
+ create(context) {
66
+ const [{ disallowArithmeticOperators }] = context.options;
67
+
68
+ /**
69
+ * Reports unsafe usage of optional chaining
70
+ * @param {ASTNode} node node to report
71
+ * @returns {void}
72
+ */
73
+ function reportUnsafeUsage(node) {
74
+ context.report({
75
+ messageId: "unsafeOptionalChain",
76
+ node,
77
+ });
78
+ }
79
+
80
+ /**
81
+ * Reports unsafe arithmetic operation on optional chaining
82
+ * @param {ASTNode} node node to report
83
+ * @returns {void}
84
+ */
85
+ function reportUnsafeArithmetic(node) {
86
+ context.report({
87
+ messageId: "unsafeArithmetic",
88
+ node,
89
+ });
90
+ }
91
+
92
+ /**
93
+ * Checks and reports if a node can short-circuit with `undefined` by optional chaining.
94
+ * @param {ASTNode} [node] node to check
95
+ * @param {Function} reportFunc report function
96
+ * @returns {void}
97
+ */
98
+ function checkUndefinedShortCircuit(node, reportFunc) {
99
+ if (!node) {
100
+ return;
101
+ }
102
+ switch (node.type) {
103
+ case "LogicalExpression":
104
+ if (node.operator === "||" || node.operator === "??") {
105
+ checkUndefinedShortCircuit(node.right, reportFunc);
106
+ } else if (node.operator === "&&") {
107
+ checkUndefinedShortCircuit(node.left, reportFunc);
108
+ checkUndefinedShortCircuit(node.right, reportFunc);
109
+ }
110
+ break;
111
+ case "SequenceExpression":
112
+ checkUndefinedShortCircuit(
113
+ node.expressions.at(-1),
114
+ reportFunc,
115
+ );
116
+ break;
117
+ case "ConditionalExpression":
118
+ checkUndefinedShortCircuit(node.consequent, reportFunc);
119
+ checkUndefinedShortCircuit(node.alternate, reportFunc);
120
+ break;
121
+ case "AwaitExpression":
122
+ checkUndefinedShortCircuit(node.argument, reportFunc);
123
+ break;
124
+ case "ChainExpression":
125
+ reportFunc(node);
126
+ break;
127
+ default:
128
+ break;
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Checks unsafe usage of optional chaining
134
+ * @param {ASTNode} node node to check
135
+ * @returns {void}
136
+ */
137
+ function checkUnsafeUsage(node) {
138
+ checkUndefinedShortCircuit(node, reportUnsafeUsage);
139
+ }
140
+
141
+ /**
142
+ * Checks unsafe arithmetic operations on optional chaining
143
+ * @param {ASTNode} node node to check
144
+ * @returns {void}
145
+ */
146
+ function checkUnsafeArithmetic(node) {
147
+ checkUndefinedShortCircuit(node, reportUnsafeArithmetic);
148
+ }
149
+
150
+ return {
151
+ "AssignmentExpression, AssignmentPattern"(node) {
152
+ if (isDestructuringPattern(node.left)) {
153
+ checkUnsafeUsage(node.right);
154
+ }
155
+ },
156
+ "ClassDeclaration, ClassExpression"(node) {
157
+ checkUnsafeUsage(node.superClass);
158
+ },
159
+ CallExpression(node) {
160
+ if (!node.optional) {
161
+ checkUnsafeUsage(node.callee);
162
+ }
163
+ },
164
+ NewExpression(node) {
165
+ checkUnsafeUsage(node.callee);
166
+ },
167
+ VariableDeclarator(node) {
168
+ if (isDestructuringPattern(node.id)) {
169
+ checkUnsafeUsage(node.init);
170
+ }
171
+ },
172
+ MemberExpression(node) {
173
+ if (!node.optional) {
174
+ checkUnsafeUsage(node.object);
175
+ }
176
+ },
177
+ TaggedTemplateExpression(node) {
178
+ checkUnsafeUsage(node.tag);
179
+ },
180
+ ForOfStatement(node) {
181
+ checkUnsafeUsage(node.right);
182
+ },
183
+ SpreadElement(node) {
184
+ if (node.parent && node.parent.type !== "ObjectExpression") {
185
+ checkUnsafeUsage(node.argument);
186
+ }
187
+ },
188
+ BinaryExpression(node) {
189
+ if (UNSAFE_RELATIONAL_OPERATORS.has(node.operator)) {
190
+ checkUnsafeUsage(node.right);
191
+ }
192
+ if (
193
+ disallowArithmeticOperators &&
194
+ UNSAFE_ARITHMETIC_OPERATORS.has(node.operator)
195
+ ) {
196
+ checkUnsafeArithmetic(node.right);
197
+ checkUnsafeArithmetic(node.left);
198
+ }
199
+ },
200
+ WithStatement(node) {
201
+ checkUnsafeUsage(node.object);
202
+ },
203
+ UnaryExpression(node) {
204
+ if (
205
+ disallowArithmeticOperators &&
206
+ UNSAFE_ARITHMETIC_OPERATORS.has(node.operator)
207
+ ) {
208
+ checkUnsafeArithmetic(node.argument);
209
+ }
210
+ },
211
+ AssignmentExpression(node) {
212
+ if (
213
+ disallowArithmeticOperators &&
214
+ UNSAFE_ASSIGNMENT_OPERATORS.has(node.operator)
215
+ ) {
216
+ checkUnsafeArithmetic(node.right);
217
+ }
218
+ },
219
+ };
220
+ },
221
+ };
@@ -0,0 +1,227 @@
1
+ /**
2
+ * @fileoverview Flag expressions in statement position that do not side effect
3
+ * @author Michael Ficarra
4
+ */
5
+ "use strict";
6
+
7
+ const astUtils = require("./utils/ast-utils");
8
+
9
+ //------------------------------------------------------------------------------
10
+ // Rule Definition
11
+ //------------------------------------------------------------------------------
12
+
13
+ /**
14
+ * Returns `true`.
15
+ * @returns {boolean} `true`.
16
+ */
17
+ function alwaysTrue() {
18
+ return true;
19
+ }
20
+
21
+ /**
22
+ * Returns `false`.
23
+ * @returns {boolean} `false`.
24
+ */
25
+ function alwaysFalse() {
26
+ return false;
27
+ }
28
+
29
+ /** @type {import('../types').Rule.RuleModule} */
30
+ module.exports = {
31
+ meta: {
32
+ dialects: ["javascript", "typescript"],
33
+ language: "javascript",
34
+ type: "suggestion",
35
+
36
+ docs: {
37
+ description: "Disallow unused expressions",
38
+ recommended: false,
39
+ url: "https://eslint.org/docs/latest/rules/no-unused-expressions",
40
+ },
41
+
42
+ schema: [
43
+ {
44
+ type: "object",
45
+ properties: {
46
+ allowShortCircuit: {
47
+ type: "boolean",
48
+ },
49
+ allowTernary: {
50
+ type: "boolean",
51
+ },
52
+ allowTaggedTemplates: {
53
+ type: "boolean",
54
+ },
55
+ enforceForJSX: {
56
+ type: "boolean",
57
+ },
58
+ ignoreDirectives: {
59
+ type: "boolean",
60
+ },
61
+ },
62
+ additionalProperties: false,
63
+ },
64
+ ],
65
+
66
+ defaultOptions: [
67
+ {
68
+ allowShortCircuit: false,
69
+ allowTernary: false,
70
+ allowTaggedTemplates: false,
71
+ enforceForJSX: false,
72
+ ignoreDirectives: false,
73
+ },
74
+ ],
75
+
76
+ messages: {
77
+ unusedExpression:
78
+ "Expected an assignment or function call and instead saw an expression.",
79
+ },
80
+ },
81
+
82
+ create(context) {
83
+ const [
84
+ {
85
+ allowShortCircuit,
86
+ allowTernary,
87
+ allowTaggedTemplates,
88
+ enforceForJSX,
89
+ ignoreDirectives,
90
+ },
91
+ ] = context.options;
92
+
93
+ /**
94
+ * Has AST suggesting a directive.
95
+ * @param {ASTNode} node any node
96
+ * @returns {boolean} whether the given node structurally represents a directive
97
+ */
98
+ function looksLikeDirective(node) {
99
+ return (
100
+ node.type === "ExpressionStatement" &&
101
+ node.expression.type === "Literal" &&
102
+ typeof node.expression.value === "string"
103
+ );
104
+ }
105
+
106
+ /**
107
+ * Gets the leading sequence of members in a list that pass the predicate.
108
+ * @param {Function} predicate ([a] -> Boolean) the function used to make the determination
109
+ * @param {a[]} list the input list
110
+ * @returns {a[]} the leading sequence of members in the given list that pass the given predicate
111
+ */
112
+ function takeWhile(predicate, list) {
113
+ for (let i = 0; i < list.length; ++i) {
114
+ if (!predicate(list[i])) {
115
+ return list.slice(0, i);
116
+ }
117
+ }
118
+ return list.slice();
119
+ }
120
+
121
+ /**
122
+ * Gets leading directives nodes in a Node body.
123
+ * @param {ASTNode} node a Program or BlockStatement node
124
+ * @returns {ASTNode[]} the leading sequence of directive nodes in the given node's body
125
+ */
126
+ function directives(node) {
127
+ return takeWhile(looksLikeDirective, node.body);
128
+ }
129
+
130
+ /**
131
+ * Detect if a Node is a directive.
132
+ * @param {ASTNode} node any node
133
+ * @returns {boolean} whether the given node is considered a directive in its current position
134
+ */
135
+ function isDirective(node) {
136
+ /**
137
+ * https://tc39.es/ecma262/#directive-prologue
138
+ *
139
+ * Only `FunctionBody`, `ScriptBody` and `ModuleBody` can have directive prologue.
140
+ * Class static blocks do not have directive prologue.
141
+ */
142
+ return (
143
+ astUtils.isTopLevelExpressionStatement(node) &&
144
+ directives(node.parent).includes(node)
145
+ );
146
+ }
147
+
148
+ /**
149
+ * The member functions return `true` if the type has no side-effects.
150
+ * Unknown nodes are handled as `false`, then this rule ignores those.
151
+ */
152
+ const Checker = Object.assign(Object.create(null), {
153
+ isDisallowed(node) {
154
+ return (Checker[node.type] || alwaysFalse)(node);
155
+ },
156
+
157
+ ArrayExpression: alwaysTrue,
158
+ ArrowFunctionExpression: alwaysTrue,
159
+ BinaryExpression: alwaysTrue,
160
+ ChainExpression(node) {
161
+ return Checker.isDisallowed(node.expression);
162
+ },
163
+ ClassExpression: alwaysTrue,
164
+ ConditionalExpression(node) {
165
+ if (allowTernary) {
166
+ return (
167
+ Checker.isDisallowed(node.consequent) ||
168
+ Checker.isDisallowed(node.alternate)
169
+ );
170
+ }
171
+ return true;
172
+ },
173
+ FunctionExpression: alwaysTrue,
174
+ Identifier: alwaysTrue,
175
+ JSXElement() {
176
+ return enforceForJSX;
177
+ },
178
+ JSXFragment() {
179
+ return enforceForJSX;
180
+ },
181
+ Literal: alwaysTrue,
182
+ LogicalExpression(node) {
183
+ if (allowShortCircuit) {
184
+ return Checker.isDisallowed(node.right);
185
+ }
186
+ return true;
187
+ },
188
+ MemberExpression: alwaysTrue,
189
+ MetaProperty: alwaysTrue,
190
+ ObjectExpression: alwaysTrue,
191
+ SequenceExpression: alwaysTrue,
192
+ TaggedTemplateExpression() {
193
+ return !allowTaggedTemplates;
194
+ },
195
+ TemplateLiteral: alwaysTrue,
196
+ ThisExpression: alwaysTrue,
197
+ UnaryExpression(node) {
198
+ return node.operator !== "void" && node.operator !== "delete";
199
+ },
200
+ // TypeScript-specific node types
201
+ TSAsExpression(node) {
202
+ return Checker.isDisallowed(node.expression);
203
+ },
204
+ TSTypeAssertion(node) {
205
+ return Checker.isDisallowed(node.expression);
206
+ },
207
+ TSNonNullExpression(node) {
208
+ return Checker.isDisallowed(node.expression);
209
+ },
210
+ TSInstantiationExpression(node) {
211
+ return Checker.isDisallowed(node.expression);
212
+ },
213
+ });
214
+
215
+ return {
216
+ ExpressionStatement(node) {
217
+ if (
218
+ Checker.isDisallowed(node.expression) &&
219
+ !astUtils.isDirective(node) &&
220
+ !(ignoreDirectives && isDirective(node))
221
+ ) {
222
+ context.report({ node, messageId: "unusedExpression" });
223
+ }
224
+ },
225
+ };
226
+ },
227
+ };