@ttsc/lint 0.13.1 → 0.14.0-dev.20260528.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 (464) hide show
  1. package/README.md +948 -69
  2. package/lib/defaultFormat.d.ts +9 -6
  3. package/lib/defaultFormat.js +9 -6
  4. package/lib/defaultFormat.js.map +1 -1
  5. package/lib/index.d.ts +46 -0
  6. package/lib/index.js +35 -10
  7. package/lib/index.js.map +1 -1
  8. package/lib/structures/ITtscLintConfig.d.ts +12 -6
  9. package/lib/structures/{ITtscLintFormatConfig.d.ts → ITtscLintFormat.d.ts} +2 -2
  10. package/lib/structures/{TtscLintRuleMap.js → ITtscLintFormat.js} +1 -1
  11. package/lib/structures/ITtscLintFormat.js.map +1 -0
  12. package/lib/structures/TtscLintRuleSetting.d.ts +49 -0
  13. package/lib/structures/{TtscLintRuleOptions.js → TtscLintRuleSetting.js} +1 -1
  14. package/lib/structures/TtscLintRuleSetting.js.map +1 -0
  15. package/lib/structures/index.d.ts +3 -4
  16. package/lib/structures/index.js +3 -4
  17. package/lib/structures/index.js.map +1 -1
  18. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +104 -0
  19. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +14 -0
  20. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -0
  21. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +79 -0
  22. package/lib/structures/rules/ITtscLintBoundariesRules.js +3 -0
  23. package/lib/structures/rules/ITtscLintBoundariesRules.js.map +1 -0
  24. package/lib/structures/rules/ITtscLintContributorRules.d.ts +17 -0
  25. package/lib/structures/rules/ITtscLintContributorRules.js +3 -0
  26. package/lib/structures/rules/ITtscLintContributorRules.js.map +1 -0
  27. package/lib/structures/rules/ITtscLintCoreRules.d.ts +1257 -0
  28. package/lib/structures/{ITtscLintFormatConfig.js → rules/ITtscLintCoreRules.js} +1 -1
  29. package/lib/structures/rules/ITtscLintCoreRules.js.map +1 -0
  30. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +17 -0
  31. package/lib/structures/rules/ITtscLintCypressRuleOptions.js +10 -0
  32. package/lib/structures/rules/ITtscLintCypressRuleOptions.js.map +1 -0
  33. package/lib/structures/rules/ITtscLintCypressRules.d.ts +129 -0
  34. package/lib/structures/rules/ITtscLintCypressRules.js +3 -0
  35. package/lib/structures/rules/ITtscLintCypressRules.js.map +1 -0
  36. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +157 -0
  37. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +13 -0
  38. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js.map +1 -0
  39. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +167 -0
  40. package/lib/structures/rules/ITtscLintFunctionalRules.js +3 -0
  41. package/lib/structures/rules/ITtscLintFunctionalRules.js.map +1 -0
  42. package/lib/structures/rules/ITtscLintJestRules.d.ts +201 -0
  43. package/lib/structures/rules/ITtscLintJestRules.js +3 -0
  44. package/lib/structures/rules/ITtscLintJestRules.js.map +1 -0
  45. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +140 -0
  46. package/lib/structures/rules/ITtscLintJsdocRules.js +3 -0
  47. package/lib/structures/rules/ITtscLintJsdocRules.js.map +1 -0
  48. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +302 -0
  49. package/lib/structures/rules/ITtscLintJsxA11yRules.js +3 -0
  50. package/lib/structures/rules/ITtscLintJsxA11yRules.js.map +1 -0
  51. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +185 -0
  52. package/lib/structures/rules/ITtscLintNextjsRules.js +3 -0
  53. package/lib/structures/rules/ITtscLintNextjsRules.js.map +1 -0
  54. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +330 -0
  55. package/lib/structures/rules/ITtscLintPlaywrightRules.js +3 -0
  56. package/lib/structures/rules/ITtscLintPlaywrightRules.js.map +1 -0
  57. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +188 -0
  58. package/lib/structures/rules/ITtscLintPromiseRules.js +3 -0
  59. package/lib/structures/rules/ITtscLintPromiseRules.js.map +1 -0
  60. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +18 -0
  61. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js +8 -0
  62. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js.map +1 -0
  63. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +51 -0
  64. package/lib/structures/rules/ITtscLintReactPerfRules.js +3 -0
  65. package/lib/structures/rules/ITtscLintReactPerfRules.js.map +1 -0
  66. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +39 -0
  67. package/lib/structures/rules/ITtscLintReactRuleOptions.js +12 -0
  68. package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -0
  69. package/lib/structures/rules/ITtscLintReactRules.d.ts +289 -0
  70. package/lib/structures/rules/ITtscLintReactRules.js +3 -0
  71. package/lib/structures/rules/ITtscLintReactRules.js.map +1 -0
  72. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +190 -0
  73. package/lib/structures/rules/ITtscLintRegexpRules.js +3 -0
  74. package/lib/structures/rules/ITtscLintRegexpRules.js.map +1 -0
  75. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +66 -0
  76. package/lib/structures/rules/ITtscLintRuleOptionsMap.js +3 -0
  77. package/lib/structures/rules/ITtscLintRuleOptionsMap.js.map +1 -0
  78. package/lib/structures/rules/ITtscLintRules.d.ts +55 -0
  79. package/lib/structures/{TtscLintRule.js → rules/ITtscLintRules.js} +1 -1
  80. package/lib/structures/rules/ITtscLintRules.js.map +1 -0
  81. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +148 -0
  82. package/lib/structures/rules/ITtscLintSecurityRules.js +3 -0
  83. package/lib/structures/rules/ITtscLintSecurityRules.js.map +1 -0
  84. package/lib/structures/rules/ITtscLintSolidRules.d.ts +181 -0
  85. package/lib/structures/rules/ITtscLintSolidRules.js +3 -0
  86. package/lib/structures/rules/ITtscLintSolidRules.js.map +1 -0
  87. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +21 -0
  88. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js +9 -0
  89. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js.map +1 -0
  90. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +174 -0
  91. package/lib/structures/rules/ITtscLintStorybookRules.js +3 -0
  92. package/lib/structures/rules/ITtscLintStorybookRules.js.map +1 -0
  93. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +94 -0
  94. package/lib/structures/rules/ITtscLintTanstackQueryRules.js +3 -0
  95. package/lib/structures/rules/ITtscLintTanstackQueryRules.js.map +1 -0
  96. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +22 -0
  97. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js +10 -0
  98. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js.map +1 -0
  99. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +310 -0
  100. package/lib/structures/rules/ITtscLintTestingLibraryRules.js +3 -0
  101. package/lib/structures/rules/ITtscLintTestingLibraryRules.js.map +1 -0
  102. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +1132 -0
  103. package/lib/structures/rules/ITtscLintTypeScriptRules.js +3 -0
  104. package/lib/structures/rules/ITtscLintTypeScriptRules.js.map +1 -0
  105. package/lib/structures/rules/ITtscLintUnicornRules.d.ts +997 -0
  106. package/lib/structures/rules/ITtscLintUnicornRules.js +3 -0
  107. package/lib/structures/rules/ITtscLintUnicornRules.js.map +1 -0
  108. package/lib/structures/rules/ITtscLintVitestRules.d.ts +141 -0
  109. package/lib/structures/rules/ITtscLintVitestRules.js +3 -0
  110. package/lib/structures/rules/ITtscLintVitestRules.js.map +1 -0
  111. package/lib/structures/rules/index.d.ts +31 -0
  112. package/lib/structures/rules/index.js +48 -0
  113. package/lib/structures/rules/index.js.map +1 -0
  114. package/linthost/ast_helpers.go +30 -5
  115. package/linthost/config.go +48 -17
  116. package/linthost/config_format.go +9 -9
  117. package/linthost/directives.go +67 -25
  118. package/linthost/dispatch.go +14 -3
  119. package/linthost/engine.go +152 -31
  120. package/linthost/fix.go +2 -2
  121. package/linthost/lsp.go +747 -0
  122. package/linthost/print_dispatch.go +2 -2
  123. package/linthost/print_nodes_function.go +2 -2
  124. package/linthost/print_nodes_object.go +1 -1
  125. package/linthost/rule_names.go +14 -0
  126. package/linthost/rules_arrays.go +2 -2
  127. package/linthost/rules_boundaries.go +532 -0
  128. package/linthost/rules_camelcase.go +133 -0
  129. package/linthost/rules_complexity.go +94 -0
  130. package/linthost/rules_consistent_return.go +130 -0
  131. package/linthost/rules_console.go +1 -1
  132. package/linthost/rules_core_extra.go +739 -0
  133. package/linthost/rules_curly.go +70 -0
  134. package/linthost/rules_cypress.go +608 -0
  135. package/linthost/rules_debugger.go +2 -2
  136. package/linthost/rules_default_case.go +39 -0
  137. package/linthost/rules_default_case_last.go +46 -0
  138. package/linthost/rules_dupes.go +3 -3
  139. package/linthost/rules_empty.go +3 -3
  140. package/linthost/rules_escape.go +44 -24
  141. package/linthost/rules_eval.go +2 -2
  142. package/linthost/rules_finally.go +2 -2
  143. package/linthost/rules_format_jsdoc.go +1 -1
  144. package/linthost/rules_format_print_width.go +9 -9
  145. package/linthost/rules_format_quotes.go +1 -1
  146. package/linthost/rules_format_semi.go +1 -1
  147. package/linthost/rules_format_sort_imports.go +1 -1
  148. package/linthost/rules_format_trailing_comma.go +1 -1
  149. package/linthost/rules_functional.go +967 -0
  150. package/linthost/rules_gap.go +24 -45
  151. package/linthost/rules_grouped_accessor_pairs.go +87 -0
  152. package/linthost/rules_guard_for_in.go +198 -0
  153. package/linthost/rules_id_length.go +77 -0
  154. package/linthost/rules_imports.go +70 -2
  155. package/linthost/rules_init_declarations.go +53 -0
  156. package/linthost/rules_jest.go +618 -0
  157. package/linthost/rules_jsdoc.go +502 -0
  158. package/linthost/rules_jsx_a11y.go +1264 -0
  159. package/linthost/rules_logic.go +12 -12
  160. package/linthost/rules_loops.go +1 -1
  161. package/linthost/rules_max_classes_per_file.go +58 -0
  162. package/linthost/rules_max_depth.go +83 -0
  163. package/linthost/rules_max_lines.go +101 -0
  164. package/linthost/rules_max_lines_per_function.go +57 -0
  165. package/linthost/rules_max_nested_callbacks.go +61 -0
  166. package/linthost/rules_max_params.go +49 -0
  167. package/linthost/rules_max_statements.go +59 -0
  168. package/linthost/rules_misc.go +1 -1
  169. package/linthost/rules_nextjs.go +697 -0
  170. package/linthost/rules_no_else_return.go +75 -0
  171. package/linthost/rules_no_empty_named_blocks.go +91 -0
  172. package/linthost/rules_no_extend_native.go +51 -0
  173. package/linthost/rules_no_import_assign.go +140 -0
  174. package/linthost/rules_no_invalid_this.go +52 -0
  175. package/linthost/rules_no_loop_func.go +85 -0
  176. package/linthost/rules_no_magic_numbers.go +123 -0
  177. package/linthost/rules_no_mixed_operators.go +80 -0
  178. package/linthost/rules_no_param_reassign.go +98 -0
  179. package/linthost/rules_no_redeclare.go +270 -0
  180. package/linthost/rules_no_restricted_imports.go +105 -0
  181. package/linthost/rules_no_restricted_syntax.go +49 -0
  182. package/linthost/rules_no_shadow.go +147 -0
  183. package/linthost/rules_no_unreachable.go +77 -0
  184. package/linthost/rules_no_useless_assignment.go +120 -0
  185. package/linthost/rules_no_useless_constructor.go +245 -0
  186. package/linthost/rules_no_useless_return.go +51 -0
  187. package/linthost/rules_params.go +1 -1
  188. package/linthost/rules_playwright.go +788 -0
  189. package/linthost/rules_prefer_arrow_callback.go +124 -0
  190. package/linthost/rules_prefer_destructuring.go +98 -0
  191. package/linthost/rules_prefer_named_capture_group.go +129 -0
  192. package/linthost/rules_prefer_rest_params.go +94 -0
  193. package/linthost/rules_problems.go +41 -30
  194. package/linthost/rules_promise.go +1128 -73
  195. package/linthost/rules_protos.go +2 -2
  196. package/linthost/rules_react.go +773 -0
  197. package/linthost/rules_react_extras.go +227 -0
  198. package/linthost/rules_react_hooks.go +848 -0
  199. package/linthost/rules_react_perf.go +293 -0
  200. package/linthost/rules_react_refresh.go +583 -0
  201. package/linthost/rules_regexp.go +410 -0
  202. package/linthost/rules_security.go +830 -0
  203. package/linthost/rules_self.go +2 -2
  204. package/linthost/rules_solid.go +1073 -0
  205. package/linthost/rules_sort_imports.go +69 -0
  206. package/linthost/rules_sort_keys.go +134 -0
  207. package/linthost/rules_storybook.go +1176 -0
  208. package/linthost/rules_strings.go +4 -4
  209. package/linthost/rules_suggestions.go +38 -38
  210. package/linthost/rules_tanstack_query.go +844 -0
  211. package/linthost/rules_testing_library.go +1204 -0
  212. package/linthost/rules_throw.go +1 -1
  213. package/linthost/rules_ts.go +19 -19
  214. package/linthost/rules_ts_async.go +399 -0
  215. package/linthost/rules_ts_class_literal_property_style.go +115 -0
  216. package/linthost/rules_ts_consistent_type_exports.go +256 -0
  217. package/linthost/rules_ts_explicit_function_return_type.go +67 -0
  218. package/linthost/rules_ts_extra.go +155 -36
  219. package/linthost/rules_ts_no_base_to_string.go +218 -0
  220. package/linthost/rules_ts_no_confusing_void.go +72 -0
  221. package/linthost/rules_ts_no_deprecated.go +195 -0
  222. package/linthost/rules_ts_no_for_in_array.go +84 -0
  223. package/linthost/rules_ts_no_magic_numbers.go +124 -0
  224. package/linthost/rules_ts_no_meaningless_void_operator.go +84 -0
  225. package/linthost/rules_ts_no_misused_spread.go +104 -0
  226. package/linthost/rules_ts_no_redundant_type_constituents.go +113 -0
  227. package/linthost/rules_ts_no_restricted_types.go +62 -0
  228. package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +129 -0
  229. package/linthost/rules_ts_no_unnecessary_condition.go +250 -0
  230. package/linthost/rules_ts_no_unnecessary_qualifier.go +118 -0
  231. package/linthost/rules_ts_no_unnecessary_template_expression.go +178 -0
  232. package/linthost/rules_ts_no_unnecessary_type_arguments.go +234 -0
  233. package/linthost/rules_ts_no_unnecessary_type_assertion.go +157 -0
  234. package/linthost/rules_ts_no_unsafe_argument.go +82 -0
  235. package/linthost/rules_ts_no_unsafe_assignment.go +102 -0
  236. package/linthost/rules_ts_no_unsafe_call.go +82 -0
  237. package/linthost/rules_ts_no_unsafe_enum_comparison.go +235 -0
  238. package/linthost/rules_ts_no_unsafe_member_access.go +58 -0
  239. package/linthost/rules_ts_no_unsafe_return.go +126 -0
  240. package/linthost/rules_ts_no_unsafe_unary_minus.go +81 -0
  241. package/linthost/rules_ts_no_useless_constructor.go +52 -0
  242. package/linthost/rules_ts_non_nullable_type_assertion_style.go +108 -0
  243. package/linthost/rules_ts_parameter_properties.go +38 -0
  244. package/linthost/rules_ts_prefer_find.go +178 -0
  245. package/linthost/rules_ts_prefer_includes.go +255 -0
  246. package/linthost/rules_ts_prefer_nullish_coalescing.go +104 -0
  247. package/linthost/rules_ts_prefer_optional_chain.go +228 -0
  248. package/linthost/rules_ts_prefer_promise_reject_errors.go +176 -0
  249. package/linthost/rules_ts_prefer_readonly.go +73 -0
  250. package/linthost/rules_ts_prefer_reduce_type_parameter.go +116 -0
  251. package/linthost/rules_ts_prefer_regexp_exec.go +122 -0
  252. package/linthost/rules_ts_prefer_return_this_type.go +135 -0
  253. package/linthost/rules_ts_prefer_string_starts_ends_with.go +360 -0
  254. package/linthost/rules_ts_promise_function_async.go +77 -0
  255. package/linthost/rules_ts_related_getter_setter_pairs.go +113 -0
  256. package/linthost/rules_ts_require_array_sort_compare.go +96 -0
  257. package/linthost/rules_ts_restrict_plus_operands.go +127 -0
  258. package/linthost/rules_ts_restrict_template_expressions.go +95 -0
  259. package/linthost/rules_ts_simple.go +387 -0
  260. package/linthost/rules_ts_sort_type_constituents.go +144 -0
  261. package/linthost/rules_ts_strict_boolean_expressions.go +157 -0
  262. package/linthost/rules_ts_switch_exhaustiveness_check.go +147 -0
  263. package/linthost/rules_ts_unbound_method.go +126 -0
  264. package/linthost/rules_tsdoc.go +136 -0
  265. package/linthost/rules_unicorn_better_regex.go +27 -0
  266. package/linthost/rules_unicorn_catch_error_name.go +46 -0
  267. package/linthost/rules_unicorn_consistent_assert.go +47 -0
  268. package/linthost/rules_unicorn_consistent_date_clone.go +54 -0
  269. package/linthost/rules_unicorn_consistent_destructuring.go +25 -0
  270. package/linthost/rules_unicorn_consistent_empty_array_spread.go +62 -0
  271. package/linthost/rules_unicorn_consistent_existence_index_check.go +80 -0
  272. package/linthost/rules_unicorn_consistent_function_scoping.go +25 -0
  273. package/linthost/rules_unicorn_consistent_template_literal_escape.go +25 -0
  274. package/linthost/rules_unicorn_custom_error_definition.go +138 -0
  275. package/linthost/rules_unicorn_empty_brace_spaces.go +73 -0
  276. package/linthost/rules_unicorn_error_message.go +64 -0
  277. package/linthost/rules_unicorn_escape_case.go +51 -0
  278. package/linthost/rules_unicorn_expiring_todo_comments.go +78 -0
  279. package/linthost/rules_unicorn_explicit_length_check.go +88 -0
  280. package/linthost/rules_unicorn_filename_case.go +29 -0
  281. package/linthost/rules_unicorn_import_style.go +28 -0
  282. package/linthost/rules_unicorn_isolated_functions.go +29 -0
  283. package/linthost/rules_unicorn_new_for_builtins.go +87 -0
  284. package/linthost/rules_unicorn_no_abusive_eslint_disable.go +63 -0
  285. package/linthost/rules_unicorn_no_accessor_recursion.go +115 -0
  286. package/linthost/rules_unicorn_no_anonymous_default_export.go +74 -0
  287. package/linthost/rules_unicorn_no_array_callback_reference.go +65 -0
  288. package/linthost/rules_unicorn_no_array_for_each.go +40 -0
  289. package/linthost/rules_unicorn_no_array_method_this_argument.go +61 -0
  290. package/linthost/rules_unicorn_no_array_reduce.go +41 -0
  291. package/linthost/rules_unicorn_no_array_reverse.go +44 -0
  292. package/linthost/rules_unicorn_no_array_sort.go +43 -0
  293. package/linthost/rules_unicorn_no_await_expression_member.go +40 -0
  294. package/linthost/rules_unicorn_no_await_in_promise_methods.go +69 -0
  295. package/linthost/rules_unicorn_no_console_spaces.go +61 -0
  296. package/linthost/rules_unicorn_no_document_cookie.go +41 -0
  297. package/linthost/rules_unicorn_no_empty_file.go +44 -0
  298. package/linthost/rules_unicorn_no_for_loop.go +102 -0
  299. package/linthost/rules_unicorn_no_hex_escape.go +42 -0
  300. package/linthost/rules_unicorn_no_immediate_mutation.go +90 -0
  301. package/linthost/rules_unicorn_no_instanceof_builtins.go +66 -0
  302. package/linthost/rules_unicorn_no_invalid_fetch_options.go +79 -0
  303. package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +51 -0
  304. package/linthost/rules_unicorn_no_keyword_prefix.go +101 -0
  305. package/linthost/rules_unicorn_no_lonely_if.go +44 -0
  306. package/linthost/rules_unicorn_no_magic_array_flat_depth.go +51 -0
  307. package/linthost/rules_unicorn_no_named_default.go +54 -0
  308. package/linthost/rules_unicorn_no_negated_condition.go +85 -0
  309. package/linthost/rules_unicorn_no_negation_in_equality_check.go +50 -0
  310. package/linthost/rules_unicorn_no_nested_ternary.go +43 -0
  311. package/linthost/rules_unicorn_no_new_array.go +30 -0
  312. package/linthost/rules_unicorn_no_new_buffer.go +31 -0
  313. package/linthost/rules_unicorn_no_null.go +24 -0
  314. package/linthost/rules_unicorn_no_object_as_default_parameter.go +48 -0
  315. package/linthost/rules_unicorn_no_process_exit.go +43 -0
  316. package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +59 -0
  317. package/linthost/rules_unicorn_no_static_only_class.go +56 -0
  318. package/linthost/rules_unicorn_no_thenable.go +74 -0
  319. package/linthost/rules_unicorn_no_this_assignment.go +35 -0
  320. package/linthost/rules_unicorn_no_typeof_undefined.go +58 -0
  321. package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +49 -0
  322. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +70 -0
  323. package/linthost/rules_unicorn_no_unnecessary_await.go +51 -0
  324. package/linthost/rules_unicorn_no_unnecessary_polyfills.go +32 -0
  325. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +48 -0
  326. package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +115 -0
  327. package/linthost/rules_unicorn_no_unreadable_iife.go +50 -0
  328. package/linthost/rules_unicorn_no_unused_properties.go +30 -0
  329. package/linthost/rules_unicorn_no_useless_collection_argument.go +63 -0
  330. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +46 -0
  331. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +81 -0
  332. package/linthost/rules_unicorn_no_useless_iterator_to_array.go +72 -0
  333. package/linthost/rules_unicorn_no_useless_length_check.go +144 -0
  334. package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +81 -0
  335. package/linthost/rules_unicorn_no_useless_spread.go +67 -0
  336. package/linthost/rules_unicorn_no_useless_switch_case.go +55 -0
  337. package/linthost/rules_unicorn_no_useless_undefined.go +55 -0
  338. package/linthost/rules_unicorn_no_zero_fractions.go +52 -0
  339. package/linthost/rules_unicorn_number_literal_case.go +69 -0
  340. package/linthost/rules_unicorn_numeric_separators_style.go +75 -0
  341. package/linthost/rules_unicorn_prefer_add_event_listener.go +66 -0
  342. package/linthost/rules_unicorn_prefer_array_find.go +51 -0
  343. package/linthost/rules_unicorn_prefer_array_flat.go +52 -0
  344. package/linthost/rules_unicorn_prefer_array_flat_map.go +63 -0
  345. package/linthost/rules_unicorn_prefer_array_index_of.go +147 -0
  346. package/linthost/rules_unicorn_prefer_array_some.go +67 -0
  347. package/linthost/rules_unicorn_prefer_at.go +77 -0
  348. package/linthost/rules_unicorn_prefer_bigint_literals.go +77 -0
  349. package/linthost/rules_unicorn_prefer_blob_reading_methods.go +44 -0
  350. package/linthost/rules_unicorn_prefer_class_fields.go +93 -0
  351. package/linthost/rules_unicorn_prefer_classlist_toggle.go +120 -0
  352. package/linthost/rules_unicorn_prefer_code_point.go +49 -0
  353. package/linthost/rules_unicorn_prefer_date_now.go +78 -0
  354. package/linthost/rules_unicorn_prefer_default_parameters.go +144 -0
  355. package/linthost/rules_unicorn_prefer_dom_node_append.go +40 -0
  356. package/linthost/rules_unicorn_prefer_dom_node_dataset.go +55 -0
  357. package/linthost/rules_unicorn_prefer_dom_node_remove.go +41 -0
  358. package/linthost/rules_unicorn_prefer_dom_node_text_content.go +37 -0
  359. package/linthost/rules_unicorn_prefer_event_target.go +36 -0
  360. package/linthost/rules_unicorn_prefer_export_from.go +129 -0
  361. package/linthost/rules_unicorn_prefer_global_this.go +127 -0
  362. package/linthost/rules_unicorn_prefer_import_meta_properties.go +66 -0
  363. package/linthost/rules_unicorn_prefer_includes.go +149 -0
  364. package/linthost/rules_unicorn_prefer_json_parse_buffer.go +65 -0
  365. package/linthost/rules_unicorn_prefer_keyboard_event_key.go +38 -0
  366. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +48 -0
  367. package/linthost/rules_unicorn_prefer_math_min_max.go +60 -0
  368. package/linthost/rules_unicorn_prefer_math_trunc.go +62 -0
  369. package/linthost/rules_unicorn_prefer_modern_dom_apis.go +47 -0
  370. package/linthost/rules_unicorn_prefer_modern_math_apis.go +70 -0
  371. package/linthost/rules_unicorn_prefer_module.go +50 -0
  372. package/linthost/rules_unicorn_prefer_native_coercion_functions.go +114 -0
  373. package/linthost/rules_unicorn_prefer_negative_index.go +74 -0
  374. package/linthost/rules_unicorn_prefer_node_protocol.go +122 -0
  375. package/linthost/rules_unicorn_prefer_number_properties.go +88 -0
  376. package/linthost/rules_unicorn_prefer_object_from_entries.go +55 -0
  377. package/linthost/rules_unicorn_prefer_optional_catch_binding.go +62 -0
  378. package/linthost/rules_unicorn_prefer_prototype_methods.go +54 -0
  379. package/linthost/rules_unicorn_prefer_query_selector.go +56 -0
  380. package/linthost/rules_unicorn_prefer_reflect_apply.go +36 -0
  381. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +80 -0
  382. package/linthost/rules_unicorn_prefer_response_static_json.go +53 -0
  383. package/linthost/rules_unicorn_prefer_set_has.go +42 -0
  384. package/linthost/rules_unicorn_prefer_set_size.go +48 -0
  385. package/linthost/rules_unicorn_prefer_simple_condition_first.go +34 -0
  386. package/linthost/rules_unicorn_prefer_single_call.go +96 -0
  387. package/linthost/rules_unicorn_prefer_spread.go +51 -0
  388. package/linthost/rules_unicorn_prefer_string_raw.go +43 -0
  389. package/linthost/rules_unicorn_prefer_string_replace_all.go +95 -0
  390. package/linthost/rules_unicorn_prefer_string_slice.go +43 -0
  391. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +148 -0
  392. package/linthost/rules_unicorn_prefer_string_trim_start_end.go +48 -0
  393. package/linthost/rules_unicorn_prefer_structured_clone.go +71 -0
  394. package/linthost/rules_unicorn_prefer_switch.go +103 -0
  395. package/linthost/rules_unicorn_prefer_ternary.go +71 -0
  396. package/linthost/rules_unicorn_prefer_top_level_await.go +72 -0
  397. package/linthost/rules_unicorn_prefer_type_error.go +127 -0
  398. package/linthost/rules_unicorn_prevent_abbreviations.go +127 -0
  399. package/linthost/rules_unicorn_relative_url_style.go +49 -0
  400. package/linthost/rules_unicorn_require_array_join_separator.go +45 -0
  401. package/linthost/rules_unicorn_require_module_attributes.go +54 -0
  402. package/linthost/rules_unicorn_require_module_specifiers.go +55 -0
  403. package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +43 -0
  404. package/linthost/rules_unicorn_require_post_message_target_origin.go +44 -0
  405. package/linthost/rules_unicorn_string_content.go +27 -0
  406. package/linthost/rules_unicorn_switch_case_braces.go +42 -0
  407. package/linthost/rules_unicorn_switch_case_break_position.go +31 -0
  408. package/linthost/rules_unicorn_template_indent.go +28 -0
  409. package/linthost/rules_unicorn_text_encoding_identifier_case.go +72 -0
  410. package/linthost/rules_unicorn_throw_new_error.go +61 -0
  411. package/linthost/rules_var.go +4 -4
  412. package/linthost/rules_vitest.go +568 -0
  413. package/package.json +3 -3
  414. package/plugin/main.go +49 -3
  415. package/rule/astutil/astutil.go +10 -3
  416. package/rule/rule.go +12 -10
  417. package/src/defaultFormat.ts +11 -8
  418. package/src/index.ts +40 -16
  419. package/src/structures/ITtscLintConfig.ts +12 -6
  420. package/src/structures/{ITtscLintFormatConfig.ts → ITtscLintFormat.ts} +2 -2
  421. package/src/structures/TtscLintRuleSetting.ts +55 -0
  422. package/src/structures/index.ts +3 -4
  423. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +128 -0
  424. package/src/structures/rules/ITtscLintBoundariesRules.ts +95 -0
  425. package/src/structures/rules/ITtscLintContributorRules.ts +21 -0
  426. package/src/structures/rules/ITtscLintCoreRules.ts +1406 -0
  427. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +18 -0
  428. package/src/structures/rules/ITtscLintCypressRules.ts +145 -0
  429. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +213 -0
  430. package/src/structures/rules/ITtscLintFunctionalRules.ts +202 -0
  431. package/src/structures/rules/ITtscLintJestRules.ts +220 -0
  432. package/src/structures/rules/ITtscLintJsdocRules.ts +153 -0
  433. package/src/structures/rules/ITtscLintJsxA11yRules.ts +339 -0
  434. package/src/structures/rules/ITtscLintNextjsRules.ts +206 -0
  435. package/src/structures/rules/ITtscLintPlaywrightRules.ts +361 -0
  436. package/src/structures/rules/ITtscLintPromiseRules.ts +205 -0
  437. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +19 -0
  438. package/src/structures/rules/ITtscLintReactPerfRules.ts +55 -0
  439. package/src/structures/rules/ITtscLintReactRuleOptions.ts +43 -0
  440. package/src/structures/rules/ITtscLintReactRules.ts +321 -0
  441. package/src/structures/rules/ITtscLintRegexpRules.ts +212 -0
  442. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +89 -0
  443. package/src/structures/rules/ITtscLintRules.ts +77 -0
  444. package/src/structures/rules/ITtscLintSecurityRules.ts +162 -0
  445. package/src/structures/rules/ITtscLintSolidRules.ts +202 -0
  446. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +23 -0
  447. package/src/structures/rules/ITtscLintStorybookRules.ts +193 -0
  448. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +102 -0
  449. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +24 -0
  450. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +342 -0
  451. package/src/structures/rules/ITtscLintTypeScriptRules.ts +1230 -0
  452. package/src/structures/rules/ITtscLintUnicornRules.ts +1143 -0
  453. package/src/structures/rules/ITtscLintVitestRules.ts +154 -0
  454. package/src/structures/rules/index.ts +31 -0
  455. package/lib/structures/ITtscLintFormatConfig.js.map +0 -1
  456. package/lib/structures/TtscLintRule.d.ts +0 -17
  457. package/lib/structures/TtscLintRule.js.map +0 -1
  458. package/lib/structures/TtscLintRuleMap.d.ts +0 -46
  459. package/lib/structures/TtscLintRuleMap.js.map +0 -1
  460. package/lib/structures/TtscLintRuleOptions.d.ts +0 -137
  461. package/lib/structures/TtscLintRuleOptions.js.map +0 -1
  462. package/src/structures/TtscLintRule.ts +0 -160
  463. package/src/structures/TtscLintRuleMap.ts +0 -55
  464. package/src/structures/TtscLintRuleOptions.ts +0 -151
@@ -0,0 +1,321 @@
1
+ import type { ITtscLintReactOnlyExportComponentsRuleOptions } from "./ITtscLintReactRuleOptions";
2
+ import type {
3
+ TtscLintRuleOptionsSetting,
4
+ TtscLintRuleSetting,
5
+ } from "../TtscLintRuleSetting";
6
+
7
+ /**
8
+ * React TSX rules.
9
+ *
10
+ * Bundles rules from `eslint-plugin-react`, `eslint-plugin-react-hooks`,
11
+ * and `eslint-plugin-react-refresh` under one namespace, matching
12
+ * Oxlint's `react/*` plugin layout. Performance-only rules live in a
13
+ * separate {@link ITtscLintReactPerfRules} family because they are
14
+ * opt-in toggles rather than correctness checks.
15
+ *
16
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react
17
+ */
18
+ export interface ITtscLintReactRules {
19
+ /**
20
+ * Require explicit, valid `type` values on JSX `<button>` elements
21
+ * (`"button"`, `"submit"`, `"reset"`) — the HTML default of
22
+ * `"submit"` causes accidental form submissions.
23
+ *
24
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/button-has-type.md
25
+ */
26
+ "react/button-has-type"?: TtscLintRuleSetting;
27
+
28
+ /**
29
+ * Require components wrapped in `React.memo(...)` or
30
+ * `React.forwardRef(...)` to be named — either by passing a named
31
+ * function, assigning the call to a named binding, or setting an
32
+ * explicit `displayName`.
33
+ *
34
+ * Anonymous wrappers leave the resulting component nameless in
35
+ * React DevTools and runtime stack frames.
36
+ *
37
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md
38
+ */
39
+ "react/display-name"?: TtscLintRuleSetting;
40
+
41
+ /**
42
+ * Detect high-confidence missing identifiers in React Hook
43
+ * dependency arrays (`useEffect`, `useLayoutEffect`,
44
+ * `useInsertionEffect`, `useMemo`, `useCallback`).
45
+ *
46
+ * @reference https://react.dev/reference/react/useEffect#specifying-reactive-dependencies
47
+ */
48
+ "react/exhaustive-deps"?: TtscLintRuleSetting;
49
+
50
+ /**
51
+ * Reject declaring a component or custom Hook inside another
52
+ * component or Hook body.
53
+ *
54
+ * Each render rebuilds the inner function, giving it a new
55
+ * identity that discards its state and breaks memoization.
56
+ *
57
+ * @reference https://react.dev/reference/rules/components-and-hooks-must-be-pure
58
+ */
59
+ "react/component-hook-factories"?: TtscLintRuleSetting;
60
+
61
+ /**
62
+ * Require JSX `<iframe>` elements to declare a `sandbox` attribute,
63
+ * which restricts what embedded content can do (scripts, forms,
64
+ * navigation).
65
+ *
66
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/iframe-missing-sandbox.md
67
+ */
68
+ "react/iframe-missing-sandbox"?: TtscLintRuleSetting;
69
+
70
+ /**
71
+ * Reject mutating props, state, or Hook return values inside a
72
+ * component or Hook.
73
+ *
74
+ * React treats these as read-only; mutating a memoized value can
75
+ * desync renders from the dependencies React tracked it under.
76
+ *
77
+ * @reference https://react.dev/reference/rules/components-and-hooks-must-be-pure
78
+ */
79
+ "react/immutability"?: TtscLintRuleSetting;
80
+
81
+ /**
82
+ * Require `key` props on JSX elements produced from arrays or
83
+ * `.map(...)` calls — React uses the key to track list identity
84
+ * across renders.
85
+ *
86
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
87
+ */
88
+ "react/jsx-key"?: TtscLintRuleSetting;
89
+
90
+ /**
91
+ * Reject duplicate JSX prop names on the same element — later
92
+ * occurrences silently overwrite earlier ones.
93
+ *
94
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
95
+ */
96
+ "react/jsx-no-duplicate-props"?: TtscLintRuleSetting;
97
+
98
+ /**
99
+ * Reject `javascript:` URLs in JSX URL-like props such as `href`
100
+ * and `src`.
101
+ *
102
+ * Such URLs evaluate the URL body as script — the same
103
+ * code-execution surface as `eval`, and a common XSS vector when
104
+ * the value is user-controlled.
105
+ *
106
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-script-url.md
107
+ */
108
+ "react/jsx-no-script-url"?: TtscLintRuleSetting;
109
+
110
+ /**
111
+ * Reject `<a target="_blank">` (or any JSX element with
112
+ * `target="_blank"`) that does not also carry `rel="noreferrer"`
113
+ * (or `rel="noopener noreferrer"`).
114
+ *
115
+ * Without those tokens the opened page can navigate the originating
116
+ * window through `window.opener`, a phishing and tab-nabbing vector.
117
+ *
118
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
119
+ */
120
+ "react/jsx-no-target-blank"?: TtscLintRuleSetting;
121
+
122
+ /**
123
+ * Reject JSX elements whose tag is an uppercase identifier with no
124
+ * value-level declaration anywhere in the source file.
125
+ *
126
+ * Lowercase tags are intrinsic HTML; qualified `<Foo.Bar>` forms are
127
+ * skipped because resolving the outer name requires module-level
128
+ * information that belongs to the type checker.
129
+ *
130
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
131
+ */
132
+ "react/jsx-no-undef"?: TtscLintRuleSetting;
133
+
134
+ /**
135
+ * Reject JSX fragments that wrap exactly one element child or have
136
+ * no meaningful content — the child (or nothing) can be returned
137
+ * directly.
138
+ *
139
+ * Covers both the short `<>...</>` form and explicit
140
+ * `<Fragment>` / `<React.Fragment>` elements.
141
+ *
142
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-useless-fragment.md
143
+ */
144
+ "react/jsx-no-useless-fragment"?: TtscLintRuleSetting;
145
+
146
+ /**
147
+ * Reject `key={index}` patterns inside JSX lists — array index
148
+ * keys reorder incorrectly on insertion.
149
+ *
150
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md
151
+ */
152
+ "react/no-array-index-key"?: TtscLintRuleSetting;
153
+
154
+ /**
155
+ * Reject passing children through an explicit `children` JSX prop.
156
+ *
157
+ * The nested-tag form is shorter, mirrors HTML, and avoids the
158
+ * double-children footgun where a `children` prop and nested JSX
159
+ * both target the same slot.
160
+ *
161
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md
162
+ */
163
+ "react/no-children-prop"?: TtscLintRuleSetting;
164
+
165
+ /**
166
+ * Reject `dangerouslySetInnerHTML` altogether.
167
+ *
168
+ * The prop bypasses React's escaping and injects raw HTML into the
169
+ * DOM — a common XSS vector when the input is not sanitized
170
+ * upstream.
171
+ *
172
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger.md
173
+ */
174
+ "react/no-danger"?: TtscLintRuleSetting;
175
+
176
+ /**
177
+ * Reject combining `dangerouslySetInnerHTML` with JSX children
178
+ * — React throws at runtime in this case.
179
+ *
180
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
181
+ */
182
+ "react/no-danger-with-children"?: TtscLintRuleSetting;
183
+
184
+ /**
185
+ * Reject direct writes to `this.state` outside constructor
186
+ * initialization. Use `this.setState(...)` instead.
187
+ *
188
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
189
+ */
190
+ "react/no-direct-mutation-state"?: TtscLintRuleSetting;
191
+
192
+ /**
193
+ * Reject `findDOMNode(...)` calls.
194
+ *
195
+ * The API is deprecated, blocks future React internals work, and
196
+ * breaks component abstraction by reaching across composition
197
+ * boundaries; attach a `ref` to the target element instead.
198
+ *
199
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
200
+ */
201
+ "react/no-find-dom-node"?: TtscLintRuleSetting;
202
+
203
+ /**
204
+ * Reject `this.isMounted()` calls on class components.
205
+ *
206
+ * The API is deprecated, and anti-patterns around it usually hide
207
+ * a memory leak in async callbacks; cancel the work in
208
+ * `componentWillUnmount` instead.
209
+ *
210
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
211
+ */
212
+ "react/no-is-mounted"?: TtscLintRuleSetting;
213
+
214
+ /**
215
+ * Reject string-form JSX refs (`ref="myInput"`).
216
+ *
217
+ * The API is legacy, slated for removal, and has well-known issues
218
+ * with static typing, owner tracking, and stale references; use
219
+ * `useRef` or a callback ref instead.
220
+ *
221
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
222
+ */
223
+ "react/no-string-refs"?: TtscLintRuleSetting;
224
+
225
+ /**
226
+ * Reject unescaped `>`, `"`, `'`, and `}` characters in JSX
227
+ * text content — they render literally and almost always come
228
+ * from forgotten HTML escaping.
229
+ *
230
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md
231
+ */
232
+ "react/no-unescaped-entities"?: TtscLintRuleSetting;
233
+
234
+ /**
235
+ * Keep React Fast Refresh component modules from exporting
236
+ * non-component values. Mixing a component export with a
237
+ * constant or hook in the same file invalidates HMR.
238
+ *
239
+ * @reference https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/README.md
240
+ */
241
+ "react/only-export-components"?: TtscLintRuleOptionsSetting<ITtscLintReactOnlyExportComponentsRuleOptions>;
242
+
243
+ /**
244
+ * Reject reading or writing `ref.current` during render.
245
+ *
246
+ * Refs persist mutably across renders without re-rendering, so
247
+ * touching them in render breaks the pure-render contract and
248
+ * produces inconsistent output between render passes.
249
+ *
250
+ * @reference https://react.dev/reference/rules/components-and-hooks-must-be-pure
251
+ */
252
+ "react/refs"?: TtscLintRuleSetting;
253
+
254
+ /**
255
+ * Enforce the Rules of Hooks: only call Hooks at the top level
256
+ * of a component or custom Hook, never inside conditionals,
257
+ * loops, or nested functions.
258
+ *
259
+ * @reference https://react.dev/reference/rules/rules-of-hooks
260
+ */
261
+ "react/rules-of-hooks"?: TtscLintRuleSetting;
262
+
263
+ /**
264
+ * Reject unconditional `setState` calls in `useEffect` bodies.
265
+ *
266
+ * The state update schedules another render and re-runs the
267
+ * effect, which usually loops forever; the value almost always
268
+ * belongs in `useMemo` or derived state instead.
269
+ *
270
+ * @reference https://react.dev/learn/you-might-not-need-an-effect
271
+ */
272
+ "react/set-state-in-effect"?: TtscLintRuleSetting;
273
+
274
+ /**
275
+ * Reject calling `setState` during render.
276
+ *
277
+ * Render must stay pure; queuing an update from the render body
278
+ * schedules another render that queues another update, producing
279
+ * an infinite render loop unless guarded by an explicit equality
280
+ * check.
281
+ *
282
+ * @reference https://react.dev/reference/rules/components-and-hooks-must-be-pure
283
+ */
284
+ "react/set-state-in-render"?: TtscLintRuleSetting;
285
+
286
+ /**
287
+ * Reject string-form `style` values such as `style="color: red"` or
288
+ * `style={\`...\`}`.
289
+ *
290
+ * React expects a `{ camelCaseProp: value }` object, not the
291
+ * HTML-style CSS string, and the latter is silently coerced and
292
+ * never applied.
293
+ *
294
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md
295
+ */
296
+ "react/style-prop-object"?: TtscLintRuleSetting;
297
+
298
+ /**
299
+ * Reject `useMemo` calculation callbacks that do not return a
300
+ * value.
301
+ *
302
+ * A block-bodied callback without `return` memoizes `undefined`,
303
+ * silently discarding the intended computation — a common mistake
304
+ * when wrapping an object literal in `{ ... }` instead of
305
+ * `({ ... })`.
306
+ *
307
+ * @reference https://react.dev/reference/react/useMemo
308
+ */
309
+ "react/use-memo"?: TtscLintRuleSetting;
310
+
311
+ /**
312
+ * Reject `children` or `dangerouslySetInnerHTML` on void DOM
313
+ * elements (`<img>`, `<br>`, `<input>`, etc.).
314
+ *
315
+ * Void elements have no content model, so React throws at render
316
+ * time when you try to give them any.
317
+ *
318
+ * @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md
319
+ */
320
+ "react/void-dom-elements-no-children"?: TtscLintRuleSetting;
321
+ }
@@ -0,0 +1,212 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * Regular-expression rules from `eslint-plugin-regexp`.
5
+ *
6
+ * These rules check the structure of regex literals — emptiness,
7
+ * uselessness, flag ordering, shorthand classes, Unicode support.
8
+ *
9
+ * Some rules duplicate (and supersede) the regex-related rules in
10
+ * {@link ITtscLintCoreRules}; both ids exist so projects can keep
11
+ * the legacy ESLint names alongside the regexp-plugin variants.
12
+ *
13
+ * @reference https://github.com/ota-meshi/eslint-plugin-regexp
14
+ */
15
+ export interface ITtscLintRegexpRules {
16
+ /**
17
+ * Reject ASCII control characters in regex literals. Alias of
18
+ * the bare core check.
19
+ *
20
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-control-character.html
21
+ */
22
+ "regexp/no-control-character"?: TtscLintRuleSetting;
23
+
24
+ /**
25
+ * Reject duplicate literal characters inside simple regex
26
+ * character classes (`/[aa]/`).
27
+ *
28
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-dupe-characters-character-class.html
29
+ */
30
+ "regexp/no-dupe-characters-character-class"?: TtscLintRuleSetting;
31
+
32
+ /**
33
+ * Reject empty alternatives in a disjunction (`/a||b/`), which
34
+ * silently match the empty string.
35
+ *
36
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-alternative.html
37
+ */
38
+ "regexp/no-empty-alternative"?: TtscLintRuleSetting;
39
+
40
+ /**
41
+ * Reject empty capturing groups such as `/()/`.
42
+ *
43
+ * The group shifts the numbering of every later backreference and
44
+ * capture slot while only ever capturing the empty string — almost
45
+ * always a leftover from an unfinished edit.
46
+ *
47
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-capturing-group.html
48
+ */
49
+ "regexp/no-empty-capturing-group"?: TtscLintRuleSetting;
50
+
51
+ /**
52
+ * Reject empty regex character classes (`[]`). Alias of the
53
+ * bare core check.
54
+ *
55
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-character-class.html
56
+ */
57
+ "regexp/no-empty-character-class"?: TtscLintRuleSetting;
58
+
59
+ /**
60
+ * Reject empty non-capturing groups such as `/(?:)/`.
61
+ *
62
+ * The group contributes nothing to the match and is virtually always
63
+ * a leftover from a deleted inner pattern.
64
+ *
65
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-group.html
66
+ */
67
+ "regexp/no-empty-group"?: TtscLintRuleSetting;
68
+
69
+ /**
70
+ * Reject empty lookaround assertions such as `/(?=)/` or `/(?!)/`.
71
+ *
72
+ * An empty positive lookaround always matches; an empty negative
73
+ * lookaround never matches. The assertion either collapses to a
74
+ * no-op or breaks the surrounding pattern.
75
+ *
76
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-lookarounds-assertion.html
77
+ */
78
+ "regexp/no-empty-lookarounds-assertion"?: TtscLintRuleSetting;
79
+
80
+ /**
81
+ * Reject misleading Unicode characters in regex classes. Alias
82
+ * of the bare misleading-character check.
83
+ *
84
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-misleading-unicode-character.html
85
+ */
86
+ "regexp/no-misleading-unicode-character"?: TtscLintRuleSetting;
87
+
88
+ /**
89
+ * Reject single-character character classes such as `/[x]/`
90
+ * — `/x/` is equivalent.
91
+ *
92
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-character-class.html
93
+ */
94
+ "regexp/no-useless-character-class"?: TtscLintRuleSetting;
95
+
96
+ /**
97
+ * Reject unnecessary escapes inside regex literals. Alias of
98
+ * core `no-useless-escape` for regex contexts.
99
+ *
100
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-escape.html
101
+ */
102
+ "regexp/no-useless-escape"?: TtscLintRuleSetting;
103
+
104
+ /**
105
+ * Reject regex flags that the literal does not exercise — `i` on
106
+ * a pattern without case-variable characters, `m` without `^`/`$`,
107
+ * `s` without `.`, and similar dead flags on `g`/`y`.
108
+ *
109
+ * Cleans up flag combos that suggest behavior the pattern can never
110
+ * trigger.
111
+ *
112
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-flag.html
113
+ */
114
+ "regexp/no-useless-flag"?: TtscLintRuleSetting;
115
+
116
+ /**
117
+ * Reject quantifiers that do not change the match — constant-one
118
+ * counts (`/a{1}/`), `?` on patterns already matching the empty
119
+ * string (`/(?:a+|b*)?/`), and quantifiers on non-consuming
120
+ * atoms (`/(?:\b)+/`).
121
+ *
122
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-quantifier.html
123
+ */
124
+ "regexp/no-useless-quantifier"?: TtscLintRuleSetting;
125
+
126
+ /**
127
+ * Reject equal min/max quantifiers (`/a{2,2}/`) in favor of
128
+ * `/a{2}/`.
129
+ *
130
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-two-nums-quantifier.html
131
+ */
132
+ "regexp/no-useless-two-nums-quantifier"?: TtscLintRuleSetting;
133
+
134
+ /**
135
+ * Reject zero-repeat quantifiers (`/a{0}/`, `/a{0,0}/`) — the atom
136
+ * never matches, so the quantifier is either dead code or a typo
137
+ * for `{1,…}`.
138
+ *
139
+ * The fix is normally to delete the atom or correct the upper
140
+ * bound.
141
+ *
142
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-zero-quantifier.html
143
+ */
144
+ "regexp/no-zero-quantifier"?: TtscLintRuleSetting;
145
+
146
+ /**
147
+ * Prefer `\d` over `[0-9]` in regex literals.
148
+ *
149
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-d.html
150
+ */
151
+ "regexp/prefer-d"?: TtscLintRuleSetting;
152
+
153
+ /**
154
+ * Prefer `+` over `{1,}` in regex literals.
155
+ *
156
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-plus-quantifier.html
157
+ */
158
+ "regexp/prefer-plus-quantifier"?: TtscLintRuleSetting;
159
+
160
+ /**
161
+ * Prefer `?` over `{0,1}` in regex literals.
162
+ *
163
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-question-quantifier.html
164
+ */
165
+ "regexp/prefer-question-quantifier"?: TtscLintRuleSetting;
166
+
167
+ /**
168
+ * Prefer `*` over `{0,}` in regex literals.
169
+ *
170
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-star-quantifier.html
171
+ */
172
+ "regexp/prefer-star-quantifier"?: TtscLintRuleSetting;
173
+
174
+ /**
175
+ * Prefer `\w` over `[A-Za-z0-9_]` in regex literals.
176
+ *
177
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-w.html
178
+ */
179
+ "regexp/prefer-w"?: TtscLintRuleSetting;
180
+
181
+ /**
182
+ * Require regex literals to use the `u` or `v` flag, so
183
+ * Unicode-property escapes and surrogate-pair handling stay
184
+ * predictable.
185
+ *
186
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-regexp.html
187
+ */
188
+ "regexp/require-unicode-regexp"?: TtscLintRuleSetting;
189
+
190
+ /**
191
+ * Require regex literals to use the `v` flag specifically — the
192
+ * stricter Unicode-sets mode that enables set notation, string
193
+ * properties, and stricter escape rules on top of `u`.
194
+ *
195
+ * Choose this over `require-unicode-regexp` only on engines that
196
+ * ship ES2024-era regex.
197
+ *
198
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-sets-regexp.html
199
+ */
200
+ "regexp/require-unicode-sets-regexp"?: TtscLintRuleSetting;
201
+
202
+ /**
203
+ * Require regex flags to appear in canonical alphabetical order
204
+ * (`dgimsuvy`).
205
+ *
206
+ * Stable ordering keeps diffs small and lets readers compare flag
207
+ * sets at a glance.
208
+ *
209
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/sort-flags.html
210
+ */
211
+ "regexp/sort-flags"?: TtscLintRuleSetting;
212
+ }
@@ -0,0 +1,89 @@
1
+ import type {
2
+ ITtscLintBoundariesDependenciesRuleOptions,
3
+ ITtscLintBoundariesElementTypesRuleOptions,
4
+ ITtscLintBoundariesEntryPointRuleOptions,
5
+ ITtscLintBoundariesExternalRuleOptions,
6
+ ITtscLintBoundariesNoPrivateRuleOptions,
7
+ ITtscLintBoundariesNoUnknownRuleOptions,
8
+ } from "./ITtscLintBoundariesRuleOptions";
9
+ import type { ITtscLintCypressUnsafeToChainCommandRuleOptions } from "./ITtscLintCypressRuleOptions";
10
+ import type {
11
+ ITtscLintFunctionalEmptyRuleOptions,
12
+ ITtscLintFunctionalImmutableDataRuleOptions,
13
+ ITtscLintFunctionalNoConditionalStatementsRuleOptions,
14
+ ITtscLintFunctionalNoLetRuleOptions,
15
+ ITtscLintFunctionalNoMixedTypesRuleOptions,
16
+ ITtscLintFunctionalNoReturnVoidRuleOptions,
17
+ ITtscLintFunctionalNoThrowStatementsRuleOptions,
18
+ ITtscLintFunctionalNoTryStatementsRuleOptions,
19
+ ITtscLintFunctionalParametersRuleOptions,
20
+ ITtscLintFunctionalPreferImmutableTypesRuleOptions,
21
+ ITtscLintFunctionalPreferReadonlyTypeRuleOptions,
22
+ ITtscLintFunctionalPreferTacitRuleOptions,
23
+ ITtscLintFunctionalReadonlyTypeRuleOptions,
24
+ ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions,
25
+ } from "./ITtscLintFunctionalRuleOptions";
26
+ import type { ITtscLintReactPerfRuleOptions } from "./ITtscLintReactPerfRuleOptions";
27
+ import type { ITtscLintReactOnlyExportComponentsRuleOptions } from "./ITtscLintReactRuleOptions";
28
+ import type { ITtscLintStorybookNoUninstalledAddonsRuleOptions } from "./ITtscLintStorybookRuleOptions";
29
+ import type { ITtscLintTestingLibraryConsistentDataTestIdRuleOptions } from "./ITtscLintTestingLibraryRuleOptions";
30
+
31
+ /**
32
+ * Index from typed rule name to its options object.
33
+ *
34
+ * Built-in rule families with configurable options are listed here.
35
+ * Contributor plugins extend the map by augmenting it from their own
36
+ * package:
37
+ *
38
+ * ```ts
39
+ * declare module "@ttsc/lint" {
40
+ * interface ITtscLintRuleOptionsMap {
41
+ * "demo/no-marker-comment": { marker: string };
42
+ * }
43
+ * }
44
+ * ```
45
+ *
46
+ * After augmentation, `{@link TtscLintRuleOptionsSetting}` tuples and the
47
+ * `defineConfig`-style helpers in plugin packages can type-check the
48
+ * options object against the contributor's declared shape.
49
+ *
50
+ * `format/*` is **not** listed: formatter behavior is configured through
51
+ * the top-level `format` block ({@link ITtscLintFormat}), not through the
52
+ * `rules` surface.
53
+ */
54
+ export interface ITtscLintRuleOptionsMap {
55
+ "testing-library/consistent-data-testid": ITtscLintTestingLibraryConsistentDataTestIdRuleOptions;
56
+ "functional/functional-parameters": ITtscLintFunctionalParametersRuleOptions;
57
+ "functional/immutable-data": ITtscLintFunctionalImmutableDataRuleOptions;
58
+ "functional/no-class-inheritance": ITtscLintFunctionalEmptyRuleOptions;
59
+ "functional/no-classes": ITtscLintFunctionalEmptyRuleOptions;
60
+ "functional/no-conditional-statements": ITtscLintFunctionalNoConditionalStatementsRuleOptions;
61
+ "functional/no-expression-statements": ITtscLintFunctionalEmptyRuleOptions;
62
+ "functional/no-let": ITtscLintFunctionalNoLetRuleOptions;
63
+ "functional/no-loop-statements": ITtscLintFunctionalEmptyRuleOptions;
64
+ "functional/no-mixed-types": ITtscLintFunctionalNoMixedTypesRuleOptions;
65
+ "functional/no-promise-reject": ITtscLintFunctionalEmptyRuleOptions;
66
+ "functional/no-return-void": ITtscLintFunctionalNoReturnVoidRuleOptions;
67
+ "functional/no-this-expressions": ITtscLintFunctionalEmptyRuleOptions;
68
+ "functional/no-throw-statements": ITtscLintFunctionalNoThrowStatementsRuleOptions;
69
+ "functional/no-try-statements": ITtscLintFunctionalNoTryStatementsRuleOptions;
70
+ "functional/prefer-immutable-types": ITtscLintFunctionalPreferImmutableTypesRuleOptions;
71
+ "functional/prefer-property-signatures": ITtscLintFunctionalEmptyRuleOptions;
72
+ "functional/prefer-readonly-type": ITtscLintFunctionalPreferReadonlyTypeRuleOptions;
73
+ "functional/prefer-tacit": ITtscLintFunctionalPreferTacitRuleOptions;
74
+ "functional/readonly-type": ITtscLintFunctionalReadonlyTypeRuleOptions;
75
+ "functional/type-declaration-immutability": ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions;
76
+ "cypress/unsafe-to-chain-command": ITtscLintCypressUnsafeToChainCommandRuleOptions;
77
+ "boundaries/dependencies": ITtscLintBoundariesDependenciesRuleOptions;
78
+ "boundaries/element-types": ITtscLintBoundariesElementTypesRuleOptions;
79
+ "boundaries/entry-point": ITtscLintBoundariesEntryPointRuleOptions;
80
+ "boundaries/external": ITtscLintBoundariesExternalRuleOptions;
81
+ "boundaries/no-private": ITtscLintBoundariesNoPrivateRuleOptions;
82
+ "boundaries/no-unknown": ITtscLintBoundariesNoUnknownRuleOptions;
83
+ "react-perf/jsx-no-new-array-as-prop": ITtscLintReactPerfRuleOptions;
84
+ "react-perf/jsx-no-new-function-as-prop": ITtscLintReactPerfRuleOptions;
85
+ "react-perf/jsx-no-new-object-as-prop": ITtscLintReactPerfRuleOptions;
86
+ "react-perf/jsx-no-jsx-as-prop": ITtscLintReactPerfRuleOptions;
87
+ "storybook/no-uninstalled-addons": ITtscLintStorybookNoUninstalledAddonsRuleOptions;
88
+ "react/only-export-components": ITtscLintReactOnlyExportComponentsRuleOptions;
89
+ }