@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,18 @@
1
+ /**
2
+ * Options shapes for rules in {@link ITtscLintCypressRules} that accept
3
+ * configuration. Only `cypress/unsafe-to-chain-command` is configurable in
4
+ * the current native subset.
5
+ *
6
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress
7
+ */
8
+
9
+ /** `cypress/unsafe-to-chain-command` rule options. */
10
+ export interface ITtscLintCypressUnsafeToChainCommandRuleOptions {
11
+ /**
12
+ * Additional Cypress command names that should be treated as unsafe
13
+ * action commands when another command is chained after them.
14
+ *
15
+ * @default []
16
+ */
17
+ methods?: readonly string[];
18
+ }
@@ -0,0 +1,145 @@
1
+ import type { ITtscLintCypressUnsafeToChainCommandRuleOptions } from "./ITtscLintCypressRuleOptions";
2
+ import type {
3
+ TtscLintRuleOptionsSetting,
4
+ TtscLintRuleSetting,
5
+ } from "../TtscLintRuleSetting";
6
+
7
+ /**
8
+ * Cypress end-to-end test rules.
9
+ *
10
+ * Apply to TypeScript/TSX sources that use the Cypress runner
11
+ * (`cy.*` commands and Mocha-style `describe`/`it` blocks). Mirror
12
+ * the rule set from `eslint-plugin-cypress` and detect
13
+ * Cypress-specific anti-patterns such as async test bodies, missing
14
+ * assertions before screenshots, or deprecated XPath selectors.
15
+ *
16
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress
17
+ */
18
+ export interface ITtscLintCypressRules {
19
+ /**
20
+ * Require at least one Cypress assertion (e.g. `cy.should(...)`)
21
+ * before each `cy.screenshot()` call, so the captured screenshot
22
+ * reflects a stable application state.
23
+ *
24
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/assertion-before-screenshot.md
25
+ */
26
+ "cypress/assertion-before-screenshot"?: TtscLintRuleSetting;
27
+
28
+ /**
29
+ * Prefer `cy.should()` over `.and()` when starting a Cypress
30
+ * assertion chain — `.and()` only makes sense after a preceding
31
+ * `.should()`.
32
+ *
33
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-and.md
34
+ */
35
+ "cypress/no-and"?: TtscLintRuleSetting;
36
+
37
+ /**
38
+ * Reject assigning the return value of a Cypress command.
39
+ *
40
+ * Cypress commands are asynchronous wrappers; assignment yields a
41
+ * chainer proxy rather than the underlying subject.
42
+ *
43
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-assigning-return-values.md
44
+ */
45
+ "cypress/no-assigning-return-values"?: TtscLintRuleSetting;
46
+
47
+ /**
48
+ * Reject `async` Cypress `before` / `beforeEach` hooks.
49
+ *
50
+ * Cypress already serializes commands; an `async` hook breaks the
51
+ * runner's ordering.
52
+ *
53
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-async-before.md
54
+ */
55
+ "cypress/no-async-before"?: TtscLintRuleSetting;
56
+
57
+ /**
58
+ * Reject `async` Cypress `it`/`specify` test callbacks.
59
+ *
60
+ * Cypress builds a synchronous command queue when the test body
61
+ * runs and replays it later; an `async` body resolves before the
62
+ * queue executes, so the test reports success before any command
63
+ * has run.
64
+ *
65
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-async-tests.md
66
+ */
67
+ "cypress/no-async-tests"?: TtscLintRuleSetting;
68
+
69
+ /**
70
+ * Reject chained `.get(...).get(...)` calls.
71
+ *
72
+ * Subsequent `.get()` calls do not narrow the previous subject;
73
+ * use a single selector or `.find()`.
74
+ *
75
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-chained-get.md
76
+ */
77
+ "cypress/no-chained-get"?: TtscLintRuleSetting;
78
+
79
+ /**
80
+ * Reject `cy.debug()` and chained `.debug()` commands.
81
+ *
82
+ * The helpers drop into the browser debugger and pause the runner
83
+ * indefinitely — fine for local exploration but hangs CI when one
84
+ * slips into a committed test.
85
+ *
86
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-debug.md
87
+ */
88
+ "cypress/no-debug"?: TtscLintRuleSetting;
89
+
90
+ /**
91
+ * Reject `{ force: true }` on Cypress action commands such as
92
+ * `.click({ force: true })`. The option masks real UX issues.
93
+ *
94
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-force.md
95
+ */
96
+ "cypress/no-force"?: TtscLintRuleSetting;
97
+
98
+ /**
99
+ * Reject `cy.pause()` and chained `.pause()` commands.
100
+ *
101
+ * They halt the Cypress runner until manually resumed, which is a
102
+ * local-debugging affordance that hangs CI when committed.
103
+ *
104
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-pause.md
105
+ */
106
+ "cypress/no-pause"?: TtscLintRuleSetting;
107
+
108
+ /**
109
+ * Reject numeric `cy.wait(ms)` sleeps — they create flaky tests.
110
+ * Wait on a Cypress retry-aware assertion (`should`, `findBy*`,
111
+ * intercepted requests) instead.
112
+ *
113
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-unnecessary-waiting.md
114
+ */
115
+ "cypress/no-unnecessary-waiting"?: TtscLintRuleSetting;
116
+
117
+ /**
118
+ * Reject `cy.xpath(...)` selectors.
119
+ *
120
+ * The plugin shipping `cy.xpath` is deprecated, and XPath
121
+ * expressions tend to encode brittle DOM structure rather than the
122
+ * semantic attributes Cypress otherwise targets.
123
+ *
124
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/no-xpath.md
125
+ */
126
+ "cypress/no-xpath"?: TtscLintRuleSetting;
127
+
128
+ /**
129
+ * Require `cy.get()` selectors to target a `data-*` attribute
130
+ * when the selector is a string literal — separates testing
131
+ * concerns from styling.
132
+ *
133
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/require-data-selectors.md
134
+ */
135
+ "cypress/require-data-selectors"?: TtscLintRuleSetting;
136
+
137
+ /**
138
+ * Reject chaining further Cypress commands after action commands
139
+ * (e.g. `.click().then(...)`). Configurable per-command via the
140
+ * options object.
141
+ *
142
+ * @reference https://github.com/cypress-io/eslint-plugin-cypress/blob/master/docs/rules/unsafe-to-chain-command.md
143
+ */
144
+ "cypress/unsafe-to-chain-command"?: TtscLintRuleOptionsSetting<ITtscLintCypressUnsafeToChainCommandRuleOptions>;
145
+ }
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Options shapes for every configurable rule in
3
+ * {@link ITtscLintFunctionalRules}.
4
+ *
5
+ * Most `functional/*` rules share an ignore-pattern block — exposed below
6
+ * as {@link ITtscLintFunctionalPatternOptions} — and then extend it with
7
+ * rule-specific knobs.
8
+ *
9
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional
10
+ */
11
+
12
+ /** Shared pattern option accepted by several `functional/*` rules. */
13
+ export interface ITtscLintFunctionalPatternOptions {
14
+ /** Identifier regex string(s) the rule should skip. */
15
+ ignoreIdentifierPattern?: string | readonly string[];
16
+
17
+ /** Source-code regex string(s) the rule should skip. */
18
+ ignoreCodePattern?: string | readonly string[];
19
+ }
20
+
21
+ /** `functional/functional-parameters` rule options. */
22
+ export interface ITtscLintFunctionalParametersRuleOptions
23
+ extends ITtscLintFunctionalPatternOptions {
24
+ /** Allow rest parameters such as `(...args: readonly string[])`. */
25
+ allowRestParameter?: boolean;
26
+
27
+ /** Allow the legacy `arguments` object. */
28
+ allowArgumentsKeyword?: boolean;
29
+
30
+ /**
31
+ * Require functions to declare parameters. `true` maps to the
32
+ * conservative at-least-one policy.
33
+ */
34
+ enforceParameterCount?: boolean | "atLeastOne" | "exactlyOne";
35
+ }
36
+
37
+ /** `functional/immutable-data` rule options. */
38
+ export interface ITtscLintFunctionalImmutableDataRuleOptions
39
+ extends ITtscLintFunctionalPatternOptions {
40
+ /**
41
+ * Skip mutating `Map` and `Set` methods while still checking arrays
42
+ * and property assignment.
43
+ */
44
+ ignoreMapsAndSets?: boolean;
45
+ }
46
+
47
+ /** `functional/no-let` rule options. */
48
+ export interface ITtscLintFunctionalNoLetRuleOptions
49
+ extends ITtscLintFunctionalPatternOptions {
50
+ /** Permit `let` in a `for` statement initializer. */
51
+ allowInForLoopInit?: boolean;
52
+
53
+ /**
54
+ * Permit `let` inside functions while still rejecting module-level
55
+ * `let`.
56
+ */
57
+ allowInFunctions?: boolean;
58
+ }
59
+
60
+ /** `functional/no-conditional-statements` rule options. */
61
+ export interface ITtscLintFunctionalNoConditionalStatementsRuleOptions {
62
+ /**
63
+ * Reserved for upstream-compatible configs; the current native rule
64
+ * rejects all `if` / `switch` statements regardless of value.
65
+ */
66
+ allowReturningBranches?: boolean | "ifExhaustive";
67
+ }
68
+
69
+ /** `functional/no-try-statements` rule options. */
70
+ export interface ITtscLintFunctionalNoTryStatementsRuleOptions {
71
+ /** Allow `try/catch` while still checking `finally` when present. */
72
+ allowCatch?: boolean;
73
+
74
+ /** Allow `try/finally` while still checking `catch` when present. */
75
+ allowFinally?: boolean;
76
+ }
77
+
78
+ /** `functional/no-throw-statements` rule options. */
79
+ export interface ITtscLintFunctionalNoThrowStatementsRuleOptions {
80
+ /**
81
+ * Reserved for upstream-compatible configs; the current native rule
82
+ * rejects every `throw` statement regardless of value.
83
+ */
84
+ allowToRejectPromises?: boolean;
85
+ }
86
+
87
+ /** `functional/no-mixed-types` rule options. */
88
+ export interface ITtscLintFunctionalNoMixedTypesRuleOptions {
89
+ /** Check interface member kinds. */
90
+ checkInterfaces?: boolean;
91
+
92
+ /** Check type-literal member kinds. */
93
+ checkTypeLiterals?: boolean;
94
+ }
95
+
96
+ /** `functional/no-return-void` rule options. */
97
+ export interface ITtscLintFunctionalNoReturnVoidRuleOptions {
98
+ /** Permit a function that returns `null` to satisfy the rule. */
99
+ allowNull?: boolean;
100
+
101
+ /** Permit a function that returns `undefined` to satisfy the rule. */
102
+ allowUndefined?: boolean;
103
+
104
+ /**
105
+ * Skip functions whose return type is inferred to be `void` rather
106
+ * than declared explicitly.
107
+ */
108
+ ignoreInferredTypes?: boolean;
109
+ }
110
+
111
+ /** `functional/prefer-immutable-types` rule options. */
112
+ export interface ITtscLintFunctionalPreferImmutableTypesRuleOptions
113
+ extends ITtscLintFunctionalPatternOptions {
114
+ /**
115
+ * Minimum accepted immutability. The native subset treats any
116
+ * configured value as readonly-required.
117
+ */
118
+ enforcement?:
119
+ | "ReadonlyShallow"
120
+ | "ReadonlyDeep"
121
+ | "Immutable"
122
+ | "None"
123
+ | false;
124
+ }
125
+
126
+ /** `functional/prefer-readonly-type` rule options. */
127
+ export interface ITtscLintFunctionalPreferReadonlyTypeRuleOptions
128
+ extends ITtscLintFunctionalPatternOptions {
129
+ /** Permit mutation of locals while still policing exported types. */
130
+ allowLocalMutation?: boolean;
131
+
132
+ /** Permit a mutable return type even when parameters must be readonly. */
133
+ allowMutableReturnType?: boolean;
134
+
135
+ /** Also check property positions that have no explicit type annotation. */
136
+ checkImplicit?: boolean;
137
+
138
+ /** Skip array / tuple / `Map` / `Set` types. */
139
+ ignoreCollections?: boolean;
140
+
141
+ /**
142
+ * Skip class fields. `"fieldsOnly"` keeps the rule active for
143
+ * non-field class members.
144
+ */
145
+ ignoreClass?: boolean | "fieldsOnly";
146
+
147
+ /** Skip interface members entirely. */
148
+ ignoreInterface?: boolean;
149
+ }
150
+
151
+ /** `functional/prefer-tacit` rule options. */
152
+ export interface ITtscLintFunctionalPreferTacitRuleOptions {
153
+ /** Check member expressions such as `x => service.map(x)`. */
154
+ checkMemberExpressions?: boolean;
155
+ }
156
+
157
+ /** `functional/readonly-type` rule options. */
158
+ export interface ITtscLintFunctionalReadonlyTypeRuleOptions {
159
+ /**
160
+ * Preferred readonly spelling.
161
+ *
162
+ * @default "keyword"
163
+ */
164
+ prefer?: "keyword" | "generic";
165
+ }
166
+
167
+ /** `functional/type-declaration-immutability` declaration policy. */
168
+ export interface ITtscLintFunctionalTypeDeclarationImmutabilityRule {
169
+ /** Type / interface name or regex string(s) this policy applies to. */
170
+ identifiers: string | readonly string[];
171
+
172
+ /**
173
+ * Reserved for upstream-compatible configs; the current native subset
174
+ * treats every value as readonly-required.
175
+ */
176
+ immutability?:
177
+ | "ReadonlyShallow"
178
+ | "ReadonlyDeep"
179
+ | "Immutable"
180
+ | "Mutable";
181
+
182
+ /** Comparator applied to the immutability level above. */
183
+ comparator?:
184
+ | "Less"
185
+ | "AtMost"
186
+ | "Exactly"
187
+ | "AtLeast"
188
+ | "More"
189
+ | -2
190
+ | -1
191
+ | 0
192
+ | 1
193
+ | 2;
194
+ }
195
+
196
+ /** `functional/type-declaration-immutability` rule options. */
197
+ export interface ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions
198
+ extends ITtscLintFunctionalPatternOptions {
199
+ /** Declaration-name policies. Empty means all type declarations. */
200
+ rules?: readonly ITtscLintFunctionalTypeDeclarationImmutabilityRule[];
201
+
202
+ /** Skip interface declarations and only check type aliases. */
203
+ ignoreInterfaces?: boolean;
204
+ }
205
+
206
+ /**
207
+ * Empty object options accepted by simple `functional/*` policy rules.
208
+ *
209
+ * Present as a named type so plugin authors can write `extends
210
+ * ITtscLintFunctionalEmptyRuleOptions` while still surviving a future
211
+ * field addition.
212
+ */
213
+ export interface ITtscLintFunctionalEmptyRuleOptions {}
@@ -0,0 +1,202 @@
1
+ import type {
2
+ ITtscLintFunctionalEmptyRuleOptions,
3
+ ITtscLintFunctionalImmutableDataRuleOptions,
4
+ ITtscLintFunctionalNoConditionalStatementsRuleOptions,
5
+ ITtscLintFunctionalNoLetRuleOptions,
6
+ ITtscLintFunctionalNoMixedTypesRuleOptions,
7
+ ITtscLintFunctionalNoReturnVoidRuleOptions,
8
+ ITtscLintFunctionalNoThrowStatementsRuleOptions,
9
+ ITtscLintFunctionalNoTryStatementsRuleOptions,
10
+ ITtscLintFunctionalParametersRuleOptions,
11
+ ITtscLintFunctionalPreferImmutableTypesRuleOptions,
12
+ ITtscLintFunctionalPreferReadonlyTypeRuleOptions,
13
+ ITtscLintFunctionalPreferTacitRuleOptions,
14
+ ITtscLintFunctionalReadonlyTypeRuleOptions,
15
+ ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions,
16
+ } from "./ITtscLintFunctionalRuleOptions";
17
+ import type { TtscLintRuleOptionsSetting } from "../TtscLintRuleSetting";
18
+
19
+ /**
20
+ * Functional-programming policy rules from `eslint-plugin-functional`.
21
+ * Pushes code toward immutability, side-effect-free expressions, and
22
+ * expression-style control flow.
23
+ *
24
+ * Most rules are useful in pieces — projects rarely enable the whole
25
+ * family at `"error"`. Enabling the whole set together expresses a
26
+ * strict functional-core / imperative-shell discipline.
27
+ *
28
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional
29
+ */
30
+ export interface ITtscLintFunctionalRules {
31
+ /**
32
+ * Enforce functional parameter style: reject `arguments`, reject
33
+ * rest parameters, and optionally enforce a per-function
34
+ * parameter-count policy.
35
+ *
36
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/functional-parameters.md
37
+ */
38
+ "functional/functional-parameters"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalParametersRuleOptions>;
39
+
40
+ /**
41
+ * Reject property assignment (`obj.x = ...`), element assignment
42
+ * (`arr[0] = ...`), and `Map`/`Set` mutation methods. Configurable
43
+ * to allow mutation inside constructors or initialization
44
+ * expressions.
45
+ *
46
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/immutable-data.md
47
+ */
48
+ "functional/immutable-data"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalImmutableDataRuleOptions>;
49
+
50
+ /**
51
+ * Reject `abstract` classes and `extends` clauses on class
52
+ * declarations; prefer composition and structural typing.
53
+ *
54
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-class-inheritance.md
55
+ */
56
+ "functional/no-class-inheritance"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalEmptyRuleOptions>;
57
+
58
+ /**
59
+ * Reject `class` declarations and class expressions altogether.
60
+ *
61
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-classes.md
62
+ */
63
+ "functional/no-classes"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalEmptyRuleOptions>;
64
+
65
+ /**
66
+ * Reject `if` and `switch` *statements*. The conditional-expression
67
+ * forms (ternary, `&&`, `||`) remain allowed.
68
+ *
69
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-conditional-statements.md
70
+ */
71
+ "functional/no-conditional-statements"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalNoConditionalStatementsRuleOptions>;
72
+
73
+ /**
74
+ * Reject expression statements that exist purely for their side
75
+ * effects (`mutate(x);`); pure code is built up from expressions
76
+ * with assigned or returned results.
77
+ *
78
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-expression-statements.md
79
+ */
80
+ "functional/no-expression-statements"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalEmptyRuleOptions>;
81
+
82
+ /**
83
+ * Reject `let` declarations so every binding is `const`. The shared
84
+ * ignore-pattern options can carve out specific identifier shapes
85
+ * (test locals, loop counters) when a full ban is too aggressive.
86
+ *
87
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-let.md
88
+ */
89
+ "functional/no-let"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalNoLetRuleOptions>;
90
+
91
+ /**
92
+ * Reject `for`, `while`, and `do/while` loop statements; use
93
+ * recursive helpers or array methods (`map`, `reduce`) instead.
94
+ *
95
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-loop-statements.md
96
+ */
97
+ "functional/no-loop-statements"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalEmptyRuleOptions>;
98
+
99
+ /**
100
+ * Reject interfaces and type literals that mix property, method,
101
+ * call, and index member kinds; mixed shapes make composition
102
+ * harder.
103
+ *
104
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-mixed-types.md
105
+ */
106
+ "functional/no-mixed-types"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalNoMixedTypesRuleOptions>;
107
+
108
+ /**
109
+ * Reject any call to `Promise.reject(...)`; resolve with an
110
+ * `Option` / `Result` shape so failures stay in the value channel.
111
+ *
112
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-promise-reject.md
113
+ */
114
+ "functional/no-promise-reject"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalEmptyRuleOptions>;
115
+
116
+ /**
117
+ * Reject void returns and functions whose declared return type is
118
+ * `void`; functions should always return a value.
119
+ *
120
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-return-void.md
121
+ */
122
+ "functional/no-return-void"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalNoReturnVoidRuleOptions>;
123
+
124
+ /**
125
+ * Reject any `this` expression. Combined with
126
+ * `functional/no-classes` this leaves no place where `this` is
127
+ * legal; on its own it still forbids `this` in standalone functions,
128
+ * modules, and arrow pipelines.
129
+ *
130
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-this-expressions.md
131
+ */
132
+ "functional/no-this-expressions"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalEmptyRuleOptions>;
133
+
134
+ /**
135
+ * Reject `throw` statements; functional code surfaces failures
136
+ * through return values (`Either`, `Result`) instead.
137
+ *
138
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-throw-statements.md
139
+ */
140
+ "functional/no-throw-statements"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalNoThrowStatementsRuleOptions>;
141
+
142
+ /**
143
+ * Reject `try/catch` and `try/finally` statements as a corollary
144
+ * of `functional/no-throw-statements`.
145
+ *
146
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/no-try-statements.md
147
+ */
148
+ "functional/no-try-statements"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalNoTryStatementsRuleOptions>;
149
+
150
+ /**
151
+ * Require declared variable, parameter, and property types to be
152
+ * `readonly` or otherwise structurally immutable.
153
+ *
154
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/prefer-immutable-types.md
155
+ */
156
+ "functional/prefer-immutable-types"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalPreferImmutableTypesRuleOptions>;
157
+
158
+ /**
159
+ * Prefer function-property signatures (`fn: () => T`) over method
160
+ * shorthand (`fn(): T`) in interfaces and type literals.
161
+ *
162
+ * Only the property form accepts `readonly`, so method shorthand
163
+ * silently makes the slot mutable; overloads still need the method
164
+ * form.
165
+ *
166
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/prefer-property-signatures.md
167
+ */
168
+ "functional/prefer-property-signatures"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalEmptyRuleOptions>;
169
+
170
+ /**
171
+ * Prefer `readonly` array, tuple, collection, and property types
172
+ * over their mutable counterparts.
173
+ *
174
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/prefer-readonly-type.md
175
+ */
176
+ "functional/prefer-readonly-type"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalPreferReadonlyTypeRuleOptions>;
177
+
178
+ /**
179
+ * Reject trivial wrappers such as `x => f(x)` in favor of the tacit
180
+ * form `f`; reduces noise in functional pipelines.
181
+ *
182
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/prefer-tacit.md
183
+ */
184
+ "functional/prefer-tacit"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalPreferTacitRuleOptions>;
185
+
186
+ /**
187
+ * Enforce one consistent spelling for readonly types — `readonly
188
+ * T[]` vs `ReadonlyArray<T>` — across the project.
189
+ *
190
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/readonly-type.md
191
+ */
192
+ "functional/readonly-type"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalReadonlyTypeRuleOptions>;
193
+
194
+ /**
195
+ * Enforce readonly/immutable type declarations by *declaration
196
+ * name* policy — for projects that want only types matching
197
+ * certain naming conventions to be locked down.
198
+ *
199
+ * @reference https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/type-declaration-immutability.md
200
+ */
201
+ "functional/type-declaration-immutability"?: TtscLintRuleOptionsSetting<ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions>;
202
+ }