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,325 @@
1
+ /**
2
+ * @fileoverview enforce or disallow capitalization of the first letter of a comment
3
+ * @author Kevin Partington
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 DEFAULT_IGNORE_PATTERN = astUtils.COMMENTS_IGNORE_PATTERN,
18
+ WHITESPACE = /\s/gu,
19
+ MAYBE_URL = /^\s*[^:/?#\s]+:\/\/[^?#]/u, // TODO: Combine w/ max-len pattern?
20
+ LETTER_PATTERN = /\p{L}/u;
21
+
22
+ /*
23
+ * Base schema body for defining the basic capitalization rule, ignorePattern,
24
+ * and ignoreInlineComments values.
25
+ * This can be used in a few different ways in the actual schema.
26
+ */
27
+ const SCHEMA_BODY = {
28
+ type: "object",
29
+ properties: {
30
+ ignorePattern: {
31
+ type: "string",
32
+ },
33
+ ignoreInlineComments: {
34
+ type: "boolean",
35
+ },
36
+ ignoreConsecutiveComments: {
37
+ type: "boolean",
38
+ },
39
+ },
40
+ additionalProperties: false,
41
+ };
42
+ const DEFAULTS = {
43
+ ignorePattern: "",
44
+ ignoreInlineComments: false,
45
+ ignoreConsecutiveComments: false,
46
+ };
47
+
48
+ /**
49
+ * Get normalized options for either block or line comments from the given
50
+ * user-provided options.
51
+ * - If the user-provided options is just a string, returns a normalized
52
+ * set of options using default values for all other options.
53
+ * - If the user-provided options is an object, then a normalized option
54
+ * set is returned. Options specified in overrides will take priority
55
+ * over options specified in the main options object, which will in
56
+ * turn take priority over the rule's defaults.
57
+ * @param {Object|string} rawOptions The user-provided options.
58
+ * @param {string} which Either "line" or "block".
59
+ * @returns {Object} The normalized options.
60
+ */
61
+ function getNormalizedOptions(rawOptions, which) {
62
+ return Object.assign({}, DEFAULTS, rawOptions[which] || rawOptions);
63
+ }
64
+
65
+ /**
66
+ * Get normalized options for block and line comments.
67
+ * @param {Object|string} rawOptions The user-provided options.
68
+ * @returns {Object} An object with "Line" and "Block" keys and corresponding
69
+ * normalized options objects.
70
+ */
71
+ function getAllNormalizedOptions(rawOptions = {}) {
72
+ return {
73
+ Line: getNormalizedOptions(rawOptions, "line"),
74
+ Block: getNormalizedOptions(rawOptions, "block"),
75
+ };
76
+ }
77
+
78
+ /**
79
+ * Creates a regular expression for each ignorePattern defined in the rule
80
+ * options.
81
+ *
82
+ * This is done in order to avoid invoking the RegExp constructor repeatedly.
83
+ * @param {Object} normalizedOptions The normalized rule options.
84
+ * @returns {void}
85
+ */
86
+ function createRegExpForIgnorePatterns(normalizedOptions) {
87
+ Object.keys(normalizedOptions).forEach(key => {
88
+ const ignorePatternStr = normalizedOptions[key].ignorePattern;
89
+
90
+ if (ignorePatternStr) {
91
+ const regExp = RegExp(`^\\s*(?:${ignorePatternStr})`, "u");
92
+
93
+ normalizedOptions[key].ignorePatternRegExp = regExp;
94
+ }
95
+ });
96
+ }
97
+
98
+ //------------------------------------------------------------------------------
99
+ // Rule Definition
100
+ //------------------------------------------------------------------------------
101
+
102
+ /** @type {import('../types').Rule.RuleModule} */
103
+ module.exports = {
104
+ meta: {
105
+ type: "suggestion",
106
+
107
+ docs: {
108
+ description:
109
+ "Enforce or disallow capitalization of the first letter of a comment",
110
+ recommended: false,
111
+ frozen: true,
112
+ url: "https://eslint.org/docs/latest/rules/capitalized-comments",
113
+ },
114
+
115
+ fixable: "code",
116
+
117
+ schema: [
118
+ { enum: ["always", "never"] },
119
+ {
120
+ oneOf: [
121
+ SCHEMA_BODY,
122
+ {
123
+ type: "object",
124
+ properties: {
125
+ line: SCHEMA_BODY,
126
+ block: SCHEMA_BODY,
127
+ },
128
+ additionalProperties: false,
129
+ },
130
+ ],
131
+ },
132
+ ],
133
+
134
+ messages: {
135
+ unexpectedLowercaseComment:
136
+ "Comments should not begin with a lowercase character.",
137
+ unexpectedUppercaseComment:
138
+ "Comments should not begin with an uppercase character.",
139
+ },
140
+ },
141
+
142
+ create(context) {
143
+ const capitalize = context.options[0] || "always",
144
+ normalizedOptions = getAllNormalizedOptions(context.options[1]),
145
+ sourceCode = context.sourceCode;
146
+
147
+ createRegExpForIgnorePatterns(normalizedOptions);
148
+
149
+ //----------------------------------------------------------------------
150
+ // Helpers
151
+ //----------------------------------------------------------------------
152
+
153
+ /**
154
+ * Checks whether a comment is an inline comment.
155
+ *
156
+ * For the purpose of this rule, a comment is inline if:
157
+ * 1. The comment is preceded by a token on the same line; and
158
+ * 2. The command is followed by a token on the same line.
159
+ *
160
+ * Note that the comment itself need not be single-line!
161
+ *
162
+ * Also, it follows from this definition that only block comments can
163
+ * be considered as possibly inline. This is because line comments
164
+ * would consume any following tokens on the same line as the comment.
165
+ * @param {ASTNode} comment The comment node to check.
166
+ * @returns {boolean} True if the comment is an inline comment, false
167
+ * otherwise.
168
+ */
169
+ function isInlineComment(comment) {
170
+ const previousToken = sourceCode.getTokenBefore(comment, {
171
+ includeComments: true,
172
+ }),
173
+ nextToken = sourceCode.getTokenAfter(comment, {
174
+ includeComments: true,
175
+ });
176
+
177
+ return Boolean(
178
+ previousToken &&
179
+ nextToken &&
180
+ comment.loc.start.line === previousToken.loc.end.line &&
181
+ comment.loc.end.line === nextToken.loc.start.line,
182
+ );
183
+ }
184
+
185
+ /**
186
+ * Determine if a comment follows another comment.
187
+ * @param {ASTNode} comment The comment to check.
188
+ * @returns {boolean} True if the comment follows a valid comment.
189
+ */
190
+ function isConsecutiveComment(comment) {
191
+ const previousTokenOrComment = sourceCode.getTokenBefore(comment, {
192
+ includeComments: true,
193
+ });
194
+
195
+ return Boolean(
196
+ previousTokenOrComment &&
197
+ ["Block", "Line"].includes(previousTokenOrComment.type),
198
+ );
199
+ }
200
+
201
+ /**
202
+ * Check a comment to determine if it is valid for this rule.
203
+ * @param {ASTNode} comment The comment node to process.
204
+ * @param {Object} options The options for checking this comment.
205
+ * @returns {boolean} True if the comment is valid, false otherwise.
206
+ */
207
+ function isCommentValid(comment, options) {
208
+ // 1. Check for default ignore pattern.
209
+ if (DEFAULT_IGNORE_PATTERN.test(comment.value)) {
210
+ return true;
211
+ }
212
+
213
+ // 2. Check for custom ignore pattern.
214
+ const commentWithoutAsterisks = comment.value.replace(/\*/gu, "");
215
+
216
+ if (
217
+ options.ignorePatternRegExp &&
218
+ options.ignorePatternRegExp.test(commentWithoutAsterisks)
219
+ ) {
220
+ return true;
221
+ }
222
+
223
+ // 3. Check for inline comments.
224
+ if (options.ignoreInlineComments && isInlineComment(comment)) {
225
+ return true;
226
+ }
227
+
228
+ // 4. Is this a consecutive comment (and are we tolerating those)?
229
+ if (
230
+ options.ignoreConsecutiveComments &&
231
+ isConsecutiveComment(comment)
232
+ ) {
233
+ return true;
234
+ }
235
+
236
+ // 5. Does the comment start with a possible URL?
237
+ if (MAYBE_URL.test(commentWithoutAsterisks)) {
238
+ return true;
239
+ }
240
+
241
+ // 6. Is the initial word character a letter?
242
+ const commentWordCharsOnly = commentWithoutAsterisks.replace(
243
+ WHITESPACE,
244
+ "",
245
+ );
246
+
247
+ if (commentWordCharsOnly.length === 0) {
248
+ return true;
249
+ }
250
+
251
+ // Get the first Unicode character (1 or 2 code units).
252
+ const [firstWordChar] = commentWordCharsOnly;
253
+
254
+ if (!LETTER_PATTERN.test(firstWordChar)) {
255
+ return true;
256
+ }
257
+
258
+ // 7. Check the case of the initial word character.
259
+ const isUppercase =
260
+ firstWordChar !== firstWordChar.toLocaleLowerCase(),
261
+ isLowercase =
262
+ firstWordChar !== firstWordChar.toLocaleUpperCase();
263
+
264
+ if (capitalize === "always" && isLowercase) {
265
+ return false;
266
+ }
267
+ if (capitalize === "never" && isUppercase) {
268
+ return false;
269
+ }
270
+
271
+ return true;
272
+ }
273
+
274
+ /**
275
+ * Process a comment to determine if it needs to be reported.
276
+ * @param {ASTNode} comment The comment node to process.
277
+ * @returns {void}
278
+ */
279
+ function processComment(comment) {
280
+ const options = normalizedOptions[comment.type],
281
+ commentValid = isCommentValid(comment, options);
282
+
283
+ if (!commentValid) {
284
+ const messageId =
285
+ capitalize === "always"
286
+ ? "unexpectedLowercaseComment"
287
+ : "unexpectedUppercaseComment";
288
+
289
+ context.report({
290
+ node: null, // Intentionally using loc instead
291
+ loc: comment.loc,
292
+ messageId,
293
+ fix(fixer) {
294
+ const match = comment.value.match(LETTER_PATTERN);
295
+ const char = match[0];
296
+
297
+ // Offset match.index by 2 to account for the first 2 characters that start the comment (// or /*)
298
+ const charIndex = comment.range[0] + match.index + 2;
299
+
300
+ return fixer.replaceTextRange(
301
+ [charIndex, charIndex + char.length],
302
+ capitalize === "always"
303
+ ? char.toLocaleUpperCase()
304
+ : char.toLocaleLowerCase(),
305
+ );
306
+ },
307
+ });
308
+ }
309
+ }
310
+
311
+ //----------------------------------------------------------------------
312
+ // Public
313
+ //----------------------------------------------------------------------
314
+
315
+ return {
316
+ Program() {
317
+ const comments = sourceCode.getAllComments();
318
+
319
+ comments
320
+ .filter(token => token.type !== "Shebang")
321
+ .forEach(processComment);
322
+ },
323
+ };
324
+ },
325
+ };
@@ -0,0 +1,250 @@
1
+ /**
2
+ * @fileoverview Rule to enforce that all class methods use 'this'.
3
+ * @author Patrick Williams
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Rule Definition
16
+ //------------------------------------------------------------------------------
17
+
18
+ /** @type {import('../types').Rule.RuleModule} */
19
+ module.exports = {
20
+ meta: {
21
+ dialects: ["javascript", "typescript"],
22
+ language: "javascript",
23
+ type: "suggestion",
24
+
25
+ defaultOptions: [
26
+ {
27
+ enforceForClassFields: true,
28
+ exceptMethods: [],
29
+ ignoreOverrideMethods: false,
30
+ },
31
+ ],
32
+
33
+ docs: {
34
+ description: "Enforce that class methods utilize `this`",
35
+ recommended: false,
36
+ url: "https://eslint.org/docs/latest/rules/class-methods-use-this",
37
+ },
38
+
39
+ schema: [
40
+ {
41
+ type: "object",
42
+ properties: {
43
+ exceptMethods: {
44
+ type: "array",
45
+ items: {
46
+ type: "string",
47
+ },
48
+ },
49
+ enforceForClassFields: {
50
+ type: "boolean",
51
+ },
52
+ ignoreOverrideMethods: {
53
+ type: "boolean",
54
+ },
55
+ ignoreClassesWithImplements: {
56
+ enum: ["all", "public-fields"],
57
+ },
58
+ },
59
+ additionalProperties: false,
60
+ },
61
+ ],
62
+
63
+ messages: {
64
+ missingThis: "Expected 'this' to be used by class {{name}}.",
65
+ },
66
+ },
67
+ create(context) {
68
+ const [options] = context.options;
69
+ const {
70
+ enforceForClassFields,
71
+ ignoreOverrideMethods,
72
+ ignoreClassesWithImplements,
73
+ } = options;
74
+ const exceptMethods = new Set(options.exceptMethods);
75
+
76
+ const stack = [];
77
+
78
+ /**
79
+ * Push `this` used flag initialized with `false` onto the stack.
80
+ * @returns {void}
81
+ */
82
+ function pushContext() {
83
+ stack.push(false);
84
+ }
85
+
86
+ /**
87
+ * Pop `this` used flag from the stack.
88
+ * @returns {boolean | undefined} `this` used flag
89
+ */
90
+ function popContext() {
91
+ return stack.pop();
92
+ }
93
+
94
+ /**
95
+ * Initializes the current context to false and pushes it onto the stack.
96
+ * These booleans represent whether 'this' has been used in the context.
97
+ * @returns {void}
98
+ * @private
99
+ */
100
+ function enterFunction() {
101
+ pushContext();
102
+ }
103
+
104
+ /**
105
+ * Check if the node is an instance method
106
+ * @param {ASTNode} node node to check
107
+ * @returns {boolean} True if its an instance method
108
+ * @private
109
+ */
110
+ function isInstanceMethod(node) {
111
+ switch (node.type) {
112
+ case "MethodDefinition":
113
+ return !node.static && node.kind !== "constructor";
114
+ case "AccessorProperty":
115
+ case "PropertyDefinition":
116
+ return !node.static && enforceForClassFields;
117
+ default:
118
+ return false;
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Check if the node's parent class implements any interfaces
124
+ * @param {ASTNode} node node to check
125
+ * @returns {boolean} True if parent class implements interfaces
126
+ * @private
127
+ */
128
+ function hasImplements(node) {
129
+ const classNode = node.parent.parent;
130
+ return (
131
+ classNode?.type === "ClassDeclaration" &&
132
+ classNode.implements?.length > 0
133
+ );
134
+ }
135
+
136
+ /**
137
+ * Check if the node is an instance method not excluded by config
138
+ * @param {ASTNode} node node to check
139
+ * @returns {boolean} True if it is an instance method, and not excluded by config
140
+ * @private
141
+ */
142
+ function isIncludedInstanceMethod(node) {
143
+ if (isInstanceMethod(node)) {
144
+ if (node.computed) {
145
+ return true;
146
+ }
147
+
148
+ if (ignoreOverrideMethods && node.override) {
149
+ return false;
150
+ }
151
+
152
+ if (ignoreClassesWithImplements) {
153
+ const implementsInterfaces = hasImplements(node);
154
+ if (implementsInterfaces) {
155
+ if (
156
+ ignoreClassesWithImplements === "all" ||
157
+ (ignoreClassesWithImplements === "public-fields" &&
158
+ node.key.type !== "PrivateIdentifier" &&
159
+ (!node.accessibility ||
160
+ node.accessibility === "public"))
161
+ ) {
162
+ return false;
163
+ }
164
+ }
165
+ }
166
+
167
+ const hashIfNeeded =
168
+ node.key.type === "PrivateIdentifier" ? "#" : "";
169
+ const name =
170
+ node.key.type === "Literal"
171
+ ? astUtils.getStaticStringValue(node.key)
172
+ : node.key.name || "";
173
+
174
+ return !exceptMethods.has(hashIfNeeded + name);
175
+ }
176
+ return false;
177
+ }
178
+
179
+ /**
180
+ * Checks if we are leaving a function that is a method, and reports if 'this' has not been used.
181
+ * Static methods and the constructor are exempt.
182
+ * Then pops the context off the stack.
183
+ * @param {ASTNode} node A function node that was entered.
184
+ * @returns {void}
185
+ * @private
186
+ */
187
+ function exitFunction(node) {
188
+ const methodUsesThis = popContext();
189
+
190
+ if (isIncludedInstanceMethod(node.parent) && !methodUsesThis) {
191
+ context.report({
192
+ node,
193
+ loc: astUtils.getFunctionHeadLoc(node, context.sourceCode),
194
+ messageId: "missingThis",
195
+ data: {
196
+ name: astUtils.getFunctionNameWithKind(node),
197
+ },
198
+ });
199
+ }
200
+ }
201
+
202
+ /**
203
+ * Mark the current context as having used 'this'.
204
+ * @returns {void}
205
+ * @private
206
+ */
207
+ function markThisUsed() {
208
+ if (stack.length) {
209
+ stack[stack.length - 1] = true;
210
+ }
211
+ }
212
+
213
+ return {
214
+ FunctionDeclaration: enterFunction,
215
+ "FunctionDeclaration:exit": exitFunction,
216
+ FunctionExpression: enterFunction,
217
+ "FunctionExpression:exit": exitFunction,
218
+
219
+ /*
220
+ * Class field value are implicit functions.
221
+ */
222
+ "AccessorProperty > *.key:exit": pushContext,
223
+ "AccessorProperty:exit": popContext,
224
+ "PropertyDefinition > *.key:exit": pushContext,
225
+ "PropertyDefinition:exit": popContext,
226
+
227
+ /*
228
+ * Class static blocks are implicit functions. They aren't required to use `this`,
229
+ * but we have to push context so that it captures any use of `this` in the static block
230
+ * separately from enclosing contexts, because static blocks have their own `this` and it
231
+ * shouldn't count as used `this` in enclosing contexts.
232
+ */
233
+ StaticBlock: pushContext,
234
+ "StaticBlock:exit": popContext,
235
+
236
+ ThisExpression: markThisUsed,
237
+ Super: markThisUsed,
238
+ ...(enforceForClassFields && {
239
+ "AccessorProperty > ArrowFunctionExpression.value":
240
+ enterFunction,
241
+ "AccessorProperty > ArrowFunctionExpression.value:exit":
242
+ exitFunction,
243
+ "PropertyDefinition > ArrowFunctionExpression.value":
244
+ enterFunction,
245
+ "PropertyDefinition > ArrowFunctionExpression.value:exit":
246
+ exitFunction,
247
+ }),
248
+ };
249
+ },
250
+ };