@ttsc/lint 0.13.1 → 0.14.0-dev.20260528

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,102 @@
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
7
+ * (`useQuery`, `useMutation`, query-options factories) inside React
8
+ * TypeScript sources.
9
+ *
10
+ * @reference https://github.com/TanStack/query/tree/main/packages/eslint-plugin-query
11
+ */
12
+ export interface ITtscLintTanstackQueryRules {
13
+ /**
14
+ * Require TanStack Query `queryKey` arrays to include every
15
+ * variable read by the `queryFn` body, mirroring React Hooks
16
+ * dependency tracking.
17
+ *
18
+ * @reference https://tanstack.com/query/latest/docs/eslint/exhaustive-deps
19
+ */
20
+ "tanstack-query/exhaustive-deps"?: TtscLintRuleSetting;
21
+
22
+ /**
23
+ * Require `queryFn`, `getPreviousPageParam`, and `getNextPageParam`
24
+ * inside `useInfiniteQuery` to appear in the order TanStack Query
25
+ * documents.
26
+ *
27
+ * Type inference flows through these callbacks in sequence, so a
28
+ * reordered options object widens the page-param type to
29
+ * `unknown`.
30
+ *
31
+ * @reference https://tanstack.com/query/latest/docs/eslint/infinite-query-property-order
32
+ */
33
+ "tanstack-query/infinite-query-property-order"?: TtscLintRuleSetting;
34
+
35
+ /**
36
+ * Require `useMutation` callbacks to declare `onMutate` before
37
+ * `onError` and `onSettled`.
38
+ *
39
+ * The options object's type inference threads the `onMutate`
40
+ * return value into the later callbacks' `context` parameter,
41
+ * which collapses to `unknown` when the order is wrong.
42
+ *
43
+ * @reference https://tanstack.com/query/latest/docs/eslint/mutation-property-order
44
+ */
45
+ "tanstack-query/mutation-property-order"?: TtscLintRuleSetting;
46
+
47
+ /**
48
+ * Reject `...rest` destructuring on TanStack Query hook results.
49
+ *
50
+ * The result object is a tracked proxy that only re-renders for
51
+ * the fields you read; rest-destructuring touches every field,
52
+ * subscribes the component to all of them, and disables that
53
+ * optimization.
54
+ *
55
+ * @reference https://tanstack.com/query/latest/docs/eslint/no-rest-destructuring
56
+ */
57
+ "tanstack-query/no-rest-destructuring"?: TtscLintRuleSetting;
58
+
59
+ /**
60
+ * Reject passing entire TanStack Query hook results into React
61
+ * dependency arrays.
62
+ *
63
+ * The returned object is a fresh reference on every render, so
64
+ * `useEffect` / `useMemo` / `useCallback` would re-run
65
+ * unconditionally; depend on the specific fields you read instead.
66
+ *
67
+ * @reference https://tanstack.com/query/latest/docs/eslint/no-unstable-deps
68
+ */
69
+ "tanstack-query/no-unstable-deps"?: TtscLintRuleSetting;
70
+
71
+ /**
72
+ * Reject `queryFn` callbacks that resolve to `void`.
73
+ *
74
+ * The return value is what TanStack Query caches and exposes as
75
+ * `data`; a void implementation always populates the cache with
76
+ * `undefined` and almost always indicates a forgotten `return`.
77
+ *
78
+ * @reference https://tanstack.com/query/latest/docs/eslint/no-void-query-fn
79
+ */
80
+ "tanstack-query/no-void-query-fn"?: TtscLintRuleSetting;
81
+
82
+ /**
83
+ * Prefer wrapping query options in the `queryOptions()` helper
84
+ * over inline `{ queryKey, queryFn }` literals.
85
+ *
86
+ * The helper co-locates key and fetcher, lets
87
+ * `queryClient.getQueryData` and `setQueryData` share the same
88
+ * typed key, and prevents the same key being paired with two
89
+ * different `queryFn`s.
90
+ *
91
+ * @reference https://tanstack.com/query/latest/docs/eslint/prefer-query-options
92
+ */
93
+ "tanstack-query/prefer-query-options"?: TtscLintRuleSetting;
94
+
95
+ /**
96
+ * Reject creating a `QueryClient` inside a React component or
97
+ * hook body — the client must be stable across renders.
98
+ *
99
+ * @reference https://tanstack.com/query/latest/docs/eslint/stable-query-client
100
+ */
101
+ "tanstack-query/stable-query-client"?: TtscLintRuleSetting;
102
+ }
@@ -0,0 +1,24 @@
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
13
+ * must match. `{fileName}` is replaced with the basename before the
14
+ * first dot.
15
+ */
16
+ testIdPattern: string;
17
+
18
+ /**
19
+ * Test-id attribute name, or names, to validate.
20
+ *
21
+ * @default "data-testid"
22
+ */
23
+ testIdAttribute?: string | readonly string[];
24
+ }
@@ -0,0 +1,342 @@
1
+ import type { ITtscLintTestingLibraryConsistentDataTestIdRuleOptions } from "./ITtscLintTestingLibraryRuleOptions";
2
+ import type {
3
+ TtscLintRuleOptionsSetting,
4
+ TtscLintRuleSetting,
5
+ } from "../TtscLintRuleSetting";
6
+
7
+ /**
8
+ * Testing Library test source rules from
9
+ * `eslint-plugin-testing-library`.
10
+ *
11
+ * Apply to TypeScript test sources that use any `@testing-library/*`
12
+ * package and detect Testing Library anti-patterns — `container`
13
+ * access, `ByTestId` overuse, missing `await` on async queries.
14
+ *
15
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library
16
+ */
17
+ export interface ITtscLintTestingLibraryRules {
18
+ /**
19
+ * Require awaiting async user-event methods (`userEvent.click`,
20
+ * `userEvent.type`, ...) under the v14+ Promise-returning API.
21
+ *
22
+ * Without `await` the next assertion runs against the
23
+ * pre-interaction DOM, which masks effects the user action was
24
+ * meant to trigger.
25
+ *
26
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/await-async-events.md
27
+ */
28
+ "testing-library/await-async-events"?: TtscLintRuleSetting;
29
+
30
+ /**
31
+ * Require awaiting `findBy*` and `findAllBy*` queries.
32
+ *
33
+ * They return a Promise that resolves once the element appears; an
34
+ * unawaited query yields a pending Promise that no matcher can
35
+ * assert against meaningfully.
36
+ *
37
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/await-async-queries.md
38
+ */
39
+ "testing-library/await-async-queries"?: TtscLintRuleSetting;
40
+
41
+ /**
42
+ * Require awaiting `waitFor`, `waitForElementToBeRemoved`, and
43
+ * the other async Testing Library utilities.
44
+ *
45
+ * Skipping the `await` means the test moves on before the
46
+ * predicate settles, so subsequent assertions race against the
47
+ * wait.
48
+ *
49
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/await-async-utils.md
50
+ */
51
+ "testing-library/await-async-utils"?: TtscLintRuleSetting;
52
+
53
+ /**
54
+ * Validate JSX `data-testid` attribute values against a regex
55
+ * pattern.
56
+ *
57
+ * The options object names the attribute and the pattern, keeping
58
+ * test ids consistently formed across components.
59
+ *
60
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/consistent-data-testid.md
61
+ */
62
+ "testing-library/consistent-data-testid"?: TtscLintRuleOptionsSetting<ITtscLintTestingLibraryConsistentDataTestIdRuleOptions>;
63
+
64
+ /**
65
+ * Reject unnecessary `await` before synchronous event helpers
66
+ * (`fireEvent.click(...)`).
67
+ *
68
+ * The helpers return `boolean` rather than a Promise, so the
69
+ * `await` is a no-op that misleads readers into thinking the
70
+ * helper is async.
71
+ *
72
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-await-sync-events.md
73
+ */
74
+ "testing-library/no-await-sync-events"?: TtscLintRuleSetting;
75
+
76
+ /**
77
+ * Reject unnecessary `await` before synchronous queries
78
+ * (`getBy*`, `queryBy*`).
79
+ *
80
+ * These queries return DOM nodes directly, so the `await` misleads
81
+ * readers and can shadow a genuine missing `await` on an adjacent
82
+ * `findBy*`.
83
+ *
84
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-await-sync-queries.md
85
+ */
86
+ "testing-library/no-await-sync-queries"?: TtscLintRuleSetting;
87
+
88
+ /**
89
+ * Reject `container` destructuring and DOM query methods on the
90
+ * render result.
91
+ *
92
+ * `screen` queries the same document but matches how the user sees
93
+ * the page, keeping tests accessibility-first and resilient to
94
+ * layout refactors that move nodes inside the tree.
95
+ *
96
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-container.md
97
+ */
98
+ "testing-library/no-container"?: TtscLintRuleSetting;
99
+
100
+ /**
101
+ * Reject `debug`, `prettyDOM`, `logTestingPlaygroundURL`, and
102
+ * related debugging utilities in committed tests.
103
+ *
104
+ * They print large DOM dumps to CI logs and only exist to help
105
+ * during local authoring.
106
+ *
107
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-debugging-utils.md
108
+ */
109
+ "testing-library/no-debugging-utils"?: TtscLintRuleSetting;
110
+
111
+ /**
112
+ * Reject direct `@testing-library/dom` imports when a
113
+ * framework-specific package is installed.
114
+ *
115
+ * Framework packages (`@testing-library/react`, ...) re-export the
116
+ * same surface plus a `render` that wires the framework's
117
+ * lifecycle — importing `dom` directly skips that wiring.
118
+ *
119
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-dom-import.md
120
+ */
121
+ "testing-library/no-dom-import"?: TtscLintRuleSetting;
122
+
123
+ /**
124
+ * Reject global RegExp flags (`/foo/g`) inside query text
125
+ * matchers.
126
+ *
127
+ * The matcher reuses the regex across nodes, so a global regex's
128
+ * persistent `lastIndex` state causes the second call to skip
129
+ * matches the first one found.
130
+ *
131
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-global-regexp-flag-in-query.md
132
+ */
133
+ "testing-library/no-global-regexp-flag-in-query"?: TtscLintRuleSetting;
134
+
135
+ /**
136
+ * Reject manual `cleanup()` calls.
137
+ *
138
+ * Framework wrappers (`@testing-library/react`, ...) register
139
+ * automatic cleanup, so explicit calls duplicate the unmount and
140
+ * can race against the runner's between-test reset.
141
+ *
142
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-manual-cleanup.md
143
+ */
144
+ "testing-library/no-manual-cleanup"?: TtscLintRuleSetting;
145
+
146
+ /**
147
+ * Reject direct DOM node traversal from query results
148
+ * (`.parentElement`, `.firstChild`, `.children`, ...).
149
+ *
150
+ * Traversal couples the test to incidental markup; another
151
+ * semantic query names what the assertion actually cares about.
152
+ *
153
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-node-access.md
154
+ */
155
+ "testing-library/no-node-access"?: TtscLintRuleSetting;
156
+
157
+ /**
158
+ * Reject Promise-producing expressions passed to `fireEvent`,
159
+ * since `fireEvent` is synchronous and the Promise is dropped.
160
+ *
161
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-promise-in-fire-event.md
162
+ */
163
+ "testing-library/no-promise-in-fire-event"?: TtscLintRuleSetting;
164
+
165
+ /**
166
+ * Reject `render(...)` inside lifecycle hooks (`beforeEach`,
167
+ * etc.).
168
+ *
169
+ * Each test should render its component directly so the arrange
170
+ * step is visible in-place and auto-cleanup runs between cases
171
+ * without sharing state.
172
+ *
173
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-render-in-lifecycle.md
174
+ */
175
+ "testing-library/no-render-in-lifecycle"?: TtscLintRuleSetting;
176
+
177
+ /**
178
+ * Reject `*ByTestId` queries.
179
+ *
180
+ * Test ids couple the test to incidental markup and skip the
181
+ * accessibility tree that real users navigate; queries by role,
182
+ * label, or text describe the UI in user-visible terms instead.
183
+ *
184
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-test-id-queries.md
185
+ */
186
+ "testing-library/no-test-id-queries"?: TtscLintRuleSetting;
187
+
188
+ /**
189
+ * Reject unnecessary `act(...)` wrappers around Testing Library
190
+ * helpers.
191
+ *
192
+ * `render`, `fireEvent`, and `userEvent` already wrap their work
193
+ * in `act`, so the extra wrapper is dead code that obscures the
194
+ * real state change.
195
+ *
196
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-unnecessary-act.md
197
+ */
198
+ "testing-library/no-unnecessary-act"?: TtscLintRuleSetting;
199
+
200
+ /**
201
+ * Reject multiple assertions inside one `waitFor` callback —
202
+ * split into separate `waitFor`s so each retry boundary is
203
+ * narrow.
204
+ *
205
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-wait-for-multiple-assertions.md
206
+ */
207
+ "testing-library/no-wait-for-multiple-assertions"?: TtscLintRuleSetting;
208
+
209
+ /**
210
+ * Reject side effects inside `waitFor` callbacks — `waitFor`
211
+ * retries the callback, so side effects fire repeatedly.
212
+ *
213
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-wait-for-side-effects.md
214
+ */
215
+ "testing-library/no-wait-for-side-effects"?: TtscLintRuleSetting;
216
+
217
+ /**
218
+ * Reject snapshot assertions inside `waitFor`.
219
+ *
220
+ * `waitFor` retries until the callback stops throwing, so the
221
+ * captured snapshot is whichever pass happened to match — usually
222
+ * an intermediate render rather than the settled UI the test
223
+ * cares about.
224
+ *
225
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-wait-for-snapshot.md
226
+ */
227
+ "testing-library/no-wait-for-snapshot"?: TtscLintRuleSetting;
228
+
229
+ /**
230
+ * Require explicit assertions on the result of standalone
231
+ * queries.
232
+ *
233
+ * A bare `screen.getByRole(...)` looks like an assertion but only
234
+ * checks presence (and only for `getBy*`); adding `expect(...)`
235
+ * makes the intent and the matched property obvious.
236
+ *
237
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-explicit-assert.md
238
+ */
239
+ "testing-library/prefer-explicit-assert"?: TtscLintRuleSetting;
240
+
241
+ /**
242
+ * Prefer `findBy*` over `waitFor` wrapping a `getBy*`.
243
+ *
244
+ * `findBy*` is the dedicated retry-aware query; the manual
245
+ * combination duplicates its semantics and is easy to misconfigure
246
+ * (wrong timeout, missing `await`).
247
+ *
248
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-find-by.md
249
+ */
250
+ "testing-library/prefer-find-by"?: TtscLintRuleSetting;
251
+
252
+ /**
253
+ * Avoid redundant `toBeInTheDocument()` around `getBy*` queries.
254
+ *
255
+ * `getBy*` already throws when nothing is found, so the extra
256
+ * matcher only restates what the query promises and adds noise to
257
+ * the failure trace.
258
+ *
259
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-implicit-assert.md
260
+ */
261
+ "testing-library/prefer-implicit-assert"?: TtscLintRuleSetting;
262
+
263
+ /**
264
+ * Match presence and absence assertions to the query variant
265
+ * that already encodes the same semantic: `getBy*` for presence
266
+ * (throws when missing), `queryBy*` for absence (returns `null`
267
+ * when missing). Mixing the two yields confusing failure modes.
268
+ *
269
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-presence-queries.md
270
+ */
271
+ "testing-library/prefer-presence-queries"?: TtscLintRuleSetting;
272
+
273
+ /**
274
+ * Prefer `queryBy*` inside `waitForElementToBeRemoved`.
275
+ *
276
+ * The helper retries the callback against the disappearing
277
+ * element, but `getBy*` throws on the very state being waited for,
278
+ * which produces a noisy error in the trace each retry.
279
+ *
280
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-query-by-disappearance.md
281
+ */
282
+ "testing-library/prefer-query-by-disappearance"?: TtscLintRuleSetting;
283
+
284
+ /**
285
+ * Prefer jest-dom document matchers (`toBeVisible`,
286
+ * `toHaveTextContent`, ...) over generic equality checks on
287
+ * Testing Library queries.
288
+ *
289
+ * The dedicated matchers explain failures in terms of the DOM
290
+ * property they assert on, not a structural diff of nodes.
291
+ *
292
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-query-matchers.md
293
+ */
294
+ "testing-library/prefer-query-matchers"?: TtscLintRuleSetting;
295
+
296
+ /**
297
+ * Prefer `screen.*` over queries on the render-result object.
298
+ *
299
+ * `screen` is the single global query target, so tests stay
300
+ * consistent regardless of which component is mounted and the
301
+ * render call's return value rarely needs destructuring.
302
+ *
303
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-screen-queries.md
304
+ */
305
+ "testing-library/prefer-screen-queries"?: TtscLintRuleSetting;
306
+
307
+ /**
308
+ * Prefer `userEvent` over `fireEvent`.
309
+ *
310
+ * `userEvent` simulates the full sequence of DOM events a real
311
+ * user triggers (focus, keydown, input, change, ...) while
312
+ * `fireEvent` dispatches a single event and skips intermediate
313
+ * state.
314
+ *
315
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-user-event.md
316
+ */
317
+ "testing-library/prefer-user-event"?: TtscLintRuleSetting;
318
+
319
+ /**
320
+ * Prefer `userEvent.setup()` (the v14+ instance pattern) over
321
+ * the static `userEvent.*` calls.
322
+ *
323
+ * The instance binds fresh pointer state per test, removing the
324
+ * cross-test focus and click bookkeeping that the static API
325
+ * leaks.
326
+ *
327
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-user-event-setup.md
328
+ */
329
+ "testing-library/prefer-user-event-setup"?: TtscLintRuleSetting;
330
+
331
+ /**
332
+ * Require the variable assigned from `render(...)` to use one of
333
+ * the conventional names (`view`, `result`, ...).
334
+ *
335
+ * The name is a reading cue: a non-conventional one usually
336
+ * signals that the destructured queries are being treated as a
337
+ * component surface instead of a render artifact.
338
+ *
339
+ * @reference https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/render-result-naming-convention.md
340
+ */
341
+ "testing-library/render-result-naming-convention"?: TtscLintRuleSetting;
342
+ }