@less-unsound/eslint-plugin 0.0.1

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 (338) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/dist/cjs/index.js +355 -0
  4. package/dist/cjs/package.json +3 -0
  5. package/dist/cjs/rules/no-accidental-mutation.js +100 -0
  6. package/dist/cjs/rules/no-ambient-dom-globals.js +181 -0
  7. package/dist/cjs/rules/no-any.js +27 -0
  8. package/dist/cjs/rules/no-arguments-object.js +122 -0
  9. package/dist/cjs/rules/no-as-type-assertion.js +44 -0
  10. package/dist/cjs/rules/no-bigint.js +74 -0
  11. package/dist/cjs/rules/no-boolean-literal-compare.js +37 -0
  12. package/dist/cjs/rules/no-broad-types.js +50 -0
  13. package/dist/cjs/rules/no-buffer.js +146 -0
  14. package/dist/cjs/rules/no-class.js +39 -0
  15. package/dist/cjs/rules/no-comma-operator.js +27 -0
  16. package/dist/cjs/rules/no-conditional-type.js +27 -0
  17. package/dist/cjs/rules/no-default-parameter.js +71 -0
  18. package/dist/cjs/rules/no-enum.js +27 -0
  19. package/dist/cjs/rules/no-eval.js +33 -0
  20. package/dist/cjs/rules/no-export-default.js +45 -0
  21. package/dist/cjs/rules/no-for-in.js +27 -0
  22. package/dist/cjs/rules/no-for-let.js +39 -0
  23. package/dist/cjs/rules/no-function-constructor.js +84 -0
  24. package/dist/cjs/rules/no-function-keyword.js +48 -0
  25. package/dist/cjs/rules/no-generic-parameter-bounds.js +34 -0
  26. package/dist/cjs/rules/no-getter-setter.js +48 -0
  27. package/dist/cjs/rules/no-global-context.js +134 -0
  28. package/dist/cjs/rules/no-import-code-extension.js +70 -0
  29. package/dist/cjs/rules/no-import-rename.js +45 -0
  30. package/dist/cjs/rules/no-import-type.js +27 -0
  31. package/dist/cjs/rules/no-in-operator.js +27 -0
  32. package/dist/cjs/rules/no-indexed-access-type.js +27 -0
  33. package/dist/cjs/rules/no-indexed-object-type.js +53 -0
  34. package/dist/cjs/rules/no-inheritance.js +65 -0
  35. package/dist/cjs/rules/no-inline-tagged-object.js +95 -0
  36. package/dist/cjs/rules/no-intersection-type.js +27 -0
  37. package/dist/cjs/rules/no-json-static-method.js +158 -0
  38. package/dist/cjs/rules/no-keyof.js +27 -0
  39. package/dist/cjs/rules/no-let.js +45 -0
  40. package/dist/cjs/rules/no-mapped-object-type.js +27 -0
  41. package/dist/cjs/rules/no-never.js +27 -0
  42. package/dist/cjs/rules/no-non-null-assertion.js +27 -0
  43. package/dist/cjs/rules/no-null.js +36 -0
  44. package/dist/cjs/rules/no-object-as-map.js +138 -0
  45. package/dist/cjs/rules/no-object-spread.js +27 -0
  46. package/dist/cjs/rules/no-object-stringification-hook.js +101 -0
  47. package/dist/cjs/rules/no-optional-parameter.js +104 -0
  48. package/dist/cjs/rules/no-optional-property.js +30 -0
  49. package/dist/cjs/rules/no-overload.js +110 -0
  50. package/dist/cjs/rules/no-param-assign.js +94 -0
  51. package/dist/cjs/rules/no-prototype-access.js +79 -0
  52. package/dist/cjs/rules/no-proxy-reflect.js +112 -0
  53. package/dist/cjs/rules/no-reexport-outside-entrypoint.js +46 -0
  54. package/dist/cjs/rules/no-regular-expression.js +93 -0
  55. package/dist/cjs/rules/no-require.js +162 -0
  56. package/dist/cjs/rules/no-rest-parameter.js +38 -0
  57. package/dist/cjs/rules/no-switch.js +27 -0
  58. package/dist/cjs/rules/no-symbol.js +33 -0
  59. package/dist/cjs/rules/no-try-catch.js +30 -0
  60. package/dist/cjs/rules/no-ts-comment-directive.js +39 -0
  61. package/dist/cjs/rules/no-tuple.js +27 -0
  62. package/dist/cjs/rules/no-type-guard.js +27 -0
  63. package/dist/cjs/rules/no-typeof-operator.js +27 -0
  64. package/dist/cjs/rules/no-typeof-type.js +27 -0
  65. package/dist/cjs/rules/no-undefined-type.js +27 -0
  66. package/dist/cjs/rules/no-unknown.js +27 -0
  67. package/dist/cjs/rules/no-untagged-object-union.js +150 -0
  68. package/dist/cjs/rules/no-utility-type.js +57 -0
  69. package/dist/cjs/rules/no-var.js +27 -0
  70. package/dist/cjs/rules/no-void-operator.js +27 -0
  71. package/dist/cjs/rules/no-while.js +33 -0
  72. package/dist/cjs/rules/require-boolean-prefix.js +179 -0
  73. package/dist/cjs/rules/require-disjoint-union.js +228 -0
  74. package/dist/cjs/rules/require-function-verb.js +293 -0
  75. package/dist/cjs/rules/require-identifier-case.js +197 -0
  76. package/dist/cjs/rules/require-kebab-case-filename.js +45 -0
  77. package/dist/cjs/rules/require-named-union-branch.js +34 -0
  78. package/dist/cjs/rules/require-readonly-array.js +49 -0
  79. package/dist/cjs/rules/require-readonly-collections.js +37 -0
  80. package/dist/cjs/rules/require-readonly-object-fields.js +32 -0
  81. package/dist/cjs/rules/require-readonly-tuple.js +33 -0
  82. package/dist/cjs/rules/require-return-type.js +85 -0
  83. package/dist/cjs/rules/require-string-template-expression.js +55 -0
  84. package/dist/cjs/utils/create-rule.js +6 -0
  85. package/dist/cjs/utils/package-entrypoint.js +69 -0
  86. package/dist/cjs/utils/readonly.js +18 -0
  87. package/dist/cjs/utils/string-case.js +12 -0
  88. package/dist/cjs/utils/type-reference.js +35 -0
  89. package/dist/esm/index.d.ts +3568 -0
  90. package/dist/esm/index.js +352 -0
  91. package/dist/esm/rules/no-accidental-mutation.d.ts +3 -0
  92. package/dist/esm/rules/no-accidental-mutation.js +97 -0
  93. package/dist/esm/rules/no-ambient-dom-globals.d.ts +3 -0
  94. package/dist/esm/rules/no-ambient-dom-globals.js +178 -0
  95. package/dist/esm/rules/no-any.d.ts +3 -0
  96. package/dist/esm/rules/no-any.js +24 -0
  97. package/dist/esm/rules/no-arguments-object.d.ts +3 -0
  98. package/dist/esm/rules/no-arguments-object.js +119 -0
  99. package/dist/esm/rules/no-as-type-assertion.d.ts +3 -0
  100. package/dist/esm/rules/no-as-type-assertion.js +41 -0
  101. package/dist/esm/rules/no-bigint.d.ts +3 -0
  102. package/dist/esm/rules/no-bigint.js +71 -0
  103. package/dist/esm/rules/no-boolean-literal-compare.d.ts +3 -0
  104. package/dist/esm/rules/no-boolean-literal-compare.js +34 -0
  105. package/dist/esm/rules/no-broad-types.d.ts +3 -0
  106. package/dist/esm/rules/no-broad-types.js +47 -0
  107. package/dist/esm/rules/no-buffer.d.ts +3 -0
  108. package/dist/esm/rules/no-buffer.js +143 -0
  109. package/dist/esm/rules/no-class.d.ts +3 -0
  110. package/dist/esm/rules/no-class.js +36 -0
  111. package/dist/esm/rules/no-comma-operator.d.ts +3 -0
  112. package/dist/esm/rules/no-comma-operator.js +24 -0
  113. package/dist/esm/rules/no-conditional-type.d.ts +3 -0
  114. package/dist/esm/rules/no-conditional-type.js +24 -0
  115. package/dist/esm/rules/no-default-parameter.d.ts +3 -0
  116. package/dist/esm/rules/no-default-parameter.js +68 -0
  117. package/dist/esm/rules/no-enum.d.ts +3 -0
  118. package/dist/esm/rules/no-enum.js +24 -0
  119. package/dist/esm/rules/no-eval.d.ts +3 -0
  120. package/dist/esm/rules/no-eval.js +30 -0
  121. package/dist/esm/rules/no-export-default.d.ts +3 -0
  122. package/dist/esm/rules/no-export-default.js +42 -0
  123. package/dist/esm/rules/no-for-in.d.ts +3 -0
  124. package/dist/esm/rules/no-for-in.js +24 -0
  125. package/dist/esm/rules/no-for-let.d.ts +3 -0
  126. package/dist/esm/rules/no-for-let.js +36 -0
  127. package/dist/esm/rules/no-function-constructor.d.ts +3 -0
  128. package/dist/esm/rules/no-function-constructor.js +81 -0
  129. package/dist/esm/rules/no-function-keyword.d.ts +3 -0
  130. package/dist/esm/rules/no-function-keyword.js +45 -0
  131. package/dist/esm/rules/no-generic-parameter-bounds.d.ts +3 -0
  132. package/dist/esm/rules/no-generic-parameter-bounds.js +31 -0
  133. package/dist/esm/rules/no-getter-setter.d.ts +3 -0
  134. package/dist/esm/rules/no-getter-setter.js +45 -0
  135. package/dist/esm/rules/no-global-context.d.ts +3 -0
  136. package/dist/esm/rules/no-global-context.js +131 -0
  137. package/dist/esm/rules/no-import-code-extension.d.ts +4 -0
  138. package/dist/esm/rules/no-import-code-extension.js +67 -0
  139. package/dist/esm/rules/no-import-rename.d.ts +3 -0
  140. package/dist/esm/rules/no-import-rename.js +42 -0
  141. package/dist/esm/rules/no-import-type.d.ts +3 -0
  142. package/dist/esm/rules/no-import-type.js +24 -0
  143. package/dist/esm/rules/no-in-operator.d.ts +3 -0
  144. package/dist/esm/rules/no-in-operator.js +24 -0
  145. package/dist/esm/rules/no-indexed-access-type.d.ts +3 -0
  146. package/dist/esm/rules/no-indexed-access-type.js +24 -0
  147. package/dist/esm/rules/no-indexed-object-type.d.ts +3 -0
  148. package/dist/esm/rules/no-indexed-object-type.js +50 -0
  149. package/dist/esm/rules/no-inheritance.d.ts +3 -0
  150. package/dist/esm/rules/no-inheritance.js +62 -0
  151. package/dist/esm/rules/no-inline-tagged-object.d.ts +5 -0
  152. package/dist/esm/rules/no-inline-tagged-object.js +92 -0
  153. package/dist/esm/rules/no-intersection-type.d.ts +3 -0
  154. package/dist/esm/rules/no-intersection-type.js +24 -0
  155. package/dist/esm/rules/no-json-static-method.d.ts +3 -0
  156. package/dist/esm/rules/no-json-static-method.js +155 -0
  157. package/dist/esm/rules/no-keyof.d.ts +3 -0
  158. package/dist/esm/rules/no-keyof.js +24 -0
  159. package/dist/esm/rules/no-let.d.ts +3 -0
  160. package/dist/esm/rules/no-let.js +42 -0
  161. package/dist/esm/rules/no-mapped-object-type.d.ts +3 -0
  162. package/dist/esm/rules/no-mapped-object-type.js +24 -0
  163. package/dist/esm/rules/no-never.d.ts +3 -0
  164. package/dist/esm/rules/no-never.js +24 -0
  165. package/dist/esm/rules/no-non-null-assertion.d.ts +3 -0
  166. package/dist/esm/rules/no-non-null-assertion.js +24 -0
  167. package/dist/esm/rules/no-null.d.ts +3 -0
  168. package/dist/esm/rules/no-null.js +33 -0
  169. package/dist/esm/rules/no-object-as-map.d.ts +3 -0
  170. package/dist/esm/rules/no-object-as-map.js +135 -0
  171. package/dist/esm/rules/no-object-spread.d.ts +3 -0
  172. package/dist/esm/rules/no-object-spread.js +24 -0
  173. package/dist/esm/rules/no-object-stringification-hook.d.ts +3 -0
  174. package/dist/esm/rules/no-object-stringification-hook.js +98 -0
  175. package/dist/esm/rules/no-optional-parameter.d.ts +3 -0
  176. package/dist/esm/rules/no-optional-parameter.js +101 -0
  177. package/dist/esm/rules/no-optional-property.d.ts +3 -0
  178. package/dist/esm/rules/no-optional-property.js +27 -0
  179. package/dist/esm/rules/no-overload.d.ts +3 -0
  180. package/dist/esm/rules/no-overload.js +107 -0
  181. package/dist/esm/rules/no-param-assign.d.ts +3 -0
  182. package/dist/esm/rules/no-param-assign.js +91 -0
  183. package/dist/esm/rules/no-prototype-access.d.ts +3 -0
  184. package/dist/esm/rules/no-prototype-access.js +76 -0
  185. package/dist/esm/rules/no-proxy-reflect.d.ts +3 -0
  186. package/dist/esm/rules/no-proxy-reflect.js +109 -0
  187. package/dist/esm/rules/no-reexport-outside-entrypoint.d.ts +3 -0
  188. package/dist/esm/rules/no-reexport-outside-entrypoint.js +43 -0
  189. package/dist/esm/rules/no-regular-expression.d.ts +3 -0
  190. package/dist/esm/rules/no-regular-expression.js +90 -0
  191. package/dist/esm/rules/no-require.d.ts +3 -0
  192. package/dist/esm/rules/no-require.js +159 -0
  193. package/dist/esm/rules/no-rest-parameter.d.ts +3 -0
  194. package/dist/esm/rules/no-rest-parameter.js +35 -0
  195. package/dist/esm/rules/no-switch.d.ts +3 -0
  196. package/dist/esm/rules/no-switch.js +24 -0
  197. package/dist/esm/rules/no-symbol.d.ts +3 -0
  198. package/dist/esm/rules/no-symbol.js +30 -0
  199. package/dist/esm/rules/no-try-catch.d.ts +3 -0
  200. package/dist/esm/rules/no-try-catch.js +27 -0
  201. package/dist/esm/rules/no-ts-comment-directive.d.ts +3 -0
  202. package/dist/esm/rules/no-ts-comment-directive.js +36 -0
  203. package/dist/esm/rules/no-tuple.d.ts +3 -0
  204. package/dist/esm/rules/no-tuple.js +24 -0
  205. package/dist/esm/rules/no-type-guard.d.ts +3 -0
  206. package/dist/esm/rules/no-type-guard.js +24 -0
  207. package/dist/esm/rules/no-typeof-operator.d.ts +3 -0
  208. package/dist/esm/rules/no-typeof-operator.js +24 -0
  209. package/dist/esm/rules/no-typeof-type.d.ts +3 -0
  210. package/dist/esm/rules/no-typeof-type.js +24 -0
  211. package/dist/esm/rules/no-undefined-type.d.ts +3 -0
  212. package/dist/esm/rules/no-undefined-type.js +24 -0
  213. package/dist/esm/rules/no-unknown.d.ts +3 -0
  214. package/dist/esm/rules/no-unknown.js +24 -0
  215. package/dist/esm/rules/no-untagged-object-union.d.ts +3 -0
  216. package/dist/esm/rules/no-untagged-object-union.js +147 -0
  217. package/dist/esm/rules/no-utility-type.d.ts +3 -0
  218. package/dist/esm/rules/no-utility-type.js +54 -0
  219. package/dist/esm/rules/no-var.d.ts +3 -0
  220. package/dist/esm/rules/no-var.js +24 -0
  221. package/dist/esm/rules/no-void-operator.d.ts +3 -0
  222. package/dist/esm/rules/no-void-operator.js +24 -0
  223. package/dist/esm/rules/no-while.d.ts +3 -0
  224. package/dist/esm/rules/no-while.js +30 -0
  225. package/dist/esm/rules/require-boolean-prefix.d.ts +4 -0
  226. package/dist/esm/rules/require-boolean-prefix.js +176 -0
  227. package/dist/esm/rules/require-disjoint-union.d.ts +5 -0
  228. package/dist/esm/rules/require-disjoint-union.js +225 -0
  229. package/dist/esm/rules/require-function-verb.d.ts +4 -0
  230. package/dist/esm/rules/require-function-verb.js +290 -0
  231. package/dist/esm/rules/require-identifier-case.d.ts +4 -0
  232. package/dist/esm/rules/require-identifier-case.js +194 -0
  233. package/dist/esm/rules/require-kebab-case-filename.d.ts +4 -0
  234. package/dist/esm/rules/require-kebab-case-filename.js +42 -0
  235. package/dist/esm/rules/require-named-union-branch.d.ts +3 -0
  236. package/dist/esm/rules/require-named-union-branch.js +31 -0
  237. package/dist/esm/rules/require-readonly-array.d.ts +3 -0
  238. package/dist/esm/rules/require-readonly-array.js +46 -0
  239. package/dist/esm/rules/require-readonly-collections.d.ts +3 -0
  240. package/dist/esm/rules/require-readonly-collections.js +34 -0
  241. package/dist/esm/rules/require-readonly-object-fields.d.ts +3 -0
  242. package/dist/esm/rules/require-readonly-object-fields.js +29 -0
  243. package/dist/esm/rules/require-readonly-tuple.d.ts +3 -0
  244. package/dist/esm/rules/require-readonly-tuple.js +30 -0
  245. package/dist/esm/rules/require-return-type.d.ts +4 -0
  246. package/dist/esm/rules/require-return-type.js +79 -0
  247. package/dist/esm/rules/require-string-template-expression.d.ts +4 -0
  248. package/dist/esm/rules/require-string-template-expression.js +52 -0
  249. package/dist/esm/utils/create-rule.d.ts +4 -0
  250. package/dist/esm/utils/create-rule.js +3 -0
  251. package/dist/esm/utils/package-entrypoint.d.ts +2 -0
  252. package/dist/esm/utils/package-entrypoint.js +64 -0
  253. package/dist/esm/utils/readonly.d.ts +2 -0
  254. package/dist/esm/utils/readonly.js +14 -0
  255. package/dist/esm/utils/string-case.d.ts +3 -0
  256. package/dist/esm/utils/string-case.js +6 -0
  257. package/dist/esm/utils/type-reference.d.ts +2 -0
  258. package/dist/esm/utils/type-reference.js +31 -0
  259. package/docs/rules/no-accidental-mutation.md +39 -0
  260. package/docs/rules/no-ambient-dom-globals.md +37 -0
  261. package/docs/rules/no-any.md +23 -0
  262. package/docs/rules/no-arguments-object.md +35 -0
  263. package/docs/rules/no-as-type-assertion.md +26 -0
  264. package/docs/rules/no-bigint.md +31 -0
  265. package/docs/rules/no-boolean-literal-compare.md +31 -0
  266. package/docs/rules/no-broad-types.md +27 -0
  267. package/docs/rules/no-buffer.md +31 -0
  268. package/docs/rules/no-class.md +56 -0
  269. package/docs/rules/no-comma-operator.md +31 -0
  270. package/docs/rules/no-conditional-type.md +23 -0
  271. package/docs/rules/no-default-parameter.md +43 -0
  272. package/docs/rules/no-enum.md +31 -0
  273. package/docs/rules/no-eval.md +27 -0
  274. package/docs/rules/no-export-default.md +28 -0
  275. package/docs/rules/no-for-in.md +23 -0
  276. package/docs/rules/no-for-let.md +31 -0
  277. package/docs/rules/no-function-constructor.md +27 -0
  278. package/docs/rules/no-function-keyword.md +37 -0
  279. package/docs/rules/no-generic-parameter-bounds.md +25 -0
  280. package/docs/rules/no-getter-setter.md +55 -0
  281. package/docs/rules/no-global-context.md +50 -0
  282. package/docs/rules/no-import-code-extension.md +39 -0
  283. package/docs/rules/no-import-rename.md +31 -0
  284. package/docs/rules/no-import-type.md +25 -0
  285. package/docs/rules/no-in-operator.md +23 -0
  286. package/docs/rules/no-indexed-access-type.md +33 -0
  287. package/docs/rules/no-indexed-object-type.md +23 -0
  288. package/docs/rules/no-inheritance.md +31 -0
  289. package/docs/rules/no-inline-tagged-object.md +41 -0
  290. package/docs/rules/no-intersection-type.md +23 -0
  291. package/docs/rules/no-json-static-method.md +46 -0
  292. package/docs/rules/no-keyof.md +35 -0
  293. package/docs/rules/no-let.md +31 -0
  294. package/docs/rules/no-mapped-object-type.md +23 -0
  295. package/docs/rules/no-never.md +35 -0
  296. package/docs/rules/no-non-null-assertion.md +23 -0
  297. package/docs/rules/no-null.md +31 -0
  298. package/docs/rules/no-object-as-map.md +49 -0
  299. package/docs/rules/no-object-spread.md +31 -0
  300. package/docs/rules/no-object-stringification-hook.md +49 -0
  301. package/docs/rules/no-optional-parameter.md +39 -0
  302. package/docs/rules/no-optional-property.md +33 -0
  303. package/docs/rules/no-overload.md +29 -0
  304. package/docs/rules/no-param-assign.md +30 -0
  305. package/docs/rules/no-prototype-access.md +43 -0
  306. package/docs/rules/no-proxy-reflect.md +39 -0
  307. package/docs/rules/no-reexport-outside-entrypoint.md +35 -0
  308. package/docs/rules/no-regular-expression.md +36 -0
  309. package/docs/rules/no-require.md +29 -0
  310. package/docs/rules/no-rest-parameter.md +23 -0
  311. package/docs/rules/no-switch.md +32 -0
  312. package/docs/rules/no-symbol.md +31 -0
  313. package/docs/rules/no-try-catch.md +37 -0
  314. package/docs/rules/no-ts-comment-directive.md +25 -0
  315. package/docs/rules/no-tuple.md +29 -0
  316. package/docs/rules/no-type-guard.md +23 -0
  317. package/docs/rules/no-typeof-operator.md +23 -0
  318. package/docs/rules/no-typeof-type.md +23 -0
  319. package/docs/rules/no-undefined-type.md +30 -0
  320. package/docs/rules/no-unknown.md +23 -0
  321. package/docs/rules/no-untagged-object-union.md +25 -0
  322. package/docs/rules/no-utility-type.md +35 -0
  323. package/docs/rules/no-var.md +27 -0
  324. package/docs/rules/no-void-operator.md +27 -0
  325. package/docs/rules/no-while.md +33 -0
  326. package/docs/rules/require-boolean-prefix.md +31 -0
  327. package/docs/rules/require-disjoint-union.md +58 -0
  328. package/docs/rules/require-function-verb.md +83 -0
  329. package/docs/rules/require-identifier-case.md +54 -0
  330. package/docs/rules/require-kebab-case-filename.md +37 -0
  331. package/docs/rules/require-named-union-branch.md +35 -0
  332. package/docs/rules/require-readonly-array.md +35 -0
  333. package/docs/rules/require-readonly-collections.md +35 -0
  334. package/docs/rules/require-readonly-object-fields.md +46 -0
  335. package/docs/rules/require-readonly-tuple.md +27 -0
  336. package/docs/rules/require-return-type.md +37 -0
  337. package/docs/rules/require-string-template-expression.md +38 -0
  338. package/package.json +70 -0
@@ -0,0 +1,24 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenImportType: "`import()` types are not allowed. Put type imports in the file header instead."
4
+ });
5
+ export const noImportTypeRule = createRule({
6
+ name: "no-import-type",
7
+ meta: {
8
+ type: "problem",
9
+ docs: {
10
+ description: "Disallow `import()` types."
11
+ },
12
+ schema: [],
13
+ messages: messageIds
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ TSImportType: (node) => {
18
+ context.report({
19
+ node,
20
+ messageId: "forbiddenImportType"
21
+ });
22
+ }
23
+ })
24
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noInOperatorRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenInOperator", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,24 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenInOperator: "The `in` operator is not allowed."
4
+ });
5
+ export const noInOperatorRule = createRule({
6
+ name: "no-in-operator",
7
+ meta: {
8
+ type: "problem",
9
+ docs: {
10
+ description: "Disallow the `in` operator."
11
+ },
12
+ schema: [],
13
+ messages: messageIds
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ "BinaryExpression[operator='in']": (node) => {
18
+ context.report({
19
+ node,
20
+ messageId: "forbiddenInOperator"
21
+ });
22
+ }
23
+ })
24
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noIndexedAccessTypeRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenIndexedAccessType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,24 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenIndexedAccessType: "Indexed access types are not allowed."
4
+ });
5
+ export const noIndexedAccessTypeRule = createRule({
6
+ name: "no-indexed-access-type",
7
+ meta: {
8
+ type: "problem",
9
+ docs: {
10
+ description: "Disallow indexed access types such as Foo[\"bar\"]."
11
+ },
12
+ schema: [],
13
+ messages: messageIds
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ TSIndexedAccessType: (node) => {
18
+ context.report({
19
+ node,
20
+ messageId: "forbiddenIndexedAccessType"
21
+ });
22
+ }
23
+ })
24
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noIndexedObjectTypeRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenIndexedObjectType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,50 @@
1
+ import { AST_NODE_TYPES } from "@typescript-eslint/utils";
2
+ import { createRule } from "../utils/create-rule.js";
3
+ import { containsTypeReference } from "../utils/type-reference.js";
4
+ const messageIds = Object.freeze({
5
+ forbiddenIndexedObjectType: "Indexed object types are not allowed."
6
+ });
7
+ const getContainingTypeName = (node) => {
8
+ let current = node.parent;
9
+ while (current !== undefined) {
10
+ if (current.type === AST_NODE_TYPES.TSTypeAliasDeclaration ||
11
+ current.type === AST_NODE_TYPES.TSInterfaceDeclaration) {
12
+ return current.id.name;
13
+ }
14
+ current = current.parent;
15
+ }
16
+ return undefined;
17
+ };
18
+ const isAllowedRecursiveIndexSignature = (node) => {
19
+ if (node.typeAnnotation === undefined) {
20
+ return false;
21
+ }
22
+ const typeName = getContainingTypeName(node);
23
+ if (typeName === undefined) {
24
+ return false;
25
+ }
26
+ return containsTypeReference(node.typeAnnotation.typeAnnotation, typeName);
27
+ };
28
+ export const noIndexedObjectTypeRule = createRule({
29
+ name: "no-indexed-object-type",
30
+ meta: {
31
+ type: "problem",
32
+ docs: {
33
+ description: "Disallow indexed object types such as `{ [key: string]: T }`, except for explicit self-recursive cases."
34
+ },
35
+ schema: [],
36
+ messages: messageIds
37
+ },
38
+ defaultOptions: [],
39
+ create: (context) => ({
40
+ TSIndexSignature: (node) => {
41
+ if (isAllowedRecursiveIndexSignature(node)) {
42
+ return;
43
+ }
44
+ context.report({
45
+ node,
46
+ messageId: "forbiddenIndexedObjectType"
47
+ });
48
+ }
49
+ })
50
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noInheritanceRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenInheritance", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,62 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ import { containsTypeReference } from "../utils/type-reference.js";
3
+ const messageIds = Object.freeze({
4
+ forbiddenInheritance: "Inheritance is not allowed."
5
+ });
6
+ const isAllowedRecursiveInterface = (node) => {
7
+ if (node.extends.length !== 1) {
8
+ return false;
9
+ }
10
+ if (node.body.body.length !== 0) {
11
+ return false;
12
+ }
13
+ const heritage = node.extends[0];
14
+ if (heritage.typeArguments === undefined) {
15
+ return false;
16
+ }
17
+ return heritage.typeArguments.params.some((parameter) => containsTypeReference(parameter, node.id.name));
18
+ };
19
+ export const noInheritanceRule = createRule({
20
+ name: "no-inheritance",
21
+ meta: {
22
+ type: "problem",
23
+ docs: {
24
+ description: "Disallow `extends` on classes and interfaces, except for the documented recursive-interface workaround."
25
+ },
26
+ schema: [],
27
+ messages: messageIds
28
+ },
29
+ defaultOptions: [],
30
+ create: (context) => ({
31
+ ClassDeclaration: (node) => {
32
+ if (node.superClass === null) {
33
+ return;
34
+ }
35
+ context.report({
36
+ node,
37
+ messageId: "forbiddenInheritance"
38
+ });
39
+ },
40
+ ClassExpression: (node) => {
41
+ if (node.superClass === null) {
42
+ return;
43
+ }
44
+ context.report({
45
+ node,
46
+ messageId: "forbiddenInheritance"
47
+ });
48
+ },
49
+ TSInterfaceDeclaration: (node) => {
50
+ if (node.extends.length === 0) {
51
+ return;
52
+ }
53
+ if (isAllowedRecursiveInterface(node)) {
54
+ return;
55
+ }
56
+ context.report({
57
+ node,
58
+ messageId: "forbiddenInheritance"
59
+ });
60
+ }
61
+ })
62
+ });
@@ -0,0 +1,5 @@
1
+ export declare const noInlineTaggedObjectRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"useConstructor" | "useConstructorGeneric", [{
2
+ tagName: string;
3
+ }], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
4
+ name: string;
5
+ };
@@ -0,0 +1,92 @@
1
+ import { AST_NODE_TYPES } from "@typescript-eslint/utils";
2
+ import { createRule } from "../utils/create-rule.js";
3
+ const defaultTagName = "$";
4
+ const messageIds = Object.freeze({
5
+ useConstructor: "Do not create tagged objects by supplying `{{tagName}}` directly. Use `{{constructorName}}()` instead.",
6
+ useConstructorGeneric: "Do not create tagged objects by supplying `{{tagName}}` directly. Use a constructor instead."
7
+ });
8
+ const getPropertyName = (node) => {
9
+ if (node.type === AST_NODE_TYPES.Identifier) {
10
+ return node.name;
11
+ }
12
+ if (node.type !== AST_NODE_TYPES.Literal) {
13
+ return undefined;
14
+ }
15
+ return typeof node.value === "string" ? node.value : undefined;
16
+ };
17
+ const buildConstructorName = (tagValue) => {
18
+ const parts = tagValue.match(/[A-Za-z0-9]+/g);
19
+ if (parts === null || parts.length === 0) {
20
+ return undefined;
21
+ }
22
+ const name = parts
23
+ .map((part) => part[0] === undefined
24
+ ? ""
25
+ : part[0].toUpperCase() + part.slice(1))
26
+ .join("");
27
+ return /^[A-Z][A-Za-z0-9]*$/u.test(name) ? name : undefined;
28
+ };
29
+ const getTaggedProperty = (node, tagName) => node.properties.find((property) => property.type === AST_NODE_TYPES.Property &&
30
+ property.kind === "init" &&
31
+ property.computed === false &&
32
+ getPropertyName(property.key) === tagName);
33
+ export const noInlineTaggedObjectRule = createRule({
34
+ name: "no-inline-tagged-object",
35
+ meta: {
36
+ type: "problem",
37
+ docs: {
38
+ description: "Ban creating tagged objects by supplying the configured tag field directly."
39
+ },
40
+ schema: [
41
+ {
42
+ type: "object",
43
+ properties: {
44
+ tagName: {
45
+ type: "string"
46
+ }
47
+ },
48
+ additionalProperties: false
49
+ }
50
+ ],
51
+ messages: messageIds
52
+ },
53
+ defaultOptions: [{ tagName: defaultTagName }],
54
+ create: (context, [{ tagName }]) => ({
55
+ ObjectExpression: (node) => {
56
+ const property = getTaggedProperty(node, tagName);
57
+ if (property === undefined) {
58
+ return;
59
+ }
60
+ if (property.value.type !== AST_NODE_TYPES.Literal ||
61
+ typeof property.value.value !== "string") {
62
+ context.report({
63
+ node: property,
64
+ messageId: "useConstructorGeneric",
65
+ data: {
66
+ tagName
67
+ }
68
+ });
69
+ return;
70
+ }
71
+ const constructorName = buildConstructorName(property.value.value);
72
+ if (constructorName === undefined) {
73
+ context.report({
74
+ node: property,
75
+ messageId: "useConstructorGeneric",
76
+ data: {
77
+ tagName
78
+ }
79
+ });
80
+ return;
81
+ }
82
+ context.report({
83
+ node: property,
84
+ messageId: "useConstructor",
85
+ data: {
86
+ constructorName,
87
+ tagName
88
+ }
89
+ });
90
+ }
91
+ })
92
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noIntersectionTypeRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenIntersectionType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,24 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenIntersectionType: "Intersection types are not allowed."
4
+ });
5
+ export const noIntersectionTypeRule = createRule({
6
+ name: "no-intersection-type",
7
+ meta: {
8
+ type: "problem",
9
+ docs: {
10
+ description: "Disallow intersection types."
11
+ },
12
+ schema: [],
13
+ messages: messageIds
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ TSIntersectionType: (node) => {
18
+ context.report({
19
+ node,
20
+ messageId: "forbiddenIntersectionType"
21
+ });
22
+ }
23
+ })
24
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noJsonStaticMethodRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<string, [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,155 @@
1
+ import { AST_NODE_TYPES } from "@typescript-eslint/utils";
2
+ import { createRule } from "../utils/create-rule.js";
3
+ const messageIds = Object.freeze({
4
+ forbiddenJsonStaticMethod: "`JSON.parse` and `JSON.stringify` are not allowed."
5
+ });
6
+ const isBindingIdentifier = (node) => {
7
+ const parent = node.parent;
8
+ if (parent === null) {
9
+ return false;
10
+ }
11
+ if (parent.type === AST_NODE_TYPES.VariableDeclarator) {
12
+ return parent.id === node;
13
+ }
14
+ if (parent.type === AST_NODE_TYPES.FunctionDeclaration ||
15
+ parent.type === AST_NODE_TYPES.FunctionExpression) {
16
+ return parent.id === node;
17
+ }
18
+ if (parent.type === AST_NODE_TYPES.ClassDeclaration ||
19
+ parent.type === AST_NODE_TYPES.ClassExpression ||
20
+ parent.type === AST_NODE_TYPES.TSTypeAliasDeclaration ||
21
+ parent.type === AST_NODE_TYPES.TSInterfaceDeclaration ||
22
+ parent.type === AST_NODE_TYPES.TSEnumDeclaration) {
23
+ return parent.id === node;
24
+ }
25
+ if (parent.type === AST_NODE_TYPES.TSEnumMember) {
26
+ return parent.id === node;
27
+ }
28
+ if (parent.type === AST_NODE_TYPES.ImportSpecifier ||
29
+ parent.type === AST_NODE_TYPES.ImportDefaultSpecifier ||
30
+ parent.type === AST_NODE_TYPES.ImportNamespaceSpecifier) {
31
+ return parent.local === node;
32
+ }
33
+ if (parent.type === AST_NODE_TYPES.ExportSpecifier) {
34
+ return parent.local === node || parent.exported === node;
35
+ }
36
+ if (parent.type === AST_NODE_TYPES.CatchClause) {
37
+ return parent.param === node;
38
+ }
39
+ if (parent.type === AST_NODE_TYPES.TSParameterProperty) {
40
+ return parent.parameter === node;
41
+ }
42
+ if (parent.type === AST_NODE_TYPES.MemberExpression) {
43
+ return parent.property === node && parent.computed === false;
44
+ }
45
+ if (parent.type === AST_NODE_TYPES.Property) {
46
+ if (parent.parent?.type === AST_NODE_TYPES.ObjectPattern) {
47
+ return parent.key === node && parent.computed === false;
48
+ }
49
+ if (parent.parent?.type === AST_NODE_TYPES.ObjectExpression) {
50
+ return parent.key === node && parent.computed === false && parent.shorthand === false;
51
+ }
52
+ return false;
53
+ }
54
+ if (parent.type === AST_NODE_TYPES.MethodDefinition) {
55
+ return parent.key === node && parent.computed === false;
56
+ }
57
+ if (parent.type === AST_NODE_TYPES.PropertyDefinition) {
58
+ return parent.key === node && parent.computed === false;
59
+ }
60
+ if (parent.type === AST_NODE_TYPES.TSPropertySignature ||
61
+ parent.type === AST_NODE_TYPES.TSMethodSignature) {
62
+ return parent.key === node;
63
+ }
64
+ if (parent.type === AST_NODE_TYPES.LabeledStatement) {
65
+ return parent.label === node;
66
+ }
67
+ if (parent.type === AST_NODE_TYPES.TSQualifiedName) {
68
+ return parent.left === node;
69
+ }
70
+ if (parent.type === AST_NODE_TYPES.TSImportEqualsDeclaration) {
71
+ return parent.id === node;
72
+ }
73
+ return false;
74
+ };
75
+ const hasDeclaredBinding = (scope, name) => {
76
+ const variable = scope.variables.find((value) => value.name === name);
77
+ if (variable !== undefined && (variable.defs.length > 0 || variable.identifiers.length > 0)) {
78
+ return true;
79
+ }
80
+ if (scope.upper === null) {
81
+ return false;
82
+ }
83
+ return hasDeclaredBinding(scope.upper, name);
84
+ };
85
+ const isGlobalReference = (context, node) => {
86
+ if (isBindingIdentifier(node)) {
87
+ return false;
88
+ }
89
+ const scope = context.sourceCode.getScope(node);
90
+ return hasDeclaredBinding(scope, node.name) === false;
91
+ };
92
+ const getPropertyName = (node) => {
93
+ if (node.type === AST_NODE_TYPES.Identifier) {
94
+ return node.name;
95
+ }
96
+ if (node.type === AST_NODE_TYPES.Literal && typeof node.value === "string") {
97
+ return node.value;
98
+ }
99
+ return undefined;
100
+ };
101
+ const isStaticJsonNamespace = (context, node) => {
102
+ if (node.type === AST_NODE_TYPES.ChainExpression) {
103
+ return isStaticJsonNamespace(context, node.expression);
104
+ }
105
+ if (node.type === AST_NODE_TYPES.Identifier) {
106
+ if (node.name !== "JSON") {
107
+ return false;
108
+ }
109
+ return isGlobalReference(context, node);
110
+ }
111
+ if (node.type !== AST_NODE_TYPES.MemberExpression) {
112
+ return false;
113
+ }
114
+ const propertyName = getPropertyName(node.property);
115
+ if (propertyName !== "JSON") {
116
+ return false;
117
+ }
118
+ if (node.object.type !== AST_NODE_TYPES.Identifier) {
119
+ return false;
120
+ }
121
+ if (!isGlobalReference(context, node.object)) {
122
+ return false;
123
+ }
124
+ return node.object.name === "globalThis" || node.object.name === "window";
125
+ };
126
+ const isForbiddenMethod = (node) => {
127
+ const propertyName = getPropertyName(node.property);
128
+ return propertyName === "parse" || propertyName === "stringify";
129
+ };
130
+ export const noJsonStaticMethodRule = createRule({
131
+ name: "no-json-static-method",
132
+ meta: {
133
+ type: "problem",
134
+ docs: {
135
+ description: "Disallow `JSON.parse` and `JSON.stringify`, including access through `globalThis.JSON` and `window.JSON`."
136
+ },
137
+ schema: [],
138
+ messages: messageIds
139
+ },
140
+ defaultOptions: [],
141
+ create: (context) => ({
142
+ MemberExpression: (node) => {
143
+ if (!isForbiddenMethod(node)) {
144
+ return;
145
+ }
146
+ if (!isStaticJsonNamespace(context, node.object)) {
147
+ return;
148
+ }
149
+ context.report({
150
+ node,
151
+ messageId: "forbiddenJsonStaticMethod"
152
+ });
153
+ }
154
+ })
155
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noKeyofRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenKeyof", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,24 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenKeyof: "`keyof` is not allowed."
4
+ });
5
+ export const noKeyofRule = createRule({
6
+ name: "no-keyof",
7
+ meta: {
8
+ type: "problem",
9
+ docs: {
10
+ description: "Disallow the `keyof` type operator."
11
+ },
12
+ schema: [],
13
+ messages: messageIds
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ "TSTypeOperator[operator='keyof']": (node) => {
18
+ context.report({
19
+ node,
20
+ messageId: "forbiddenKeyof"
21
+ });
22
+ }
23
+ })
24
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noLetRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenLet", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,42 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenLet: "`let` is not allowed."
4
+ });
5
+ const isForLoopDeclaration = (parent) => {
6
+ if (parent === undefined) {
7
+ return false;
8
+ }
9
+ if (parent.type === "ForStatement") {
10
+ return parent.init !== null && parent.init.type === "VariableDeclaration";
11
+ }
12
+ if (parent.type === "ForInStatement" || parent.type === "ForOfStatement") {
13
+ return parent.left.type === "VariableDeclaration";
14
+ }
15
+ return false;
16
+ };
17
+ export const noLetRule = createRule({
18
+ name: "no-let",
19
+ meta: {
20
+ type: "problem",
21
+ docs: {
22
+ description: "Disallow `let` declarations unless mutability is required for performance."
23
+ },
24
+ schema: [],
25
+ messages: messageIds
26
+ },
27
+ defaultOptions: [],
28
+ create: (context) => ({
29
+ VariableDeclaration: (node) => {
30
+ if (node.kind !== "let") {
31
+ return;
32
+ }
33
+ if (isForLoopDeclaration(node.parent)) {
34
+ return;
35
+ }
36
+ context.report({
37
+ node,
38
+ messageId: "forbiddenLet"
39
+ });
40
+ }
41
+ })
42
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noMappedObjectTypeRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenMappedObjectType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,24 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenMappedObjectType: "Mapped object types are not allowed."
4
+ });
5
+ export const noMappedObjectTypeRule = createRule({
6
+ name: "no-mapped-object-type",
7
+ meta: {
8
+ type: "problem",
9
+ docs: {
10
+ description: "Disallow mapped object types."
11
+ },
12
+ schema: [],
13
+ messages: messageIds
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ TSMappedType: (node) => {
18
+ context.report({
19
+ node,
20
+ messageId: "forbiddenMappedObjectType"
21
+ });
22
+ }
23
+ })
24
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noNeverRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenNever", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,24 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenNever: "`never` is not allowed."
4
+ });
5
+ export const noNeverRule = createRule({
6
+ name: "no-never",
7
+ meta: {
8
+ type: "problem",
9
+ docs: {
10
+ description: "Disallow the `never` type keyword."
11
+ },
12
+ schema: [],
13
+ messages: messageIds
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ TSNeverKeyword: (node) => {
18
+ context.report({
19
+ node,
20
+ messageId: "forbiddenNever"
21
+ });
22
+ }
23
+ })
24
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noNonNullAssertionRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenNonNullAssertion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };
@@ -0,0 +1,24 @@
1
+ import { createRule } from "../utils/create-rule.js";
2
+ const messageIds = Object.freeze({
3
+ forbiddenNonNullAssertion: "Non-null assertions are not allowed."
4
+ });
5
+ export const noNonNullAssertionRule = createRule({
6
+ name: "no-non-null-assertion",
7
+ meta: {
8
+ type: "problem",
9
+ docs: {
10
+ description: "Disallow non-null assertions."
11
+ },
12
+ schema: [],
13
+ messages: messageIds
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ TSNonNullExpression: (node) => {
18
+ context.report({
19
+ node,
20
+ messageId: "forbiddenNonNullAssertion"
21
+ });
22
+ }
23
+ })
24
+ });
@@ -0,0 +1,3 @@
1
+ export declare const noNullRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenNull", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
2
+ name: string;
3
+ };