@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,37 @@
1
+ # `no-function-keyword`
2
+
3
+ Disallow non-generator `function` declarations and expressions.
4
+
5
+ ## Rule details
6
+
7
+ We have arrow functions now. They take less characters to type, don't have quirky `this` or `arguments` or `arguments.callee`.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ function value(): number {
13
+ return 1;
14
+ }
15
+ ```
16
+
17
+ ```ts
18
+ const value = function (): number {
19
+ return 1;
20
+ };
21
+ ```
22
+
23
+ Examples of **correct** code for this rule:
24
+
25
+ ```ts
26
+ const value = (): number => 1;
27
+ ```
28
+
29
+ ```ts
30
+ function* values(): Generator<number, void, unknown> {
31
+ yield 1;
32
+ }
33
+ ```
34
+
35
+ ## Options
36
+
37
+ This rule does not accept options.
@@ -0,0 +1,25 @@
1
+ # `no-generic-parameter-bounds`
2
+
3
+ Disallow generic parameter bounds with `extends`.
4
+
5
+ ## Rule details
6
+
7
+ Type inference is broken here and, in many cases, will force TS to infer the type of bound instead of the expected type.
8
+
9
+ If subtyping actually worked in TypeScript, there would have to be `A super B` syntax too, so that you could have set an upper bound on the type too. But subtyping doesn't work in TypeScript, thus you must not use subtyping, thus you must not use `extends`.
10
+
11
+ Examples of **incorrect** code for this rule:
12
+
13
+ ```ts
14
+ type Box<T extends string> = T;
15
+ ```
16
+
17
+ Examples of **correct** code for this rule:
18
+
19
+ ```ts
20
+ type Box<T> = T;
21
+ ```
22
+
23
+ ## Options
24
+
25
+ This rule does not accept options.
@@ -0,0 +1,55 @@
1
+ # `no-getter-setter`
2
+
3
+ Disallow getters and setters in objects, classes, and interfaces.
4
+
5
+ ## Rule details
6
+
7
+ These break the type safety, are incorrectly handled in debuggers, and lead to unexpected heisenbugs.
8
+
9
+ Use explicit `getFoo` and `setFoo` functions or avoid mutable state.
10
+
11
+ Examples of **incorrect** code for this rule:
12
+
13
+ ```ts
14
+ const value = {
15
+ get foo() {
16
+ return 1;
17
+ }
18
+ };
19
+ ```
20
+
21
+ ```ts
22
+ class Value {
23
+ set foo(value: number) {}
24
+ }
25
+ ```
26
+
27
+ ```ts
28
+ interface Value {
29
+ get foo(): number;
30
+ }
31
+ ```
32
+
33
+ Examples of **correct** code for this rule:
34
+
35
+ ```ts
36
+ const value = { foo: 1 };
37
+ ```
38
+
39
+ ```ts
40
+ class Value {
41
+ foo(): number {
42
+ return 1;
43
+ }
44
+ }
45
+ ```
46
+
47
+ ```ts
48
+ interface Value {
49
+ foo(): number;
50
+ }
51
+ ```
52
+
53
+ ## Options
54
+
55
+ This rule does not accept options.
@@ -0,0 +1,50 @@
1
+ # `no-global-context`
2
+
3
+ Disallow `this` and explicit global-object identifiers.
4
+
5
+ ## Rule details
6
+
7
+ Don't use OOP. Don't mutate global scopes.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ const value = this;
13
+ ```
14
+
15
+ ```ts
16
+ interface Value {
17
+ value: this;
18
+ }
19
+ ```
20
+
21
+ ```ts
22
+ const value = globalThis;
23
+ ```
24
+
25
+ ```ts
26
+ const value = window;
27
+ ```
28
+
29
+ ```ts
30
+ const value = self;
31
+ ```
32
+
33
+ ```ts
34
+ const value = global;
35
+ ```
36
+
37
+ Examples of **correct** code for this rule:
38
+
39
+ ```ts
40
+ const globalThis = 1;
41
+ const value = globalThis;
42
+ ```
43
+
44
+ ```ts
45
+ const value = { globalThis: 1, window: 2, self: 3, global: 4 };
46
+ ```
47
+
48
+ ## Options
49
+
50
+ This rule does not accept options.
@@ -0,0 +1,39 @@
1
+ # `no-import-code-extension`
2
+
3
+ Disallow `.ts`, `.tsx`, and `.js` file extensions in import specifiers.
4
+
5
+ ## Rule details
6
+
7
+ Do not introduce file extensions into imports just so that it can be run in a specific way with Node.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ import { foo } from "./foo.ts";
13
+ ```
14
+
15
+ ```ts
16
+ export * from "./foo.js";
17
+ ```
18
+
19
+ ```ts
20
+ await import("./foo.tsx");
21
+ ```
22
+
23
+ Examples of **correct** code for this rule:
24
+
25
+ ```ts
26
+ import { foo } from "./foo";
27
+ ```
28
+
29
+ ```ts
30
+ export * from "./foo";
31
+ ```
32
+
33
+ ```ts
34
+ await import("./foo");
35
+ ```
36
+
37
+ ## Options
38
+
39
+ This rule does not accept options.
@@ -0,0 +1,31 @@
1
+ # `no-import-rename`
2
+
3
+ Disallow renamed named imports.
4
+
5
+ ## Rule details
6
+
7
+ Do not `import { Foo as Bar }` unless absolutely required. Renamed imports make it harder to debug. Prefer `import * as Foo` instead.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ import { foo as bar } from "./foo";
13
+ ```
14
+
15
+ ```ts
16
+ import { type Foo as Bar } from "./foo";
17
+ ```
18
+
19
+ Examples of **correct** code for this rule:
20
+
21
+ ```ts
22
+ import { foo } from "./foo";
23
+ ```
24
+
25
+ ```ts
26
+ import * as Foo from "./foo";
27
+ ```
28
+
29
+ ## Options
30
+
31
+ This rule does not accept options.
@@ -0,0 +1,25 @@
1
+ # `no-import-type`
2
+
3
+ Disallow `import()` types.
4
+
5
+ ## Rule details
6
+
7
+ Imports go into the header of the file.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ type Value = import("foo").Foo;
13
+ ```
14
+
15
+ Examples of **correct** code for this rule:
16
+
17
+ ```ts
18
+ import { type Foo } from "foo";
19
+
20
+ type Value = Foo;
21
+ ```
22
+
23
+ ## Options
24
+
25
+ This rule does not accept options.
@@ -0,0 +1,23 @@
1
+ # `no-in-operator`
2
+
3
+ Disallow the `in` operator.
4
+
5
+ ## Rule details
6
+
7
+ TypeScript has no distinction between open and closed object types. There might be no field in an object type, but there will be one at runtime. Narrowing for `in` operators is also buggy in other ways and doesn't correctly apply to either of its arguments.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ const value = "name" in foo;
13
+ ```
14
+
15
+ Examples of **correct** code for this rule:
16
+
17
+ ```ts
18
+ const value = foo === undefined;
19
+ ```
20
+
21
+ ## Options
22
+
23
+ This rule does not accept options.
@@ -0,0 +1,33 @@
1
+ # `no-indexed-access-type`
2
+
3
+ Disallow indexed access types such as Foo["bar"].
4
+
5
+ ## Rule details
6
+
7
+ They disregard variance at their use site and most likely will pin types in another library/module with both lower and upper bounds; thus, they're very detrimental to modularity. Most likely, the type of the `foo` field should be defined separately.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ type Name = User["name"];
13
+ ```
14
+
15
+ ```ts
16
+ type Value = Record<string, string>[string];
17
+ ```
18
+
19
+ Examples of **correct** code for this rule:
20
+
21
+ ```ts
22
+ type Name = string;
23
+ ```
24
+
25
+ ```ts
26
+ type User = {
27
+ readonly name: string;
28
+ };
29
+ ```
30
+
31
+ ## Options
32
+
33
+ This rule does not accept options.
@@ -0,0 +1,23 @@
1
+ # `no-indexed-object-type`
2
+
3
+ Disallow indexed object types such as `{ [key: string]: T }`, except for explicit self-recursive cases.
4
+
5
+ ## Rule details
6
+
7
+ It's `Record<string, number>`. The only valid case is to avoid type recursion quirks in TS: `type Json = null | boolean | number | string | Json[] | { [k: string]: Json }` would emit an error with `Record<string, Json>`
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ type Value = { [key: string]: number };
13
+ ```
14
+
15
+ Examples of **correct** code for this rule:
16
+
17
+ ```ts
18
+ type Json = boolean | string | { [key: string]: Json };
19
+ ```
20
+
21
+ ## Options
22
+
23
+ This rule does not accept options.
@@ -0,0 +1,31 @@
1
+ # `no-inheritance`
2
+
3
+ Disallow `extends` on classes and interfaces, except for the documented recursive-interface workaround.
4
+
5
+ ## Rule details
6
+
7
+ There is no way to distinguish objects supporting parent and child interfaces at runtime safely.
8
+
9
+ Except where it's required to untie type recursion. For example `type Foo = A<Foo>` would only work as `interface Foo extends A<Foo> {}`
10
+
11
+ Overriding is allowed in JS, but Liskov substitution is not guaranteed.
12
+
13
+ Examples of **incorrect** code for this rule:
14
+
15
+ ```ts
16
+ class Foo extends Bar {}
17
+ ```
18
+
19
+ ```ts
20
+ interface Foo extends Bar {}
21
+ ```
22
+
23
+ Examples of **correct** code for this rule:
24
+
25
+ ```ts
26
+ interface Foo extends A<Foo> {}
27
+ ```
28
+
29
+ ## Options
30
+
31
+ This rule does not accept options.
@@ -0,0 +1,41 @@
1
+ # `no-inline-tagged-object`
2
+
3
+ Ban creating tagged objects by supplying the configured tag field directly.
4
+
5
+ ## Rule details
6
+
7
+ Tagged objects must be created with constructors. Files with constructors must use `eslint-disable` to pass.
8
+
9
+ Ban creating objects with a supplied tag, and recommend using constructors instead. For example, `{ $: "foo" }` is banned, and must use a `Foo()` constructor when `$` is the disjoint union tag.
10
+
11
+ Examples of **incorrect** code for this rule:
12
+
13
+ ```ts
14
+ const value = { $: "foo" };
15
+ ```
16
+
17
+ ```ts
18
+ const value = { kind: "foo-bar", value: 1 };
19
+ ```
20
+
21
+ Examples of **correct** code for this rule:
22
+
23
+ ```ts
24
+ const value = Foo();
25
+ ```
26
+
27
+ ```ts
28
+ const value = { foo: "bar" };
29
+ ```
30
+
31
+ ## Options
32
+
33
+ ```json
34
+ [
35
+ {
36
+ "tagName": "kind"
37
+ }
38
+ ]
39
+ ```
40
+
41
+ Use `tagName` to change which object field is treated as the disjoint-union tag.
@@ -0,0 +1,23 @@
1
+ # `no-intersection-type`
2
+
3
+ Disallow intersection types.
4
+
5
+ ## Rule details
6
+
7
+ They are so broken it's hard even to count them as intersection types. Search for amount of mentions of `intersection` and `union` in TypeScript's type checker: at the moment there are 5 and 28. In algebra, union is dual to intersection. Correct type checker would treat them equally.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ type Value = A & B;
13
+ ```
14
+
15
+ Examples of **correct** code for this rule:
16
+
17
+ ```ts
18
+ type Value = A | B;
19
+ ```
20
+
21
+ ## Options
22
+
23
+ This rule does not accept options.
@@ -0,0 +1,46 @@
1
+ # `no-json-static-method`
2
+
3
+ Disallow `JSON.parse` and `JSON.stringify`, including access through `globalThis.JSON` and `window.JSON`.
4
+
5
+ ## Rule details
6
+
7
+ Both functions have very broken types: `JSON.stringify(undefined) = undefined`, but the return type is `string`. Now you have `undefined` in a `string`!
8
+
9
+ Always use `zod` or equivalent schema library in every case there is an `unknown`: results of `JSON.parse`, messages sent from `postMessage`, JSONs stored in localstorage, JSONs in history objects (the part of location that is not displayed in the URL), for reading configs from files (such as `package.json`), `process.env` etc.
10
+
11
+ Put all calls to `JSON.*` methods in that sandbox and `eslint-ignore` them.
12
+
13
+ Examples of **incorrect** code for this rule:
14
+
15
+ ```ts
16
+ JSON.parse(value);
17
+ ```
18
+
19
+ ```ts
20
+ JSON["stringify"](value);
21
+ ```
22
+
23
+ ```ts
24
+ globalThis.JSON.parse(value);
25
+ ```
26
+
27
+ Examples of **correct** code for this rule:
28
+
29
+ ```ts
30
+ const JSON = { parse: () => 1 };
31
+ JSON.parse(value);
32
+ ```
33
+
34
+ ```ts
35
+ const globalThis = { JSON: { stringify: () => "" } };
36
+ globalThis.JSON.stringify(value);
37
+ ```
38
+
39
+ ```ts
40
+ const window = { JSON: { parse: () => 1 } };
41
+ window.JSON.parse(value);
42
+ ```
43
+
44
+ ## Options
45
+
46
+ This rule does not accept options.
@@ -0,0 +1,35 @@
1
+ # `no-keyof`
2
+
3
+ Disallow the `keyof` type operator.
4
+
5
+ ## Rule details
6
+
7
+ It's another type that has no theory behind it. There are no introduction or elimination forms for `keyof`, and almost all uses will end up with `as` or `any`. It was meant for typing old JavaScript libraries, not for new code.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ type Keys = keyof Foo;
13
+ ```
14
+
15
+ ```ts
16
+ type Mapped<T> = {
17
+ [K in keyof T]: K;
18
+ };
19
+ ```
20
+
21
+ Examples of **correct** code for this rule:
22
+
23
+ ```ts
24
+ type Value = string;
25
+ ```
26
+
27
+ ```ts
28
+ type User = {
29
+ readonly name: string;
30
+ };
31
+ ```
32
+
33
+ ## Options
34
+
35
+ This rule does not accept options.
@@ -0,0 +1,31 @@
1
+ # `no-let`
2
+
3
+ Disallow `let` declarations unless mutability is required for performance.
4
+
5
+ ## Rule details
6
+
7
+ Most likely it should be a separate function where what is now each assignment into a variable is a `return`.
8
+
9
+ These break tree-shaking, make code untestable and make behavior dependent on module initialization order.
10
+
11
+ Absolutely never use `let` in tests. Execution order of `test()` and `describe()` is hard to understand and will most likely lead to flaky tests.
12
+
13
+ Examples of **incorrect** code for this rule:
14
+
15
+ ```ts
16
+ let value = 1;
17
+ ```
18
+
19
+ Examples of **correct** code for this rule:
20
+
21
+ ```ts
22
+ const value = 1;
23
+ ```
24
+
25
+ ## Options
26
+
27
+ This rule does not accept options.
28
+
29
+ ## When not to use it
30
+
31
+ Disable this rule when an algorithm requires mutable local state for performance.
@@ -0,0 +1,23 @@
1
+ # `no-mapped-object-type`
2
+
3
+ Disallow mapped object types.
4
+
5
+ ## Rule details
6
+
7
+ These lack any theory behind them, don't have introduction/elimination syntax, and are buggy.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ type Value<T> = { [K in keyof T]: T[K] };
13
+ ```
14
+
15
+ Examples of **correct** code for this rule:
16
+
17
+ ```ts
18
+ type Value = Record<string, number>;
19
+ ```
20
+
21
+ ## Options
22
+
23
+ This rule does not accept options.
@@ -0,0 +1,35 @@
1
+ # `no-never`
2
+
3
+ Disallow the `never` type keyword.
4
+
5
+ ## Rule details
6
+
7
+ This type is only needed in cases when there are bugs in type system. Sandbox them, and `eslint-ignore` it there.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ type Value = never;
13
+ ```
14
+
15
+ ```ts
16
+ function fail(): never {
17
+ throw new Error();
18
+ }
19
+ ```
20
+
21
+ Examples of **correct** code for this rule:
22
+
23
+ ```ts
24
+ type Value = string;
25
+ ```
26
+
27
+ ```ts
28
+ function value(): string {
29
+ return "x";
30
+ }
31
+ ```
32
+
33
+ ## Options
34
+
35
+ This rule does not accept options.
@@ -0,0 +1,23 @@
1
+ # `no-non-null-assertion`
2
+
3
+ Disallow non-null assertions.
4
+
5
+ ## Rule details
6
+
7
+ It does no checks at runtime, and is essentially `x as NotNull<typeof x>`.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ const value = foo!;
13
+ ```
14
+
15
+ Examples of **correct** code for this rule:
16
+
17
+ ```ts
18
+ const value = foo;
19
+ ```
20
+
21
+ ## Options
22
+
23
+ This rule does not accept options.
@@ -0,0 +1,31 @@
1
+ # `no-null`
2
+
3
+ Disallow both runtime `null` literals and the `null` type.
4
+
5
+ ## Rule details
6
+
7
+ `typeof null === 'object'`, and there is `undefined` anyway. Sometimes it might be useful for working with JSON, but you should have it sandboxed in a schema layer anyway.
8
+
9
+ Examples of **incorrect** code for this rule:
10
+
11
+ ```ts
12
+ const value = null;
13
+ ```
14
+
15
+ ```ts
16
+ type Value = string | null;
17
+ ```
18
+
19
+ Examples of **correct** code for this rule:
20
+
21
+ ```ts
22
+ const value = 0;
23
+ ```
24
+
25
+ ```ts
26
+ type Value = string;
27
+ ```
28
+
29
+ ## Options
30
+
31
+ This rule does not accept options.