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,319 @@
1
+ /**
2
+ * @fileoverview Rule to enforce sorted `import` declarations within modules
3
+ * @author Christian Schuller
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Rule Definition
10
+ //------------------------------------------------------------------------------
11
+
12
+ /** @type {import('../types').Rule.RuleModule} */
13
+ module.exports = {
14
+ meta: {
15
+ type: "suggestion",
16
+
17
+ defaultOptions: [
18
+ {
19
+ allowSeparatedGroups: false,
20
+ ignoreCase: false,
21
+ ignoreDeclarationSort: false,
22
+ ignoreMemberSort: false,
23
+ memberSyntaxSortOrder: ["none", "all", "multiple", "single"],
24
+ },
25
+ ],
26
+
27
+ docs: {
28
+ description: "Enforce sorted `import` declarations within modules",
29
+ recommended: false,
30
+ frozen: true,
31
+ url: "https://eslint.org/docs/latest/rules/sort-imports",
32
+ },
33
+
34
+ schema: [
35
+ {
36
+ type: "object",
37
+ properties: {
38
+ ignoreCase: {
39
+ type: "boolean",
40
+ },
41
+ memberSyntaxSortOrder: {
42
+ type: "array",
43
+ items: {
44
+ enum: ["none", "all", "multiple", "single"],
45
+ },
46
+ uniqueItems: true,
47
+ minItems: 4,
48
+ maxItems: 4,
49
+ },
50
+ ignoreDeclarationSort: {
51
+ type: "boolean",
52
+ },
53
+ ignoreMemberSort: {
54
+ type: "boolean",
55
+ },
56
+ allowSeparatedGroups: {
57
+ type: "boolean",
58
+ },
59
+ },
60
+ additionalProperties: false,
61
+ },
62
+ ],
63
+
64
+ fixable: "code",
65
+
66
+ messages: {
67
+ sortImportsAlphabetically:
68
+ "Imports should be sorted alphabetically.",
69
+ sortMembersAlphabetically:
70
+ "Member '{{memberName}}' of the import declaration should be sorted alphabetically.",
71
+ unexpectedSyntaxOrder:
72
+ "Expected '{{syntaxA}}' syntax before '{{syntaxB}}' syntax.",
73
+ },
74
+ },
75
+
76
+ create(context) {
77
+ const [
78
+ {
79
+ ignoreCase,
80
+ ignoreDeclarationSort,
81
+ ignoreMemberSort,
82
+ memberSyntaxSortOrder,
83
+ allowSeparatedGroups,
84
+ },
85
+ ] = context.options;
86
+ const sourceCode = context.sourceCode;
87
+ let previousDeclaration = null;
88
+
89
+ /**
90
+ * Gets the used member syntax style.
91
+ *
92
+ * import "my-module.js" --> none
93
+ * import * as myModule from "my-module.js" --> all
94
+ * import {myMember} from "my-module.js" --> single
95
+ * import {foo, bar} from "my-module.js" --> multiple
96
+ * @param {ASTNode} node the ImportDeclaration node.
97
+ * @returns {string} used member parameter style, ["all", "multiple", "single"]
98
+ */
99
+ function usedMemberSyntax(node) {
100
+ if (node.specifiers.length === 0) {
101
+ return "none";
102
+ }
103
+ if (node.specifiers[0].type === "ImportNamespaceSpecifier") {
104
+ return "all";
105
+ }
106
+ if (node.specifiers.length === 1) {
107
+ return "single";
108
+ }
109
+ return "multiple";
110
+ }
111
+
112
+ /**
113
+ * Gets the group by member parameter index for given declaration.
114
+ * @param {ASTNode} node the ImportDeclaration node.
115
+ * @returns {number} the declaration group by member index.
116
+ */
117
+ function getMemberParameterGroupIndex(node) {
118
+ return memberSyntaxSortOrder.indexOf(usedMemberSyntax(node));
119
+ }
120
+
121
+ /**
122
+ * Gets the local name of the first imported module.
123
+ * @param {ASTNode} node the ImportDeclaration node.
124
+ * @returns {?string} the local name of the first imported module.
125
+ */
126
+ function getFirstLocalMemberName(node) {
127
+ if (node.specifiers[0]) {
128
+ return node.specifiers[0].local.name;
129
+ }
130
+ return null;
131
+ }
132
+
133
+ /**
134
+ * Calculates number of lines between two nodes. It is assumed that the given `left` node appears before
135
+ * the given `right` node in the source code. Lines are counted from the end of the `left` node till the
136
+ * start of the `right` node. If the given nodes are on the same line, it returns `0`, same as if they were
137
+ * on two consecutive lines.
138
+ * @param {ASTNode} left node that appears before the given `right` node.
139
+ * @param {ASTNode} right node that appears after the given `left` node.
140
+ * @returns {number} number of lines between nodes.
141
+ */
142
+ function getNumberOfLinesBetween(left, right) {
143
+ return Math.max(right.loc.start.line - left.loc.end.line - 1, 0);
144
+ }
145
+
146
+ return {
147
+ ImportDeclaration(node) {
148
+ if (!ignoreDeclarationSort) {
149
+ if (
150
+ previousDeclaration &&
151
+ allowSeparatedGroups &&
152
+ getNumberOfLinesBetween(previousDeclaration, node) > 0
153
+ ) {
154
+ // reset declaration sort
155
+ previousDeclaration = null;
156
+ }
157
+
158
+ if (previousDeclaration) {
159
+ const currentMemberSyntaxGroupIndex =
160
+ getMemberParameterGroupIndex(node),
161
+ previousMemberSyntaxGroupIndex =
162
+ getMemberParameterGroupIndex(
163
+ previousDeclaration,
164
+ );
165
+ let currentLocalMemberName =
166
+ getFirstLocalMemberName(node),
167
+ previousLocalMemberName =
168
+ getFirstLocalMemberName(previousDeclaration);
169
+
170
+ if (ignoreCase) {
171
+ previousLocalMemberName =
172
+ previousLocalMemberName &&
173
+ previousLocalMemberName.toLowerCase();
174
+ currentLocalMemberName =
175
+ currentLocalMemberName &&
176
+ currentLocalMemberName.toLowerCase();
177
+ }
178
+
179
+ /*
180
+ * When the current declaration uses a different member syntax,
181
+ * then check if the ordering is correct.
182
+ * Otherwise, make a default string compare (like rule sort-vars to be consistent) of the first used local member name.
183
+ */
184
+ if (
185
+ currentMemberSyntaxGroupIndex !==
186
+ previousMemberSyntaxGroupIndex
187
+ ) {
188
+ if (
189
+ currentMemberSyntaxGroupIndex <
190
+ previousMemberSyntaxGroupIndex
191
+ ) {
192
+ context.report({
193
+ node,
194
+ messageId: "unexpectedSyntaxOrder",
195
+ data: {
196
+ syntaxA:
197
+ memberSyntaxSortOrder[
198
+ currentMemberSyntaxGroupIndex
199
+ ],
200
+ syntaxB:
201
+ memberSyntaxSortOrder[
202
+ previousMemberSyntaxGroupIndex
203
+ ],
204
+ },
205
+ });
206
+ }
207
+ } else {
208
+ if (
209
+ previousLocalMemberName &&
210
+ currentLocalMemberName &&
211
+ currentLocalMemberName < previousLocalMemberName
212
+ ) {
213
+ context.report({
214
+ node,
215
+ messageId: "sortImportsAlphabetically",
216
+ });
217
+ }
218
+ }
219
+ }
220
+
221
+ previousDeclaration = node;
222
+ }
223
+
224
+ if (!ignoreMemberSort) {
225
+ const importSpecifiers = node.specifiers.filter(
226
+ specifier => specifier.type === "ImportSpecifier",
227
+ );
228
+ const getSortableName = ignoreCase
229
+ ? specifier => specifier.local.name.toLowerCase()
230
+ : specifier => specifier.local.name;
231
+ const firstUnsortedIndex = importSpecifiers
232
+ .map(getSortableName)
233
+ .findIndex(
234
+ (name, index, array) => array[index - 1] > name,
235
+ );
236
+
237
+ if (firstUnsortedIndex !== -1) {
238
+ context.report({
239
+ node: importSpecifiers[firstUnsortedIndex],
240
+ messageId: "sortMembersAlphabetically",
241
+ data: {
242
+ memberName:
243
+ importSpecifiers[firstUnsortedIndex].local
244
+ .name,
245
+ },
246
+ fix(fixer) {
247
+ if (
248
+ importSpecifiers.some(
249
+ specifier =>
250
+ sourceCode.getCommentsBefore(
251
+ specifier,
252
+ ).length ||
253
+ sourceCode.getCommentsAfter(
254
+ specifier,
255
+ ).length,
256
+ )
257
+ ) {
258
+ // If there are comments in the ImportSpecifier list, don't rearrange the specifiers.
259
+ return null;
260
+ }
261
+
262
+ return fixer.replaceTextRange(
263
+ [
264
+ importSpecifiers[0].range[0],
265
+ importSpecifiers.at(-1).range[1],
266
+ ],
267
+ importSpecifiers
268
+
269
+ // Clone the importSpecifiers array to avoid mutating it
270
+ .slice()
271
+
272
+ // Sort the array into the desired order
273
+ .sort((specifierA, specifierB) => {
274
+ const aName =
275
+ getSortableName(specifierA);
276
+ const bName =
277
+ getSortableName(specifierB);
278
+
279
+ return aName > bName ? 1 : -1;
280
+ })
281
+
282
+ // Build a string out of the sorted list of import specifiers and the text between the originals
283
+ .reduce(
284
+ (sourceText, specifier, index) => {
285
+ const textAfterSpecifier =
286
+ index ===
287
+ importSpecifiers.length - 1
288
+ ? ""
289
+ : sourceCode
290
+ .getText()
291
+ .slice(
292
+ importSpecifiers[
293
+ index
294
+ ].range[1],
295
+ importSpecifiers[
296
+ index +
297
+ 1
298
+ ].range[0],
299
+ );
300
+
301
+ return (
302
+ sourceText +
303
+ sourceCode.getText(
304
+ specifier,
305
+ ) +
306
+ textAfterSpecifier
307
+ );
308
+ },
309
+ "",
310
+ ),
311
+ );
312
+ },
313
+ });
314
+ }
315
+ }
316
+ },
317
+ };
318
+ },
319
+ };
@@ -0,0 +1,268 @@
1
+ /**
2
+ * @fileoverview Rule to require object keys to be sorted
3
+ * @author Toru Nagashima
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils"),
13
+ naturalCompare = require("natural-compare");
14
+
15
+ //------------------------------------------------------------------------------
16
+ // Helpers
17
+ //------------------------------------------------------------------------------
18
+
19
+ /**
20
+ * Gets the property name of the given `Property` node.
21
+ *
22
+ * - If the property's key is an `Identifier` node, this returns the key's name
23
+ * whether it's a computed property or not.
24
+ * - If the property has a static name, this returns the static name.
25
+ * - Otherwise, this returns null.
26
+ * @param {ASTNode} node The `Property` node to get.
27
+ * @returns {string|null} The property name or null.
28
+ * @private
29
+ */
30
+ function getPropertyName(node) {
31
+ const staticName = astUtils.getStaticPropertyName(node);
32
+
33
+ if (staticName !== null) {
34
+ return staticName;
35
+ }
36
+
37
+ return node.key.name || null;
38
+ }
39
+
40
+ /**
41
+ * Functions which check that the given 2 names are in specific order.
42
+ *
43
+ * Postfix `I` is meant insensitive.
44
+ * Postfix `N` is meant natural.
45
+ * @private
46
+ */
47
+ const isValidOrders = {
48
+ asc(a, b) {
49
+ return a <= b;
50
+ },
51
+ ascI(a, b) {
52
+ return a.toLowerCase() <= b.toLowerCase();
53
+ },
54
+ ascN(a, b) {
55
+ return naturalCompare(a, b) <= 0;
56
+ },
57
+ ascIN(a, b) {
58
+ return naturalCompare(a.toLowerCase(), b.toLowerCase()) <= 0;
59
+ },
60
+ desc(a, b) {
61
+ return isValidOrders.asc(b, a);
62
+ },
63
+ descI(a, b) {
64
+ return isValidOrders.ascI(b, a);
65
+ },
66
+ descN(a, b) {
67
+ return isValidOrders.ascN(b, a);
68
+ },
69
+ descIN(a, b) {
70
+ return isValidOrders.ascIN(b, a);
71
+ },
72
+ };
73
+
74
+ //------------------------------------------------------------------------------
75
+ // Rule Definition
76
+ //------------------------------------------------------------------------------
77
+
78
+ /** @type {import('../types').Rule.RuleModule} */
79
+ module.exports = {
80
+ meta: {
81
+ type: "suggestion",
82
+
83
+ defaultOptions: [
84
+ "asc",
85
+ {
86
+ allowLineSeparatedGroups: false,
87
+ caseSensitive: true,
88
+ ignoreComputedKeys: false,
89
+ minKeys: 2,
90
+ natural: false,
91
+ },
92
+ ],
93
+
94
+ docs: {
95
+ description: "Require object keys to be sorted",
96
+ recommended: false,
97
+ frozen: true,
98
+ url: "https://eslint.org/docs/latest/rules/sort-keys",
99
+ },
100
+
101
+ schema: [
102
+ {
103
+ enum: ["asc", "desc"],
104
+ },
105
+ {
106
+ type: "object",
107
+ properties: {
108
+ caseSensitive: {
109
+ type: "boolean",
110
+ },
111
+ natural: {
112
+ type: "boolean",
113
+ },
114
+ minKeys: {
115
+ type: "integer",
116
+ minimum: 2,
117
+ },
118
+ allowLineSeparatedGroups: {
119
+ type: "boolean",
120
+ },
121
+ ignoreComputedKeys: {
122
+ type: "boolean",
123
+ },
124
+ },
125
+ additionalProperties: false,
126
+ },
127
+ ],
128
+
129
+ messages: {
130
+ sortKeys:
131
+ "Expected object keys to be in {{natural}}{{insensitive}}{{order}}ending order. '{{thisName}}' should be before '{{prevName}}'.",
132
+ },
133
+ },
134
+
135
+ create(context) {
136
+ const [
137
+ order,
138
+ {
139
+ caseSensitive,
140
+ natural,
141
+ minKeys,
142
+ allowLineSeparatedGroups,
143
+ ignoreComputedKeys,
144
+ },
145
+ ] = context.options;
146
+ const insensitive = !caseSensitive;
147
+ const isValidOrder =
148
+ isValidOrders[
149
+ order + (insensitive ? "I" : "") + (natural ? "N" : "")
150
+ ];
151
+
152
+ // The stack to save the previous property's name for each object literals.
153
+ let stack = null;
154
+ const sourceCode = context.sourceCode;
155
+
156
+ return {
157
+ ObjectExpression(node) {
158
+ stack = {
159
+ upper: stack,
160
+ prevNode: null,
161
+ prevBlankLine: false,
162
+ prevName: null,
163
+ numKeys: node.properties.length,
164
+ };
165
+ },
166
+
167
+ "ObjectExpression:exit"() {
168
+ stack = stack.upper;
169
+ },
170
+
171
+ SpreadElement(node) {
172
+ if (node.parent.type === "ObjectExpression") {
173
+ stack.prevName = null;
174
+ }
175
+ },
176
+
177
+ Property(node) {
178
+ if (node.parent.type === "ObjectPattern") {
179
+ return;
180
+ }
181
+
182
+ if (ignoreComputedKeys && node.computed) {
183
+ stack.prevName = null; // reset sort
184
+ return;
185
+ }
186
+
187
+ const prevName = stack.prevName;
188
+ const numKeys = stack.numKeys;
189
+ const thisName = getPropertyName(node);
190
+
191
+ // Get tokens between current node and previous node
192
+ const tokens =
193
+ stack.prevNode &&
194
+ sourceCode.getTokensBetween(stack.prevNode, node, {
195
+ includeComments: true,
196
+ });
197
+
198
+ let isBlankLineBetweenNodes = stack.prevBlankLine;
199
+
200
+ if (tokens) {
201
+ // check blank line between tokens
202
+ tokens.forEach((token, index) => {
203
+ const previousToken = tokens[index - 1];
204
+
205
+ if (
206
+ previousToken &&
207
+ token.loc.start.line - previousToken.loc.end.line >
208
+ 1
209
+ ) {
210
+ isBlankLineBetweenNodes = true;
211
+ }
212
+ });
213
+
214
+ // check blank line between the current node and the last token
215
+ if (
216
+ !isBlankLineBetweenNodes &&
217
+ node.loc.start.line - tokens.at(-1).loc.end.line > 1
218
+ ) {
219
+ isBlankLineBetweenNodes = true;
220
+ }
221
+
222
+ // check blank line between the first token and the previous node
223
+ if (
224
+ !isBlankLineBetweenNodes &&
225
+ tokens[0].loc.start.line - stack.prevNode.loc.end.line >
226
+ 1
227
+ ) {
228
+ isBlankLineBetweenNodes = true;
229
+ }
230
+ }
231
+
232
+ stack.prevNode = node;
233
+
234
+ if (thisName !== null) {
235
+ stack.prevName = thisName;
236
+ }
237
+
238
+ if (allowLineSeparatedGroups && isBlankLineBetweenNodes) {
239
+ stack.prevBlankLine = thisName === null;
240
+ return;
241
+ }
242
+
243
+ if (
244
+ prevName === null ||
245
+ thisName === null ||
246
+ numKeys < minKeys
247
+ ) {
248
+ return;
249
+ }
250
+
251
+ if (!isValidOrder(prevName, thisName)) {
252
+ context.report({
253
+ node,
254
+ loc: node.key.loc,
255
+ messageId: "sortKeys",
256
+ data: {
257
+ thisName,
258
+ prevName,
259
+ order,
260
+ insensitive: insensitive ? "insensitive " : "",
261
+ natural: natural ? "natural " : "",
262
+ },
263
+ });
264
+ }
265
+ },
266
+ };
267
+ },
268
+ };
@@ -0,0 +1,140 @@
1
+ /**
2
+ * @fileoverview Rule to require sorting of variables within a single Variable Declaration block
3
+ * @author Ilya Volodin
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Rule Definition
10
+ //------------------------------------------------------------------------------
11
+
12
+ /** @type {import('../types').Rule.RuleModule} */
13
+ module.exports = {
14
+ meta: {
15
+ type: "suggestion",
16
+
17
+ defaultOptions: [
18
+ {
19
+ ignoreCase: false,
20
+ },
21
+ ],
22
+
23
+ docs: {
24
+ description:
25
+ "Require variables within the same declaration block to be sorted",
26
+ recommended: false,
27
+ frozen: true,
28
+ url: "https://eslint.org/docs/latest/rules/sort-vars",
29
+ },
30
+
31
+ schema: [
32
+ {
33
+ type: "object",
34
+ properties: {
35
+ ignoreCase: {
36
+ type: "boolean",
37
+ },
38
+ },
39
+ additionalProperties: false,
40
+ },
41
+ ],
42
+
43
+ fixable: "code",
44
+
45
+ messages: {
46
+ sortVars:
47
+ "Variables within the same declaration block should be sorted alphabetically.",
48
+ },
49
+ },
50
+
51
+ create(context) {
52
+ const [{ ignoreCase }] = context.options;
53
+ const sourceCode = context.sourceCode;
54
+
55
+ return {
56
+ VariableDeclaration(node) {
57
+ const idDeclarations = node.declarations.filter(
58
+ decl => decl.id.type === "Identifier",
59
+ );
60
+ const getSortableName = ignoreCase
61
+ ? decl => decl.id.name.toLowerCase()
62
+ : decl => decl.id.name;
63
+ const unfixable = idDeclarations.some(
64
+ decl => decl.init !== null && decl.init.type !== "Literal",
65
+ );
66
+ let fixed = false;
67
+
68
+ idDeclarations.slice(1).reduce((memo, decl) => {
69
+ const lastVariableName = getSortableName(memo),
70
+ currentVariableName = getSortableName(decl);
71
+
72
+ if (currentVariableName < lastVariableName) {
73
+ context.report({
74
+ node: decl,
75
+ messageId: "sortVars",
76
+ fix(fixer) {
77
+ if (unfixable || fixed) {
78
+ return null;
79
+ }
80
+ return fixer.replaceTextRange(
81
+ [
82
+ idDeclarations[0].range[0],
83
+ idDeclarations.at(-1).range[1],
84
+ ],
85
+ idDeclarations
86
+
87
+ // Clone the idDeclarations array to avoid mutating it
88
+ .slice()
89
+
90
+ // Sort the array into the desired order
91
+ .sort((declA, declB) => {
92
+ const aName =
93
+ getSortableName(declA);
94
+ const bName =
95
+ getSortableName(declB);
96
+
97
+ return aName > bName ? 1 : -1;
98
+ })
99
+
100
+ // Build a string out of the sorted list of identifier declarations and the text between the originals
101
+ .reduce(
102
+ (sourceText, identifier, index) => {
103
+ const textAfterIdentifier =
104
+ index ===
105
+ idDeclarations.length - 1
106
+ ? ""
107
+ : sourceCode
108
+ .getText()
109
+ .slice(
110
+ idDeclarations[
111
+ index
112
+ ].range[1],
113
+ idDeclarations[
114
+ index +
115
+ 1
116
+ ].range[0],
117
+ );
118
+
119
+ return (
120
+ sourceText +
121
+ sourceCode.getText(
122
+ identifier,
123
+ ) +
124
+ textAfterIdentifier
125
+ );
126
+ },
127
+ "",
128
+ ),
129
+ );
130
+ },
131
+ });
132
+ fixed = true;
133
+ return memo;
134
+ }
135
+ return decl;
136
+ }, idDeclarations[0]);
137
+ },
138
+ };
139
+ },
140
+ };