@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,77 @@
1
+ import type { ITtscLintBoundariesRules } from "./ITtscLintBoundariesRules";
2
+ import type { ITtscLintContributorRules } from "./ITtscLintContributorRules";
3
+ import type { ITtscLintCoreRules } from "./ITtscLintCoreRules";
4
+ import type { ITtscLintCypressRules } from "./ITtscLintCypressRules";
5
+ import type { ITtscLintFunctionalRules } from "./ITtscLintFunctionalRules";
6
+ import type { ITtscLintJestRules } from "./ITtscLintJestRules";
7
+ import type { ITtscLintJsdocRules } from "./ITtscLintJsdocRules";
8
+ import type { ITtscLintJsxA11yRules } from "./ITtscLintJsxA11yRules";
9
+ import type { ITtscLintNextjsRules } from "./ITtscLintNextjsRules";
10
+ import type { ITtscLintPlaywrightRules } from "./ITtscLintPlaywrightRules";
11
+ import type { ITtscLintPromiseRules } from "./ITtscLintPromiseRules";
12
+ import type { ITtscLintReactPerfRules } from "./ITtscLintReactPerfRules";
13
+ import type { ITtscLintReactRules } from "./ITtscLintReactRules";
14
+ import type { ITtscLintRegexpRules } from "./ITtscLintRegexpRules";
15
+ import type { ITtscLintSecurityRules } from "./ITtscLintSecurityRules";
16
+ import type { ITtscLintSolidRules } from "./ITtscLintSolidRules";
17
+ import type { ITtscLintStorybookRules } from "./ITtscLintStorybookRules";
18
+ import type { ITtscLintTanstackQueryRules } from "./ITtscLintTanstackQueryRules";
19
+ import type { ITtscLintTestingLibraryRules } from "./ITtscLintTestingLibraryRules";
20
+ import type { ITtscLintTypeScriptRules } from "./ITtscLintTypeScriptRules";
21
+ import type { ITtscLintUnicornRules } from "./ITtscLintUnicornRules";
22
+ import type { ITtscLintVitestRules } from "./ITtscLintVitestRules";
23
+
24
+ /**
25
+ * Rule severity map accepted by `ITtscLintConfig.rules`.
26
+ *
27
+ * Built-in rule families are exposed as separate interfaces under this
28
+ * directory so users can import a narrow family type when composing configs.
29
+ * `ITtscLintRules` is the intersection of every built-in family plus the
30
+ * open-ended contributor plugin signature.
31
+ *
32
+ * Rule id conventions:
33
+ *
34
+ * - Bare kebab-case ids (`eqeqeq`, `no-console`) belong to
35
+ * {@link ITtscLintCoreRules} — generic ESLint-compatible rules that apply to
36
+ * both JS and TS source.
37
+ * - `typescript/*` ids belong to {@link ITtscLintTypeScriptRules} —
38
+ * TypeScript-only and `@typescript-eslint` plugin rules. `@ttsc/lint` does
39
+ * not accept legacy bare names or `@typescript-eslint/*` aliases for these
40
+ * rules.
41
+ * - `react/*` ids in {@link ITtscLintReactRules} bundle `eslint-plugin-react`,
42
+ * `eslint-plugin-react-hooks`, and `eslint-plugin-react-refresh`.
43
+ * Performance-only React rules live separately in
44
+ * {@link ITtscLintReactPerfRules} because they are opt-in toggles rather than
45
+ * correctness checks (matching Oxlint).
46
+ * - Every other namespaced id (`boundaries/*`, `cypress/*`, `functional/*`, ...)
47
+ * is a built-in family with a matching interface in this directory.
48
+ * - Formatter behavior is **not** configured here. Use the top-level `format`
49
+ * block (typed as `ITtscLintFormat`); `format/*` is an internal
50
+ * implementation detail of `ttsc format` and is deliberately absent from the
51
+ * public rules surface.
52
+ * - Any other `"<namespace>/<rule>"` key is accepted via
53
+ * {@link ITtscLintContributorRules} so plugin-shipped rules compose cleanly
54
+ * without ambient module augmentation.
55
+ */
56
+ export type ITtscLintRules = ITtscLintCoreRules &
57
+ ITtscLintTypeScriptRules &
58
+ ITtscLintBoundariesRules &
59
+ ITtscLintCypressRules &
60
+ ITtscLintFunctionalRules &
61
+ ITtscLintJestRules &
62
+ ITtscLintJsdocRules &
63
+ ITtscLintJsxA11yRules &
64
+ ITtscLintNextjsRules &
65
+ ITtscLintPlaywrightRules &
66
+ ITtscLintPromiseRules &
67
+ ITtscLintReactRules &
68
+ ITtscLintReactPerfRules &
69
+ ITtscLintRegexpRules &
70
+ ITtscLintSecurityRules &
71
+ ITtscLintSolidRules &
72
+ ITtscLintStorybookRules &
73
+ ITtscLintTanstackQueryRules &
74
+ ITtscLintTestingLibraryRules &
75
+ ITtscLintUnicornRules &
76
+ ITtscLintVitestRules &
77
+ ITtscLintContributorRules;
@@ -0,0 +1,162 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * Security-focused TypeScript source rules from
5
+ * `eslint-plugin-security`.
6
+ *
7
+ * Reports likely security smells — non-literal sinks for eval, file
8
+ * I/O, regex construction, child-process spawning, cryptographic
9
+ * primitives — that warrant human review even if no exploit is
10
+ * statically provable.
11
+ *
12
+ * Treat findings as *hints*, not proofs.
13
+ *
14
+ * @reference https://github.com/eslint-community/eslint-plugin-security
15
+ */
16
+ export interface ITtscLintSecurityRules {
17
+ /**
18
+ * Detect Trojan-Source bidi control characters (U+202A, U+202E,
19
+ * ...) hidden inside source.
20
+ *
21
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-bidi-characters.md
22
+ */
23
+ "security/detect-bidi-characters"?: TtscLintRuleSetting;
24
+
25
+ /**
26
+ * Detect Buffer reads/writes called with `noAssert = true`, which
27
+ * skips Node's offset/length bounds checks.
28
+ *
29
+ * The flag lets the offset slide past the buffer end and read
30
+ * unrelated memory, so production code should never set it.
31
+ *
32
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-buffer-noassert.md
33
+ */
34
+ "security/detect-buffer-noassert"?: TtscLintRuleSetting;
35
+
36
+ /**
37
+ * Detect any import of `child_process` and any `exec`/`execSync`
38
+ * call whose command argument is not a string literal.
39
+ *
40
+ * Non-literal commands are the canonical shell-injection sink in
41
+ * Node services.
42
+ *
43
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-child-process.md
44
+ */
45
+ "security/detect-child-process"?: TtscLintRuleSetting;
46
+
47
+ /**
48
+ * Detect assignments setting `escapeMarkup = false` (or the
49
+ * equivalent option on Handlebars/Mustache-style engines), which
50
+ * turns off HTML entity escaping in template output.
51
+ *
52
+ * Result: an unguarded XSS sink for caller-controlled strings.
53
+ *
54
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-disable-mustache-escape.md
55
+ */
56
+ "security/detect-disable-mustache-escape"?: TtscLintRuleSetting;
57
+
58
+ /**
59
+ * Detect `eval(...)` calls whose argument is not a string literal.
60
+ *
61
+ * Any expression argument means caller-controlled data can reach a
62
+ * code-execution sink. The rule flags the call shape, not proven
63
+ * taint.
64
+ *
65
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-eval-with-expression.md
66
+ */
67
+ "security/detect-eval-with-expression"?: TtscLintRuleSetting;
68
+
69
+ /**
70
+ * Detect `new Buffer(input)` constructions with non-literal
71
+ * input — historical source of allocation-disclosure bugs.
72
+ *
73
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-new-buffer.md
74
+ */
75
+ "security/detect-new-buffer"?: TtscLintRuleSetting;
76
+
77
+ /**
78
+ * Detect Express applications mounting `csrf` middleware before
79
+ * `methodOverride`, which lets the CSRF token be bypassed.
80
+ *
81
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-no-csrf-before-method-override.md
82
+ */
83
+ "security/detect-no-csrf-before-method-override"?: TtscLintRuleSetting;
84
+
85
+ /**
86
+ * Detect `fs` calls (`readFile`, `writeFile`, `createReadStream`,
87
+ * ...) whose filename argument is not a string literal.
88
+ *
89
+ * Dynamic filenames are the standard path-traversal sink; sanitise
90
+ * or allow-list before the call.
91
+ *
92
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-fs-filename.md
93
+ */
94
+ "security/detect-non-literal-fs-filename"?: TtscLintRuleSetting;
95
+
96
+ /**
97
+ * Detect `new RegExp(...)` construction whose pattern argument is
98
+ * not a string literal.
99
+ *
100
+ * Caller-controlled patterns can both trigger catastrophic
101
+ * backtracking and let an attacker reshape the matcher to bypass
102
+ * intended validation.
103
+ *
104
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-regexp.md
105
+ */
106
+ "security/detect-non-literal-regexp"?: TtscLintRuleSetting;
107
+
108
+ /**
109
+ * Detect `require(...)` calls whose specifier is computed at
110
+ * runtime.
111
+ *
112
+ * A dynamic specifier lets caller-controlled data choose the module
113
+ * to load, bypassing any module allow-list on Node.
114
+ *
115
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-require.md
116
+ */
117
+ "security/detect-non-literal-require"?: TtscLintRuleSetting;
118
+
119
+ /**
120
+ * Detect dynamic bracket-access such as `obj[req.body.x] = ...`,
121
+ * which can let caller-controlled keys overwrite prototype-shaped
122
+ * properties or pull out unintended fields.
123
+ *
124
+ * Fires on virtually any computed property access; expect a high
125
+ * false-positive rate in normal application code.
126
+ *
127
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-object-injection.md
128
+ */
129
+ "security/detect-object-injection"?: TtscLintRuleSetting;
130
+
131
+ /**
132
+ * Detect direct equality comparisons involving secret-like
133
+ * identifiers (`if (token === expected)`) — use
134
+ * `crypto.timingSafeEqual` instead.
135
+ *
136
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-possible-timing-attacks.md
137
+ */
138
+ "security/detect-possible-timing-attacks"?: TtscLintRuleSetting;
139
+
140
+ /**
141
+ * Detect `crypto.pseudoRandomBytes`, which produces values that
142
+ * are not cryptographically secure.
143
+ *
144
+ * Tokens, session ids, and key material must use
145
+ * `crypto.randomBytes` (or Web Crypto's `getRandomValues`) instead.
146
+ *
147
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-pseudoRandomBytes.md
148
+ */
149
+ "security/detect-pseudoRandomBytes"?: TtscLintRuleSetting;
150
+
151
+ /**
152
+ * Detect regex literals with catastrophic backtracking potential
153
+ * (ReDoS) — typically nested or overlapping quantifiers over the
154
+ * same character set.
155
+ *
156
+ * Matching caller-controlled input against such a pattern can
157
+ * block the event loop for seconds.
158
+ *
159
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-unsafe-regex.md
160
+ */
161
+ "security/detect-unsafe-regex"?: TtscLintRuleSetting;
162
+ }
@@ -0,0 +1,202 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * Solid TSX rules from `eslint-plugin-solid`.
5
+ *
6
+ * Solid components compile to fine-grained reactivity, so patterns
7
+ * that look correct in React (destructuring props, calling
8
+ * `useEffect`-style hooks with array deps) silently break reactivity
9
+ * in Solid. This family captures the common Solid-only pitfalls.
10
+ *
11
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid
12
+ */
13
+ export interface ITtscLintSolidRules {
14
+ /**
15
+ * Reject early and conditional `return` from a Solid component
16
+ * — Solid components must return exactly once at the top level.
17
+ *
18
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/components-return-once.md
19
+ */
20
+ "solid/components-return-once"?: TtscLintRuleSetting;
21
+
22
+ /**
23
+ * Require DOM event handler props to use canonical Solid casing
24
+ * (`onClick`, not `onclick` / `onClIcK`) so the compiler recognizes
25
+ * them as events. Also flags `on*`-named props bound to non-function
26
+ * values, which look like handlers but are not.
27
+ *
28
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/event-handlers.md
29
+ */
30
+ "solid/event-handlers"?: TtscLintRuleSetting;
31
+
32
+ /**
33
+ * Route each Solid export to the correct entry point (`solid-js`,
34
+ * `solid-js/web`, or `solid-js/store`) and merge duplicate imports
35
+ * from the same entry.
36
+ *
37
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/imports.md
38
+ */
39
+ "solid/imports"?: TtscLintRuleSetting;
40
+
41
+ /**
42
+ * Reject duplicate JSX props on the same Solid element. Unlike
43
+ * React, Solid silently keeps the first value, so the duplicate is
44
+ * dead code and almost always a typo.
45
+ *
46
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-duplicate-props.md
47
+ */
48
+ "solid/jsx-no-duplicate-props"?: TtscLintRuleSetting;
49
+
50
+ /**
51
+ * Reject `javascript:` URLs in Solid JSX attributes (`href`, `src`,
52
+ * ...) — they evaluate the suffix as code in the page context and
53
+ * are a long-standing XSS vector.
54
+ *
55
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-script-url.md
56
+ */
57
+ "solid/jsx-no-script-url"?: TtscLintRuleSetting;
58
+
59
+ /**
60
+ * Reject Solid JSX component names that are not declared or
61
+ * imported in scope.
62
+ *
63
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-undef.md
64
+ */
65
+ "solid/jsx-no-undef"?: TtscLintRuleSetting;
66
+
67
+ /**
68
+ * Scope-marker compatibility rule (mirrors ESLint's
69
+ * `react/jsx-uses-vars`).
70
+ *
71
+ * The native engine emits no diagnostics for this id.
72
+ *
73
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-uses-vars.md
74
+ */
75
+ "solid/jsx-uses-vars"?: TtscLintRuleSetting;
76
+
77
+ /**
78
+ * Reject array values passed as Solid event handlers — Solid
79
+ * does not unwrap the array form React supports.
80
+ *
81
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-array-handlers.md
82
+ */
83
+ "solid/no-array-handlers"?: TtscLintRuleSetting;
84
+
85
+ /**
86
+ * Reject destructured Solid component props — destructuring breaks
87
+ * reactivity by reading the property eagerly.
88
+ *
89
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-destructure.md
90
+ */
91
+ "solid/no-destructure"?: TtscLintRuleSetting;
92
+
93
+ /**
94
+ * Reject `innerHTML` JSX attributes because they bypass sanitization
95
+ * and are a common XSS sink. A static string literal is still
96
+ * allowed by default; flip `allowStatic` off to ban that form too.
97
+ *
98
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-innerhtml.md
99
+ */
100
+ "solid/no-innerhtml"?: TtscLintRuleSetting;
101
+
102
+ /**
103
+ * Reject Solid APIs that rely on ES6 `Proxy` (including `new Proxy`,
104
+ * `Proxy.revocable`, imports from `solid-js/store`, and dynamic
105
+ * spread shapes through `mergeProps`). For shipping to runtimes
106
+ * without `Proxy` support; off by default.
107
+ *
108
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-proxy-apis.md
109
+ */
110
+ "solid/no-proxy-apis"?: TtscLintRuleSetting;
111
+
112
+ /**
113
+ * Reject React-style dependency arrays in Solid tracked scopes
114
+ * (`createEffect(() => ..., [deps])`).
115
+ *
116
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-deps.md
117
+ */
118
+ "solid/no-react-deps"?: TtscLintRuleSetting;
119
+
120
+ /**
121
+ * Reject React-specific JSX props such as `className` and
122
+ * `htmlFor` — Solid uses `class` and `for`.
123
+ *
124
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-specific-props.md
125
+ */
126
+ "solid/no-react-specific-props"?: TtscLintRuleSetting;
127
+
128
+ /**
129
+ * Restrict namespaced JSX attributes (`ns:name={...}`) to the
130
+ * built-in Solid namespaces (`on:`, `oncapture:`, `use:`, `prop:`,
131
+ * `attr:`, `bool:`, `style:`, `class:`). Extra names can be allowed
132
+ * through the `allowedNamespaces` option.
133
+ *
134
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-unknown-namespaces.md
135
+ */
136
+ "solid/no-unknown-namespaces"?: TtscLintRuleSetting;
137
+
138
+ /**
139
+ * Rewrite `class={cn({ ... })}` / `clsx(...)` / `classnames(...)`
140
+ * calls to the reactive `classlist={{ ... }}` prop.
141
+ *
142
+ * Deprecated and off by default upstream.
143
+ *
144
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-classlist.md
145
+ */
146
+ "solid/prefer-classlist"?: TtscLintRuleSetting;
147
+
148
+ /**
149
+ * Replace inline `array.map(item => <JSX />)` with Solid's `<For>`
150
+ * component so the iteration stays keyed and reactive instead of
151
+ * re-creating every child on each update.
152
+ *
153
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-for.md
154
+ */
155
+ "solid/prefer-for"?: TtscLintRuleSetting;
156
+
157
+ /**
158
+ * Rewrite `{cond && <JSX />}` short-circuits in JSX to `<Show
159
+ * when={cond}>...</Show>`. Stylistic only — Solid's compiler
160
+ * already handles the boolean form — so it is off by default.
161
+ *
162
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-show.md
163
+ */
164
+ "solid/prefer-show"?: TtscLintRuleSetting;
165
+
166
+ /**
167
+ * Reject common Solid reactivity breakages — reading a signal
168
+ * outside a tracking scope, destructuring a `Store`, etc.
169
+ *
170
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/reactivity.md
171
+ */
172
+ "solid/reactivity"?: TtscLintRuleSetting;
173
+
174
+ /**
175
+ * Collapse JSX elements with no children to the self-closing form
176
+ * (`<Foo></Foo>` to `<Foo />`). Configurable per component vs HTML
177
+ * element, including a `"void"` mode that only enforces it for void
178
+ * tags.
179
+ *
180
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/self-closing-comp.md
181
+ */
182
+ "solid/self-closing-comp"?: TtscLintRuleSetting;
183
+
184
+ /**
185
+ * Require `style={{...}}` keys to be valid kebab-case CSS properties
186
+ * (`"font-size"`, not React's `fontSize`) and dimensioned values to
187
+ * be strings — Solid does not append implicit `px`.
188
+ *
189
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/style-prop.md
190
+ */
191
+ "solid/style-prop"?: TtscLintRuleSetting;
192
+
193
+ /**
194
+ * Reject JSX nestings that the HTML parser would silently restructure
195
+ * at runtime — `<p>` cannot contain block-level children, `<a>` cannot
196
+ * contain another `<a>`, and `<button>` cannot contain other
197
+ * interactive elements.
198
+ *
199
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/validate-jsx-nesting.md
200
+ */
201
+ "solid/validate-jsx-nesting"?: TtscLintRuleSetting;
202
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Options shape for rules in {@link ITtscLintStorybookRules} that accept
3
+ * configuration. Only `storybook/no-uninstalled-addons` is configurable.
4
+ *
5
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook
6
+ */
7
+
8
+ /** `storybook/no-uninstalled-addons` rule options. */
9
+ export interface ITtscLintStorybookNoUninstalledAddonsRuleOptions {
10
+ /**
11
+ * Explicit `package.json` path used to validate configured Storybook
12
+ * addons. When omitted, the rule walks upward from the linted config
13
+ * file.
14
+ */
15
+ packageJsonLocation?: string;
16
+
17
+ /**
18
+ * Addon package names to skip when checking installation status.
19
+ *
20
+ * @default []
21
+ */
22
+ ignore?: readonly string[];
23
+ }
@@ -0,0 +1,193 @@
1
+ import type { ITtscLintStorybookNoUninstalledAddonsRuleOptions } from "./ITtscLintStorybookRuleOptions";
2
+ import type {
3
+ TtscLintRuleOptionsSetting,
4
+ TtscLintRuleSetting,
5
+ } from "../TtscLintRuleSetting";
6
+
7
+ /**
8
+ * Storybook CSF and configuration rules from
9
+ * `eslint-plugin-storybook`.
10
+ *
11
+ * Checks Component Story Format conventions (default export meta,
12
+ * named story exports, play-function shape) and configuration
13
+ * pitfalls in `.storybook/main.ts`.
14
+ *
15
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook
16
+ */
17
+ export interface ITtscLintStorybookRules {
18
+ /**
19
+ * Require `await` on Storybook interaction helpers (`userEvent`,
20
+ * `expect`, `waitFor`, ...) inside a `play` function.
21
+ *
22
+ * The interactions addon intercepts the awaited promises to record
23
+ * steps, so a missing `await` skips that frame in the debugger and
24
+ * races the next assertion.
25
+ *
26
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/await-interactions.md
27
+ */
28
+ "storybook/await-interactions"?: TtscLintRuleSetting;
29
+
30
+ /**
31
+ * Require forwarding the play-function `context` argument when
32
+ * invoking another story's `play` function.
33
+ *
34
+ * Storybook hangs the canvas, step tracker, and interactions addon
35
+ * off `context`; omitting it leaves the nested call without the
36
+ * runtime hooks it needs to drive the canvas.
37
+ *
38
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/context-in-play-function.md
39
+ */
40
+ "storybook/context-in-play-function"?: TtscLintRuleSetting;
41
+
42
+ /**
43
+ * Require the CSF default meta object to declare a `component`.
44
+ *
45
+ * The reference unlocks Storybook's auto-generated controls,
46
+ * prop-table docs, and CSF3 default render — without it those
47
+ * features silently no-op.
48
+ *
49
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/csf-component.md
50
+ */
51
+ "storybook/csf-component"?: TtscLintRuleSetting;
52
+
53
+ /**
54
+ * Require every story file to provide the CSF default export.
55
+ *
56
+ * Storybook keys all per-file configuration (title, decorators,
57
+ * parameters, component) off that default; files without it are
58
+ * skipped at indexing time.
59
+ *
60
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/default-exports.md
61
+ */
62
+ "storybook/default-exports"?: TtscLintRuleSetting;
63
+
64
+ /**
65
+ * Reject the legacy `|` separator in Storybook story titles
66
+ * (`"Foo|Bar"`).
67
+ *
68
+ * Storybook 6 standardized on `/` for hierarchy and treats `|` as
69
+ * a literal character, so the title collapses into a single
70
+ * sidebar entry instead of nested folders.
71
+ *
72
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/hierarchy-separator.md
73
+ */
74
+ "storybook/hierarchy-separator"?: TtscLintRuleSetting;
75
+
76
+ /**
77
+ * Require `title` and `args` in CSF meta to be inline literals,
78
+ * not references to outside variables or function calls.
79
+ *
80
+ * Storybook's indexer and upgrade codemods read these via static
81
+ * analysis and skip stories where the value is not literal.
82
+ *
83
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/meta-inline-properties.md
84
+ */
85
+ "storybook/meta-inline-properties"?: TtscLintRuleSetting;
86
+
87
+ /**
88
+ * Require CSF meta objects to type-check with `satisfies Meta<…>`
89
+ * rather than a `: Meta<…>` annotation or `as` cast.
90
+ *
91
+ * `satisfies` preserves the narrowed literal types so dependent
92
+ * `StoryObj` declarations can infer the component's args
93
+ * precisely.
94
+ *
95
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/meta-satisfies-type.md
96
+ */
97
+ "storybook/meta-satisfies-type"?: TtscLintRuleSetting;
98
+
99
+ /**
100
+ * Reject `name` metadata on a story when it matches Storybook's
101
+ * auto-derived name from the export identifier.
102
+ *
103
+ * The explicit value adds boilerplate and drifts from the export
104
+ * when one side is renamed without the other.
105
+ *
106
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-redundant-story-name.md
107
+ */
108
+ "storybook/no-redundant-story-name"?: TtscLintRuleSetting;
109
+
110
+ /**
111
+ * Reject direct imports from Storybook renderer packages
112
+ * (`@storybook/react`, etc.); use the user-facing package
113
+ * surface.
114
+ *
115
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-renderer-packages.md
116
+ */
117
+ "storybook/no-renderer-packages"?: TtscLintRuleSetting;
118
+
119
+ /**
120
+ * Reject the legacy `storiesOf(...)` builder API.
121
+ *
122
+ * Storybook 7 removed it in favour of CSF default-export metadata;
123
+ * remaining uses block the migration to CSF3 and the modern
124
+ * indexer.
125
+ *
126
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-stories-of.md
127
+ */
128
+ "storybook/no-stories-of"?: TtscLintRuleSetting;
129
+
130
+ /**
131
+ * Reject the `title` property in CSF meta when the project uses
132
+ * Storybook's auto-title generation.
133
+ *
134
+ * CSF3 derives the title from the file path, so an explicit
135
+ * `title` is redundant and drifts from the on-disk layout when
136
+ * files are moved.
137
+ *
138
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-title-property-in-meta.md
139
+ */
140
+ "storybook/no-title-property-in-meta"?: TtscLintRuleSetting;
141
+
142
+ /**
143
+ * Validate Storybook addon names against the project's
144
+ * dependencies, so misspelled addon ids surface at lint time.
145
+ *
146
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-uninstalled-addons.md
147
+ */
148
+ "storybook/no-uninstalled-addons"?: TtscLintRuleOptionsSetting<ITtscLintStorybookNoUninstalledAddonsRuleOptions>;
149
+
150
+ /**
151
+ * Require named story exports to use PascalCase.
152
+ *
153
+ * Storybook derives the displayed story name from the export
154
+ * identifier and inserts spaces at case boundaries, so
155
+ * non-PascalCase exports render with awkward or merged labels in
156
+ * the sidebar.
157
+ *
158
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/prefer-pascal-case.md
159
+ */
160
+ "storybook/prefer-pascal-case"?: TtscLintRuleSetting;
161
+
162
+ /**
163
+ * Require every story file to export at least one named story
164
+ * alongside the default meta.
165
+ *
166
+ * A file with only the default export contributes nothing to the
167
+ * sidebar and usually means a story was deleted but the file was
168
+ * not.
169
+ *
170
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/story-exports.md
171
+ */
172
+ "storybook/story-exports"?: TtscLintRuleSetting;
173
+
174
+ /**
175
+ * Require `expect` to be imported from `@storybook/test` in play
176
+ * functions, not from Jest.
177
+ *
178
+ * The Storybook re-export is built for the browser interactions
179
+ * runner; Jest's `expect` ships only Node-only matchers and throws
180
+ * when the play function executes in a browser preview.
181
+ *
182
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/use-storybook-expect.md
183
+ */
184
+ "storybook/use-storybook-expect"?: TtscLintRuleSetting;
185
+
186
+ /**
187
+ * Reject direct Testing Library imports inside story files;
188
+ * use the Storybook-bundled re-exports.
189
+ *
190
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/use-storybook-testing-library.md
191
+ */
192
+ "storybook/use-storybook-testing-library"?: TtscLintRuleSetting;
193
+ }