@ttsc/lint 0.13.0 → 0.14.0-dev.20250530.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 (498) hide show
  1. package/README.md +955 -85
  2. package/lib/defaultFormat.d.ts +15 -8
  3. package/lib/defaultFormat.js +15 -8
  4. package/lib/defaultFormat.js.map +1 -1
  5. package/lib/index.d.ts +46 -0
  6. package/lib/index.js +60 -37
  7. package/lib/index.js.map +1 -1
  8. package/lib/structures/ITtscLintConfig.d.ts +12 -6
  9. package/lib/structures/TtscLintRuleSetting.d.ts +49 -0
  10. package/lib/structures/{TtscLintRuleOptions.js → TtscLintRuleSetting.js} +1 -1
  11. package/lib/structures/TtscLintRuleSetting.js.map +1 -0
  12. package/lib/structures/format/ITtscLintFormat.d.ts +128 -0
  13. package/lib/structures/{TtscLintRuleMap.js → format/ITtscLintFormat.js} +1 -1
  14. package/lib/structures/format/ITtscLintFormat.js.map +1 -0
  15. package/lib/structures/format/ITtscLintFormatJsDoc.d.ts +17 -0
  16. package/lib/structures/{ITtscLintFormatConfig.js → format/ITtscLintFormatJsDoc.js} +1 -1
  17. package/lib/structures/format/ITtscLintFormatJsDoc.js.map +1 -0
  18. package/lib/structures/format/ITtscLintFormatSortImports.d.ts +54 -0
  19. package/lib/structures/format/ITtscLintFormatSortImports.js +3 -0
  20. package/lib/structures/format/ITtscLintFormatSortImports.js.map +1 -0
  21. package/lib/structures/format/index.d.ts +3 -0
  22. package/lib/structures/format/index.js +20 -0
  23. package/lib/structures/format/index.js.map +1 -0
  24. package/lib/structures/index.d.ts +3 -4
  25. package/lib/structures/index.js +3 -4
  26. package/lib/structures/index.js.map +1 -1
  27. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +95 -0
  28. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +13 -0
  29. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -0
  30. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +75 -0
  31. package/lib/structures/rules/ITtscLintBoundariesRules.js +3 -0
  32. package/lib/structures/rules/ITtscLintBoundariesRules.js.map +1 -0
  33. package/lib/structures/rules/ITtscLintContributorRules.d.ts +16 -0
  34. package/lib/structures/rules/ITtscLintContributorRules.js +3 -0
  35. package/lib/structures/rules/ITtscLintContributorRules.js.map +1 -0
  36. package/lib/structures/rules/ITtscLintCoreRules.d.ts +1229 -0
  37. package/lib/structures/rules/ITtscLintCoreRules.js +3 -0
  38. package/lib/structures/rules/ITtscLintCoreRules.js.map +1 -0
  39. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +17 -0
  40. package/lib/structures/rules/ITtscLintCypressRuleOptions.js +10 -0
  41. package/lib/structures/rules/ITtscLintCypressRuleOptions.js.map +1 -0
  42. package/lib/structures/rules/ITtscLintCypressRules.d.ts +125 -0
  43. package/lib/structures/rules/ITtscLintCypressRules.js +3 -0
  44. package/lib/structures/rules/ITtscLintCypressRules.js.map +1 -0
  45. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +154 -0
  46. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +13 -0
  47. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js.map +1 -0
  48. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +162 -0
  49. package/lib/structures/rules/ITtscLintFunctionalRules.js +3 -0
  50. package/lib/structures/rules/ITtscLintFunctionalRules.js.map +1 -0
  51. package/lib/structures/rules/ITtscLintJestRules.d.ts +190 -0
  52. package/lib/structures/rules/ITtscLintJestRules.js +3 -0
  53. package/lib/structures/rules/ITtscLintJestRules.js.map +1 -0
  54. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +133 -0
  55. package/lib/structures/rules/ITtscLintJsdocRules.js +3 -0
  56. package/lib/structures/rules/ITtscLintJsdocRules.js.map +1 -0
  57. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +294 -0
  58. package/lib/structures/rules/ITtscLintJsxA11yRules.js +3 -0
  59. package/lib/structures/rules/ITtscLintJsxA11yRules.js.map +1 -0
  60. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +180 -0
  61. package/lib/structures/rules/ITtscLintNextjsRules.js +3 -0
  62. package/lib/structures/rules/ITtscLintNextjsRules.js.map +1 -0
  63. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +312 -0
  64. package/lib/structures/rules/ITtscLintPlaywrightRules.js +3 -0
  65. package/lib/structures/rules/ITtscLintPlaywrightRules.js.map +1 -0
  66. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +179 -0
  67. package/lib/structures/rules/ITtscLintPromiseRules.js +3 -0
  68. package/lib/structures/rules/ITtscLintPromiseRules.js.map +1 -0
  69. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +18 -0
  70. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js +8 -0
  71. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js.map +1 -0
  72. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +49 -0
  73. package/lib/structures/rules/ITtscLintReactPerfRules.js +3 -0
  74. package/lib/structures/rules/ITtscLintReactPerfRules.js.map +1 -0
  75. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +37 -0
  76. package/lib/structures/rules/ITtscLintReactRuleOptions.js +11 -0
  77. package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -0
  78. package/lib/structures/rules/ITtscLintReactRules.d.ts +276 -0
  79. package/lib/structures/rules/ITtscLintReactRules.js +3 -0
  80. package/lib/structures/rules/ITtscLintReactRules.js.map +1 -0
  81. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +182 -0
  82. package/lib/structures/rules/ITtscLintRegexpRules.js +3 -0
  83. package/lib/structures/rules/ITtscLintRegexpRules.js.map +1 -0
  84. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +65 -0
  85. package/lib/structures/rules/ITtscLintRuleOptionsMap.js +3 -0
  86. package/lib/structures/rules/ITtscLintRuleOptionsMap.js.map +1 -0
  87. package/lib/structures/rules/ITtscLintRules.d.ts +55 -0
  88. package/lib/structures/{TtscLintRule.js → rules/ITtscLintRules.js} +1 -1
  89. package/lib/structures/rules/ITtscLintRules.js.map +1 -0
  90. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +141 -0
  91. package/lib/structures/rules/ITtscLintSecurityRules.js +3 -0
  92. package/lib/structures/rules/ITtscLintSecurityRules.js.map +1 -0
  93. package/lib/structures/rules/ITtscLintSolidRules.d.ts +178 -0
  94. package/lib/structures/rules/ITtscLintSolidRules.js +3 -0
  95. package/lib/structures/rules/ITtscLintSolidRules.js.map +1 -0
  96. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +20 -0
  97. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js +9 -0
  98. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js.map +1 -0
  99. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +165 -0
  100. package/lib/structures/rules/ITtscLintStorybookRules.js +3 -0
  101. package/lib/structures/rules/ITtscLintStorybookRules.js.map +1 -0
  102. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +88 -0
  103. package/lib/structures/rules/ITtscLintTanstackQueryRules.js +3 -0
  104. package/lib/structures/rules/ITtscLintTanstackQueryRules.js.map +1 -0
  105. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +21 -0
  106. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js +10 -0
  107. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js.map +1 -0
  108. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +293 -0
  109. package/lib/structures/rules/ITtscLintTestingLibraryRules.js +3 -0
  110. package/lib/structures/rules/ITtscLintTestingLibraryRules.js.map +1 -0
  111. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +1074 -0
  112. package/lib/structures/rules/ITtscLintTypeScriptRules.js +3 -0
  113. package/lib/structures/rules/ITtscLintTypeScriptRules.js.map +1 -0
  114. package/lib/structures/rules/ITtscLintUnicornRules.d.ts +997 -0
  115. package/lib/structures/rules/ITtscLintUnicornRules.js +3 -0
  116. package/lib/structures/rules/ITtscLintUnicornRules.js.map +1 -0
  117. package/lib/structures/rules/ITtscLintVitestRules.d.ts +133 -0
  118. package/lib/structures/rules/ITtscLintVitestRules.js +3 -0
  119. package/lib/structures/rules/ITtscLintVitestRules.js.map +1 -0
  120. package/lib/structures/rules/index.d.ts +31 -0
  121. package/lib/structures/rules/index.js +48 -0
  122. package/lib/structures/rules/index.js.map +1 -0
  123. package/linthost/ast_helpers.go +30 -5
  124. package/linthost/compile.go +33 -2
  125. package/linthost/config.go +118 -71
  126. package/linthost/config_format.go +270 -104
  127. package/linthost/directives.go +67 -25
  128. package/linthost/dispatch.go +14 -3
  129. package/linthost/engine.go +160 -40
  130. package/linthost/fix.go +10 -3
  131. package/linthost/flags_gen.go +17 -15
  132. package/linthost/format.go +222 -25
  133. package/linthost/format_editor_settings.go +262 -0
  134. package/linthost/host.go +40 -3
  135. package/linthost/lsp.go +898 -0
  136. package/linthost/print_dispatch.go +5 -2
  137. package/linthost/print_engine.go +5 -5
  138. package/linthost/print_nodes_call.go +149 -67
  139. package/linthost/print_nodes_function.go +27 -2
  140. package/linthost/print_nodes_list.go +40 -5
  141. package/linthost/print_nodes_object.go +1 -1
  142. package/linthost/print_nodes_ternary.go +86 -0
  143. package/linthost/rule_names.go +14 -0
  144. package/linthost/rules_arrays.go +2 -2
  145. package/linthost/rules_boundaries.go +532 -0
  146. package/linthost/rules_camelcase.go +133 -0
  147. package/linthost/rules_complexity.go +95 -0
  148. package/linthost/rules_consistent_return.go +130 -0
  149. package/linthost/rules_console.go +1 -1
  150. package/linthost/rules_core_extra.go +739 -0
  151. package/linthost/rules_curly.go +70 -0
  152. package/linthost/rules_cypress.go +608 -0
  153. package/linthost/rules_debugger.go +2 -2
  154. package/linthost/rules_default_case.go +39 -0
  155. package/linthost/rules_default_case_last.go +46 -0
  156. package/linthost/rules_dupes.go +3 -3
  157. package/linthost/rules_empty.go +3 -3
  158. package/linthost/rules_escape.go +44 -24
  159. package/linthost/rules_eval.go +2 -2
  160. package/linthost/rules_finally.go +2 -2
  161. package/linthost/rules_format_arrow_parens.go +167 -0
  162. package/linthost/rules_format_bracket_spacing.go +117 -0
  163. package/linthost/rules_format_clause_join.go +172 -0
  164. package/linthost/rules_format_declaration_header.go +595 -0
  165. package/linthost/rules_format_indent.go +372 -0
  166. package/linthost/rules_format_jsdoc.go +5 -5
  167. package/linthost/rules_format_orphan_semi.go +106 -0
  168. package/linthost/rules_format_parameter_properties.go +175 -0
  169. package/linthost/rules_format_print_width.go +66 -55
  170. package/linthost/rules_format_quote_props.go +169 -0
  171. package/linthost/rules_format_quotes.go +76 -30
  172. package/linthost/rules_format_semi.go +186 -11
  173. package/linthost/rules_format_sort_imports.go +437 -118
  174. package/linthost/rules_format_statement_split.go +343 -0
  175. package/linthost/rules_format_ternary_nullish_parens.go +77 -0
  176. package/linthost/rules_format_trailing_comma.go +22 -3
  177. package/linthost/rules_format_whitespace.go +336 -0
  178. package/linthost/rules_functional.go +967 -0
  179. package/linthost/rules_gap.go +24 -45
  180. package/linthost/rules_grouped_accessor_pairs.go +87 -0
  181. package/linthost/rules_guard_for_in.go +198 -0
  182. package/linthost/rules_id_length.go +77 -0
  183. package/linthost/rules_imports.go +70 -2
  184. package/linthost/rules_init_declarations.go +53 -0
  185. package/linthost/rules_jest.go +618 -0
  186. package/linthost/rules_jsdoc.go +502 -0
  187. package/linthost/rules_jsx_a11y.go +1264 -0
  188. package/linthost/rules_logic.go +12 -12
  189. package/linthost/rules_loops.go +1 -1
  190. package/linthost/rules_max_classes_per_file.go +58 -0
  191. package/linthost/rules_max_depth.go +83 -0
  192. package/linthost/rules_max_lines.go +101 -0
  193. package/linthost/rules_max_lines_per_function.go +57 -0
  194. package/linthost/rules_max_nested_callbacks.go +61 -0
  195. package/linthost/rules_max_params.go +49 -0
  196. package/linthost/rules_max_statements.go +59 -0
  197. package/linthost/rules_misc.go +1 -1
  198. package/linthost/rules_nextjs.go +697 -0
  199. package/linthost/rules_no_else_return.go +75 -0
  200. package/linthost/rules_no_empty_named_blocks.go +91 -0
  201. package/linthost/rules_no_extend_native.go +51 -0
  202. package/linthost/rules_no_import_assign.go +140 -0
  203. package/linthost/rules_no_invalid_this.go +52 -0
  204. package/linthost/rules_no_loop_func.go +85 -0
  205. package/linthost/rules_no_magic_numbers.go +123 -0
  206. package/linthost/rules_no_mixed_operators.go +80 -0
  207. package/linthost/rules_no_param_reassign.go +98 -0
  208. package/linthost/rules_no_redeclare.go +270 -0
  209. package/linthost/rules_no_restricted_imports.go +105 -0
  210. package/linthost/rules_no_restricted_syntax.go +49 -0
  211. package/linthost/rules_no_shadow.go +147 -0
  212. package/linthost/rules_no_unreachable.go +77 -0
  213. package/linthost/rules_no_useless_assignment.go +120 -0
  214. package/linthost/rules_no_useless_constructor.go +245 -0
  215. package/linthost/rules_no_useless_return.go +51 -0
  216. package/linthost/rules_params.go +1 -1
  217. package/linthost/rules_playwright.go +788 -0
  218. package/linthost/rules_prefer_arrow_callback.go +124 -0
  219. package/linthost/rules_prefer_destructuring.go +98 -0
  220. package/linthost/rules_prefer_named_capture_group.go +129 -0
  221. package/linthost/rules_prefer_rest_params.go +94 -0
  222. package/linthost/rules_problems.go +41 -30
  223. package/linthost/rules_promise.go +1057 -2
  224. package/linthost/rules_protos.go +2 -2
  225. package/linthost/rules_react.go +773 -0
  226. package/linthost/rules_react_extras.go +227 -0
  227. package/linthost/rules_react_hooks.go +848 -0
  228. package/linthost/rules_react_perf.go +293 -0
  229. package/linthost/rules_react_refresh.go +583 -0
  230. package/linthost/rules_regexp.go +410 -0
  231. package/linthost/rules_security.go +830 -0
  232. package/linthost/rules_self.go +2 -2
  233. package/linthost/rules_solid.go +1073 -0
  234. package/linthost/rules_sort_imports.go +69 -0
  235. package/linthost/rules_sort_keys.go +134 -0
  236. package/linthost/rules_storybook.go +1176 -0
  237. package/linthost/rules_strings.go +4 -4
  238. package/linthost/rules_suggestions.go +38 -38
  239. package/linthost/rules_tanstack_query.go +844 -0
  240. package/linthost/rules_testing_library.go +1204 -0
  241. package/linthost/rules_throw.go +1 -1
  242. package/linthost/rules_ts.go +19 -19
  243. package/linthost/rules_ts_async.go +399 -0
  244. package/linthost/rules_ts_class_literal_property_style.go +115 -0
  245. package/linthost/rules_ts_consistent_type_exports.go +256 -0
  246. package/linthost/rules_ts_explicit_function_return_type.go +67 -0
  247. package/linthost/rules_ts_extra.go +159 -36
  248. package/linthost/rules_ts_no_base_to_string.go +218 -0
  249. package/linthost/rules_ts_no_confusing_void.go +72 -0
  250. package/linthost/rules_ts_no_deprecated.go +195 -0
  251. package/linthost/rules_ts_no_for_in_array.go +84 -0
  252. package/linthost/rules_ts_no_magic_numbers.go +124 -0
  253. package/linthost/rules_ts_no_meaningless_void_operator.go +84 -0
  254. package/linthost/rules_ts_no_misused_spread.go +104 -0
  255. package/linthost/rules_ts_no_redundant_type_constituents.go +113 -0
  256. package/linthost/rules_ts_no_restricted_types.go +62 -0
  257. package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +129 -0
  258. package/linthost/rules_ts_no_unnecessary_condition.go +250 -0
  259. package/linthost/rules_ts_no_unnecessary_qualifier.go +118 -0
  260. package/linthost/rules_ts_no_unnecessary_template_expression.go +178 -0
  261. package/linthost/rules_ts_no_unnecessary_type_arguments.go +234 -0
  262. package/linthost/rules_ts_no_unnecessary_type_assertion.go +157 -0
  263. package/linthost/rules_ts_no_unsafe_argument.go +82 -0
  264. package/linthost/rules_ts_no_unsafe_assignment.go +102 -0
  265. package/linthost/rules_ts_no_unsafe_call.go +82 -0
  266. package/linthost/rules_ts_no_unsafe_enum_comparison.go +235 -0
  267. package/linthost/rules_ts_no_unsafe_member_access.go +58 -0
  268. package/linthost/rules_ts_no_unsafe_return.go +126 -0
  269. package/linthost/rules_ts_no_unsafe_unary_minus.go +81 -0
  270. package/linthost/rules_ts_no_useless_constructor.go +52 -0
  271. package/linthost/rules_ts_non_nullable_type_assertion_style.go +108 -0
  272. package/linthost/rules_ts_parameter_properties.go +38 -0
  273. package/linthost/rules_ts_prefer_find.go +178 -0
  274. package/linthost/rules_ts_prefer_includes.go +255 -0
  275. package/linthost/rules_ts_prefer_nullish_coalescing.go +104 -0
  276. package/linthost/rules_ts_prefer_optional_chain.go +228 -0
  277. package/linthost/rules_ts_prefer_promise_reject_errors.go +176 -0
  278. package/linthost/rules_ts_prefer_readonly.go +73 -0
  279. package/linthost/rules_ts_prefer_reduce_type_parameter.go +116 -0
  280. package/linthost/rules_ts_prefer_regexp_exec.go +122 -0
  281. package/linthost/rules_ts_prefer_return_this_type.go +135 -0
  282. package/linthost/rules_ts_prefer_string_starts_ends_with.go +360 -0
  283. package/linthost/rules_ts_promise_function_async.go +77 -0
  284. package/linthost/rules_ts_related_getter_setter_pairs.go +113 -0
  285. package/linthost/rules_ts_require_array_sort_compare.go +96 -0
  286. package/linthost/rules_ts_restrict_plus_operands.go +127 -0
  287. package/linthost/rules_ts_restrict_template_expressions.go +95 -0
  288. package/linthost/rules_ts_simple.go +387 -0
  289. package/linthost/rules_ts_sort_type_constituents.go +144 -0
  290. package/linthost/rules_ts_strict_boolean_expressions.go +157 -0
  291. package/linthost/rules_ts_switch_exhaustiveness_check.go +147 -0
  292. package/linthost/rules_ts_unbound_method.go +126 -0
  293. package/linthost/rules_tsdoc.go +136 -0
  294. package/linthost/rules_unicorn_better_regex.go +27 -0
  295. package/linthost/rules_unicorn_catch_error_name.go +46 -0
  296. package/linthost/rules_unicorn_consistent_assert.go +47 -0
  297. package/linthost/rules_unicorn_consistent_date_clone.go +54 -0
  298. package/linthost/rules_unicorn_consistent_destructuring.go +25 -0
  299. package/linthost/rules_unicorn_consistent_empty_array_spread.go +62 -0
  300. package/linthost/rules_unicorn_consistent_existence_index_check.go +80 -0
  301. package/linthost/rules_unicorn_consistent_function_scoping.go +25 -0
  302. package/linthost/rules_unicorn_consistent_template_literal_escape.go +25 -0
  303. package/linthost/rules_unicorn_custom_error_definition.go +138 -0
  304. package/linthost/rules_unicorn_empty_brace_spaces.go +73 -0
  305. package/linthost/rules_unicorn_error_message.go +64 -0
  306. package/linthost/rules_unicorn_escape_case.go +51 -0
  307. package/linthost/rules_unicorn_expiring_todo_comments.go +78 -0
  308. package/linthost/rules_unicorn_explicit_length_check.go +88 -0
  309. package/linthost/rules_unicorn_filename_case.go +29 -0
  310. package/linthost/rules_unicorn_import_style.go +28 -0
  311. package/linthost/rules_unicorn_isolated_functions.go +29 -0
  312. package/linthost/rules_unicorn_new_for_builtins.go +87 -0
  313. package/linthost/rules_unicorn_no_abusive_eslint_disable.go +63 -0
  314. package/linthost/rules_unicorn_no_accessor_recursion.go +115 -0
  315. package/linthost/rules_unicorn_no_anonymous_default_export.go +74 -0
  316. package/linthost/rules_unicorn_no_array_callback_reference.go +65 -0
  317. package/linthost/rules_unicorn_no_array_for_each.go +40 -0
  318. package/linthost/rules_unicorn_no_array_method_this_argument.go +61 -0
  319. package/linthost/rules_unicorn_no_array_reduce.go +41 -0
  320. package/linthost/rules_unicorn_no_array_reverse.go +44 -0
  321. package/linthost/rules_unicorn_no_array_sort.go +43 -0
  322. package/linthost/rules_unicorn_no_await_expression_member.go +40 -0
  323. package/linthost/rules_unicorn_no_await_in_promise_methods.go +69 -0
  324. package/linthost/rules_unicorn_no_console_spaces.go +61 -0
  325. package/linthost/rules_unicorn_no_document_cookie.go +41 -0
  326. package/linthost/rules_unicorn_no_empty_file.go +44 -0
  327. package/linthost/rules_unicorn_no_for_loop.go +102 -0
  328. package/linthost/rules_unicorn_no_hex_escape.go +42 -0
  329. package/linthost/rules_unicorn_no_immediate_mutation.go +90 -0
  330. package/linthost/rules_unicorn_no_instanceof_builtins.go +66 -0
  331. package/linthost/rules_unicorn_no_invalid_fetch_options.go +79 -0
  332. package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +51 -0
  333. package/linthost/rules_unicorn_no_keyword_prefix.go +101 -0
  334. package/linthost/rules_unicorn_no_lonely_if.go +44 -0
  335. package/linthost/rules_unicorn_no_magic_array_flat_depth.go +51 -0
  336. package/linthost/rules_unicorn_no_named_default.go +54 -0
  337. package/linthost/rules_unicorn_no_negated_condition.go +85 -0
  338. package/linthost/rules_unicorn_no_negation_in_equality_check.go +50 -0
  339. package/linthost/rules_unicorn_no_nested_ternary.go +43 -0
  340. package/linthost/rules_unicorn_no_new_array.go +30 -0
  341. package/linthost/rules_unicorn_no_new_buffer.go +31 -0
  342. package/linthost/rules_unicorn_no_null.go +24 -0
  343. package/linthost/rules_unicorn_no_object_as_default_parameter.go +48 -0
  344. package/linthost/rules_unicorn_no_process_exit.go +43 -0
  345. package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +59 -0
  346. package/linthost/rules_unicorn_no_static_only_class.go +56 -0
  347. package/linthost/rules_unicorn_no_thenable.go +74 -0
  348. package/linthost/rules_unicorn_no_this_assignment.go +35 -0
  349. package/linthost/rules_unicorn_no_typeof_undefined.go +58 -0
  350. package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +49 -0
  351. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +70 -0
  352. package/linthost/rules_unicorn_no_unnecessary_await.go +51 -0
  353. package/linthost/rules_unicorn_no_unnecessary_polyfills.go +32 -0
  354. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +48 -0
  355. package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +115 -0
  356. package/linthost/rules_unicorn_no_unreadable_iife.go +50 -0
  357. package/linthost/rules_unicorn_no_unused_properties.go +30 -0
  358. package/linthost/rules_unicorn_no_useless_collection_argument.go +63 -0
  359. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +46 -0
  360. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +81 -0
  361. package/linthost/rules_unicorn_no_useless_iterator_to_array.go +72 -0
  362. package/linthost/rules_unicorn_no_useless_length_check.go +144 -0
  363. package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +81 -0
  364. package/linthost/rules_unicorn_no_useless_spread.go +67 -0
  365. package/linthost/rules_unicorn_no_useless_switch_case.go +55 -0
  366. package/linthost/rules_unicorn_no_useless_undefined.go +55 -0
  367. package/linthost/rules_unicorn_no_zero_fractions.go +52 -0
  368. package/linthost/rules_unicorn_number_literal_case.go +69 -0
  369. package/linthost/rules_unicorn_numeric_separators_style.go +75 -0
  370. package/linthost/rules_unicorn_prefer_add_event_listener.go +66 -0
  371. package/linthost/rules_unicorn_prefer_array_find.go +51 -0
  372. package/linthost/rules_unicorn_prefer_array_flat.go +52 -0
  373. package/linthost/rules_unicorn_prefer_array_flat_map.go +63 -0
  374. package/linthost/rules_unicorn_prefer_array_index_of.go +147 -0
  375. package/linthost/rules_unicorn_prefer_array_some.go +67 -0
  376. package/linthost/rules_unicorn_prefer_at.go +77 -0
  377. package/linthost/rules_unicorn_prefer_bigint_literals.go +77 -0
  378. package/linthost/rules_unicorn_prefer_blob_reading_methods.go +44 -0
  379. package/linthost/rules_unicorn_prefer_class_fields.go +93 -0
  380. package/linthost/rules_unicorn_prefer_classlist_toggle.go +120 -0
  381. package/linthost/rules_unicorn_prefer_code_point.go +49 -0
  382. package/linthost/rules_unicorn_prefer_date_now.go +78 -0
  383. package/linthost/rules_unicorn_prefer_default_parameters.go +144 -0
  384. package/linthost/rules_unicorn_prefer_dom_node_append.go +40 -0
  385. package/linthost/rules_unicorn_prefer_dom_node_dataset.go +55 -0
  386. package/linthost/rules_unicorn_prefer_dom_node_remove.go +41 -0
  387. package/linthost/rules_unicorn_prefer_dom_node_text_content.go +37 -0
  388. package/linthost/rules_unicorn_prefer_event_target.go +36 -0
  389. package/linthost/rules_unicorn_prefer_export_from.go +129 -0
  390. package/linthost/rules_unicorn_prefer_global_this.go +127 -0
  391. package/linthost/rules_unicorn_prefer_import_meta_properties.go +66 -0
  392. package/linthost/rules_unicorn_prefer_includes.go +149 -0
  393. package/linthost/rules_unicorn_prefer_json_parse_buffer.go +65 -0
  394. package/linthost/rules_unicorn_prefer_keyboard_event_key.go +38 -0
  395. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +48 -0
  396. package/linthost/rules_unicorn_prefer_math_min_max.go +60 -0
  397. package/linthost/rules_unicorn_prefer_math_trunc.go +62 -0
  398. package/linthost/rules_unicorn_prefer_modern_dom_apis.go +47 -0
  399. package/linthost/rules_unicorn_prefer_modern_math_apis.go +70 -0
  400. package/linthost/rules_unicorn_prefer_module.go +50 -0
  401. package/linthost/rules_unicorn_prefer_native_coercion_functions.go +114 -0
  402. package/linthost/rules_unicorn_prefer_negative_index.go +74 -0
  403. package/linthost/rules_unicorn_prefer_node_protocol.go +122 -0
  404. package/linthost/rules_unicorn_prefer_number_properties.go +88 -0
  405. package/linthost/rules_unicorn_prefer_object_from_entries.go +55 -0
  406. package/linthost/rules_unicorn_prefer_optional_catch_binding.go +62 -0
  407. package/linthost/rules_unicorn_prefer_prototype_methods.go +54 -0
  408. package/linthost/rules_unicorn_prefer_query_selector.go +56 -0
  409. package/linthost/rules_unicorn_prefer_reflect_apply.go +36 -0
  410. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +80 -0
  411. package/linthost/rules_unicorn_prefer_response_static_json.go +53 -0
  412. package/linthost/rules_unicorn_prefer_set_has.go +42 -0
  413. package/linthost/rules_unicorn_prefer_set_size.go +48 -0
  414. package/linthost/rules_unicorn_prefer_simple_condition_first.go +34 -0
  415. package/linthost/rules_unicorn_prefer_single_call.go +96 -0
  416. package/linthost/rules_unicorn_prefer_spread.go +51 -0
  417. package/linthost/rules_unicorn_prefer_string_raw.go +43 -0
  418. package/linthost/rules_unicorn_prefer_string_replace_all.go +95 -0
  419. package/linthost/rules_unicorn_prefer_string_slice.go +43 -0
  420. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +148 -0
  421. package/linthost/rules_unicorn_prefer_string_trim_start_end.go +48 -0
  422. package/linthost/rules_unicorn_prefer_structured_clone.go +71 -0
  423. package/linthost/rules_unicorn_prefer_switch.go +103 -0
  424. package/linthost/rules_unicorn_prefer_ternary.go +71 -0
  425. package/linthost/rules_unicorn_prefer_top_level_await.go +72 -0
  426. package/linthost/rules_unicorn_prefer_type_error.go +127 -0
  427. package/linthost/rules_unicorn_prevent_abbreviations.go +127 -0
  428. package/linthost/rules_unicorn_relative_url_style.go +49 -0
  429. package/linthost/rules_unicorn_require_array_join_separator.go +45 -0
  430. package/linthost/rules_unicorn_require_module_attributes.go +54 -0
  431. package/linthost/rules_unicorn_require_module_specifiers.go +55 -0
  432. package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +43 -0
  433. package/linthost/rules_unicorn_require_post_message_target_origin.go +44 -0
  434. package/linthost/rules_unicorn_string_content.go +27 -0
  435. package/linthost/rules_unicorn_switch_case_braces.go +42 -0
  436. package/linthost/rules_unicorn_switch_case_break_position.go +31 -0
  437. package/linthost/rules_unicorn_template_indent.go +28 -0
  438. package/linthost/rules_unicorn_text_encoding_identifier_case.go +72 -0
  439. package/linthost/rules_unicorn_throw_new_error.go +61 -0
  440. package/linthost/rules_var.go +10 -4
  441. package/linthost/rules_vitest.go +568 -0
  442. package/package.json +3 -3
  443. package/plugin/main.go +49 -3
  444. package/rule/astutil/astutil.go +10 -3
  445. package/rule/rule.go +12 -10
  446. package/src/defaultFormat.ts +17 -10
  447. package/src/index.ts +65 -43
  448. package/src/structures/ITtscLintConfig.ts +14 -8
  449. package/src/structures/TtscLintRuleSetting.ts +55 -0
  450. package/src/structures/format/ITtscLintFormat.ts +141 -0
  451. package/src/structures/format/ITtscLintFormatJsDoc.ts +18 -0
  452. package/src/structures/format/ITtscLintFormatSortImports.ts +62 -0
  453. package/src/structures/format/index.ts +3 -0
  454. package/src/structures/index.ts +3 -4
  455. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +117 -0
  456. package/src/structures/rules/ITtscLintBoundariesRules.ts +91 -0
  457. package/src/structures/rules/ITtscLintContributorRules.ts +20 -0
  458. package/src/structures/rules/ITtscLintCoreRules.ts +1378 -0
  459. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +18 -0
  460. package/src/structures/rules/ITtscLintCypressRules.ts +141 -0
  461. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +200 -0
  462. package/src/structures/rules/ITtscLintFunctionalRules.ts +197 -0
  463. package/src/structures/rules/ITtscLintJestRules.ts +209 -0
  464. package/src/structures/rules/ITtscLintJsdocRules.ts +146 -0
  465. package/src/structures/rules/ITtscLintJsxA11yRules.ts +331 -0
  466. package/src/structures/rules/ITtscLintNextjsRules.ts +201 -0
  467. package/src/structures/rules/ITtscLintPlaywrightRules.ts +343 -0
  468. package/src/structures/rules/ITtscLintPromiseRules.ts +196 -0
  469. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +19 -0
  470. package/src/structures/rules/ITtscLintReactPerfRules.ts +53 -0
  471. package/src/structures/rules/ITtscLintReactRuleOptions.ts +41 -0
  472. package/src/structures/rules/ITtscLintReactRules.ts +308 -0
  473. package/src/structures/rules/ITtscLintRegexpRules.ts +204 -0
  474. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +88 -0
  475. package/src/structures/rules/ITtscLintRules.ts +77 -0
  476. package/src/structures/rules/ITtscLintSecurityRules.ts +155 -0
  477. package/src/structures/rules/ITtscLintSolidRules.ts +199 -0
  478. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +22 -0
  479. package/src/structures/rules/ITtscLintStorybookRules.ts +184 -0
  480. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +96 -0
  481. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +23 -0
  482. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +325 -0
  483. package/src/structures/rules/ITtscLintTypeScriptRules.ts +1172 -0
  484. package/src/structures/rules/ITtscLintUnicornRules.ts +1143 -0
  485. package/src/structures/rules/ITtscLintVitestRules.ts +146 -0
  486. package/src/structures/rules/index.ts +31 -0
  487. package/lib/structures/ITtscLintFormatConfig.d.ts +0 -153
  488. package/lib/structures/ITtscLintFormatConfig.js.map +0 -1
  489. package/lib/structures/TtscLintRule.d.ts +0 -17
  490. package/lib/structures/TtscLintRule.js.map +0 -1
  491. package/lib/structures/TtscLintRuleMap.d.ts +0 -46
  492. package/lib/structures/TtscLintRuleMap.js.map +0 -1
  493. package/lib/structures/TtscLintRuleOptions.d.ts +0 -137
  494. package/lib/structures/TtscLintRuleOptions.js.map +0 -1
  495. package/src/structures/ITtscLintFormatConfig.ts +0 -168
  496. package/src/structures/TtscLintRule.ts +0 -160
  497. package/src/structures/TtscLintRuleMap.ts +0 -55
  498. package/src/structures/TtscLintRuleOptions.ts +0 -151
@@ -0,0 +1,199 @@
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 that look
7
+ * correct in React (destructuring props, calling `useEffect`-style hooks with
8
+ * array deps) silently break reactivity in Solid. This family captures the
9
+ * 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 — Solid
16
+ * 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 (`onClick`,
24
+ * not `onclick` / `onClIcK`) so the compiler recognizes them as events. Also
25
+ * flags `on*`-named props bound to non-function values, which look like
26
+ * 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 from the
35
+ * 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 React, Solid
43
+ * silently keeps the first value, so the duplicate is dead code and almost
44
+ * 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 are a
53
+ * 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 imported in
61
+ * 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 `react/jsx-uses-vars`).
69
+ *
70
+ * The native engine emits no diagnostics for this id.
71
+ *
72
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-uses-vars.md
73
+ */
74
+ "solid/jsx-uses-vars"?: TtscLintRuleSetting;
75
+
76
+ /**
77
+ * Reject array values passed as Solid event handlers — Solid does not unwrap
78
+ * the array form React supports.
79
+ *
80
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-array-handlers.md
81
+ */
82
+ "solid/no-array-handlers"?: TtscLintRuleSetting;
83
+
84
+ /**
85
+ * Reject destructured Solid component props — destructuring breaks reactivity
86
+ * by reading the property eagerly.
87
+ *
88
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-destructure.md
89
+ */
90
+ "solid/no-destructure"?: TtscLintRuleSetting;
91
+
92
+ /**
93
+ * Reject `innerHTML` JSX attributes because they bypass sanitization and are
94
+ * a common XSS sink. A static string literal is still allowed by default;
95
+ * flip `allowStatic` off to ban that form too.
96
+ *
97
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-innerhtml.md
98
+ */
99
+ "solid/no-innerhtml"?: TtscLintRuleSetting;
100
+
101
+ /**
102
+ * Reject Solid APIs that rely on ES6 `Proxy` (including `new Proxy`,
103
+ * `Proxy.revocable`, imports from `solid-js/store`, and dynamic spread shapes
104
+ * through `mergeProps`). For shipping to runtimes without `Proxy` support;
105
+ * off by default.
106
+ *
107
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-proxy-apis.md
108
+ */
109
+ "solid/no-proxy-apis"?: TtscLintRuleSetting;
110
+
111
+ /**
112
+ * Reject React-style dependency arrays in Solid tracked scopes
113
+ * (`createEffect(() => ..., [deps])`).
114
+ *
115
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-deps.md
116
+ */
117
+ "solid/no-react-deps"?: TtscLintRuleSetting;
118
+
119
+ /**
120
+ * Reject React-specific JSX props such as `className` and `htmlFor` — Solid
121
+ * uses `class` and `for`.
122
+ *
123
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-specific-props.md
124
+ */
125
+ "solid/no-react-specific-props"?: TtscLintRuleSetting;
126
+
127
+ /**
128
+ * Restrict namespaced JSX attributes (`ns:name={...}`) to the built-in Solid
129
+ * namespaces (`on:`, `oncapture:`, `use:`, `prop:`, `attr:`, `bool:`,
130
+ * `style:`, `class:`). Extra names can be allowed through the
131
+ * `allowedNamespaces` option.
132
+ *
133
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-unknown-namespaces.md
134
+ */
135
+ "solid/no-unknown-namespaces"?: TtscLintRuleSetting;
136
+
137
+ /**
138
+ * Rewrite `class={cn({ ... })}` / `clsx(...)` / `classnames(...)` calls to
139
+ * the reactive `classlist={{ ... }}` prop.
140
+ *
141
+ * Deprecated and off by default upstream.
142
+ *
143
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-classlist.md
144
+ */
145
+ "solid/prefer-classlist"?: TtscLintRuleSetting;
146
+
147
+ /**
148
+ * Replace inline `array.map(item => <JSX />)` with Solid's `<For>` component
149
+ * so the iteration stays keyed and reactive instead of re-creating every
150
+ * child on each update.
151
+ *
152
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-for.md
153
+ */
154
+ "solid/prefer-for"?: TtscLintRuleSetting;
155
+
156
+ /**
157
+ * Rewrite `{cond && <JSX />}` short-circuits in JSX to `<Show
158
+ * when={cond}>...</Show>`. Stylistic only — Solid's compiler already handles
159
+ * the boolean form — so it is off by default.
160
+ *
161
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-show.md
162
+ */
163
+ "solid/prefer-show"?: TtscLintRuleSetting;
164
+
165
+ /**
166
+ * Reject common Solid reactivity breakages — reading a signal outside a
167
+ * tracking scope, destructuring a `Store`, etc.
168
+ *
169
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/reactivity.md
170
+ */
171
+ "solid/reactivity"?: TtscLintRuleSetting;
172
+
173
+ /**
174
+ * Collapse JSX elements with no children to the self-closing form
175
+ * (`<Foo></Foo>` to `<Foo />`). Configurable per component vs HTML element,
176
+ * including a `"void"` mode that only enforces it for void tags.
177
+ *
178
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/self-closing-comp.md
179
+ */
180
+ "solid/self-closing-comp"?: TtscLintRuleSetting;
181
+
182
+ /**
183
+ * Require `style={{...}}` keys to be valid kebab-case CSS properties
184
+ * (`"font-size"`, not React's `fontSize`) and dimensioned values to be
185
+ * strings — Solid does not append implicit `px`.
186
+ *
187
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/style-prop.md
188
+ */
189
+ "solid/style-prop"?: TtscLintRuleSetting;
190
+
191
+ /**
192
+ * Reject JSX nestings that the HTML parser would silently restructure at
193
+ * runtime — `<p>` cannot contain block-level children, `<a>` cannot contain
194
+ * another `<a>`, and `<button>` cannot contain other interactive elements.
195
+ *
196
+ * @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/validate-jsx-nesting.md
197
+ */
198
+ "solid/validate-jsx-nesting"?: TtscLintRuleSetting;
199
+ }
@@ -0,0 +1,22 @@
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 addons.
12
+ * When omitted, the rule walks upward from the linted config file.
13
+ */
14
+ packageJsonLocation?: string;
15
+
16
+ /**
17
+ * Addon package names to skip when checking installation status.
18
+ *
19
+ * @default [ ]
20
+ */
21
+ ignore?: readonly string[];
22
+ }
@@ -0,0 +1,184 @@
1
+ import type {
2
+ TtscLintRuleOptionsSetting,
3
+ TtscLintRuleSetting,
4
+ } from "../TtscLintRuleSetting";
5
+ import type { ITtscLintStorybookNoUninstalledAddonsRuleOptions } from "./ITtscLintStorybookRuleOptions";
6
+
7
+ /**
8
+ * Storybook CSF and configuration rules from `eslint-plugin-storybook`.
9
+ *
10
+ * Checks Component Story Format conventions (default export meta, named story
11
+ * exports, play-function shape) and configuration pitfalls in
12
+ * `.storybook/main.ts`.
13
+ *
14
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook
15
+ */
16
+ export interface ITtscLintStorybookRules {
17
+ /**
18
+ * Require `await` on Storybook interaction helpers (`userEvent`, `expect`,
19
+ * `waitFor`, ...) inside a `play` function.
20
+ *
21
+ * The interactions addon intercepts the awaited promises to record steps, so
22
+ * a missing `await` skips that frame in the debugger and races the next
23
+ * assertion.
24
+ *
25
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/await-interactions.md
26
+ */
27
+ "storybook/await-interactions"?: TtscLintRuleSetting;
28
+
29
+ /**
30
+ * Require forwarding the play-function `context` argument when invoking
31
+ * another story's `play` function.
32
+ *
33
+ * Storybook hangs the canvas, step tracker, and interactions addon off
34
+ * `context`; omitting it leaves the nested call without the runtime hooks it
35
+ * needs to drive the canvas.
36
+ *
37
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/context-in-play-function.md
38
+ */
39
+ "storybook/context-in-play-function"?: TtscLintRuleSetting;
40
+
41
+ /**
42
+ * Require the CSF default meta object to declare a `component`.
43
+ *
44
+ * The reference unlocks Storybook's auto-generated controls, prop-table docs,
45
+ * and CSF3 default render — without it those features silently no-op.
46
+ *
47
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/csf-component.md
48
+ */
49
+ "storybook/csf-component"?: TtscLintRuleSetting;
50
+
51
+ /**
52
+ * Require every story file to provide the CSF default export.
53
+ *
54
+ * Storybook keys all per-file configuration (title, decorators, parameters,
55
+ * component) off that default; files without it are skipped at indexing
56
+ * time.
57
+ *
58
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/default-exports.md
59
+ */
60
+ "storybook/default-exports"?: TtscLintRuleSetting;
61
+
62
+ /**
63
+ * Reject the legacy `|` separator in Storybook story titles (`"Foo|Bar"`).
64
+ *
65
+ * Storybook 6 standardized on `/` for hierarchy and treats `|` as a literal
66
+ * character, so the title collapses into a single sidebar entry instead of
67
+ * nested folders.
68
+ *
69
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/hierarchy-separator.md
70
+ */
71
+ "storybook/hierarchy-separator"?: TtscLintRuleSetting;
72
+
73
+ /**
74
+ * Require `title` and `args` in CSF meta to be inline literals, not
75
+ * references to outside variables or function calls.
76
+ *
77
+ * Storybook's indexer and upgrade codemods read these via static analysis and
78
+ * skip stories where the value is not literal.
79
+ *
80
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/meta-inline-properties.md
81
+ */
82
+ "storybook/meta-inline-properties"?: TtscLintRuleSetting;
83
+
84
+ /**
85
+ * Require CSF meta objects to type-check with `satisfies Meta<…>` rather than
86
+ * a `: Meta<…>` annotation or `as` cast.
87
+ *
88
+ * `satisfies` preserves the narrowed literal types so dependent `StoryObj`
89
+ * declarations can infer the component's args precisely.
90
+ *
91
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/meta-satisfies-type.md
92
+ */
93
+ "storybook/meta-satisfies-type"?: TtscLintRuleSetting;
94
+
95
+ /**
96
+ * Reject `name` metadata on a story when it matches Storybook's auto-derived
97
+ * name from the export identifier.
98
+ *
99
+ * The explicit value adds boilerplate and drifts from the export when one
100
+ * side is renamed without the other.
101
+ *
102
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-redundant-story-name.md
103
+ */
104
+ "storybook/no-redundant-story-name"?: TtscLintRuleSetting;
105
+
106
+ /**
107
+ * Reject direct imports from Storybook renderer packages (`@storybook/react`,
108
+ * etc.); use the user-facing package surface.
109
+ *
110
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-renderer-packages.md
111
+ */
112
+ "storybook/no-renderer-packages"?: TtscLintRuleSetting;
113
+
114
+ /**
115
+ * Reject the legacy `storiesOf(...)` builder API.
116
+ *
117
+ * Storybook 7 removed it in favour of CSF default-export metadata; remaining
118
+ * uses block the migration to CSF3 and the modern indexer.
119
+ *
120
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-stories-of.md
121
+ */
122
+ "storybook/no-stories-of"?: TtscLintRuleSetting;
123
+
124
+ /**
125
+ * Reject the `title` property in CSF meta when the project uses Storybook's
126
+ * auto-title generation.
127
+ *
128
+ * CSF3 derives the title from the file path, so an explicit `title` is
129
+ * redundant and drifts from the on-disk layout when files are moved.
130
+ *
131
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-title-property-in-meta.md
132
+ */
133
+ "storybook/no-title-property-in-meta"?: TtscLintRuleSetting;
134
+
135
+ /**
136
+ * Validate Storybook addon names against the project's dependencies, so
137
+ * misspelled addon ids surface at lint time.
138
+ *
139
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-uninstalled-addons.md
140
+ */
141
+ "storybook/no-uninstalled-addons"?: TtscLintRuleOptionsSetting<ITtscLintStorybookNoUninstalledAddonsRuleOptions>;
142
+
143
+ /**
144
+ * Require named story exports to use PascalCase.
145
+ *
146
+ * Storybook derives the displayed story name from the export identifier and
147
+ * inserts spaces at case boundaries, so non-PascalCase exports render with
148
+ * awkward or merged labels in the sidebar.
149
+ *
150
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/prefer-pascal-case.md
151
+ */
152
+ "storybook/prefer-pascal-case"?: TtscLintRuleSetting;
153
+
154
+ /**
155
+ * Require every story file to export at least one named story alongside the
156
+ * default meta.
157
+ *
158
+ * A file with only the default export contributes nothing to the sidebar and
159
+ * usually means a story was deleted but the file was not.
160
+ *
161
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/story-exports.md
162
+ */
163
+ "storybook/story-exports"?: TtscLintRuleSetting;
164
+
165
+ /**
166
+ * Require `expect` to be imported from `@storybook/test` in play functions,
167
+ * not from Jest.
168
+ *
169
+ * The Storybook re-export is built for the browser interactions runner;
170
+ * Jest's `expect` ships only Node-only matchers and throws when the play
171
+ * function executes in a browser preview.
172
+ *
173
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/use-storybook-expect.md
174
+ */
175
+ "storybook/use-storybook-expect"?: TtscLintRuleSetting;
176
+
177
+ /**
178
+ * Reject direct Testing Library imports inside story files; use the
179
+ * Storybook-bundled re-exports.
180
+ *
181
+ * @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/use-storybook-testing-library.md
182
+ */
183
+ "storybook/use-storybook-testing-library"?: TtscLintRuleSetting;
184
+ }
@@ -0,0 +1,96 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * TanStack Query rules from `@tanstack/eslint-plugin-query`.
5
+ *
6
+ * Guards the ergonomic and correctness contracts of TanStack Query (`useQuery`,
7
+ * `useMutation`, query-options factories) inside React TypeScript sources.
8
+ *
9
+ * @reference https://github.com/TanStack/query/tree/main/packages/eslint-plugin-query
10
+ */
11
+ export interface ITtscLintTanstackQueryRules {
12
+ /**
13
+ * Require TanStack Query `queryKey` arrays to include every variable read by
14
+ * the `queryFn` body, mirroring React Hooks dependency tracking.
15
+ *
16
+ * @reference https://tanstack.com/query/latest/docs/eslint/exhaustive-deps
17
+ */
18
+ "tanstack-query/exhaustive-deps"?: TtscLintRuleSetting;
19
+
20
+ /**
21
+ * Require `queryFn`, `getPreviousPageParam`, and `getNextPageParam` inside
22
+ * `useInfiniteQuery` to appear in the order TanStack Query documents.
23
+ *
24
+ * Type inference flows through these callbacks in sequence, so a reordered
25
+ * options object widens the page-param type to `unknown`.
26
+ *
27
+ * @reference https://tanstack.com/query/latest/docs/eslint/infinite-query-property-order
28
+ */
29
+ "tanstack-query/infinite-query-property-order"?: TtscLintRuleSetting;
30
+
31
+ /**
32
+ * Require `useMutation` callbacks to declare `onMutate` before `onError` and
33
+ * `onSettled`.
34
+ *
35
+ * The options object's type inference threads the `onMutate` return value
36
+ * into the later callbacks' `context` parameter, which collapses to `unknown`
37
+ * when the order is wrong.
38
+ *
39
+ * @reference https://tanstack.com/query/latest/docs/eslint/mutation-property-order
40
+ */
41
+ "tanstack-query/mutation-property-order"?: TtscLintRuleSetting;
42
+
43
+ /**
44
+ * Reject `...rest` destructuring on TanStack Query hook results.
45
+ *
46
+ * The result object is a tracked proxy that only re-renders for the fields
47
+ * you read; rest-destructuring touches every field, subscribes the component
48
+ * to all of them, and disables that optimization.
49
+ *
50
+ * @reference https://tanstack.com/query/latest/docs/eslint/no-rest-destructuring
51
+ */
52
+ "tanstack-query/no-rest-destructuring"?: TtscLintRuleSetting;
53
+
54
+ /**
55
+ * Reject passing entire TanStack Query hook results into React dependency
56
+ * arrays.
57
+ *
58
+ * The returned object is a fresh reference on every render, so `useEffect` /
59
+ * `useMemo` / `useCallback` would re-run unconditionally; depend on the
60
+ * specific fields you read instead.
61
+ *
62
+ * @reference https://tanstack.com/query/latest/docs/eslint/no-unstable-deps
63
+ */
64
+ "tanstack-query/no-unstable-deps"?: TtscLintRuleSetting;
65
+
66
+ /**
67
+ * Reject `queryFn` callbacks that resolve to `void`.
68
+ *
69
+ * The return value is what TanStack Query caches and exposes as `data`; a
70
+ * void implementation always populates the cache with `undefined` and almost
71
+ * always indicates a forgotten `return`.
72
+ *
73
+ * @reference https://tanstack.com/query/latest/docs/eslint/no-void-query-fn
74
+ */
75
+ "tanstack-query/no-void-query-fn"?: TtscLintRuleSetting;
76
+
77
+ /**
78
+ * Prefer wrapping query options in the `queryOptions()` helper over inline `{
79
+ * queryKey, queryFn }` literals.
80
+ *
81
+ * The helper co-locates key and fetcher, lets `queryClient.getQueryData` and
82
+ * `setQueryData` share the same typed key, and prevents the same key being
83
+ * paired with two different `queryFn`s.
84
+ *
85
+ * @reference https://tanstack.com/query/latest/docs/eslint/prefer-query-options
86
+ */
87
+ "tanstack-query/prefer-query-options"?: TtscLintRuleSetting;
88
+
89
+ /**
90
+ * Reject creating a `QueryClient` inside a React component or hook body — the
91
+ * client must be stable across renders.
92
+ *
93
+ * @reference https://tanstack.com/query/latest/docs/eslint/stable-query-client
94
+ */
95
+ "tanstack-query/stable-query-client"?: TtscLintRuleSetting;
96
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Options shape for the configurable rules in
3
+ * {@link ITtscLintTestingLibraryRules}. Only
4
+ * `testing-library/consistent-data-testid` accepts options today.
5
+ *
6
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library
7
+ */
8
+
9
+ /** `testing-library/consistent-data-testid` rule options. */
10
+ export interface ITtscLintTestingLibraryConsistentDataTestIdRuleOptions {
11
+ /**
12
+ * Regular expression string every configured test-id attribute value must
13
+ * match. `{fileName}` is replaced with the basename before the first dot.
14
+ */
15
+ testIdPattern: string;
16
+
17
+ /**
18
+ * Test-id attribute name, or names, to validate.
19
+ *
20
+ * @default "data-testid"
21
+ */
22
+ testIdAttribute?: string | readonly string[];
23
+ }