@ttsc/lint 0.13.1 → 0.14.0-dev.20260528.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/README.md +948 -69
  2. package/lib/defaultFormat.d.ts +9 -6
  3. package/lib/defaultFormat.js +9 -6
  4. package/lib/defaultFormat.js.map +1 -1
  5. package/lib/index.d.ts +46 -0
  6. package/lib/index.js +35 -10
  7. package/lib/index.js.map +1 -1
  8. package/lib/structures/ITtscLintConfig.d.ts +12 -6
  9. package/lib/structures/{ITtscLintFormatConfig.d.ts → ITtscLintFormat.d.ts} +2 -2
  10. package/lib/structures/{TtscLintRuleMap.js → ITtscLintFormat.js} +1 -1
  11. package/lib/structures/ITtscLintFormat.js.map +1 -0
  12. package/lib/structures/TtscLintRuleSetting.d.ts +49 -0
  13. package/lib/structures/{TtscLintRuleOptions.js → TtscLintRuleSetting.js} +1 -1
  14. package/lib/structures/TtscLintRuleSetting.js.map +1 -0
  15. package/lib/structures/index.d.ts +3 -4
  16. package/lib/structures/index.js +3 -4
  17. package/lib/structures/index.js.map +1 -1
  18. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +104 -0
  19. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +14 -0
  20. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -0
  21. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +79 -0
  22. package/lib/structures/rules/ITtscLintBoundariesRules.js +3 -0
  23. package/lib/structures/rules/ITtscLintBoundariesRules.js.map +1 -0
  24. package/lib/structures/rules/ITtscLintContributorRules.d.ts +17 -0
  25. package/lib/structures/rules/ITtscLintContributorRules.js +3 -0
  26. package/lib/structures/rules/ITtscLintContributorRules.js.map +1 -0
  27. package/lib/structures/rules/ITtscLintCoreRules.d.ts +1257 -0
  28. package/lib/structures/{ITtscLintFormatConfig.js → rules/ITtscLintCoreRules.js} +1 -1
  29. package/lib/structures/rules/ITtscLintCoreRules.js.map +1 -0
  30. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +17 -0
  31. package/lib/structures/rules/ITtscLintCypressRuleOptions.js +10 -0
  32. package/lib/structures/rules/ITtscLintCypressRuleOptions.js.map +1 -0
  33. package/lib/structures/rules/ITtscLintCypressRules.d.ts +129 -0
  34. package/lib/structures/rules/ITtscLintCypressRules.js +3 -0
  35. package/lib/structures/rules/ITtscLintCypressRules.js.map +1 -0
  36. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +157 -0
  37. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +13 -0
  38. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js.map +1 -0
  39. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +167 -0
  40. package/lib/structures/rules/ITtscLintFunctionalRules.js +3 -0
  41. package/lib/structures/rules/ITtscLintFunctionalRules.js.map +1 -0
  42. package/lib/structures/rules/ITtscLintJestRules.d.ts +201 -0
  43. package/lib/structures/rules/ITtscLintJestRules.js +3 -0
  44. package/lib/structures/rules/ITtscLintJestRules.js.map +1 -0
  45. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +140 -0
  46. package/lib/structures/rules/ITtscLintJsdocRules.js +3 -0
  47. package/lib/structures/rules/ITtscLintJsdocRules.js.map +1 -0
  48. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +302 -0
  49. package/lib/structures/rules/ITtscLintJsxA11yRules.js +3 -0
  50. package/lib/structures/rules/ITtscLintJsxA11yRules.js.map +1 -0
  51. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +185 -0
  52. package/lib/structures/rules/ITtscLintNextjsRules.js +3 -0
  53. package/lib/structures/rules/ITtscLintNextjsRules.js.map +1 -0
  54. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +330 -0
  55. package/lib/structures/rules/ITtscLintPlaywrightRules.js +3 -0
  56. package/lib/structures/rules/ITtscLintPlaywrightRules.js.map +1 -0
  57. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +188 -0
  58. package/lib/structures/rules/ITtscLintPromiseRules.js +3 -0
  59. package/lib/structures/rules/ITtscLintPromiseRules.js.map +1 -0
  60. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +18 -0
  61. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js +8 -0
  62. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js.map +1 -0
  63. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +51 -0
  64. package/lib/structures/rules/ITtscLintReactPerfRules.js +3 -0
  65. package/lib/structures/rules/ITtscLintReactPerfRules.js.map +1 -0
  66. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +39 -0
  67. package/lib/structures/rules/ITtscLintReactRuleOptions.js +12 -0
  68. package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -0
  69. package/lib/structures/rules/ITtscLintReactRules.d.ts +289 -0
  70. package/lib/structures/rules/ITtscLintReactRules.js +3 -0
  71. package/lib/structures/rules/ITtscLintReactRules.js.map +1 -0
  72. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +190 -0
  73. package/lib/structures/rules/ITtscLintRegexpRules.js +3 -0
  74. package/lib/structures/rules/ITtscLintRegexpRules.js.map +1 -0
  75. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +66 -0
  76. package/lib/structures/rules/ITtscLintRuleOptionsMap.js +3 -0
  77. package/lib/structures/rules/ITtscLintRuleOptionsMap.js.map +1 -0
  78. package/lib/structures/rules/ITtscLintRules.d.ts +55 -0
  79. package/lib/structures/{TtscLintRule.js → rules/ITtscLintRules.js} +1 -1
  80. package/lib/structures/rules/ITtscLintRules.js.map +1 -0
  81. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +148 -0
  82. package/lib/structures/rules/ITtscLintSecurityRules.js +3 -0
  83. package/lib/structures/rules/ITtscLintSecurityRules.js.map +1 -0
  84. package/lib/structures/rules/ITtscLintSolidRules.d.ts +181 -0
  85. package/lib/structures/rules/ITtscLintSolidRules.js +3 -0
  86. package/lib/structures/rules/ITtscLintSolidRules.js.map +1 -0
  87. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +21 -0
  88. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js +9 -0
  89. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js.map +1 -0
  90. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +174 -0
  91. package/lib/structures/rules/ITtscLintStorybookRules.js +3 -0
  92. package/lib/structures/rules/ITtscLintStorybookRules.js.map +1 -0
  93. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +94 -0
  94. package/lib/structures/rules/ITtscLintTanstackQueryRules.js +3 -0
  95. package/lib/structures/rules/ITtscLintTanstackQueryRules.js.map +1 -0
  96. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +22 -0
  97. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js +10 -0
  98. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js.map +1 -0
  99. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +310 -0
  100. package/lib/structures/rules/ITtscLintTestingLibraryRules.js +3 -0
  101. package/lib/structures/rules/ITtscLintTestingLibraryRules.js.map +1 -0
  102. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +1132 -0
  103. package/lib/structures/rules/ITtscLintTypeScriptRules.js +3 -0
  104. package/lib/structures/rules/ITtscLintTypeScriptRules.js.map +1 -0
  105. package/lib/structures/rules/ITtscLintUnicornRules.d.ts +997 -0
  106. package/lib/structures/rules/ITtscLintUnicornRules.js +3 -0
  107. package/lib/structures/rules/ITtscLintUnicornRules.js.map +1 -0
  108. package/lib/structures/rules/ITtscLintVitestRules.d.ts +141 -0
  109. package/lib/structures/rules/ITtscLintVitestRules.js +3 -0
  110. package/lib/structures/rules/ITtscLintVitestRules.js.map +1 -0
  111. package/lib/structures/rules/index.d.ts +31 -0
  112. package/lib/structures/rules/index.js +48 -0
  113. package/lib/structures/rules/index.js.map +1 -0
  114. package/linthost/ast_helpers.go +30 -5
  115. package/linthost/config.go +48 -17
  116. package/linthost/config_format.go +9 -9
  117. package/linthost/directives.go +67 -25
  118. package/linthost/dispatch.go +14 -3
  119. package/linthost/engine.go +152 -31
  120. package/linthost/fix.go +2 -2
  121. package/linthost/lsp.go +747 -0
  122. package/linthost/print_dispatch.go +2 -2
  123. package/linthost/print_nodes_function.go +2 -2
  124. package/linthost/print_nodes_object.go +1 -1
  125. package/linthost/rule_names.go +14 -0
  126. package/linthost/rules_arrays.go +2 -2
  127. package/linthost/rules_boundaries.go +532 -0
  128. package/linthost/rules_camelcase.go +133 -0
  129. package/linthost/rules_complexity.go +94 -0
  130. package/linthost/rules_consistent_return.go +130 -0
  131. package/linthost/rules_console.go +1 -1
  132. package/linthost/rules_core_extra.go +739 -0
  133. package/linthost/rules_curly.go +70 -0
  134. package/linthost/rules_cypress.go +608 -0
  135. package/linthost/rules_debugger.go +2 -2
  136. package/linthost/rules_default_case.go +39 -0
  137. package/linthost/rules_default_case_last.go +46 -0
  138. package/linthost/rules_dupes.go +3 -3
  139. package/linthost/rules_empty.go +3 -3
  140. package/linthost/rules_escape.go +44 -24
  141. package/linthost/rules_eval.go +2 -2
  142. package/linthost/rules_finally.go +2 -2
  143. package/linthost/rules_format_jsdoc.go +1 -1
  144. package/linthost/rules_format_print_width.go +9 -9
  145. package/linthost/rules_format_quotes.go +1 -1
  146. package/linthost/rules_format_semi.go +1 -1
  147. package/linthost/rules_format_sort_imports.go +1 -1
  148. package/linthost/rules_format_trailing_comma.go +1 -1
  149. package/linthost/rules_functional.go +967 -0
  150. package/linthost/rules_gap.go +24 -45
  151. package/linthost/rules_grouped_accessor_pairs.go +87 -0
  152. package/linthost/rules_guard_for_in.go +198 -0
  153. package/linthost/rules_id_length.go +77 -0
  154. package/linthost/rules_imports.go +70 -2
  155. package/linthost/rules_init_declarations.go +53 -0
  156. package/linthost/rules_jest.go +618 -0
  157. package/linthost/rules_jsdoc.go +502 -0
  158. package/linthost/rules_jsx_a11y.go +1264 -0
  159. package/linthost/rules_logic.go +12 -12
  160. package/linthost/rules_loops.go +1 -1
  161. package/linthost/rules_max_classes_per_file.go +58 -0
  162. package/linthost/rules_max_depth.go +83 -0
  163. package/linthost/rules_max_lines.go +101 -0
  164. package/linthost/rules_max_lines_per_function.go +57 -0
  165. package/linthost/rules_max_nested_callbacks.go +61 -0
  166. package/linthost/rules_max_params.go +49 -0
  167. package/linthost/rules_max_statements.go +59 -0
  168. package/linthost/rules_misc.go +1 -1
  169. package/linthost/rules_nextjs.go +697 -0
  170. package/linthost/rules_no_else_return.go +75 -0
  171. package/linthost/rules_no_empty_named_blocks.go +91 -0
  172. package/linthost/rules_no_extend_native.go +51 -0
  173. package/linthost/rules_no_import_assign.go +140 -0
  174. package/linthost/rules_no_invalid_this.go +52 -0
  175. package/linthost/rules_no_loop_func.go +85 -0
  176. package/linthost/rules_no_magic_numbers.go +123 -0
  177. package/linthost/rules_no_mixed_operators.go +80 -0
  178. package/linthost/rules_no_param_reassign.go +98 -0
  179. package/linthost/rules_no_redeclare.go +270 -0
  180. package/linthost/rules_no_restricted_imports.go +105 -0
  181. package/linthost/rules_no_restricted_syntax.go +49 -0
  182. package/linthost/rules_no_shadow.go +147 -0
  183. package/linthost/rules_no_unreachable.go +77 -0
  184. package/linthost/rules_no_useless_assignment.go +120 -0
  185. package/linthost/rules_no_useless_constructor.go +245 -0
  186. package/linthost/rules_no_useless_return.go +51 -0
  187. package/linthost/rules_params.go +1 -1
  188. package/linthost/rules_playwright.go +788 -0
  189. package/linthost/rules_prefer_arrow_callback.go +124 -0
  190. package/linthost/rules_prefer_destructuring.go +98 -0
  191. package/linthost/rules_prefer_named_capture_group.go +129 -0
  192. package/linthost/rules_prefer_rest_params.go +94 -0
  193. package/linthost/rules_problems.go +41 -30
  194. package/linthost/rules_promise.go +1128 -73
  195. package/linthost/rules_protos.go +2 -2
  196. package/linthost/rules_react.go +773 -0
  197. package/linthost/rules_react_extras.go +227 -0
  198. package/linthost/rules_react_hooks.go +848 -0
  199. package/linthost/rules_react_perf.go +293 -0
  200. package/linthost/rules_react_refresh.go +583 -0
  201. package/linthost/rules_regexp.go +410 -0
  202. package/linthost/rules_security.go +830 -0
  203. package/linthost/rules_self.go +2 -2
  204. package/linthost/rules_solid.go +1073 -0
  205. package/linthost/rules_sort_imports.go +69 -0
  206. package/linthost/rules_sort_keys.go +134 -0
  207. package/linthost/rules_storybook.go +1176 -0
  208. package/linthost/rules_strings.go +4 -4
  209. package/linthost/rules_suggestions.go +38 -38
  210. package/linthost/rules_tanstack_query.go +844 -0
  211. package/linthost/rules_testing_library.go +1204 -0
  212. package/linthost/rules_throw.go +1 -1
  213. package/linthost/rules_ts.go +19 -19
  214. package/linthost/rules_ts_async.go +399 -0
  215. package/linthost/rules_ts_class_literal_property_style.go +115 -0
  216. package/linthost/rules_ts_consistent_type_exports.go +256 -0
  217. package/linthost/rules_ts_explicit_function_return_type.go +67 -0
  218. package/linthost/rules_ts_extra.go +155 -36
  219. package/linthost/rules_ts_no_base_to_string.go +218 -0
  220. package/linthost/rules_ts_no_confusing_void.go +72 -0
  221. package/linthost/rules_ts_no_deprecated.go +195 -0
  222. package/linthost/rules_ts_no_for_in_array.go +84 -0
  223. package/linthost/rules_ts_no_magic_numbers.go +124 -0
  224. package/linthost/rules_ts_no_meaningless_void_operator.go +84 -0
  225. package/linthost/rules_ts_no_misused_spread.go +104 -0
  226. package/linthost/rules_ts_no_redundant_type_constituents.go +113 -0
  227. package/linthost/rules_ts_no_restricted_types.go +62 -0
  228. package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +129 -0
  229. package/linthost/rules_ts_no_unnecessary_condition.go +250 -0
  230. package/linthost/rules_ts_no_unnecessary_qualifier.go +118 -0
  231. package/linthost/rules_ts_no_unnecessary_template_expression.go +178 -0
  232. package/linthost/rules_ts_no_unnecessary_type_arguments.go +234 -0
  233. package/linthost/rules_ts_no_unnecessary_type_assertion.go +157 -0
  234. package/linthost/rules_ts_no_unsafe_argument.go +82 -0
  235. package/linthost/rules_ts_no_unsafe_assignment.go +102 -0
  236. package/linthost/rules_ts_no_unsafe_call.go +82 -0
  237. package/linthost/rules_ts_no_unsafe_enum_comparison.go +235 -0
  238. package/linthost/rules_ts_no_unsafe_member_access.go +58 -0
  239. package/linthost/rules_ts_no_unsafe_return.go +126 -0
  240. package/linthost/rules_ts_no_unsafe_unary_minus.go +81 -0
  241. package/linthost/rules_ts_no_useless_constructor.go +52 -0
  242. package/linthost/rules_ts_non_nullable_type_assertion_style.go +108 -0
  243. package/linthost/rules_ts_parameter_properties.go +38 -0
  244. package/linthost/rules_ts_prefer_find.go +178 -0
  245. package/linthost/rules_ts_prefer_includes.go +255 -0
  246. package/linthost/rules_ts_prefer_nullish_coalescing.go +104 -0
  247. package/linthost/rules_ts_prefer_optional_chain.go +228 -0
  248. package/linthost/rules_ts_prefer_promise_reject_errors.go +176 -0
  249. package/linthost/rules_ts_prefer_readonly.go +73 -0
  250. package/linthost/rules_ts_prefer_reduce_type_parameter.go +116 -0
  251. package/linthost/rules_ts_prefer_regexp_exec.go +122 -0
  252. package/linthost/rules_ts_prefer_return_this_type.go +135 -0
  253. package/linthost/rules_ts_prefer_string_starts_ends_with.go +360 -0
  254. package/linthost/rules_ts_promise_function_async.go +77 -0
  255. package/linthost/rules_ts_related_getter_setter_pairs.go +113 -0
  256. package/linthost/rules_ts_require_array_sort_compare.go +96 -0
  257. package/linthost/rules_ts_restrict_plus_operands.go +127 -0
  258. package/linthost/rules_ts_restrict_template_expressions.go +95 -0
  259. package/linthost/rules_ts_simple.go +387 -0
  260. package/linthost/rules_ts_sort_type_constituents.go +144 -0
  261. package/linthost/rules_ts_strict_boolean_expressions.go +157 -0
  262. package/linthost/rules_ts_switch_exhaustiveness_check.go +147 -0
  263. package/linthost/rules_ts_unbound_method.go +126 -0
  264. package/linthost/rules_tsdoc.go +136 -0
  265. package/linthost/rules_unicorn_better_regex.go +27 -0
  266. package/linthost/rules_unicorn_catch_error_name.go +46 -0
  267. package/linthost/rules_unicorn_consistent_assert.go +47 -0
  268. package/linthost/rules_unicorn_consistent_date_clone.go +54 -0
  269. package/linthost/rules_unicorn_consistent_destructuring.go +25 -0
  270. package/linthost/rules_unicorn_consistent_empty_array_spread.go +62 -0
  271. package/linthost/rules_unicorn_consistent_existence_index_check.go +80 -0
  272. package/linthost/rules_unicorn_consistent_function_scoping.go +25 -0
  273. package/linthost/rules_unicorn_consistent_template_literal_escape.go +25 -0
  274. package/linthost/rules_unicorn_custom_error_definition.go +138 -0
  275. package/linthost/rules_unicorn_empty_brace_spaces.go +73 -0
  276. package/linthost/rules_unicorn_error_message.go +64 -0
  277. package/linthost/rules_unicorn_escape_case.go +51 -0
  278. package/linthost/rules_unicorn_expiring_todo_comments.go +78 -0
  279. package/linthost/rules_unicorn_explicit_length_check.go +88 -0
  280. package/linthost/rules_unicorn_filename_case.go +29 -0
  281. package/linthost/rules_unicorn_import_style.go +28 -0
  282. package/linthost/rules_unicorn_isolated_functions.go +29 -0
  283. package/linthost/rules_unicorn_new_for_builtins.go +87 -0
  284. package/linthost/rules_unicorn_no_abusive_eslint_disable.go +63 -0
  285. package/linthost/rules_unicorn_no_accessor_recursion.go +115 -0
  286. package/linthost/rules_unicorn_no_anonymous_default_export.go +74 -0
  287. package/linthost/rules_unicorn_no_array_callback_reference.go +65 -0
  288. package/linthost/rules_unicorn_no_array_for_each.go +40 -0
  289. package/linthost/rules_unicorn_no_array_method_this_argument.go +61 -0
  290. package/linthost/rules_unicorn_no_array_reduce.go +41 -0
  291. package/linthost/rules_unicorn_no_array_reverse.go +44 -0
  292. package/linthost/rules_unicorn_no_array_sort.go +43 -0
  293. package/linthost/rules_unicorn_no_await_expression_member.go +40 -0
  294. package/linthost/rules_unicorn_no_await_in_promise_methods.go +69 -0
  295. package/linthost/rules_unicorn_no_console_spaces.go +61 -0
  296. package/linthost/rules_unicorn_no_document_cookie.go +41 -0
  297. package/linthost/rules_unicorn_no_empty_file.go +44 -0
  298. package/linthost/rules_unicorn_no_for_loop.go +102 -0
  299. package/linthost/rules_unicorn_no_hex_escape.go +42 -0
  300. package/linthost/rules_unicorn_no_immediate_mutation.go +90 -0
  301. package/linthost/rules_unicorn_no_instanceof_builtins.go +66 -0
  302. package/linthost/rules_unicorn_no_invalid_fetch_options.go +79 -0
  303. package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +51 -0
  304. package/linthost/rules_unicorn_no_keyword_prefix.go +101 -0
  305. package/linthost/rules_unicorn_no_lonely_if.go +44 -0
  306. package/linthost/rules_unicorn_no_magic_array_flat_depth.go +51 -0
  307. package/linthost/rules_unicorn_no_named_default.go +54 -0
  308. package/linthost/rules_unicorn_no_negated_condition.go +85 -0
  309. package/linthost/rules_unicorn_no_negation_in_equality_check.go +50 -0
  310. package/linthost/rules_unicorn_no_nested_ternary.go +43 -0
  311. package/linthost/rules_unicorn_no_new_array.go +30 -0
  312. package/linthost/rules_unicorn_no_new_buffer.go +31 -0
  313. package/linthost/rules_unicorn_no_null.go +24 -0
  314. package/linthost/rules_unicorn_no_object_as_default_parameter.go +48 -0
  315. package/linthost/rules_unicorn_no_process_exit.go +43 -0
  316. package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +59 -0
  317. package/linthost/rules_unicorn_no_static_only_class.go +56 -0
  318. package/linthost/rules_unicorn_no_thenable.go +74 -0
  319. package/linthost/rules_unicorn_no_this_assignment.go +35 -0
  320. package/linthost/rules_unicorn_no_typeof_undefined.go +58 -0
  321. package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +49 -0
  322. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +70 -0
  323. package/linthost/rules_unicorn_no_unnecessary_await.go +51 -0
  324. package/linthost/rules_unicorn_no_unnecessary_polyfills.go +32 -0
  325. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +48 -0
  326. package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +115 -0
  327. package/linthost/rules_unicorn_no_unreadable_iife.go +50 -0
  328. package/linthost/rules_unicorn_no_unused_properties.go +30 -0
  329. package/linthost/rules_unicorn_no_useless_collection_argument.go +63 -0
  330. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +46 -0
  331. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +81 -0
  332. package/linthost/rules_unicorn_no_useless_iterator_to_array.go +72 -0
  333. package/linthost/rules_unicorn_no_useless_length_check.go +144 -0
  334. package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +81 -0
  335. package/linthost/rules_unicorn_no_useless_spread.go +67 -0
  336. package/linthost/rules_unicorn_no_useless_switch_case.go +55 -0
  337. package/linthost/rules_unicorn_no_useless_undefined.go +55 -0
  338. package/linthost/rules_unicorn_no_zero_fractions.go +52 -0
  339. package/linthost/rules_unicorn_number_literal_case.go +69 -0
  340. package/linthost/rules_unicorn_numeric_separators_style.go +75 -0
  341. package/linthost/rules_unicorn_prefer_add_event_listener.go +66 -0
  342. package/linthost/rules_unicorn_prefer_array_find.go +51 -0
  343. package/linthost/rules_unicorn_prefer_array_flat.go +52 -0
  344. package/linthost/rules_unicorn_prefer_array_flat_map.go +63 -0
  345. package/linthost/rules_unicorn_prefer_array_index_of.go +147 -0
  346. package/linthost/rules_unicorn_prefer_array_some.go +67 -0
  347. package/linthost/rules_unicorn_prefer_at.go +77 -0
  348. package/linthost/rules_unicorn_prefer_bigint_literals.go +77 -0
  349. package/linthost/rules_unicorn_prefer_blob_reading_methods.go +44 -0
  350. package/linthost/rules_unicorn_prefer_class_fields.go +93 -0
  351. package/linthost/rules_unicorn_prefer_classlist_toggle.go +120 -0
  352. package/linthost/rules_unicorn_prefer_code_point.go +49 -0
  353. package/linthost/rules_unicorn_prefer_date_now.go +78 -0
  354. package/linthost/rules_unicorn_prefer_default_parameters.go +144 -0
  355. package/linthost/rules_unicorn_prefer_dom_node_append.go +40 -0
  356. package/linthost/rules_unicorn_prefer_dom_node_dataset.go +55 -0
  357. package/linthost/rules_unicorn_prefer_dom_node_remove.go +41 -0
  358. package/linthost/rules_unicorn_prefer_dom_node_text_content.go +37 -0
  359. package/linthost/rules_unicorn_prefer_event_target.go +36 -0
  360. package/linthost/rules_unicorn_prefer_export_from.go +129 -0
  361. package/linthost/rules_unicorn_prefer_global_this.go +127 -0
  362. package/linthost/rules_unicorn_prefer_import_meta_properties.go +66 -0
  363. package/linthost/rules_unicorn_prefer_includes.go +149 -0
  364. package/linthost/rules_unicorn_prefer_json_parse_buffer.go +65 -0
  365. package/linthost/rules_unicorn_prefer_keyboard_event_key.go +38 -0
  366. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +48 -0
  367. package/linthost/rules_unicorn_prefer_math_min_max.go +60 -0
  368. package/linthost/rules_unicorn_prefer_math_trunc.go +62 -0
  369. package/linthost/rules_unicorn_prefer_modern_dom_apis.go +47 -0
  370. package/linthost/rules_unicorn_prefer_modern_math_apis.go +70 -0
  371. package/linthost/rules_unicorn_prefer_module.go +50 -0
  372. package/linthost/rules_unicorn_prefer_native_coercion_functions.go +114 -0
  373. package/linthost/rules_unicorn_prefer_negative_index.go +74 -0
  374. package/linthost/rules_unicorn_prefer_node_protocol.go +122 -0
  375. package/linthost/rules_unicorn_prefer_number_properties.go +88 -0
  376. package/linthost/rules_unicorn_prefer_object_from_entries.go +55 -0
  377. package/linthost/rules_unicorn_prefer_optional_catch_binding.go +62 -0
  378. package/linthost/rules_unicorn_prefer_prototype_methods.go +54 -0
  379. package/linthost/rules_unicorn_prefer_query_selector.go +56 -0
  380. package/linthost/rules_unicorn_prefer_reflect_apply.go +36 -0
  381. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +80 -0
  382. package/linthost/rules_unicorn_prefer_response_static_json.go +53 -0
  383. package/linthost/rules_unicorn_prefer_set_has.go +42 -0
  384. package/linthost/rules_unicorn_prefer_set_size.go +48 -0
  385. package/linthost/rules_unicorn_prefer_simple_condition_first.go +34 -0
  386. package/linthost/rules_unicorn_prefer_single_call.go +96 -0
  387. package/linthost/rules_unicorn_prefer_spread.go +51 -0
  388. package/linthost/rules_unicorn_prefer_string_raw.go +43 -0
  389. package/linthost/rules_unicorn_prefer_string_replace_all.go +95 -0
  390. package/linthost/rules_unicorn_prefer_string_slice.go +43 -0
  391. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +148 -0
  392. package/linthost/rules_unicorn_prefer_string_trim_start_end.go +48 -0
  393. package/linthost/rules_unicorn_prefer_structured_clone.go +71 -0
  394. package/linthost/rules_unicorn_prefer_switch.go +103 -0
  395. package/linthost/rules_unicorn_prefer_ternary.go +71 -0
  396. package/linthost/rules_unicorn_prefer_top_level_await.go +72 -0
  397. package/linthost/rules_unicorn_prefer_type_error.go +127 -0
  398. package/linthost/rules_unicorn_prevent_abbreviations.go +127 -0
  399. package/linthost/rules_unicorn_relative_url_style.go +49 -0
  400. package/linthost/rules_unicorn_require_array_join_separator.go +45 -0
  401. package/linthost/rules_unicorn_require_module_attributes.go +54 -0
  402. package/linthost/rules_unicorn_require_module_specifiers.go +55 -0
  403. package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +43 -0
  404. package/linthost/rules_unicorn_require_post_message_target_origin.go +44 -0
  405. package/linthost/rules_unicorn_string_content.go +27 -0
  406. package/linthost/rules_unicorn_switch_case_braces.go +42 -0
  407. package/linthost/rules_unicorn_switch_case_break_position.go +31 -0
  408. package/linthost/rules_unicorn_template_indent.go +28 -0
  409. package/linthost/rules_unicorn_text_encoding_identifier_case.go +72 -0
  410. package/linthost/rules_unicorn_throw_new_error.go +61 -0
  411. package/linthost/rules_var.go +4 -4
  412. package/linthost/rules_vitest.go +568 -0
  413. package/package.json +3 -3
  414. package/plugin/main.go +49 -3
  415. package/rule/astutil/astutil.go +10 -3
  416. package/rule/rule.go +12 -10
  417. package/src/defaultFormat.ts +11 -8
  418. package/src/index.ts +40 -16
  419. package/src/structures/ITtscLintConfig.ts +12 -6
  420. package/src/structures/{ITtscLintFormatConfig.ts → ITtscLintFormat.ts} +2 -2
  421. package/src/structures/TtscLintRuleSetting.ts +55 -0
  422. package/src/structures/index.ts +3 -4
  423. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +128 -0
  424. package/src/structures/rules/ITtscLintBoundariesRules.ts +95 -0
  425. package/src/structures/rules/ITtscLintContributorRules.ts +21 -0
  426. package/src/structures/rules/ITtscLintCoreRules.ts +1406 -0
  427. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +18 -0
  428. package/src/structures/rules/ITtscLintCypressRules.ts +145 -0
  429. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +213 -0
  430. package/src/structures/rules/ITtscLintFunctionalRules.ts +202 -0
  431. package/src/structures/rules/ITtscLintJestRules.ts +220 -0
  432. package/src/structures/rules/ITtscLintJsdocRules.ts +153 -0
  433. package/src/structures/rules/ITtscLintJsxA11yRules.ts +339 -0
  434. package/src/structures/rules/ITtscLintNextjsRules.ts +206 -0
  435. package/src/structures/rules/ITtscLintPlaywrightRules.ts +361 -0
  436. package/src/structures/rules/ITtscLintPromiseRules.ts +205 -0
  437. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +19 -0
  438. package/src/structures/rules/ITtscLintReactPerfRules.ts +55 -0
  439. package/src/structures/rules/ITtscLintReactRuleOptions.ts +43 -0
  440. package/src/structures/rules/ITtscLintReactRules.ts +321 -0
  441. package/src/structures/rules/ITtscLintRegexpRules.ts +212 -0
  442. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +89 -0
  443. package/src/structures/rules/ITtscLintRules.ts +77 -0
  444. package/src/structures/rules/ITtscLintSecurityRules.ts +162 -0
  445. package/src/structures/rules/ITtscLintSolidRules.ts +202 -0
  446. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +23 -0
  447. package/src/structures/rules/ITtscLintStorybookRules.ts +193 -0
  448. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +102 -0
  449. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +24 -0
  450. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +342 -0
  451. package/src/structures/rules/ITtscLintTypeScriptRules.ts +1230 -0
  452. package/src/structures/rules/ITtscLintUnicornRules.ts +1143 -0
  453. package/src/structures/rules/ITtscLintVitestRules.ts +154 -0
  454. package/src/structures/rules/index.ts +31 -0
  455. package/lib/structures/ITtscLintFormatConfig.js.map +0 -1
  456. package/lib/structures/TtscLintRule.d.ts +0 -17
  457. package/lib/structures/TtscLintRule.js.map +0 -1
  458. package/lib/structures/TtscLintRuleMap.d.ts +0 -46
  459. package/lib/structures/TtscLintRuleMap.js.map +0 -1
  460. package/lib/structures/TtscLintRuleOptions.d.ts +0 -137
  461. package/lib/structures/TtscLintRuleOptions.js.map +0 -1
  462. package/src/structures/TtscLintRule.ts +0 -160
  463. package/src/structures/TtscLintRuleMap.ts +0 -55
  464. package/src/structures/TtscLintRuleOptions.ts +0 -151
@@ -0,0 +1,361 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * Playwright end-to-end test rules from `eslint-plugin-playwright`,
5
+ * applied to TypeScript test files driven by the `@playwright/test`
6
+ * runner.
7
+ *
8
+ * Guard Playwright-specific patterns — locator usage, web-first
9
+ * assertions, focused/slowed tests — that would otherwise compile
10
+ * and run silently.
11
+ *
12
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright
13
+ */
14
+ export interface ITtscLintPlaywrightRules {
15
+ /**
16
+ * Require every Playwright test body to contain at least one
17
+ * `expect(...)` call. A test with no assertions still passes,
18
+ * giving a false-positive signal.
19
+ *
20
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/expect-expect.md
21
+ */
22
+ "playwright/expect-expect"?: TtscLintRuleSetting;
23
+
24
+ /**
25
+ * Limit the assertion count inside a single Playwright test body.
26
+ *
27
+ * A test packed with assertions usually verifies several user
28
+ * flows at once, making failures ambiguous — splitting per
29
+ * scenario keeps each case diagnostic.
30
+ *
31
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/max-expects.md
32
+ */
33
+ "playwright/max-expects"?: TtscLintRuleSetting;
34
+
35
+ /**
36
+ * Reject `expect(...)` calls under `if`/`try`/`catch` or other
37
+ * conditional branches in Playwright tests.
38
+ *
39
+ * A branch that never executes turns the assertion into a silent
40
+ * no-op, so the test passes without verifying anything.
41
+ *
42
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-conditional-expect.md
43
+ */
44
+ "playwright/no-conditional-expect"?: TtscLintRuleSetting;
45
+
46
+ /**
47
+ * Reject conditional logic (`if`/`switch`/ternary) inside
48
+ * Playwright test bodies.
49
+ *
50
+ * Each test should describe a single deterministic user flow;
51
+ * branching hides which path the runner took when reading a
52
+ * passing log.
53
+ *
54
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-conditional-in-test.md
55
+ */
56
+ "playwright/no-conditional-in-test"?: TtscLintRuleSetting;
57
+
58
+ /**
59
+ * Reject duplicate Playwright setup/teardown hook calls
60
+ * (`test.beforeEach`/`test.afterEach`/etc.) in the same
61
+ * `test.describe`.
62
+ *
63
+ * Playwright runs both copies in declaration order, almost always
64
+ * a copy-paste mistake.
65
+ *
66
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-duplicate-hooks.md
67
+ */
68
+ "playwright/no-duplicate-hooks"?: TtscLintRuleSetting;
69
+
70
+ /**
71
+ * Reject repeated `test.slow()` calls inside the same test —
72
+ * the first call already marks the test slow.
73
+ *
74
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-duplicate-slow.md
75
+ */
76
+ "playwright/no-duplicate-slow"?: TtscLintRuleSetting;
77
+
78
+ /**
79
+ * Reject the legacy `ElementHandle`-style Playwright API
80
+ * (`page.$`, `page.$$`).
81
+ *
82
+ * Handles snapshot the DOM at query time and bypass Playwright's
83
+ * auto-waiting; locators are the modern retry-aware replacement.
84
+ *
85
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-element-handle.md
86
+ */
87
+ "playwright/no-element-handle"?: TtscLintRuleSetting;
88
+
89
+ /**
90
+ * Reject `page.$eval` and `page.$$eval`.
91
+ *
92
+ * They depend on the legacy handle API and run user-supplied
93
+ * selectors against a frozen snapshot of the DOM — use
94
+ * `locator.evaluate` or inline logic in the test instead.
95
+ *
96
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-eval.md
97
+ */
98
+ "playwright/no-eval"?: TtscLintRuleSetting;
99
+
100
+ /**
101
+ * Reject `test.only`, `test.describe.only`, and similar focused
102
+ * Playwright tests.
103
+ *
104
+ * A focused test silently skips every other test in the file, so
105
+ * a stray `.only` left from debugging hides the rest of the suite
106
+ * in CI.
107
+ *
108
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-focused-test.md
109
+ */
110
+ "playwright/no-focused-test"?: TtscLintRuleSetting;
111
+
112
+ /**
113
+ * Reject Playwright `{ force: true }` options on actionable
114
+ * commands (`click`, `fill`, ...).
115
+ *
116
+ * `force` skips the actionability checks Playwright relies on for
117
+ * stability, usually papering over a real UI bug the test should
118
+ * be exposing.
119
+ *
120
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-force-option.md
121
+ */
122
+ "playwright/no-force-option"?: TtscLintRuleSetting;
123
+
124
+ /**
125
+ * Reject `getByTitle(...)` locators.
126
+ *
127
+ * The `title` attribute is rarely set with testing in mind and
128
+ * often changes for i18n or cosmetic reasons, making title-based
129
+ * selectors among the least stable test targets.
130
+ *
131
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-get-by-title.md
132
+ */
133
+ "playwright/no-get-by-title"?: TtscLintRuleSetting;
134
+
135
+ /**
136
+ * Reject Playwright `test.beforeEach`/`test.afterEach`/etc.
137
+ * hooks.
138
+ *
139
+ * Promotes the style where each test arranges and tears down its
140
+ * own state inline, so a reader can understand a single case
141
+ * without scrolling to a distant hook.
142
+ *
143
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-hooks.md
144
+ */
145
+ "playwright/no-hooks"?: TtscLintRuleSetting;
146
+
147
+ /**
148
+ * Reject nested `test.step(...)` calls.
149
+ *
150
+ * Playwright's trace viewer collapses steps into a flat timeline,
151
+ * so nested steps are hard to read and usually signal that the
152
+ * inner step should live in its own top-level entry.
153
+ *
154
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-nested-step.md
155
+ */
156
+ "playwright/no-nested-step"?: TtscLintRuleSetting;
157
+
158
+ /**
159
+ * Reject the `networkidle` load-state in `page.waitForLoadState`
160
+ * and navigation options.
161
+ *
162
+ * Modern apps stream requests on a keep-alive socket so the state
163
+ * is racy; the Playwright team recommends waiting on a locator
164
+ * instead.
165
+ *
166
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-networkidle.md
167
+ */
168
+ "playwright/no-networkidle"?: TtscLintRuleSetting;
169
+
170
+ /**
171
+ * Reject `.first()`, `.last()`, and `.nth(...)` on locators.
172
+ *
173
+ * Positional access couples the test to current DOM ordering and
174
+ * breaks the moment the layout changes — prefer a more specific
175
+ * locator (role, label, test id) that names the target directly.
176
+ *
177
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-nth-methods.md
178
+ */
179
+ "playwright/no-nth-methods"?: TtscLintRuleSetting;
180
+
181
+ /**
182
+ * Reject `page.pause()` debugging calls.
183
+ *
184
+ * The helper drops the runner into Playwright's inspector, which
185
+ * is useful locally but hangs CI indefinitely if it slips into a
186
+ * committed test.
187
+ *
188
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-page-pause.md
189
+ */
190
+ "playwright/no-page-pause"?: TtscLintRuleSetting;
191
+
192
+ /**
193
+ * Reject `test.skip`, `test.describe.skip`, and the conditional
194
+ * `test.skip()` annotation.
195
+ *
196
+ * Skipped tests appear green in CI but quietly drop coverage for
197
+ * the feature they were meant to pin.
198
+ *
199
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-skipped-test.md
200
+ */
201
+ "playwright/no-skipped-test"?: TtscLintRuleSetting;
202
+
203
+ /**
204
+ * Reject `test.slow()` marks on Playwright tests.
205
+ *
206
+ * The annotation triples the per-test timeout, usually masking a
207
+ * real performance regression instead of fixing the underlying
208
+ * wait.
209
+ *
210
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-slowed-test.md
211
+ */
212
+ "playwright/no-slowed-test"?: TtscLintRuleSetting;
213
+
214
+ /**
215
+ * Reject `expect(...)` calls outside the body of a Playwright
216
+ * test or lifecycle hook.
217
+ *
218
+ * Top-level assertions execute at module load before any test
219
+ * starts, so failures never attach to a named case in the runner's
220
+ * report.
221
+ *
222
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-standalone-expect.md
223
+ */
224
+ "playwright/no-standalone-expect"?: TtscLintRuleSetting;
225
+
226
+ /**
227
+ * Reject `page.waitForNavigation`.
228
+ *
229
+ * The helper races against navigations triggered by the very
230
+ * command preceding it; use a locator-based wait or the action's
231
+ * own `waitUntil` option to pin the post-navigation state
232
+ * explicitly.
233
+ *
234
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-wait-for-navigation.md
235
+ */
236
+ "playwright/no-wait-for-navigation"?: TtscLintRuleSetting;
237
+
238
+ /**
239
+ * Reject `page.waitForSelector`.
240
+ *
241
+ * The helper duplicates locator auto-waiting but does not share
242
+ * its retry semantics — prefer `locator.waitFor()` or a web-first
243
+ * assertion on the same locator.
244
+ *
245
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-wait-for-selector.md
246
+ */
247
+ "playwright/no-wait-for-selector"?: TtscLintRuleSetting;
248
+
249
+ /**
250
+ * Reject `page.waitForTimeout(ms)` sleeps.
251
+ *
252
+ * A hardcoded delay is either too short under load (flaky
253
+ * failures) or too long under normal conditions (slow suite); wait
254
+ * on a locator or response that signals readiness directly.
255
+ *
256
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/no-wait-for-timeout.md
257
+ */
258
+ "playwright/no-wait-for-timeout"?: TtscLintRuleSetting;
259
+
260
+ /**
261
+ * Prefer locator-based Playwright APIs (`page.locator(sel).click()`)
262
+ * over page-level convenience methods (`page.click(selector)`).
263
+ *
264
+ * Page methods re-resolve the selector each call and skip the
265
+ * retry semantics that make locators robust under animation.
266
+ *
267
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/prefer-locator.md
268
+ */
269
+ "playwright/prefer-locator"?: TtscLintRuleSetting;
270
+
271
+ /**
272
+ * Prefer `expect(locator).toHaveCount(n)` over asserting on
273
+ * `await locator.count()`.
274
+ *
275
+ * The web-first matcher retries until the count stabilizes, while
276
+ * the awaited value is a one-shot snapshot that races against
277
+ * ongoing renders.
278
+ *
279
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/prefer-to-have-count.md
280
+ */
281
+ "playwright/prefer-to-have-count"?: TtscLintRuleSetting;
282
+
283
+ /**
284
+ * Prefer `expect(value).toHaveLength(n)` over asserting on
285
+ * `value.length` directly.
286
+ *
287
+ * The dedicated matcher reports the actual length on failure
288
+ * instead of a bare number mismatch.
289
+ *
290
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/prefer-to-have-length.md
291
+ */
292
+ "playwright/prefer-to-have-length"?: TtscLintRuleSetting;
293
+
294
+ /**
295
+ * Prefer Playwright web-first assertions
296
+ * (`expect(locator).toBeVisible()`, `.toHaveText(...)`) over
297
+ * composed manual waits.
298
+ *
299
+ * Web-first matchers retry until the predicate holds, which is how
300
+ * Playwright keeps tests stable under animation and network
301
+ * jitter.
302
+ *
303
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/prefer-web-first-assertions.md
304
+ */
305
+ "playwright/prefer-web-first-assertions"?: TtscLintRuleSetting;
306
+
307
+ /**
308
+ * Require an explicit `timeout` option on `expect(...).toPass(...)`.
309
+ *
310
+ * The matcher otherwise inherits the suite-wide timeout and can
311
+ * strand CI when the underlying assertion never settles.
312
+ *
313
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/require-to-pass-timeout.md
314
+ */
315
+ "playwright/require-to-pass-timeout"?: TtscLintRuleSetting;
316
+
317
+ /**
318
+ * Require a message argument on `expect(...).toThrow(...)`.
319
+ *
320
+ * Without a message the assertion only confirms that something
321
+ * threw, so a regression that throws a different error still looks
322
+ * green.
323
+ *
324
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/require-to-throw-message.md
325
+ */
326
+ "playwright/require-to-throw-message"?: TtscLintRuleSetting;
327
+
328
+ /**
329
+ * Validate the shape of Playwright `test.describe` callbacks.
330
+ *
331
+ * The callback must be synchronous and take no arguments —
332
+ * Playwright ignores returned Promises and stray parameters at the
333
+ * describe level, silently swallowing setup errors.
334
+ *
335
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/valid-describe-callback.md
336
+ */
337
+ "playwright/valid-describe-callback"?: TtscLintRuleSetting;
338
+
339
+ /**
340
+ * Validate `expect(...)` arity and matcher chaining: exactly one
341
+ * argument, terminated by a matcher call, and async matchers
342
+ * properly awaited.
343
+ *
344
+ * Malformed expects either throw at runtime or pass without
345
+ * asserting anything.
346
+ *
347
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/valid-expect.md
348
+ */
349
+ "playwright/valid-expect"?: TtscLintRuleSetting;
350
+
351
+ /**
352
+ * Require non-empty static Playwright test and `describe`
353
+ * titles.
354
+ *
355
+ * Empty or dynamically-built titles produce unreadable reports and
356
+ * break filter-by-name flags like `--grep`.
357
+ *
358
+ * @reference https://github.com/playwright-community/eslint-plugin-playwright/blob/main/docs/rules/valid-title.md
359
+ */
360
+ "playwright/valid-title"?: TtscLintRuleSetting;
361
+ }
@@ -0,0 +1,205 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * Promise correctness and style rules from `eslint-plugin-promise`.
5
+ *
6
+ * Checks the chain shape of Promise-using code: every chain ends
7
+ * with `catch`, no callback inside a `then`, no nested
8
+ * `.then().then()`, and so on.
9
+ *
10
+ * AST-local only — type-aware Promise checks belong with
11
+ * `typescript/*` checker rules.
12
+ *
13
+ * @reference https://github.com/eslint-community/eslint-plugin-promise
14
+ */
15
+ export interface ITtscLintPromiseRules {
16
+ /**
17
+ * Require every `then()` callback to either `return` a value or
18
+ * `throw`.
19
+ *
20
+ * A callback that does neither breaks the chain by returning
21
+ * `undefined`.
22
+ *
23
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/always-return.md
24
+ */
25
+ "promise/always-return"?: TtscLintRuleSetting;
26
+
27
+ /**
28
+ * Reject every `new Promise(...)` construction. Most modern code
29
+ * can use `async`/`await` or existing Promise-returning APIs.
30
+ *
31
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/avoid-new.md
32
+ */
33
+ "promise/avoid-new"?: TtscLintRuleSetting;
34
+
35
+ /**
36
+ * Require unreturned promise chains to terminate with `catch()`
37
+ * so unhandled rejections cannot escape.
38
+ *
39
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/catch-or-return.md
40
+ */
41
+ "promise/catch-or-return"?: TtscLintRuleSetting;
42
+
43
+ /**
44
+ * Reject direct invocation of an error-first callback inside a
45
+ * `then()` or `catch()` handler.
46
+ *
47
+ * Synchronously calling the callback from a promise handler can
48
+ * re-enter it on both the fulfilled and rejected paths. Upstream
49
+ * guidance: defer via `setImmediate`/`process.nextTick` if a
50
+ * callback bridge is genuinely required.
51
+ *
52
+ * Also flags `.then(callback)` / `.catch(callback)` calls whose
53
+ * handler argument is a bare callback-shaped identifier
54
+ * (`callback`, `cb`, `next`, `done`).
55
+ *
56
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/no-callback-in-promise.md
57
+ */
58
+ "promise/no-callback-in-promise"?: TtscLintRuleSetting;
59
+
60
+ /**
61
+ * Detect Promise executor bodies with more than one resolve/reject
62
+ * call. The native rule does not yet model branch exclusivity —
63
+ * bodies whose calls are split across mutually exclusive branches
64
+ * will be flagged too.
65
+ *
66
+ * The second call is silently ignored, but the surrounding logic
67
+ * almost always assumed short-circuit.
68
+ *
69
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/no-multiple-resolved.md
70
+ */
71
+ "promise/no-multiple-resolved"?: TtscLintRuleSetting;
72
+
73
+ /**
74
+ * Require every file that uses `Promise` to import or require the
75
+ * implementation explicitly, instead of reaching the native global.
76
+ *
77
+ * Useful for projects that substitute Bluebird or another library
78
+ * and want the choice grep-visible per file.
79
+ *
80
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/no-native.md
81
+ */
82
+ "promise/no-native"?: TtscLintRuleSetting;
83
+
84
+ /**
85
+ * Reject nested `then()`/`catch()` calls inside the body of a
86
+ * Promise callback. Use chained `.then()` instead.
87
+ *
88
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/no-nesting.md
89
+ */
90
+ "promise/no-nesting"?: TtscLintRuleSetting;
91
+
92
+ /**
93
+ * Reject `new` applied to Promise statics such as
94
+ * `new Promise.resolve(x)`, `new Promise.all([...])`, or
95
+ * `new Promise.race([...])`.
96
+ *
97
+ * The statics are plain functions, so `new` throws a `TypeError`
98
+ * at runtime — caught here before the call ships.
99
+ *
100
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/no-new-statics.md
101
+ */
102
+ "promise/no-new-statics"?: TtscLintRuleSetting;
103
+
104
+ /**
105
+ * Reject building a promise chain inside the body of an
106
+ * error-first callback.
107
+ *
108
+ * The callback already owns an error channel, so layering
109
+ * `.then()`/`.catch()` on top creates two incompatible failure
110
+ * pipelines. Upstream advice: promisify the outer API instead.
111
+ *
112
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/no-promise-in-callback.md
113
+ */
114
+ "promise/no-promise-in-callback"?: TtscLintRuleSetting;
115
+
116
+ /**
117
+ * Reject `return` from inside a `finally()` callback.
118
+ *
119
+ * The chain's resolved value comes from the prior `then`/`catch`,
120
+ * so any value returned from `finally` is discarded — usually
121
+ * signals confusion about where the chain's value comes from.
122
+ *
123
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/no-return-in-finally.md
124
+ */
125
+ "promise/no-return-in-finally"?: TtscLintRuleSetting;
126
+
127
+ /**
128
+ * Reject `return Promise.resolve(x)` and `return
129
+ * Promise.reject(x)` inside promise callbacks; return the bare
130
+ * value or `throw` instead.
131
+ *
132
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/no-return-wrap.md
133
+ */
134
+ "promise/no-return-wrap"?: TtscLintRuleSetting;
135
+
136
+ /**
137
+ * Enforce canonical parameter names (`resolve`, `reject`) on
138
+ * Promise executor functions.
139
+ *
140
+ * Consistent names make executor bodies greppable and prevent
141
+ * accidental shadowing of the outer `resolve` symbol.
142
+ *
143
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/param-names.md
144
+ */
145
+ "promise/param-names"?: TtscLintRuleSetting;
146
+
147
+ /**
148
+ * Flag continuation-passing callback shapes (last parameter is a
149
+ * function and an error-first invocation pattern is detected),
150
+ * suggesting an `async`/`await` rewrite.
151
+ *
152
+ * Intended for codebases that have already migrated their I/O
153
+ * surface to promises and want to keep callers consistent.
154
+ *
155
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/prefer-await-to-callbacks.md
156
+ */
157
+ "promise/prefer-await-to-callbacks"?: TtscLintRuleSetting;
158
+
159
+ /**
160
+ * Prefer `await` over explicit `.then()`/`.catch()`/`.finally()`
161
+ * chains inside `async` functions.
162
+ *
163
+ * Sequential awaits compose more naturally with try/catch and
164
+ * avoid the indentation creep of deeply nested handlers.
165
+ *
166
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/prefer-await-to-then.md
167
+ */
168
+ "promise/prefer-await-to-then"?: TtscLintRuleSetting;
169
+
170
+ /**
171
+ * Prefer `.catch(handler)` over the two-argument form
172
+ * `.then(onFulfilled, onRejected)`.
173
+ *
174
+ * The two-argument shape skips rejections raised inside
175
+ * `onFulfilled`, which surprises readers and hides errors from
176
+ * logging middleware.
177
+ *
178
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/prefer-catch.md
179
+ */
180
+ "promise/prefer-catch"?: TtscLintRuleSetting;
181
+
182
+ /**
183
+ * Reject non-standard `Promise` statics such as `Promise.done`,
184
+ * `Promise.spread`, or library-specific extensions shimmed onto
185
+ * the global.
186
+ *
187
+ * Sticking to spec methods keeps code portable across Promise
188
+ * implementations.
189
+ *
190
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/spec-only.md
191
+ */
192
+ "promise/spec-only"?: TtscLintRuleSetting;
193
+
194
+ /**
195
+ * Enforce the argument counts the Promise spec defines for each
196
+ * method — `Promise.all`/`Promise.race` take exactly one argument,
197
+ * `Promise.resolve`/`Promise.reject` take zero or one, `.then`
198
+ * takes one or two, `.catch`/`.finally` take exactly one.
199
+ *
200
+ * Extra or missing arguments usually indicate a misread of the API.
201
+ *
202
+ * @reference https://github.com/eslint-community/eslint-plugin-promise/blob/main/docs/rules/valid-params.md
203
+ */
204
+ "promise/valid-params"?: TtscLintRuleSetting;
205
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared options shape for every rule in {@link ITtscLintReactPerfRules}.
3
+ *
4
+ * @reference https://github.com/cvazac/eslint-plugin-react-perf
5
+ */
6
+
7
+ /** `react-perf/*` rule options. */
8
+ export interface ITtscLintReactPerfRuleOptions {
9
+ /**
10
+ * Controls which intrinsic JSX element props are ignored.
11
+ *
12
+ * `"all"` ignores every prop on lowercase / native elements such as
13
+ * `div`. An array ignores only those prop names on native elements,
14
+ * for example `["style"]`. Custom components are still checked.
15
+ *
16
+ * @default [] (native props are checked)
17
+ */
18
+ nativeAllowList?: "all" | readonly string[];
19
+ }
@@ -0,0 +1,55 @@
1
+ import type { ITtscLintReactPerfRuleOptions } from "./ITtscLintReactPerfRuleOptions";
2
+ import type { TtscLintRuleOptionsSetting } from "../TtscLintRuleSetting";
3
+
4
+ /**
5
+ * React JSX performance rules from `eslint-plugin-react-perf`.
6
+ *
7
+ * Detects freshly-allocated reference values (arrays, objects,
8
+ * functions, JSX elements) passed as JSX props. A new reference
9
+ * invalidates `React.memo` / `useMemo` shallow checks on every
10
+ * render. Useful for performance-critical render paths; usually
11
+ * unnecessary for top-level pages.
12
+ *
13
+ * Diagnostics only fire on `.tsx` source files — JSX heuristics rely
14
+ * on the file extension, so `.ts` files are skipped even when they
15
+ * contain JSX-like syntax.
16
+ *
17
+ * @reference https://github.com/cvazac/eslint-plugin-react-perf
18
+ */
19
+ export interface ITtscLintReactPerfRules {
20
+ /**
21
+ * Reject array literals (`[...]`) passed inline as a JSX prop.
22
+ * Hoist the array outside the render or stabilize it with
23
+ * `useMemo`.
24
+ *
25
+ * @reference https://github.com/cvazac/eslint-plugin-react-perf/blob/master/docs/rules/jsx-no-new-array-as-prop.md
26
+ */
27
+ "react-perf/jsx-no-new-array-as-prop"?: TtscLintRuleOptionsSetting<ITtscLintReactPerfRuleOptions>;
28
+
29
+ /**
30
+ * Reject inline `function` expressions / arrow functions passed
31
+ * as a JSX prop. Stabilize with `useCallback`.
32
+ *
33
+ * @reference https://github.com/cvazac/eslint-plugin-react-perf/blob/master/docs/rules/jsx-no-new-function-as-prop.md
34
+ */
35
+ "react-perf/jsx-no-new-function-as-prop"?: TtscLintRuleOptionsSetting<ITtscLintReactPerfRuleOptions>;
36
+
37
+ /**
38
+ * Reject inline object literals (`{...}`) passed as a JSX prop.
39
+ *
40
+ * A fresh object on every render invalidates the shallow-equal
41
+ * check used by `React.memo` and `useMemo` consumers, so any
42
+ * downstream memoization keyed on that prop is wasted.
43
+ *
44
+ * @reference https://github.com/cvazac/eslint-plugin-react-perf/blob/master/docs/rules/jsx-no-new-object-as-prop.md
45
+ */
46
+ "react-perf/jsx-no-new-object-as-prop"?: TtscLintRuleOptionsSetting<ITtscLintReactPerfRuleOptions>;
47
+
48
+ /**
49
+ * Reject JSX expressions and fragments passed as a JSX prop —
50
+ * each evaluation creates a new React element.
51
+ *
52
+ * @reference https://github.com/cvazac/eslint-plugin-react-perf/blob/master/docs/rules/jsx-no-jsx-as-prop.md
53
+ */
54
+ "react-perf/jsx-no-jsx-as-prop"?: TtscLintRuleOptionsSetting<ITtscLintReactPerfRuleOptions>;
55
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Options shapes for the configurable rules in
3
+ * {@link ITtscLintReactRules}.
4
+ *
5
+ * Currently only `react/only-export-components` (from
6
+ * `eslint-plugin-react-refresh`) accepts options.
7
+ *
8
+ * @reference https://github.com/ArnaudBarre/eslint-plugin-react-refresh
9
+ */
10
+
11
+ /** `react/only-export-components` rule options. */
12
+ export interface ITtscLintReactOnlyExportComponentsRuleOptions {
13
+ /**
14
+ * Extra higher-order component names that wrap component exports.
15
+ *
16
+ * @default []
17
+ */
18
+ extraHOCs?: readonly string[];
19
+
20
+ /**
21
+ * Export names the active framework handles during refresh, such as
22
+ * route metadata exports.
23
+ *
24
+ * @default []
25
+ */
26
+ allowExportNames?: readonly string[];
27
+
28
+ /**
29
+ * Permit literal / string / boolean / template / binary constant
30
+ * exports alongside component exports.
31
+ *
32
+ * @default false
33
+ */
34
+ allowConstantExport?: boolean;
35
+
36
+ /**
37
+ * Also scan JavaScript files that import React. TSX files are always
38
+ * scanned.
39
+ *
40
+ * @default false
41
+ */
42
+ checkJS?: boolean;
43
+ }