@alexlit/lint-kit 174.0.0 → 176.0.0

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 (291) hide show
  1. package/package.json +1 -1
  2. package/packages/config-eslint/node_modules/@eslint/core/LICENSE +201 -0
  3. package/packages/config-eslint/node_modules/@eslint/core/README.md +29 -0
  4. package/packages/config-eslint/node_modules/@eslint/core/dist/cjs/types.d.cts +1179 -0
  5. package/packages/config-eslint/node_modules/@eslint/core/dist/esm/types.d.ts +1179 -0
  6. package/packages/config-eslint/node_modules/@eslint/core/package.json +49 -0
  7. package/packages/config-eslint/node_modules/@eslint/plugin-kit/LICENSE +201 -0
  8. package/packages/config-eslint/node_modules/@eslint/plugin-kit/README.md +273 -0
  9. package/packages/config-eslint/node_modules/@eslint/plugin-kit/dist/cjs/index.cjs +884 -0
  10. package/packages/config-eslint/node_modules/@eslint/plugin-kit/dist/cjs/index.d.cts +328 -0
  11. package/packages/config-eslint/node_modules/@eslint/plugin-kit/dist/cjs/types.cts +7 -0
  12. package/packages/config-eslint/node_modules/@eslint/plugin-kit/dist/esm/index.d.ts +328 -0
  13. package/packages/config-eslint/node_modules/@eslint/plugin-kit/dist/esm/index.js +879 -0
  14. package/packages/config-eslint/node_modules/@eslint/plugin-kit/dist/esm/types.d.ts +6 -0
  15. package/packages/config-eslint/node_modules/@eslint/plugin-kit/dist/esm/types.ts +7 -0
  16. package/packages/config-eslint/node_modules/@eslint/plugin-kit/package.json +61 -0
  17. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/configs/flat-config-base.js +9 -0
  18. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/index.d.ts +17 -0
  19. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/index.js +91 -0
  20. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/license +9 -0
  21. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/node_modules/globals/globals.json +3345 -0
  22. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/node_modules/globals/index.d.ts +3452 -0
  23. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/node_modules/globals/index.js +2 -0
  24. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/node_modules/globals/license +9 -0
  25. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/node_modules/globals/package.json +117 -0
  26. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/node_modules/globals/readme.md +42 -0
  27. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/package.json +128 -0
  28. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/readme.md +261 -0
  29. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/call-or-new-expression.js +120 -0
  30. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/function-types.js +7 -0
  31. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/index.js +30 -0
  32. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-arrow-function-body.js +3 -0
  33. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-directive.js +4 -0
  34. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-empty-array-expression.js +5 -0
  35. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-empty-node.js +17 -0
  36. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-expression-statement.js +7 -0
  37. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-function.js +5 -0
  38. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-member-expression.js +98 -0
  39. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-method-call.js +62 -0
  40. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-negative-one.js +8 -0
  41. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-reference-identifier.js +159 -0
  42. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-static-require.js +10 -0
  43. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-tagged-template-literal.js +24 -0
  44. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/is-undefined.js +3 -0
  45. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/ast/literal.js +24 -0
  46. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/better-regex.js +146 -0
  47. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/catch-error-name.js +138 -0
  48. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/consistent-assert.js +98 -0
  49. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/consistent-date-clone.js +54 -0
  50. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/consistent-destructuring.js +168 -0
  51. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/consistent-empty-array-spread.js +127 -0
  52. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/consistent-existence-index-check.js +137 -0
  53. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/consistent-function-scoping.js +265 -0
  54. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/custom-error-definition.js +218 -0
  55. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/empty-brace-spaces.js +62 -0
  56. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/error-message.js +98 -0
  57. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/escape-case.js +86 -0
  58. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/expiring-todo-comments.js +584 -0
  59. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/explicit-length-check.js +236 -0
  60. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/filename-case.js +276 -0
  61. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/add-parenthesizes-to-return-or-throw-expression.js +29 -0
  62. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/append-argument.js +30 -0
  63. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/extend-fix-range.js +11 -0
  64. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/fix-space-around-keywords.js +43 -0
  65. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/index.js +23 -0
  66. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/remove-argument.js +40 -0
  67. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/remove-expression-statement.js +34 -0
  68. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/remove-method-call.js +28 -0
  69. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/remove-object-property.js +21 -0
  70. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/remove-parentheses.js +19 -0
  71. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/remove-spaces-after.js +22 -0
  72. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/remove-specifier.js +59 -0
  73. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/rename-variable.js +8 -0
  74. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/replace-argument.js +17 -0
  75. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/replace-member-expression-property.js +25 -0
  76. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/replace-node-or-token-and-spaces-before.js +31 -0
  77. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/replace-reference-identifier.js +32 -0
  78. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/replace-string-raw.js +12 -0
  79. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/replace-template-element.js +10 -0
  80. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/switch-call-expression-to-new-expression.js +29 -0
  81. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/fix/switch-new-expression-to-call-expression.js +42 -0
  82. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/import-style.js +375 -0
  83. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/index.js +143 -0
  84. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/new-for-builtins.js +112 -0
  85. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-abusive-eslint-disable.js +63 -0
  86. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-accessor-recursion.js +160 -0
  87. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-anonymous-default-export.js +210 -0
  88. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-array-callback-reference.js +285 -0
  89. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-array-for-each.js +496 -0
  90. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-array-method-this-argument.js +223 -0
  91. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-array-reduce.js +128 -0
  92. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-array-reverse.js +6 -0
  93. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-array-sort.js +6 -0
  94. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-await-expression-member.js +85 -0
  95. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-await-in-promise-methods.js +69 -0
  96. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-console-spaces.js +89 -0
  97. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-document-cookie.js +27 -0
  98. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-empty-file.js +58 -0
  99. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-for-loop.js +419 -0
  100. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-hex-escape.js +54 -0
  101. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-immediate-mutation.js +778 -0
  102. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-instanceof-builtins.js +216 -0
  103. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-invalid-fetch-options.js +112 -0
  104. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-invalid-remove-event-listener.js +61 -0
  105. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-keyword-prefix.js +202 -0
  106. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-lonely-if.js +155 -0
  107. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-magic-array-flat-depth.js +55 -0
  108. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-named-default.js +101 -0
  109. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-negated-condition.js +145 -0
  110. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-negation-in-equality-check.js +99 -0
  111. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-nested-ternary.js +60 -0
  112. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-new-array.js +106 -0
  113. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-new-buffer.js +100 -0
  114. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-null.js +153 -0
  115. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-object-as-default-parameter.js +52 -0
  116. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-process-exit.js +106 -0
  117. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-single-promise-in-promise-methods.js +179 -0
  118. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-static-only-class.js +226 -0
  119. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-thenable.js +194 -0
  120. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-this-assignment.js +40 -0
  121. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-typeof-undefined.js +146 -0
  122. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-unnecessary-array-flat-depth.js +49 -0
  123. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-unnecessary-array-splice-count.js +23 -0
  124. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-unnecessary-await.js +110 -0
  125. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-unnecessary-polyfills.js +174 -0
  126. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-unnecessary-slice-end.js +22 -0
  127. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-unreadable-array-destructuring.js +85 -0
  128. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-unreadable-iife.js +43 -0
  129. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-unused-properties.js +240 -0
  130. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-useless-collection-argument.js +101 -0
  131. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-useless-error-capture-stack-trace.js +146 -0
  132. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-useless-fallback-in-spread.js +66 -0
  133. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-useless-length-check.js +150 -0
  134. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-useless-promise-resolve-reject.js +210 -0
  135. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-useless-spread.js +389 -0
  136. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-useless-switch-case.js +59 -0
  137. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-useless-undefined.js +275 -0
  138. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/no-zero-fractions.js +81 -0
  139. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/number-literal-case.js +82 -0
  140. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/numeric-separators-style.js +189 -0
  141. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-add-event-listener.js +191 -0
  142. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-array-find.js +458 -0
  143. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-array-flat-map.js +86 -0
  144. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-array-flat.js +279 -0
  145. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-array-index-of.js +34 -0
  146. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-array-some.js +219 -0
  147. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-at.js +380 -0
  148. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-bigint-literals.js +129 -0
  149. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-blob-reading-methods.js +47 -0
  150. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-class-fields.js +158 -0
  151. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-classlist-toggle.js +255 -0
  152. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-code-point.js +56 -0
  153. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-date-now.js +133 -0
  154. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-default-parameters.js +218 -0
  155. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-dom-node-append.js +50 -0
  156. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-dom-node-dataset.js +135 -0
  157. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-dom-node-remove.js +124 -0
  158. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-dom-node-text-content.js +77 -0
  159. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-event-target.js +119 -0
  160. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-export-from.js +367 -0
  161. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-global-this.js +222 -0
  162. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-import-meta-properties.js +320 -0
  163. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-includes.js +111 -0
  164. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-json-parse-buffer.js +161 -0
  165. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-keyboard-event-key.js +188 -0
  166. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-logical-operator-over-ternary.js +162 -0
  167. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-math-min-max.js +205 -0
  168. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-math-trunc.js +111 -0
  169. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-modern-dom-apis.js +145 -0
  170. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-modern-math-apis.js +210 -0
  171. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-module.js +377 -0
  172. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-native-coercion-functions.js +187 -0
  173. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-negative-index.js +211 -0
  174. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-node-protocol.js +86 -0
  175. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-number-properties.js +142 -0
  176. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-object-from-entries.js +256 -0
  177. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-optional-catch-binding.js +77 -0
  178. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-prototype-methods.js +162 -0
  179. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-query-selector.js +170 -0
  180. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-reflect-apply.js +99 -0
  181. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-regexp-test.js +155 -0
  182. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-response-static-json.js +85 -0
  183. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-set-has.js +181 -0
  184. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-set-size.js +106 -0
  185. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-single-call.js +188 -0
  186. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-spread.js +521 -0
  187. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-string-raw.js +149 -0
  188. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-string-replace-all.js +180 -0
  189. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-string-slice.js +180 -0
  190. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-string-starts-ends-with.js +201 -0
  191. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-string-trim-start-end.js +46 -0
  192. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-structured-clone.js +149 -0
  193. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-switch.js +357 -0
  194. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-ternary.js +288 -0
  195. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-top-level-await.js +154 -0
  196. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prefer-type-error.js +169 -0
  197. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/prevent-abbreviations.js +655 -0
  198. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/relative-url-style.js +171 -0
  199. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/require-array-join-separator.js +65 -0
  200. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/require-module-attributes.js +120 -0
  201. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/require-module-specifiers.js +158 -0
  202. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/require-number-to-fixed-digits-argument.js +55 -0
  203. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/require-post-message-target-origin.js +74 -0
  204. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/get-documentation-url.js +9 -0
  205. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/index.js +9 -0
  206. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/to-eslint-create.js +51 -0
  207. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/to-eslint-listener.js +40 -0
  208. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/to-eslint-problem.js +38 -0
  209. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/to-eslint-rule-fixer.js +49 -0
  210. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/to-eslint-rule.js +38 -0
  211. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/to-eslint-rules.js +13 -0
  212. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/unicorn-context.js +36 -0
  213. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/unicorn-listeners.js +65 -0
  214. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/rule/utilities.js +27 -0
  215. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/abbreviations.js +270 -0
  216. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/builtin-errors.js +14 -0
  217. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/dom-events.js +275 -0
  218. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/event-keys.js +54 -0
  219. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/negative-index.js +52 -0
  220. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/no-array-mutate-rule.js +139 -0
  221. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/no-unnecessary-length-or-infinity-rule.js +80 -0
  222. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/package-json.js +42 -0
  223. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/simple-array-search-rule.js +126 -0
  224. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/shared/typed-array.js +17 -0
  225. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/string-content.js +192 -0
  226. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/switch-case-braces.js +114 -0
  227. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/template-indent.js +219 -0
  228. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/text-encoding-identifier-case.js +130 -0
  229. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/throw-new-error.js +60 -0
  230. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/array-or-object-prototype-property.js +57 -0
  231. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/assert-token.js +29 -0
  232. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/boolean.js +88 -0
  233. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/builtins.js +30 -0
  234. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/cartesian-product-samples.js +22 -0
  235. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/create-deprecated-rules.js +29 -0
  236. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/escape-string.js +24 -0
  237. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/escape-template-element-raw.js +6 -0
  238. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-ancestor.js +15 -0
  239. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-available-variable-name.js +147 -0
  240. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-builtin-rule.js +5 -0
  241. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-call-expression-arguments-text.js +36 -0
  242. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-call-or-new-expression-tokens.js +67 -0
  243. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-class-head-location.js +22 -0
  244. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-documentation-url.js +9 -0
  245. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-indent-string.js +18 -0
  246. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-references.js +5 -0
  247. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-scopes.js +12 -0
  248. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-sibling-node.js +38 -0
  249. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-switch-case-head-location.js +22 -0
  250. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-token-store.js +24 -0
  251. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/get-variable-identifiers.js +7 -0
  252. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/global-reference-tracker.js +68 -0
  253. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/has-optional-chain-element.js +17 -0
  254. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/has-same-range.js +7 -0
  255. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/index.js +59 -0
  256. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-function-self-used-inside.js +39 -0
  257. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-left-hand-side.js +20 -0
  258. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-logical-expression.js +14 -0
  259. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-method-named.js +7 -0
  260. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-new-expression-with-parentheses.js +28 -0
  261. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-node-matches.js +58 -0
  262. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-node-value-not-dom-node.js +20 -0
  263. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-node-value-not-function.js +40 -0
  264. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-number.js +224 -0
  265. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-object-method.js +10 -0
  266. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-on-same-line.js +7 -0
  267. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-same-identifier.js +5 -0
  268. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-same-reference.js +170 -0
  269. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-shorthand-export-local.js +8 -0
  270. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-shorthand-import-local.js +8 -0
  271. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-shorthand-property-assignment-pattern-left.js +8 -0
  272. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-shorthand-property-value.js +6 -0
  273. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-unresolved-variable.js +14 -0
  274. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/is-value-not-usable.js +5 -0
  275. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/needs-semicolon.js +118 -0
  276. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/numeric.js +49 -0
  277. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/parentheses.js +71 -0
  278. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/resolve-variable-name.js +18 -0
  279. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/rule.js +27 -0
  280. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/should-add-parentheses-to-await-expression-argument.js +17 -0
  281. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/should-add-parentheses-to-call-expression-callee.js +18 -0
  282. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/should-add-parentheses-to-conditional-expression-child.js +13 -0
  283. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/should-add-parentheses-to-expression-statement-expression.js +22 -0
  284. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/should-add-parentheses-to-logical-expression-child.js +43 -0
  285. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/should-add-parentheses-to-member-expression-object.js +47 -0
  286. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/should-add-parentheses-to-new-expression-callee.js +28 -0
  287. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/should-add-parentheses-to-unary-expression.js +24 -0
  288. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/singular.js +16 -0
  289. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/string-cases.js +2 -0
  290. package/packages/config-eslint/node_modules/eslint-plugin-unicorn/rules/utils/to-location.js +25 -0
  291. package/packages/config-eslint/package.json +3 -3
@@ -0,0 +1,375 @@
1
+ import {getStringIfConstant} from '@eslint-community/eslint-utils';
2
+ import {isCallExpression} from './ast/index.js';
3
+
4
+ const MESSAGE_ID = 'importStyle';
5
+ const messages = {
6
+ [MESSAGE_ID]: 'Use {{allowedStyles}} import for module `{{moduleName}}`.',
7
+ };
8
+
9
+ const getActualImportDeclarationStyles = importDeclaration => {
10
+ const {specifiers} = importDeclaration;
11
+
12
+ if (specifiers.length === 0) {
13
+ return ['unassigned'];
14
+ }
15
+
16
+ const styles = new Set();
17
+
18
+ for (const specifier of specifiers) {
19
+ if (specifier.type === 'ImportDefaultSpecifier') {
20
+ styles.add('default');
21
+ continue;
22
+ }
23
+
24
+ if (specifier.type === 'ImportNamespaceSpecifier') {
25
+ styles.add('namespace');
26
+ continue;
27
+ }
28
+
29
+ if (specifier.type === 'ImportSpecifier') {
30
+ if (specifier.imported.type === 'Identifier' && specifier.imported.name === 'default') {
31
+ styles.add('default');
32
+ continue;
33
+ }
34
+
35
+ styles.add('named');
36
+ continue;
37
+ }
38
+ }
39
+
40
+ return [...styles];
41
+ };
42
+
43
+ const getActualExportDeclarationStyles = exportDeclaration => {
44
+ const {specifiers} = exportDeclaration;
45
+
46
+ if (specifiers.length === 0) {
47
+ return ['unassigned'];
48
+ }
49
+
50
+ const styles = new Set();
51
+
52
+ for (const specifier of specifiers) {
53
+ if (specifier.type === 'ExportSpecifier') {
54
+ if (specifier.exported.type === 'Identifier' && specifier.exported.name === 'default') {
55
+ styles.add('default');
56
+ continue;
57
+ }
58
+
59
+ styles.add('named');
60
+ continue;
61
+ }
62
+ }
63
+
64
+ return [...styles];
65
+ };
66
+
67
+ const getActualAssignmentTargetImportStyles = assignmentTarget => {
68
+ if (assignmentTarget.type === 'Identifier' || assignmentTarget.type === 'ArrayPattern') {
69
+ return ['namespace'];
70
+ }
71
+
72
+ if (assignmentTarget.type === 'ObjectPattern') {
73
+ if (assignmentTarget.properties.length === 0) {
74
+ return ['unassigned'];
75
+ }
76
+
77
+ const styles = new Set();
78
+
79
+ for (const property of assignmentTarget.properties) {
80
+ if (property.type === 'RestElement') {
81
+ styles.add('named');
82
+ continue;
83
+ }
84
+
85
+ if (property.key.type === 'Identifier') {
86
+ if (property.key.name === 'default') {
87
+ styles.add('default');
88
+ } else {
89
+ styles.add('named');
90
+ }
91
+ }
92
+ }
93
+
94
+ return [...styles];
95
+ }
96
+
97
+ // Next line is not test-coverable until unforceable changes to the language
98
+ // like an addition of new AST node types usable in `const __HERE__ = foo;`.
99
+ // An exotic custom parser or a bug in one could cover it too.
100
+ /* c8 ignore next */
101
+ return [];
102
+ };
103
+
104
+ const isAssignedDynamicImport = node =>
105
+ node.parent.type === 'AwaitExpression'
106
+ && node.parent.argument === node
107
+ && node.parent.parent.type === 'VariableDeclarator'
108
+ && node.parent.parent.init === node.parent;
109
+
110
+ // Keep this alphabetically sorted for easier maintenance
111
+ const defaultStyles = {
112
+ chalk: {
113
+ default: true,
114
+ },
115
+ path: {
116
+ default: true,
117
+ },
118
+ 'node:path': {
119
+ default: true,
120
+ },
121
+ util: {
122
+ named: true,
123
+ },
124
+ 'node:util': {
125
+ named: true,
126
+ },
127
+ };
128
+
129
+ /** @param {import('eslint').Rule.RuleContext} context */
130
+ const create = context => {
131
+ let [
132
+ {
133
+ styles = {},
134
+ extendDefaultStyles = true,
135
+ checkImport = true,
136
+ checkDynamicImport = true,
137
+ checkExportFrom = false,
138
+ checkRequire = true,
139
+ } = {},
140
+ ] = context.options;
141
+
142
+ styles = extendDefaultStyles
143
+ ? Object.fromEntries(
144
+ [...Object.keys(defaultStyles), ...Object.keys(styles)]
145
+ .map(name => [name, styles[name] === false ? {} : {...defaultStyles[name], ...styles[name]}]),
146
+ )
147
+ : styles;
148
+
149
+ styles = new Map(
150
+ Object.entries(styles).map(
151
+ ([moduleName, styles]) =>
152
+ [moduleName, new Set(Object.entries(styles).filter(([, isAllowed]) => isAllowed).map(([style]) => style))],
153
+ ),
154
+ );
155
+
156
+ const {sourceCode} = context;
157
+
158
+ // eslint-disable-next-line max-params
159
+ const report = (node, moduleName, actualImportStyles, allowedImportStyles, isRequire = false) => {
160
+ if (!allowedImportStyles || allowedImportStyles.size === 0) {
161
+ return;
162
+ }
163
+
164
+ let effectiveAllowedImportStyles = allowedImportStyles;
165
+
166
+ // For `require`, `'default'` style allows both `x = require('x')` (`'namespace'` style) and
167
+ // `{default: x} = require('x')` (`'default'` style) since we don't know in advance
168
+ // whether `'x'` is a compiled ES6 module (with `default` key) or a CommonJS module and `require`
169
+ // does not provide any automatic interop for this, so the user may have to use either of these.
170
+ if (isRequire && allowedImportStyles.has('default') && !allowedImportStyles.has('namespace')) {
171
+ effectiveAllowedImportStyles = new Set(allowedImportStyles);
172
+ effectiveAllowedImportStyles.add('namespace');
173
+ }
174
+
175
+ if (actualImportStyles.every(style => effectiveAllowedImportStyles.has(style))) {
176
+ return;
177
+ }
178
+
179
+ const data = {
180
+ allowedStyles: new Intl.ListFormat('en-US', {type: 'disjunction'}).format([...allowedImportStyles.keys()]),
181
+ moduleName,
182
+ };
183
+
184
+ context.report({
185
+ node,
186
+ messageId: MESSAGE_ID,
187
+ data,
188
+ });
189
+ };
190
+
191
+ if (checkImport) {
192
+ context.on('ImportDeclaration', node => {
193
+ const moduleName = getStringIfConstant(node.source, sourceCode.getScope(node.source));
194
+
195
+ const allowedImportStyles = styles.get(moduleName);
196
+ const actualImportStyles = getActualImportDeclarationStyles(node);
197
+
198
+ report(node, moduleName, actualImportStyles, allowedImportStyles);
199
+ });
200
+ }
201
+
202
+ if (checkDynamicImport) {
203
+ context.on('ImportExpression', node => {
204
+ if (isAssignedDynamicImport(node)) {
205
+ return;
206
+ }
207
+
208
+ const moduleName = getStringIfConstant(node.source, sourceCode.getScope(node.source));
209
+ const allowedImportStyles = styles.get(moduleName);
210
+ const actualImportStyles = ['unassigned'];
211
+
212
+ report(node, moduleName, actualImportStyles, allowedImportStyles);
213
+ });
214
+
215
+ context.on('VariableDeclarator', node => {
216
+ if (!(
217
+ node.init?.type === 'AwaitExpression'
218
+ && node.init.argument.type === 'ImportExpression'
219
+ )) {
220
+ return;
221
+ }
222
+
223
+ const assignmentTargetNode = node.id;
224
+ const moduleNameNode = node.init.argument.source;
225
+ const moduleName = getStringIfConstant(moduleNameNode, sourceCode.getScope(moduleNameNode));
226
+
227
+ if (!moduleName) {
228
+ return;
229
+ }
230
+
231
+ const allowedImportStyles = styles.get(moduleName);
232
+ const actualImportStyles = getActualAssignmentTargetImportStyles(assignmentTargetNode);
233
+
234
+ report(node, moduleName, actualImportStyles, allowedImportStyles);
235
+ });
236
+ }
237
+
238
+ if (checkExportFrom) {
239
+ context.on('ExportAllDeclaration', node => {
240
+ const moduleName = getStringIfConstant(node.source, sourceCode.getScope(node.source));
241
+
242
+ const allowedImportStyles = styles.get(moduleName);
243
+ const actualImportStyles = ['namespace'];
244
+
245
+ report(node, moduleName, actualImportStyles, allowedImportStyles);
246
+ });
247
+
248
+ context.on('ExportNamedDeclaration', node => {
249
+ const moduleName = getStringIfConstant(node.source, sourceCode.getScope(node.source));
250
+
251
+ const allowedImportStyles = styles.get(moduleName);
252
+ const actualImportStyles = getActualExportDeclarationStyles(node);
253
+
254
+ report(node, moduleName, actualImportStyles, allowedImportStyles);
255
+ });
256
+ }
257
+
258
+ if (checkRequire) {
259
+ context.on('CallExpression', node => {
260
+ if (!(
261
+ isCallExpression(node, {
262
+ name: 'require',
263
+ argumentsLength: 1,
264
+ optional: false,
265
+ })
266
+ && (node.parent.type === 'ExpressionStatement' && node.parent.expression === node)
267
+ )) {
268
+ return;
269
+ }
270
+
271
+ const moduleName = getStringIfConstant(node.arguments[0], sourceCode.getScope(node.arguments[0]));
272
+ const allowedImportStyles = styles.get(moduleName);
273
+ const actualImportStyles = ['unassigned'];
274
+
275
+ report(node, moduleName, actualImportStyles, allowedImportStyles, true);
276
+ });
277
+
278
+ context.on('VariableDeclarator', node => {
279
+ if (!(
280
+ node.init?.type === 'CallExpression'
281
+ && node.init.callee.type === 'Identifier'
282
+ && node.init.callee.name === 'require'
283
+ )) {
284
+ return;
285
+ }
286
+
287
+ const assignmentTargetNode = node.id;
288
+ const moduleNameNode = node.init.arguments[0];
289
+ const moduleName = getStringIfConstant(moduleNameNode, sourceCode.getScope(moduleNameNode));
290
+
291
+ if (!moduleName) {
292
+ return;
293
+ }
294
+
295
+ const allowedImportStyles = styles.get(moduleName);
296
+ const actualImportStyles = getActualAssignmentTargetImportStyles(assignmentTargetNode);
297
+
298
+ report(node, moduleName, actualImportStyles, allowedImportStyles, true);
299
+ });
300
+ }
301
+ };
302
+
303
+ const schema = {
304
+ type: 'array',
305
+ additionalItems: false,
306
+ items: [
307
+ {
308
+ type: 'object',
309
+ additionalProperties: false,
310
+ properties: {
311
+ checkImport: {
312
+ type: 'boolean',
313
+ },
314
+ checkDynamicImport: {
315
+ type: 'boolean',
316
+ },
317
+ checkExportFrom: {
318
+ type: 'boolean',
319
+ },
320
+ checkRequire: {
321
+ type: 'boolean',
322
+ },
323
+ extendDefaultStyles: {
324
+ type: 'boolean',
325
+ },
326
+ styles: {
327
+ $ref: '#/definitions/moduleStyles',
328
+ },
329
+ },
330
+ },
331
+ ],
332
+ definitions: {
333
+ moduleStyles: {
334
+ type: 'object',
335
+ additionalProperties: {
336
+ $ref: '#/definitions/styles',
337
+ },
338
+ },
339
+ styles: {
340
+ anyOf: [
341
+ {
342
+ enum: [
343
+ false,
344
+ ],
345
+ },
346
+ {
347
+ $ref: '#/definitions/booleanObject',
348
+ },
349
+ ],
350
+ },
351
+ booleanObject: {
352
+ type: 'object',
353
+ additionalProperties: {
354
+ type: 'boolean',
355
+ },
356
+ },
357
+ },
358
+ };
359
+
360
+ /** @type {import('eslint').Rule.RuleModule} */
361
+ const config = {
362
+ create,
363
+ meta: {
364
+ type: 'problem',
365
+ docs: {
366
+ description: 'Enforce specific import styles per module.',
367
+ recommended: 'unopinionated',
368
+ },
369
+ schema,
370
+ defaultOptions: [{}],
371
+ messages,
372
+ },
373
+ };
374
+
375
+ export default config;
@@ -0,0 +1,143 @@
1
+ // Generated file, DO NOT edit
2
+
3
+ export {default as 'better-regex'} from './better-regex.js';
4
+ export {default as 'catch-error-name'} from './catch-error-name.js';
5
+ export {default as 'consistent-assert'} from './consistent-assert.js';
6
+ export {default as 'consistent-date-clone'} from './consistent-date-clone.js';
7
+ export {default as 'consistent-destructuring'} from './consistent-destructuring.js';
8
+ export {default as 'consistent-empty-array-spread'} from './consistent-empty-array-spread.js';
9
+ export {default as 'consistent-existence-index-check'} from './consistent-existence-index-check.js';
10
+ export {default as 'consistent-function-scoping'} from './consistent-function-scoping.js';
11
+ export {default as 'custom-error-definition'} from './custom-error-definition.js';
12
+ export {default as 'empty-brace-spaces'} from './empty-brace-spaces.js';
13
+ export {default as 'error-message'} from './error-message.js';
14
+ export {default as 'escape-case'} from './escape-case.js';
15
+ export {default as 'expiring-todo-comments'} from './expiring-todo-comments.js';
16
+ export {default as 'explicit-length-check'} from './explicit-length-check.js';
17
+ export {default as 'filename-case'} from './filename-case.js';
18
+ export {default as 'import-style'} from './import-style.js';
19
+ export {default as 'new-for-builtins'} from './new-for-builtins.js';
20
+ export {default as 'no-abusive-eslint-disable'} from './no-abusive-eslint-disable.js';
21
+ export {default as 'no-accessor-recursion'} from './no-accessor-recursion.js';
22
+ export {default as 'no-anonymous-default-export'} from './no-anonymous-default-export.js';
23
+ export {default as 'no-array-callback-reference'} from './no-array-callback-reference.js';
24
+ export {default as 'no-array-for-each'} from './no-array-for-each.js';
25
+ export {default as 'no-array-method-this-argument'} from './no-array-method-this-argument.js';
26
+ export {default as 'no-array-reduce'} from './no-array-reduce.js';
27
+ export {default as 'no-array-reverse'} from './no-array-reverse.js';
28
+ export {default as 'no-array-sort'} from './no-array-sort.js';
29
+ export {default as 'no-await-expression-member'} from './no-await-expression-member.js';
30
+ export {default as 'no-await-in-promise-methods'} from './no-await-in-promise-methods.js';
31
+ export {default as 'no-console-spaces'} from './no-console-spaces.js';
32
+ export {default as 'no-document-cookie'} from './no-document-cookie.js';
33
+ export {default as 'no-empty-file'} from './no-empty-file.js';
34
+ export {default as 'no-for-loop'} from './no-for-loop.js';
35
+ export {default as 'no-hex-escape'} from './no-hex-escape.js';
36
+ export {default as 'no-immediate-mutation'} from './no-immediate-mutation.js';
37
+ export {default as 'no-instanceof-builtins'} from './no-instanceof-builtins.js';
38
+ export {default as 'no-invalid-fetch-options'} from './no-invalid-fetch-options.js';
39
+ export {default as 'no-invalid-remove-event-listener'} from './no-invalid-remove-event-listener.js';
40
+ export {default as 'no-keyword-prefix'} from './no-keyword-prefix.js';
41
+ export {default as 'no-lonely-if'} from './no-lonely-if.js';
42
+ export {default as 'no-magic-array-flat-depth'} from './no-magic-array-flat-depth.js';
43
+ export {default as 'no-named-default'} from './no-named-default.js';
44
+ export {default as 'no-negated-condition'} from './no-negated-condition.js';
45
+ export {default as 'no-negation-in-equality-check'} from './no-negation-in-equality-check.js';
46
+ export {default as 'no-nested-ternary'} from './no-nested-ternary.js';
47
+ export {default as 'no-new-array'} from './no-new-array.js';
48
+ export {default as 'no-new-buffer'} from './no-new-buffer.js';
49
+ export {default as 'no-null'} from './no-null.js';
50
+ export {default as 'no-object-as-default-parameter'} from './no-object-as-default-parameter.js';
51
+ export {default as 'no-process-exit'} from './no-process-exit.js';
52
+ export {default as 'no-single-promise-in-promise-methods'} from './no-single-promise-in-promise-methods.js';
53
+ export {default as 'no-static-only-class'} from './no-static-only-class.js';
54
+ export {default as 'no-thenable'} from './no-thenable.js';
55
+ export {default as 'no-this-assignment'} from './no-this-assignment.js';
56
+ export {default as 'no-typeof-undefined'} from './no-typeof-undefined.js';
57
+ export {default as 'no-unnecessary-array-flat-depth'} from './no-unnecessary-array-flat-depth.js';
58
+ export {default as 'no-unnecessary-array-splice-count'} from './no-unnecessary-array-splice-count.js';
59
+ export {default as 'no-unnecessary-await'} from './no-unnecessary-await.js';
60
+ export {default as 'no-unnecessary-polyfills'} from './no-unnecessary-polyfills.js';
61
+ export {default as 'no-unnecessary-slice-end'} from './no-unnecessary-slice-end.js';
62
+ export {default as 'no-unreadable-array-destructuring'} from './no-unreadable-array-destructuring.js';
63
+ export {default as 'no-unreadable-iife'} from './no-unreadable-iife.js';
64
+ export {default as 'no-unused-properties'} from './no-unused-properties.js';
65
+ export {default as 'no-useless-collection-argument'} from './no-useless-collection-argument.js';
66
+ export {default as 'no-useless-error-capture-stack-trace'} from './no-useless-error-capture-stack-trace.js';
67
+ export {default as 'no-useless-fallback-in-spread'} from './no-useless-fallback-in-spread.js';
68
+ export {default as 'no-useless-length-check'} from './no-useless-length-check.js';
69
+ export {default as 'no-useless-promise-resolve-reject'} from './no-useless-promise-resolve-reject.js';
70
+ export {default as 'no-useless-spread'} from './no-useless-spread.js';
71
+ export {default as 'no-useless-switch-case'} from './no-useless-switch-case.js';
72
+ export {default as 'no-useless-undefined'} from './no-useless-undefined.js';
73
+ export {default as 'no-zero-fractions'} from './no-zero-fractions.js';
74
+ export {default as 'number-literal-case'} from './number-literal-case.js';
75
+ export {default as 'numeric-separators-style'} from './numeric-separators-style.js';
76
+ export {default as 'prefer-add-event-listener'} from './prefer-add-event-listener.js';
77
+ export {default as 'prefer-array-find'} from './prefer-array-find.js';
78
+ export {default as 'prefer-array-flat-map'} from './prefer-array-flat-map.js';
79
+ export {default as 'prefer-array-flat'} from './prefer-array-flat.js';
80
+ export {default as 'prefer-array-index-of'} from './prefer-array-index-of.js';
81
+ export {default as 'prefer-array-some'} from './prefer-array-some.js';
82
+ export {default as 'prefer-at'} from './prefer-at.js';
83
+ export {default as 'prefer-bigint-literals'} from './prefer-bigint-literals.js';
84
+ export {default as 'prefer-blob-reading-methods'} from './prefer-blob-reading-methods.js';
85
+ export {default as 'prefer-class-fields'} from './prefer-class-fields.js';
86
+ export {default as 'prefer-classlist-toggle'} from './prefer-classlist-toggle.js';
87
+ export {default as 'prefer-code-point'} from './prefer-code-point.js';
88
+ export {default as 'prefer-date-now'} from './prefer-date-now.js';
89
+ export {default as 'prefer-default-parameters'} from './prefer-default-parameters.js';
90
+ export {default as 'prefer-dom-node-append'} from './prefer-dom-node-append.js';
91
+ export {default as 'prefer-dom-node-dataset'} from './prefer-dom-node-dataset.js';
92
+ export {default as 'prefer-dom-node-remove'} from './prefer-dom-node-remove.js';
93
+ export {default as 'prefer-dom-node-text-content'} from './prefer-dom-node-text-content.js';
94
+ export {default as 'prefer-event-target'} from './prefer-event-target.js';
95
+ export {default as 'prefer-export-from'} from './prefer-export-from.js';
96
+ export {default as 'prefer-global-this'} from './prefer-global-this.js';
97
+ export {default as 'prefer-import-meta-properties'} from './prefer-import-meta-properties.js';
98
+ export {default as 'prefer-includes'} from './prefer-includes.js';
99
+ export {default as 'prefer-json-parse-buffer'} from './prefer-json-parse-buffer.js';
100
+ export {default as 'prefer-keyboard-event-key'} from './prefer-keyboard-event-key.js';
101
+ export {default as 'prefer-logical-operator-over-ternary'} from './prefer-logical-operator-over-ternary.js';
102
+ export {default as 'prefer-math-min-max'} from './prefer-math-min-max.js';
103
+ export {default as 'prefer-math-trunc'} from './prefer-math-trunc.js';
104
+ export {default as 'prefer-modern-dom-apis'} from './prefer-modern-dom-apis.js';
105
+ export {default as 'prefer-modern-math-apis'} from './prefer-modern-math-apis.js';
106
+ export {default as 'prefer-module'} from './prefer-module.js';
107
+ export {default as 'prefer-native-coercion-functions'} from './prefer-native-coercion-functions.js';
108
+ export {default as 'prefer-negative-index'} from './prefer-negative-index.js';
109
+ export {default as 'prefer-node-protocol'} from './prefer-node-protocol.js';
110
+ export {default as 'prefer-number-properties'} from './prefer-number-properties.js';
111
+ export {default as 'prefer-object-from-entries'} from './prefer-object-from-entries.js';
112
+ export {default as 'prefer-optional-catch-binding'} from './prefer-optional-catch-binding.js';
113
+ export {default as 'prefer-prototype-methods'} from './prefer-prototype-methods.js';
114
+ export {default as 'prefer-query-selector'} from './prefer-query-selector.js';
115
+ export {default as 'prefer-reflect-apply'} from './prefer-reflect-apply.js';
116
+ export {default as 'prefer-regexp-test'} from './prefer-regexp-test.js';
117
+ export {default as 'prefer-response-static-json'} from './prefer-response-static-json.js';
118
+ export {default as 'prefer-set-has'} from './prefer-set-has.js';
119
+ export {default as 'prefer-set-size'} from './prefer-set-size.js';
120
+ export {default as 'prefer-single-call'} from './prefer-single-call.js';
121
+ export {default as 'prefer-spread'} from './prefer-spread.js';
122
+ export {default as 'prefer-string-raw'} from './prefer-string-raw.js';
123
+ export {default as 'prefer-string-replace-all'} from './prefer-string-replace-all.js';
124
+ export {default as 'prefer-string-slice'} from './prefer-string-slice.js';
125
+ export {default as 'prefer-string-starts-ends-with'} from './prefer-string-starts-ends-with.js';
126
+ export {default as 'prefer-string-trim-start-end'} from './prefer-string-trim-start-end.js';
127
+ export {default as 'prefer-structured-clone'} from './prefer-structured-clone.js';
128
+ export {default as 'prefer-switch'} from './prefer-switch.js';
129
+ export {default as 'prefer-ternary'} from './prefer-ternary.js';
130
+ export {default as 'prefer-top-level-await'} from './prefer-top-level-await.js';
131
+ export {default as 'prefer-type-error'} from './prefer-type-error.js';
132
+ export {default as 'prevent-abbreviations'} from './prevent-abbreviations.js';
133
+ export {default as 'relative-url-style'} from './relative-url-style.js';
134
+ export {default as 'require-array-join-separator'} from './require-array-join-separator.js';
135
+ export {default as 'require-module-attributes'} from './require-module-attributes.js';
136
+ export {default as 'require-module-specifiers'} from './require-module-specifiers.js';
137
+ export {default as 'require-number-to-fixed-digits-argument'} from './require-number-to-fixed-digits-argument.js';
138
+ export {default as 'require-post-message-target-origin'} from './require-post-message-target-origin.js';
139
+ export {default as 'string-content'} from './string-content.js';
140
+ export {default as 'switch-case-braces'} from './switch-case-braces.js';
141
+ export {default as 'template-indent'} from './template-indent.js';
142
+ export {default as 'text-encoding-identifier-case'} from './text-encoding-identifier-case.js';
143
+ export {default as 'throw-new-error'} from './throw-new-error.js';
@@ -0,0 +1,112 @@
1
+ import {GlobalReferenceTracker} from './utils/global-reference-tracker.js';
2
+ import * as builtins from './utils/builtins.js';
3
+ import {
4
+ switchCallExpressionToNewExpression,
5
+ switchNewExpressionToCallExpression,
6
+ fixSpaceAroundKeyword,
7
+ } from './fix/index.js';
8
+
9
+ const MESSAGE_ID_ERROR_DATE = 'error-date';
10
+ const MESSAGE_ID_SUGGESTION_DATE = 'suggestion-date';
11
+
12
+ const messages = {
13
+ enforce: 'Use `new {{name}}()` instead of `{{name}}()`.',
14
+ disallow: 'Use `{{name}}()` instead of `new {{name}}()`.',
15
+ [MESSAGE_ID_ERROR_DATE]: 'Use `String(new Date())` instead of `Date()`.',
16
+ [MESSAGE_ID_SUGGESTION_DATE]: 'Switch to `String(new Date())`.',
17
+ };
18
+
19
+ function enforceNewExpression({node, path: [name]}, context) {
20
+ if (name === 'Object') {
21
+ const {parent} = node;
22
+ if (
23
+ parent.type === 'BinaryExpression'
24
+ && (parent.operator === '===' || parent.operator === '!==')
25
+ && (parent.left === node || parent.right === node)
26
+ ) {
27
+ return;
28
+ }
29
+ }
30
+
31
+ // `Date()` returns a string representation of the current date and time, exactly as `new Date().toString()` does.
32
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#return_value
33
+ if (name === 'Date') {
34
+ function * fix(fixer) {
35
+ yield fixer.replaceText(node, 'String(new Date())');
36
+ yield fixSpaceAroundKeyword(fixer, node, context);
37
+ }
38
+
39
+ const problem = {
40
+ node,
41
+ messageId: MESSAGE_ID_ERROR_DATE,
42
+ };
43
+
44
+ if (context.sourceCode.getCommentsInside(node).length === 0 && node.arguments.length === 0) {
45
+ problem.fix = fix;
46
+ } else {
47
+ problem.suggest = [
48
+ {
49
+ messageId: MESSAGE_ID_SUGGESTION_DATE,
50
+ fix,
51
+ },
52
+ ];
53
+ }
54
+
55
+ return problem;
56
+ }
57
+
58
+ return {
59
+ node,
60
+ messageId: 'enforce',
61
+ data: {name},
62
+ fix: fixer => switchCallExpressionToNewExpression(node, context, fixer),
63
+ };
64
+ }
65
+
66
+ function enforceCallExpression({node, path: [name]}, context) {
67
+ const problem = {
68
+ node,
69
+ messageId: 'disallow',
70
+ data: {name},
71
+ };
72
+
73
+ if (name !== 'String' && name !== 'Boolean' && name !== 'Number') {
74
+ problem.fix = fixer => switchNewExpressionToCallExpression(node, context, fixer);
75
+ }
76
+
77
+ return problem;
78
+ }
79
+
80
+ const newExpressionTracker = new GlobalReferenceTracker({
81
+ objects: builtins.disallowNew,
82
+ type: GlobalReferenceTracker.CONSTRUCT,
83
+ handle: enforceCallExpression,
84
+ });
85
+ const callExpressionTracker = new GlobalReferenceTracker({
86
+ objects: builtins.enforceNew,
87
+ type: GlobalReferenceTracker.CALL,
88
+ handle: enforceNewExpression,
89
+ });
90
+
91
+ /** @param {import('eslint').Rule.RuleContext} context */
92
+ const create = context => {
93
+ newExpressionTracker.listen({context});
94
+ callExpressionTracker.listen({context});
95
+ };
96
+
97
+ /** @type {import('eslint').Rule.RuleModule} */
98
+ const config = {
99
+ create,
100
+ meta: {
101
+ type: 'suggestion',
102
+ docs: {
103
+ description: 'Enforce the use of `new` for all builtins, except `String`, `Number`, `Boolean`, `Symbol` and `BigInt`.',
104
+ recommended: 'unopinionated',
105
+ },
106
+ fixable: 'code',
107
+ hasSuggestions: true,
108
+ messages,
109
+ },
110
+ };
111
+
112
+ export default config;
@@ -0,0 +1,63 @@
1
+ import {ConfigCommentParser} from '@eslint/plugin-kit';
2
+
3
+ const MESSAGE_ID = 'no-abusive-eslint-disable';
4
+ const messages = {
5
+ [MESSAGE_ID]: 'Specify the rules you want to disable.',
6
+ };
7
+
8
+ // https://github.com/eslint/eslint/blob/ecd0ede7fd2ccbb4c0daf0e4732e97ea0f49db1b/lib/linter/linter.js#L509-L512
9
+ const eslintDisableDirectives = new Set([
10
+ 'eslint-disable',
11
+ 'eslint-disable-line',
12
+ 'eslint-disable-next-line',
13
+ ]);
14
+
15
+ let commentParser;
16
+ /** @param {import('eslint').Rule.RuleContext} context */
17
+ const create = context => ({
18
+ * Program(node) {
19
+ for (const comment of node.comments) {
20
+ commentParser ??= new ConfigCommentParser();
21
+ const result = commentParser.parseDirective(comment.value);
22
+
23
+ if (!(
24
+ // It's a eslint-disable comment
25
+ eslintDisableDirectives.has(result?.label)
26
+ // But it did not specify any rules
27
+ && !result?.value
28
+ )) {
29
+ return;
30
+ }
31
+
32
+ const {sourceCode} = context;
33
+
34
+ yield {
35
+ // Can't set it at the given location as the warning
36
+ // will be ignored due to the disable comment
37
+ loc: {
38
+ start: {
39
+ ...sourceCode.getLoc(comment).start,
40
+ column: -1,
41
+ },
42
+ end: sourceCode.getLoc(comment).end,
43
+ },
44
+ messageId: MESSAGE_ID,
45
+ };
46
+ }
47
+ },
48
+ });
49
+
50
+ /** @type {import('eslint').Rule.RuleModule} */
51
+ const config = {
52
+ create,
53
+ meta: {
54
+ type: 'suggestion',
55
+ docs: {
56
+ description: 'Enforce specifying rules to disable in `eslint-disable` comments.',
57
+ recommended: 'unopinionated',
58
+ },
59
+ messages,
60
+ },
61
+ };
62
+
63
+ export default config;