@ttsc/lint 0.13.1 → 0.14.0-dev.20250530.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/README.md +955 -85
  2. package/lib/defaultFormat.d.ts +15 -8
  3. package/lib/defaultFormat.js +15 -8
  4. package/lib/defaultFormat.js.map +1 -1
  5. package/lib/index.d.ts +46 -0
  6. package/lib/index.js +35 -10
  7. package/lib/index.js.map +1 -1
  8. package/lib/structures/ITtscLintConfig.d.ts +12 -6
  9. package/lib/structures/TtscLintRuleSetting.d.ts +49 -0
  10. package/lib/structures/{TtscLintRuleOptions.js → TtscLintRuleSetting.js} +1 -1
  11. package/lib/structures/TtscLintRuleSetting.js.map +1 -0
  12. package/lib/structures/format/ITtscLintFormat.d.ts +128 -0
  13. package/lib/structures/{TtscLintRuleMap.js → format/ITtscLintFormat.js} +1 -1
  14. package/lib/structures/format/ITtscLintFormat.js.map +1 -0
  15. package/lib/structures/format/ITtscLintFormatJsDoc.d.ts +17 -0
  16. package/lib/structures/{ITtscLintFormatConfig.js → format/ITtscLintFormatJsDoc.js} +1 -1
  17. package/lib/structures/format/ITtscLintFormatJsDoc.js.map +1 -0
  18. package/lib/structures/format/ITtscLintFormatSortImports.d.ts +54 -0
  19. package/lib/structures/format/ITtscLintFormatSortImports.js +3 -0
  20. package/lib/structures/format/ITtscLintFormatSortImports.js.map +1 -0
  21. package/lib/structures/format/index.d.ts +3 -0
  22. package/lib/structures/format/index.js +20 -0
  23. package/lib/structures/format/index.js.map +1 -0
  24. package/lib/structures/index.d.ts +3 -4
  25. package/lib/structures/index.js +3 -4
  26. package/lib/structures/index.js.map +1 -1
  27. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +95 -0
  28. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +13 -0
  29. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -0
  30. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +75 -0
  31. package/lib/structures/rules/ITtscLintBoundariesRules.js +3 -0
  32. package/lib/structures/rules/ITtscLintBoundariesRules.js.map +1 -0
  33. package/lib/structures/rules/ITtscLintContributorRules.d.ts +16 -0
  34. package/lib/structures/rules/ITtscLintContributorRules.js +3 -0
  35. package/lib/structures/rules/ITtscLintContributorRules.js.map +1 -0
  36. package/lib/structures/rules/ITtscLintCoreRules.d.ts +1229 -0
  37. package/lib/structures/rules/ITtscLintCoreRules.js +3 -0
  38. package/lib/structures/rules/ITtscLintCoreRules.js.map +1 -0
  39. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +17 -0
  40. package/lib/structures/rules/ITtscLintCypressRuleOptions.js +10 -0
  41. package/lib/structures/rules/ITtscLintCypressRuleOptions.js.map +1 -0
  42. package/lib/structures/rules/ITtscLintCypressRules.d.ts +125 -0
  43. package/lib/structures/rules/ITtscLintCypressRules.js +3 -0
  44. package/lib/structures/rules/ITtscLintCypressRules.js.map +1 -0
  45. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +154 -0
  46. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +13 -0
  47. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js.map +1 -0
  48. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +162 -0
  49. package/lib/structures/rules/ITtscLintFunctionalRules.js +3 -0
  50. package/lib/structures/rules/ITtscLintFunctionalRules.js.map +1 -0
  51. package/lib/structures/rules/ITtscLintJestRules.d.ts +190 -0
  52. package/lib/structures/rules/ITtscLintJestRules.js +3 -0
  53. package/lib/structures/rules/ITtscLintJestRules.js.map +1 -0
  54. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +133 -0
  55. package/lib/structures/rules/ITtscLintJsdocRules.js +3 -0
  56. package/lib/structures/rules/ITtscLintJsdocRules.js.map +1 -0
  57. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +294 -0
  58. package/lib/structures/rules/ITtscLintJsxA11yRules.js +3 -0
  59. package/lib/structures/rules/ITtscLintJsxA11yRules.js.map +1 -0
  60. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +180 -0
  61. package/lib/structures/rules/ITtscLintNextjsRules.js +3 -0
  62. package/lib/structures/rules/ITtscLintNextjsRules.js.map +1 -0
  63. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +312 -0
  64. package/lib/structures/rules/ITtscLintPlaywrightRules.js +3 -0
  65. package/lib/structures/rules/ITtscLintPlaywrightRules.js.map +1 -0
  66. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +179 -0
  67. package/lib/structures/rules/ITtscLintPromiseRules.js +3 -0
  68. package/lib/structures/rules/ITtscLintPromiseRules.js.map +1 -0
  69. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +18 -0
  70. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js +8 -0
  71. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js.map +1 -0
  72. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +49 -0
  73. package/lib/structures/rules/ITtscLintReactPerfRules.js +3 -0
  74. package/lib/structures/rules/ITtscLintReactPerfRules.js.map +1 -0
  75. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +37 -0
  76. package/lib/structures/rules/ITtscLintReactRuleOptions.js +11 -0
  77. package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -0
  78. package/lib/structures/rules/ITtscLintReactRules.d.ts +276 -0
  79. package/lib/structures/rules/ITtscLintReactRules.js +3 -0
  80. package/lib/structures/rules/ITtscLintReactRules.js.map +1 -0
  81. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +182 -0
  82. package/lib/structures/rules/ITtscLintRegexpRules.js +3 -0
  83. package/lib/structures/rules/ITtscLintRegexpRules.js.map +1 -0
  84. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +65 -0
  85. package/lib/structures/rules/ITtscLintRuleOptionsMap.js +3 -0
  86. package/lib/structures/rules/ITtscLintRuleOptionsMap.js.map +1 -0
  87. package/lib/structures/rules/ITtscLintRules.d.ts +55 -0
  88. package/lib/structures/{TtscLintRule.js → rules/ITtscLintRules.js} +1 -1
  89. package/lib/structures/rules/ITtscLintRules.js.map +1 -0
  90. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +141 -0
  91. package/lib/structures/rules/ITtscLintSecurityRules.js +3 -0
  92. package/lib/structures/rules/ITtscLintSecurityRules.js.map +1 -0
  93. package/lib/structures/rules/ITtscLintSolidRules.d.ts +178 -0
  94. package/lib/structures/rules/ITtscLintSolidRules.js +3 -0
  95. package/lib/structures/rules/ITtscLintSolidRules.js.map +1 -0
  96. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +20 -0
  97. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js +9 -0
  98. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js.map +1 -0
  99. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +165 -0
  100. package/lib/structures/rules/ITtscLintStorybookRules.js +3 -0
  101. package/lib/structures/rules/ITtscLintStorybookRules.js.map +1 -0
  102. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +88 -0
  103. package/lib/structures/rules/ITtscLintTanstackQueryRules.js +3 -0
  104. package/lib/structures/rules/ITtscLintTanstackQueryRules.js.map +1 -0
  105. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +21 -0
  106. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js +10 -0
  107. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js.map +1 -0
  108. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +293 -0
  109. package/lib/structures/rules/ITtscLintTestingLibraryRules.js +3 -0
  110. package/lib/structures/rules/ITtscLintTestingLibraryRules.js.map +1 -0
  111. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +1074 -0
  112. package/lib/structures/rules/ITtscLintTypeScriptRules.js +3 -0
  113. package/lib/structures/rules/ITtscLintTypeScriptRules.js.map +1 -0
  114. package/lib/structures/rules/ITtscLintUnicornRules.d.ts +997 -0
  115. package/lib/structures/rules/ITtscLintUnicornRules.js +3 -0
  116. package/lib/structures/rules/ITtscLintUnicornRules.js.map +1 -0
  117. package/lib/structures/rules/ITtscLintVitestRules.d.ts +133 -0
  118. package/lib/structures/rules/ITtscLintVitestRules.js +3 -0
  119. package/lib/structures/rules/ITtscLintVitestRules.js.map +1 -0
  120. package/lib/structures/rules/index.d.ts +31 -0
  121. package/lib/structures/rules/index.js +48 -0
  122. package/lib/structures/rules/index.js.map +1 -0
  123. package/linthost/ast_helpers.go +30 -5
  124. package/linthost/config.go +118 -71
  125. package/linthost/config_format.go +270 -104
  126. package/linthost/directives.go +67 -25
  127. package/linthost/dispatch.go +14 -3
  128. package/linthost/engine.go +152 -31
  129. package/linthost/fix.go +10 -3
  130. package/linthost/format.go +222 -25
  131. package/linthost/format_editor_settings.go +262 -0
  132. package/linthost/lsp.go +898 -0
  133. package/linthost/print_dispatch.go +5 -2
  134. package/linthost/print_engine.go +5 -5
  135. package/linthost/print_nodes_call.go +149 -67
  136. package/linthost/print_nodes_function.go +27 -2
  137. package/linthost/print_nodes_list.go +40 -5
  138. package/linthost/print_nodes_object.go +1 -1
  139. package/linthost/print_nodes_ternary.go +86 -0
  140. package/linthost/rule_names.go +14 -0
  141. package/linthost/rules_arrays.go +2 -2
  142. package/linthost/rules_boundaries.go +532 -0
  143. package/linthost/rules_camelcase.go +133 -0
  144. package/linthost/rules_complexity.go +95 -0
  145. package/linthost/rules_consistent_return.go +130 -0
  146. package/linthost/rules_console.go +1 -1
  147. package/linthost/rules_core_extra.go +739 -0
  148. package/linthost/rules_curly.go +70 -0
  149. package/linthost/rules_cypress.go +608 -0
  150. package/linthost/rules_debugger.go +2 -2
  151. package/linthost/rules_default_case.go +39 -0
  152. package/linthost/rules_default_case_last.go +46 -0
  153. package/linthost/rules_dupes.go +3 -3
  154. package/linthost/rules_empty.go +3 -3
  155. package/linthost/rules_escape.go +44 -24
  156. package/linthost/rules_eval.go +2 -2
  157. package/linthost/rules_finally.go +2 -2
  158. package/linthost/rules_format_arrow_parens.go +167 -0
  159. package/linthost/rules_format_bracket_spacing.go +117 -0
  160. package/linthost/rules_format_clause_join.go +172 -0
  161. package/linthost/rules_format_declaration_header.go +595 -0
  162. package/linthost/rules_format_indent.go +372 -0
  163. package/linthost/rules_format_jsdoc.go +5 -5
  164. package/linthost/rules_format_orphan_semi.go +106 -0
  165. package/linthost/rules_format_parameter_properties.go +175 -0
  166. package/linthost/rules_format_print_width.go +66 -55
  167. package/linthost/rules_format_quote_props.go +169 -0
  168. package/linthost/rules_format_quotes.go +76 -30
  169. package/linthost/rules_format_semi.go +186 -11
  170. package/linthost/rules_format_sort_imports.go +437 -118
  171. package/linthost/rules_format_statement_split.go +343 -0
  172. package/linthost/rules_format_ternary_nullish_parens.go +77 -0
  173. package/linthost/rules_format_trailing_comma.go +22 -3
  174. package/linthost/rules_format_whitespace.go +336 -0
  175. package/linthost/rules_functional.go +967 -0
  176. package/linthost/rules_gap.go +24 -45
  177. package/linthost/rules_grouped_accessor_pairs.go +87 -0
  178. package/linthost/rules_guard_for_in.go +198 -0
  179. package/linthost/rules_id_length.go +77 -0
  180. package/linthost/rules_imports.go +70 -2
  181. package/linthost/rules_init_declarations.go +53 -0
  182. package/linthost/rules_jest.go +618 -0
  183. package/linthost/rules_jsdoc.go +502 -0
  184. package/linthost/rules_jsx_a11y.go +1264 -0
  185. package/linthost/rules_logic.go +12 -12
  186. package/linthost/rules_loops.go +1 -1
  187. package/linthost/rules_max_classes_per_file.go +58 -0
  188. package/linthost/rules_max_depth.go +83 -0
  189. package/linthost/rules_max_lines.go +101 -0
  190. package/linthost/rules_max_lines_per_function.go +57 -0
  191. package/linthost/rules_max_nested_callbacks.go +61 -0
  192. package/linthost/rules_max_params.go +49 -0
  193. package/linthost/rules_max_statements.go +59 -0
  194. package/linthost/rules_misc.go +1 -1
  195. package/linthost/rules_nextjs.go +697 -0
  196. package/linthost/rules_no_else_return.go +75 -0
  197. package/linthost/rules_no_empty_named_blocks.go +91 -0
  198. package/linthost/rules_no_extend_native.go +51 -0
  199. package/linthost/rules_no_import_assign.go +140 -0
  200. package/linthost/rules_no_invalid_this.go +52 -0
  201. package/linthost/rules_no_loop_func.go +85 -0
  202. package/linthost/rules_no_magic_numbers.go +123 -0
  203. package/linthost/rules_no_mixed_operators.go +80 -0
  204. package/linthost/rules_no_param_reassign.go +98 -0
  205. package/linthost/rules_no_redeclare.go +270 -0
  206. package/linthost/rules_no_restricted_imports.go +105 -0
  207. package/linthost/rules_no_restricted_syntax.go +49 -0
  208. package/linthost/rules_no_shadow.go +147 -0
  209. package/linthost/rules_no_unreachable.go +77 -0
  210. package/linthost/rules_no_useless_assignment.go +120 -0
  211. package/linthost/rules_no_useless_constructor.go +245 -0
  212. package/linthost/rules_no_useless_return.go +51 -0
  213. package/linthost/rules_params.go +1 -1
  214. package/linthost/rules_playwright.go +788 -0
  215. package/linthost/rules_prefer_arrow_callback.go +124 -0
  216. package/linthost/rules_prefer_destructuring.go +98 -0
  217. package/linthost/rules_prefer_named_capture_group.go +129 -0
  218. package/linthost/rules_prefer_rest_params.go +94 -0
  219. package/linthost/rules_problems.go +41 -30
  220. package/linthost/rules_promise.go +1057 -2
  221. package/linthost/rules_protos.go +2 -2
  222. package/linthost/rules_react.go +773 -0
  223. package/linthost/rules_react_extras.go +227 -0
  224. package/linthost/rules_react_hooks.go +848 -0
  225. package/linthost/rules_react_perf.go +293 -0
  226. package/linthost/rules_react_refresh.go +583 -0
  227. package/linthost/rules_regexp.go +410 -0
  228. package/linthost/rules_security.go +830 -0
  229. package/linthost/rules_self.go +2 -2
  230. package/linthost/rules_solid.go +1073 -0
  231. package/linthost/rules_sort_imports.go +69 -0
  232. package/linthost/rules_sort_keys.go +134 -0
  233. package/linthost/rules_storybook.go +1176 -0
  234. package/linthost/rules_strings.go +4 -4
  235. package/linthost/rules_suggestions.go +38 -38
  236. package/linthost/rules_tanstack_query.go +844 -0
  237. package/linthost/rules_testing_library.go +1204 -0
  238. package/linthost/rules_throw.go +1 -1
  239. package/linthost/rules_ts.go +19 -19
  240. package/linthost/rules_ts_async.go +399 -0
  241. package/linthost/rules_ts_class_literal_property_style.go +115 -0
  242. package/linthost/rules_ts_consistent_type_exports.go +256 -0
  243. package/linthost/rules_ts_explicit_function_return_type.go +67 -0
  244. package/linthost/rules_ts_extra.go +159 -36
  245. package/linthost/rules_ts_no_base_to_string.go +218 -0
  246. package/linthost/rules_ts_no_confusing_void.go +72 -0
  247. package/linthost/rules_ts_no_deprecated.go +195 -0
  248. package/linthost/rules_ts_no_for_in_array.go +84 -0
  249. package/linthost/rules_ts_no_magic_numbers.go +124 -0
  250. package/linthost/rules_ts_no_meaningless_void_operator.go +84 -0
  251. package/linthost/rules_ts_no_misused_spread.go +104 -0
  252. package/linthost/rules_ts_no_redundant_type_constituents.go +113 -0
  253. package/linthost/rules_ts_no_restricted_types.go +62 -0
  254. package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +129 -0
  255. package/linthost/rules_ts_no_unnecessary_condition.go +250 -0
  256. package/linthost/rules_ts_no_unnecessary_qualifier.go +118 -0
  257. package/linthost/rules_ts_no_unnecessary_template_expression.go +178 -0
  258. package/linthost/rules_ts_no_unnecessary_type_arguments.go +234 -0
  259. package/linthost/rules_ts_no_unnecessary_type_assertion.go +157 -0
  260. package/linthost/rules_ts_no_unsafe_argument.go +82 -0
  261. package/linthost/rules_ts_no_unsafe_assignment.go +102 -0
  262. package/linthost/rules_ts_no_unsafe_call.go +82 -0
  263. package/linthost/rules_ts_no_unsafe_enum_comparison.go +235 -0
  264. package/linthost/rules_ts_no_unsafe_member_access.go +58 -0
  265. package/linthost/rules_ts_no_unsafe_return.go +126 -0
  266. package/linthost/rules_ts_no_unsafe_unary_minus.go +81 -0
  267. package/linthost/rules_ts_no_useless_constructor.go +52 -0
  268. package/linthost/rules_ts_non_nullable_type_assertion_style.go +108 -0
  269. package/linthost/rules_ts_parameter_properties.go +38 -0
  270. package/linthost/rules_ts_prefer_find.go +178 -0
  271. package/linthost/rules_ts_prefer_includes.go +255 -0
  272. package/linthost/rules_ts_prefer_nullish_coalescing.go +104 -0
  273. package/linthost/rules_ts_prefer_optional_chain.go +228 -0
  274. package/linthost/rules_ts_prefer_promise_reject_errors.go +176 -0
  275. package/linthost/rules_ts_prefer_readonly.go +73 -0
  276. package/linthost/rules_ts_prefer_reduce_type_parameter.go +116 -0
  277. package/linthost/rules_ts_prefer_regexp_exec.go +122 -0
  278. package/linthost/rules_ts_prefer_return_this_type.go +135 -0
  279. package/linthost/rules_ts_prefer_string_starts_ends_with.go +360 -0
  280. package/linthost/rules_ts_promise_function_async.go +77 -0
  281. package/linthost/rules_ts_related_getter_setter_pairs.go +113 -0
  282. package/linthost/rules_ts_require_array_sort_compare.go +96 -0
  283. package/linthost/rules_ts_restrict_plus_operands.go +127 -0
  284. package/linthost/rules_ts_restrict_template_expressions.go +95 -0
  285. package/linthost/rules_ts_simple.go +387 -0
  286. package/linthost/rules_ts_sort_type_constituents.go +144 -0
  287. package/linthost/rules_ts_strict_boolean_expressions.go +157 -0
  288. package/linthost/rules_ts_switch_exhaustiveness_check.go +147 -0
  289. package/linthost/rules_ts_unbound_method.go +126 -0
  290. package/linthost/rules_tsdoc.go +136 -0
  291. package/linthost/rules_unicorn_better_regex.go +27 -0
  292. package/linthost/rules_unicorn_catch_error_name.go +46 -0
  293. package/linthost/rules_unicorn_consistent_assert.go +47 -0
  294. package/linthost/rules_unicorn_consistent_date_clone.go +54 -0
  295. package/linthost/rules_unicorn_consistent_destructuring.go +25 -0
  296. package/linthost/rules_unicorn_consistent_empty_array_spread.go +62 -0
  297. package/linthost/rules_unicorn_consistent_existence_index_check.go +80 -0
  298. package/linthost/rules_unicorn_consistent_function_scoping.go +25 -0
  299. package/linthost/rules_unicorn_consistent_template_literal_escape.go +25 -0
  300. package/linthost/rules_unicorn_custom_error_definition.go +138 -0
  301. package/linthost/rules_unicorn_empty_brace_spaces.go +73 -0
  302. package/linthost/rules_unicorn_error_message.go +64 -0
  303. package/linthost/rules_unicorn_escape_case.go +51 -0
  304. package/linthost/rules_unicorn_expiring_todo_comments.go +78 -0
  305. package/linthost/rules_unicorn_explicit_length_check.go +88 -0
  306. package/linthost/rules_unicorn_filename_case.go +29 -0
  307. package/linthost/rules_unicorn_import_style.go +28 -0
  308. package/linthost/rules_unicorn_isolated_functions.go +29 -0
  309. package/linthost/rules_unicorn_new_for_builtins.go +87 -0
  310. package/linthost/rules_unicorn_no_abusive_eslint_disable.go +63 -0
  311. package/linthost/rules_unicorn_no_accessor_recursion.go +115 -0
  312. package/linthost/rules_unicorn_no_anonymous_default_export.go +74 -0
  313. package/linthost/rules_unicorn_no_array_callback_reference.go +65 -0
  314. package/linthost/rules_unicorn_no_array_for_each.go +40 -0
  315. package/linthost/rules_unicorn_no_array_method_this_argument.go +61 -0
  316. package/linthost/rules_unicorn_no_array_reduce.go +41 -0
  317. package/linthost/rules_unicorn_no_array_reverse.go +44 -0
  318. package/linthost/rules_unicorn_no_array_sort.go +43 -0
  319. package/linthost/rules_unicorn_no_await_expression_member.go +40 -0
  320. package/linthost/rules_unicorn_no_await_in_promise_methods.go +69 -0
  321. package/linthost/rules_unicorn_no_console_spaces.go +61 -0
  322. package/linthost/rules_unicorn_no_document_cookie.go +41 -0
  323. package/linthost/rules_unicorn_no_empty_file.go +44 -0
  324. package/linthost/rules_unicorn_no_for_loop.go +102 -0
  325. package/linthost/rules_unicorn_no_hex_escape.go +42 -0
  326. package/linthost/rules_unicorn_no_immediate_mutation.go +90 -0
  327. package/linthost/rules_unicorn_no_instanceof_builtins.go +66 -0
  328. package/linthost/rules_unicorn_no_invalid_fetch_options.go +79 -0
  329. package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +51 -0
  330. package/linthost/rules_unicorn_no_keyword_prefix.go +101 -0
  331. package/linthost/rules_unicorn_no_lonely_if.go +44 -0
  332. package/linthost/rules_unicorn_no_magic_array_flat_depth.go +51 -0
  333. package/linthost/rules_unicorn_no_named_default.go +54 -0
  334. package/linthost/rules_unicorn_no_negated_condition.go +85 -0
  335. package/linthost/rules_unicorn_no_negation_in_equality_check.go +50 -0
  336. package/linthost/rules_unicorn_no_nested_ternary.go +43 -0
  337. package/linthost/rules_unicorn_no_new_array.go +30 -0
  338. package/linthost/rules_unicorn_no_new_buffer.go +31 -0
  339. package/linthost/rules_unicorn_no_null.go +24 -0
  340. package/linthost/rules_unicorn_no_object_as_default_parameter.go +48 -0
  341. package/linthost/rules_unicorn_no_process_exit.go +43 -0
  342. package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +59 -0
  343. package/linthost/rules_unicorn_no_static_only_class.go +56 -0
  344. package/linthost/rules_unicorn_no_thenable.go +74 -0
  345. package/linthost/rules_unicorn_no_this_assignment.go +35 -0
  346. package/linthost/rules_unicorn_no_typeof_undefined.go +58 -0
  347. package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +49 -0
  348. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +70 -0
  349. package/linthost/rules_unicorn_no_unnecessary_await.go +51 -0
  350. package/linthost/rules_unicorn_no_unnecessary_polyfills.go +32 -0
  351. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +48 -0
  352. package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +115 -0
  353. package/linthost/rules_unicorn_no_unreadable_iife.go +50 -0
  354. package/linthost/rules_unicorn_no_unused_properties.go +30 -0
  355. package/linthost/rules_unicorn_no_useless_collection_argument.go +63 -0
  356. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +46 -0
  357. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +81 -0
  358. package/linthost/rules_unicorn_no_useless_iterator_to_array.go +72 -0
  359. package/linthost/rules_unicorn_no_useless_length_check.go +144 -0
  360. package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +81 -0
  361. package/linthost/rules_unicorn_no_useless_spread.go +67 -0
  362. package/linthost/rules_unicorn_no_useless_switch_case.go +55 -0
  363. package/linthost/rules_unicorn_no_useless_undefined.go +55 -0
  364. package/linthost/rules_unicorn_no_zero_fractions.go +52 -0
  365. package/linthost/rules_unicorn_number_literal_case.go +69 -0
  366. package/linthost/rules_unicorn_numeric_separators_style.go +75 -0
  367. package/linthost/rules_unicorn_prefer_add_event_listener.go +66 -0
  368. package/linthost/rules_unicorn_prefer_array_find.go +51 -0
  369. package/linthost/rules_unicorn_prefer_array_flat.go +52 -0
  370. package/linthost/rules_unicorn_prefer_array_flat_map.go +63 -0
  371. package/linthost/rules_unicorn_prefer_array_index_of.go +147 -0
  372. package/linthost/rules_unicorn_prefer_array_some.go +67 -0
  373. package/linthost/rules_unicorn_prefer_at.go +77 -0
  374. package/linthost/rules_unicorn_prefer_bigint_literals.go +77 -0
  375. package/linthost/rules_unicorn_prefer_blob_reading_methods.go +44 -0
  376. package/linthost/rules_unicorn_prefer_class_fields.go +93 -0
  377. package/linthost/rules_unicorn_prefer_classlist_toggle.go +120 -0
  378. package/linthost/rules_unicorn_prefer_code_point.go +49 -0
  379. package/linthost/rules_unicorn_prefer_date_now.go +78 -0
  380. package/linthost/rules_unicorn_prefer_default_parameters.go +144 -0
  381. package/linthost/rules_unicorn_prefer_dom_node_append.go +40 -0
  382. package/linthost/rules_unicorn_prefer_dom_node_dataset.go +55 -0
  383. package/linthost/rules_unicorn_prefer_dom_node_remove.go +41 -0
  384. package/linthost/rules_unicorn_prefer_dom_node_text_content.go +37 -0
  385. package/linthost/rules_unicorn_prefer_event_target.go +36 -0
  386. package/linthost/rules_unicorn_prefer_export_from.go +129 -0
  387. package/linthost/rules_unicorn_prefer_global_this.go +127 -0
  388. package/linthost/rules_unicorn_prefer_import_meta_properties.go +66 -0
  389. package/linthost/rules_unicorn_prefer_includes.go +149 -0
  390. package/linthost/rules_unicorn_prefer_json_parse_buffer.go +65 -0
  391. package/linthost/rules_unicorn_prefer_keyboard_event_key.go +38 -0
  392. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +48 -0
  393. package/linthost/rules_unicorn_prefer_math_min_max.go +60 -0
  394. package/linthost/rules_unicorn_prefer_math_trunc.go +62 -0
  395. package/linthost/rules_unicorn_prefer_modern_dom_apis.go +47 -0
  396. package/linthost/rules_unicorn_prefer_modern_math_apis.go +70 -0
  397. package/linthost/rules_unicorn_prefer_module.go +50 -0
  398. package/linthost/rules_unicorn_prefer_native_coercion_functions.go +114 -0
  399. package/linthost/rules_unicorn_prefer_negative_index.go +74 -0
  400. package/linthost/rules_unicorn_prefer_node_protocol.go +122 -0
  401. package/linthost/rules_unicorn_prefer_number_properties.go +88 -0
  402. package/linthost/rules_unicorn_prefer_object_from_entries.go +55 -0
  403. package/linthost/rules_unicorn_prefer_optional_catch_binding.go +62 -0
  404. package/linthost/rules_unicorn_prefer_prototype_methods.go +54 -0
  405. package/linthost/rules_unicorn_prefer_query_selector.go +56 -0
  406. package/linthost/rules_unicorn_prefer_reflect_apply.go +36 -0
  407. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +80 -0
  408. package/linthost/rules_unicorn_prefer_response_static_json.go +53 -0
  409. package/linthost/rules_unicorn_prefer_set_has.go +42 -0
  410. package/linthost/rules_unicorn_prefer_set_size.go +48 -0
  411. package/linthost/rules_unicorn_prefer_simple_condition_first.go +34 -0
  412. package/linthost/rules_unicorn_prefer_single_call.go +96 -0
  413. package/linthost/rules_unicorn_prefer_spread.go +51 -0
  414. package/linthost/rules_unicorn_prefer_string_raw.go +43 -0
  415. package/linthost/rules_unicorn_prefer_string_replace_all.go +95 -0
  416. package/linthost/rules_unicorn_prefer_string_slice.go +43 -0
  417. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +148 -0
  418. package/linthost/rules_unicorn_prefer_string_trim_start_end.go +48 -0
  419. package/linthost/rules_unicorn_prefer_structured_clone.go +71 -0
  420. package/linthost/rules_unicorn_prefer_switch.go +103 -0
  421. package/linthost/rules_unicorn_prefer_ternary.go +71 -0
  422. package/linthost/rules_unicorn_prefer_top_level_await.go +72 -0
  423. package/linthost/rules_unicorn_prefer_type_error.go +127 -0
  424. package/linthost/rules_unicorn_prevent_abbreviations.go +127 -0
  425. package/linthost/rules_unicorn_relative_url_style.go +49 -0
  426. package/linthost/rules_unicorn_require_array_join_separator.go +45 -0
  427. package/linthost/rules_unicorn_require_module_attributes.go +54 -0
  428. package/linthost/rules_unicorn_require_module_specifiers.go +55 -0
  429. package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +43 -0
  430. package/linthost/rules_unicorn_require_post_message_target_origin.go +44 -0
  431. package/linthost/rules_unicorn_string_content.go +27 -0
  432. package/linthost/rules_unicorn_switch_case_braces.go +42 -0
  433. package/linthost/rules_unicorn_switch_case_break_position.go +31 -0
  434. package/linthost/rules_unicorn_template_indent.go +28 -0
  435. package/linthost/rules_unicorn_text_encoding_identifier_case.go +72 -0
  436. package/linthost/rules_unicorn_throw_new_error.go +61 -0
  437. package/linthost/rules_var.go +4 -4
  438. package/linthost/rules_vitest.go +568 -0
  439. package/package.json +3 -3
  440. package/plugin/main.go +49 -3
  441. package/rule/astutil/astutil.go +10 -3
  442. package/rule/rule.go +12 -10
  443. package/src/defaultFormat.ts +17 -10
  444. package/src/index.ts +40 -16
  445. package/src/structures/ITtscLintConfig.ts +14 -8
  446. package/src/structures/TtscLintRuleSetting.ts +55 -0
  447. package/src/structures/format/ITtscLintFormat.ts +141 -0
  448. package/src/structures/format/ITtscLintFormatJsDoc.ts +18 -0
  449. package/src/structures/format/ITtscLintFormatSortImports.ts +62 -0
  450. package/src/structures/format/index.ts +3 -0
  451. package/src/structures/index.ts +3 -4
  452. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +117 -0
  453. package/src/structures/rules/ITtscLintBoundariesRules.ts +91 -0
  454. package/src/structures/rules/ITtscLintContributorRules.ts +20 -0
  455. package/src/structures/rules/ITtscLintCoreRules.ts +1378 -0
  456. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +18 -0
  457. package/src/structures/rules/ITtscLintCypressRules.ts +141 -0
  458. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +200 -0
  459. package/src/structures/rules/ITtscLintFunctionalRules.ts +197 -0
  460. package/src/structures/rules/ITtscLintJestRules.ts +209 -0
  461. package/src/structures/rules/ITtscLintJsdocRules.ts +146 -0
  462. package/src/structures/rules/ITtscLintJsxA11yRules.ts +331 -0
  463. package/src/structures/rules/ITtscLintNextjsRules.ts +201 -0
  464. package/src/structures/rules/ITtscLintPlaywrightRules.ts +343 -0
  465. package/src/structures/rules/ITtscLintPromiseRules.ts +196 -0
  466. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +19 -0
  467. package/src/structures/rules/ITtscLintReactPerfRules.ts +53 -0
  468. package/src/structures/rules/ITtscLintReactRuleOptions.ts +41 -0
  469. package/src/structures/rules/ITtscLintReactRules.ts +308 -0
  470. package/src/structures/rules/ITtscLintRegexpRules.ts +204 -0
  471. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +88 -0
  472. package/src/structures/rules/ITtscLintRules.ts +77 -0
  473. package/src/structures/rules/ITtscLintSecurityRules.ts +155 -0
  474. package/src/structures/rules/ITtscLintSolidRules.ts +199 -0
  475. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +22 -0
  476. package/src/structures/rules/ITtscLintStorybookRules.ts +184 -0
  477. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +96 -0
  478. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +23 -0
  479. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +325 -0
  480. package/src/structures/rules/ITtscLintTypeScriptRules.ts +1172 -0
  481. package/src/structures/rules/ITtscLintUnicornRules.ts +1143 -0
  482. package/src/structures/rules/ITtscLintVitestRules.ts +146 -0
  483. package/src/structures/rules/index.ts +31 -0
  484. package/lib/structures/ITtscLintFormatConfig.d.ts +0 -153
  485. package/lib/structures/ITtscLintFormatConfig.js.map +0 -1
  486. package/lib/structures/TtscLintRule.d.ts +0 -17
  487. package/lib/structures/TtscLintRule.js.map +0 -1
  488. package/lib/structures/TtscLintRuleMap.d.ts +0 -46
  489. package/lib/structures/TtscLintRuleMap.js.map +0 -1
  490. package/lib/structures/TtscLintRuleOptions.d.ts +0 -137
  491. package/lib/structures/TtscLintRuleOptions.js.map +0 -1
  492. package/src/structures/ITtscLintFormatConfig.ts +0 -168
  493. package/src/structures/TtscLintRule.ts +0 -160
  494. package/src/structures/TtscLintRuleMap.ts +0 -55
  495. package/src/structures/TtscLintRuleOptions.ts +0 -151
@@ -0,0 +1,204 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * Regular-expression rules from `eslint-plugin-regexp`.
5
+ *
6
+ * These rules check the structure of regex literals — emptiness, uselessness,
7
+ * flag ordering, shorthand classes, Unicode support.
8
+ *
9
+ * Some rules duplicate (and supersede) the regex-related rules in
10
+ * {@link ITtscLintCoreRules}; both ids exist so projects can keep the legacy
11
+ * ESLint names alongside the regexp-plugin variants.
12
+ *
13
+ * @reference https://github.com/ota-meshi/eslint-plugin-regexp
14
+ */
15
+ export interface ITtscLintRegexpRules {
16
+ /**
17
+ * Reject ASCII control characters in regex literals. Alias of the bare core
18
+ * check.
19
+ *
20
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-control-character.html
21
+ */
22
+ "regexp/no-control-character"?: TtscLintRuleSetting;
23
+
24
+ /**
25
+ * Reject duplicate literal characters inside simple regex character classes
26
+ * (`/[aa]/`).
27
+ *
28
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-dupe-characters-character-class.html
29
+ */
30
+ "regexp/no-dupe-characters-character-class"?: TtscLintRuleSetting;
31
+
32
+ /**
33
+ * Reject empty alternatives in a disjunction (`/a||b/`), which silently match
34
+ * the empty string.
35
+ *
36
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-alternative.html
37
+ */
38
+ "regexp/no-empty-alternative"?: TtscLintRuleSetting;
39
+
40
+ /**
41
+ * Reject empty capturing groups such as `/()/`.
42
+ *
43
+ * The group shifts the numbering of every later backreference and capture
44
+ * slot while only ever capturing the empty string — almost always a leftover
45
+ * from an unfinished edit.
46
+ *
47
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-capturing-group.html
48
+ */
49
+ "regexp/no-empty-capturing-group"?: TtscLintRuleSetting;
50
+
51
+ /**
52
+ * Reject empty regex character classes (`[]`). Alias of the bare core check.
53
+ *
54
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-character-class.html
55
+ */
56
+ "regexp/no-empty-character-class"?: TtscLintRuleSetting;
57
+
58
+ /**
59
+ * Reject empty non-capturing groups such as `/(?:)/`.
60
+ *
61
+ * The group contributes nothing to the match and is virtually always a
62
+ * leftover from a deleted inner pattern.
63
+ *
64
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-group.html
65
+ */
66
+ "regexp/no-empty-group"?: TtscLintRuleSetting;
67
+
68
+ /**
69
+ * Reject empty lookaround assertions such as `/(?=)/` or `/(?!)/`.
70
+ *
71
+ * An empty positive lookaround always matches; an empty negative lookaround
72
+ * never matches. The assertion either collapses to a no-op or breaks the
73
+ * surrounding pattern.
74
+ *
75
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-lookarounds-assertion.html
76
+ */
77
+ "regexp/no-empty-lookarounds-assertion"?: TtscLintRuleSetting;
78
+
79
+ /**
80
+ * Reject misleading Unicode characters in regex classes. Alias of the bare
81
+ * misleading-character check.
82
+ *
83
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-misleading-unicode-character.html
84
+ */
85
+ "regexp/no-misleading-unicode-character"?: TtscLintRuleSetting;
86
+
87
+ /**
88
+ * Reject single-character character classes such as `/[x]/` — `/x/` is
89
+ * equivalent.
90
+ *
91
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-character-class.html
92
+ */
93
+ "regexp/no-useless-character-class"?: TtscLintRuleSetting;
94
+
95
+ /**
96
+ * Reject unnecessary escapes inside regex literals. Alias of core
97
+ * `no-useless-escape` for regex contexts.
98
+ *
99
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-escape.html
100
+ */
101
+ "regexp/no-useless-escape"?: TtscLintRuleSetting;
102
+
103
+ /**
104
+ * Reject regex flags that the literal does not exercise — `i` on a pattern
105
+ * without case-variable characters, `m` without `^`/`$`, `s` without `.`, and
106
+ * similar dead flags on `g`/`y`.
107
+ *
108
+ * Cleans up flag combos that suggest behavior the pattern can never trigger.
109
+ *
110
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-flag.html
111
+ */
112
+ "regexp/no-useless-flag"?: TtscLintRuleSetting;
113
+
114
+ /**
115
+ * Reject quantifiers that do not change the match — constant-one counts
116
+ * (`/a{1}/`), `?` on patterns already matching the empty string
117
+ * (`/(?:a+|b*)?/`), and quantifiers on non-consuming atoms (`/(?:\b)+/`).
118
+ *
119
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-quantifier.html
120
+ */
121
+ "regexp/no-useless-quantifier"?: TtscLintRuleSetting;
122
+
123
+ /**
124
+ * Reject equal min/max quantifiers (`/a{2,2}/`) in favor of `/a{2}/`.
125
+ *
126
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-two-nums-quantifier.html
127
+ */
128
+ "regexp/no-useless-two-nums-quantifier"?: TtscLintRuleSetting;
129
+
130
+ /**
131
+ * Reject zero-repeat quantifiers (`/a{0}/`, `/a{0,0}/`) — the atom never
132
+ * matches, so the quantifier is either dead code or a typo for `{1,…}`.
133
+ *
134
+ * The fix is normally to delete the atom or correct the upper bound.
135
+ *
136
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-zero-quantifier.html
137
+ */
138
+ "regexp/no-zero-quantifier"?: TtscLintRuleSetting;
139
+
140
+ /**
141
+ * Prefer `\d` over `[0-9]` in regex literals.
142
+ *
143
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-d.html
144
+ */
145
+ "regexp/prefer-d"?: TtscLintRuleSetting;
146
+
147
+ /**
148
+ * Prefer `+` over `{1,}` in regex literals.
149
+ *
150
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-plus-quantifier.html
151
+ */
152
+ "regexp/prefer-plus-quantifier"?: TtscLintRuleSetting;
153
+
154
+ /**
155
+ * Prefer `?` over `{0,1}` in regex literals.
156
+ *
157
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-question-quantifier.html
158
+ */
159
+ "regexp/prefer-question-quantifier"?: TtscLintRuleSetting;
160
+
161
+ /**
162
+ * Prefer `*` over `{0,}` in regex literals.
163
+ *
164
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-star-quantifier.html
165
+ */
166
+ "regexp/prefer-star-quantifier"?: TtscLintRuleSetting;
167
+
168
+ /**
169
+ * Prefer `\w` over `[A-Za-z0-9_]` in regex literals.
170
+ *
171
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-w.html
172
+ */
173
+ "regexp/prefer-w"?: TtscLintRuleSetting;
174
+
175
+ /**
176
+ * Require regex literals to use the `u` or `v` flag, so Unicode-property
177
+ * escapes and surrogate-pair handling stay predictable.
178
+ *
179
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-regexp.html
180
+ */
181
+ "regexp/require-unicode-regexp"?: TtscLintRuleSetting;
182
+
183
+ /**
184
+ * Require regex literals to use the `v` flag specifically — the stricter
185
+ * Unicode-sets mode that enables set notation, string properties, and
186
+ * stricter escape rules on top of `u`.
187
+ *
188
+ * Choose this over `require-unicode-regexp` only on engines that ship
189
+ * ES2024-era regex.
190
+ *
191
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-sets-regexp.html
192
+ */
193
+ "regexp/require-unicode-sets-regexp"?: TtscLintRuleSetting;
194
+
195
+ /**
196
+ * Require regex flags to appear in canonical alphabetical order (`dgimsuvy`).
197
+ *
198
+ * Stable ordering keeps diffs small and lets readers compare flag sets at a
199
+ * glance.
200
+ *
201
+ * @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/sort-flags.html
202
+ */
203
+ "regexp/sort-flags"?: TtscLintRuleSetting;
204
+ }
@@ -0,0 +1,88 @@
1
+ import type {
2
+ ITtscLintBoundariesDependenciesRuleOptions,
3
+ ITtscLintBoundariesElementTypesRuleOptions,
4
+ ITtscLintBoundariesEntryPointRuleOptions,
5
+ ITtscLintBoundariesExternalRuleOptions,
6
+ ITtscLintBoundariesNoPrivateRuleOptions,
7
+ ITtscLintBoundariesNoUnknownRuleOptions,
8
+ } from "./ITtscLintBoundariesRuleOptions";
9
+ import type { ITtscLintCypressUnsafeToChainCommandRuleOptions } from "./ITtscLintCypressRuleOptions";
10
+ import type {
11
+ ITtscLintFunctionalEmptyRuleOptions,
12
+ ITtscLintFunctionalImmutableDataRuleOptions,
13
+ ITtscLintFunctionalNoConditionalStatementsRuleOptions,
14
+ ITtscLintFunctionalNoLetRuleOptions,
15
+ ITtscLintFunctionalNoMixedTypesRuleOptions,
16
+ ITtscLintFunctionalNoReturnVoidRuleOptions,
17
+ ITtscLintFunctionalNoThrowStatementsRuleOptions,
18
+ ITtscLintFunctionalNoTryStatementsRuleOptions,
19
+ ITtscLintFunctionalParametersRuleOptions,
20
+ ITtscLintFunctionalPreferImmutableTypesRuleOptions,
21
+ ITtscLintFunctionalPreferReadonlyTypeRuleOptions,
22
+ ITtscLintFunctionalPreferTacitRuleOptions,
23
+ ITtscLintFunctionalReadonlyTypeRuleOptions,
24
+ ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions,
25
+ } from "./ITtscLintFunctionalRuleOptions";
26
+ import type { ITtscLintReactPerfRuleOptions } from "./ITtscLintReactPerfRuleOptions";
27
+ import type { ITtscLintReactOnlyExportComponentsRuleOptions } from "./ITtscLintReactRuleOptions";
28
+ import type { ITtscLintStorybookNoUninstalledAddonsRuleOptions } from "./ITtscLintStorybookRuleOptions";
29
+ import type { ITtscLintTestingLibraryConsistentDataTestIdRuleOptions } from "./ITtscLintTestingLibraryRuleOptions";
30
+
31
+ /**
32
+ * Index from typed rule name to its options object.
33
+ *
34
+ * Built-in rule families with configurable options are listed here. Contributor
35
+ * plugins extend the map by augmenting it from their own package:
36
+ *
37
+ * ```ts
38
+ * declare module "@ttsc/lint" {
39
+ * interface ITtscLintRuleOptionsMap {
40
+ * "demo/no-marker-comment": { marker: string };
41
+ * }
42
+ * }
43
+ * ```
44
+ *
45
+ * After augmentation, `{@link TtscLintRuleOptionsSetting}` tuples and the
46
+ * `defineConfig`-style helpers in plugin packages can type-check the options
47
+ * object against the contributor's declared shape.
48
+ *
49
+ * `format/*` is **not** listed: formatter behavior is configured through the
50
+ * top-level `format` block ({@link ITtscLintFormat}), not through the `rules`
51
+ * surface.
52
+ */
53
+ export interface ITtscLintRuleOptionsMap {
54
+ "testing-library/consistent-data-testid": ITtscLintTestingLibraryConsistentDataTestIdRuleOptions;
55
+ "functional/functional-parameters": ITtscLintFunctionalParametersRuleOptions;
56
+ "functional/immutable-data": ITtscLintFunctionalImmutableDataRuleOptions;
57
+ "functional/no-class-inheritance": ITtscLintFunctionalEmptyRuleOptions;
58
+ "functional/no-classes": ITtscLintFunctionalEmptyRuleOptions;
59
+ "functional/no-conditional-statements": ITtscLintFunctionalNoConditionalStatementsRuleOptions;
60
+ "functional/no-expression-statements": ITtscLintFunctionalEmptyRuleOptions;
61
+ "functional/no-let": ITtscLintFunctionalNoLetRuleOptions;
62
+ "functional/no-loop-statements": ITtscLintFunctionalEmptyRuleOptions;
63
+ "functional/no-mixed-types": ITtscLintFunctionalNoMixedTypesRuleOptions;
64
+ "functional/no-promise-reject": ITtscLintFunctionalEmptyRuleOptions;
65
+ "functional/no-return-void": ITtscLintFunctionalNoReturnVoidRuleOptions;
66
+ "functional/no-this-expressions": ITtscLintFunctionalEmptyRuleOptions;
67
+ "functional/no-throw-statements": ITtscLintFunctionalNoThrowStatementsRuleOptions;
68
+ "functional/no-try-statements": ITtscLintFunctionalNoTryStatementsRuleOptions;
69
+ "functional/prefer-immutable-types": ITtscLintFunctionalPreferImmutableTypesRuleOptions;
70
+ "functional/prefer-property-signatures": ITtscLintFunctionalEmptyRuleOptions;
71
+ "functional/prefer-readonly-type": ITtscLintFunctionalPreferReadonlyTypeRuleOptions;
72
+ "functional/prefer-tacit": ITtscLintFunctionalPreferTacitRuleOptions;
73
+ "functional/readonly-type": ITtscLintFunctionalReadonlyTypeRuleOptions;
74
+ "functional/type-declaration-immutability": ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions;
75
+ "cypress/unsafe-to-chain-command": ITtscLintCypressUnsafeToChainCommandRuleOptions;
76
+ "boundaries/dependencies": ITtscLintBoundariesDependenciesRuleOptions;
77
+ "boundaries/element-types": ITtscLintBoundariesElementTypesRuleOptions;
78
+ "boundaries/entry-point": ITtscLintBoundariesEntryPointRuleOptions;
79
+ "boundaries/external": ITtscLintBoundariesExternalRuleOptions;
80
+ "boundaries/no-private": ITtscLintBoundariesNoPrivateRuleOptions;
81
+ "boundaries/no-unknown": ITtscLintBoundariesNoUnknownRuleOptions;
82
+ "react-perf/jsx-no-new-array-as-prop": ITtscLintReactPerfRuleOptions;
83
+ "react-perf/jsx-no-new-function-as-prop": ITtscLintReactPerfRuleOptions;
84
+ "react-perf/jsx-no-new-object-as-prop": ITtscLintReactPerfRuleOptions;
85
+ "react-perf/jsx-no-jsx-as-prop": ITtscLintReactPerfRuleOptions;
86
+ "storybook/no-uninstalled-addons": ITtscLintStorybookNoUninstalledAddonsRuleOptions;
87
+ "react/only-export-components": ITtscLintReactOnlyExportComponentsRuleOptions;
88
+ }
@@ -0,0 +1,77 @@
1
+ import type { ITtscLintBoundariesRules } from "./ITtscLintBoundariesRules";
2
+ import type { ITtscLintContributorRules } from "./ITtscLintContributorRules";
3
+ import type { ITtscLintCoreRules } from "./ITtscLintCoreRules";
4
+ import type { ITtscLintCypressRules } from "./ITtscLintCypressRules";
5
+ import type { ITtscLintFunctionalRules } from "./ITtscLintFunctionalRules";
6
+ import type { ITtscLintJestRules } from "./ITtscLintJestRules";
7
+ import type { ITtscLintJsdocRules } from "./ITtscLintJsdocRules";
8
+ import type { ITtscLintJsxA11yRules } from "./ITtscLintJsxA11yRules";
9
+ import type { ITtscLintNextjsRules } from "./ITtscLintNextjsRules";
10
+ import type { ITtscLintPlaywrightRules } from "./ITtscLintPlaywrightRules";
11
+ import type { ITtscLintPromiseRules } from "./ITtscLintPromiseRules";
12
+ import type { ITtscLintReactPerfRules } from "./ITtscLintReactPerfRules";
13
+ import type { ITtscLintReactRules } from "./ITtscLintReactRules";
14
+ import type { ITtscLintRegexpRules } from "./ITtscLintRegexpRules";
15
+ import type { ITtscLintSecurityRules } from "./ITtscLintSecurityRules";
16
+ import type { ITtscLintSolidRules } from "./ITtscLintSolidRules";
17
+ import type { ITtscLintStorybookRules } from "./ITtscLintStorybookRules";
18
+ import type { ITtscLintTanstackQueryRules } from "./ITtscLintTanstackQueryRules";
19
+ import type { ITtscLintTestingLibraryRules } from "./ITtscLintTestingLibraryRules";
20
+ import type { ITtscLintTypeScriptRules } from "./ITtscLintTypeScriptRules";
21
+ import type { ITtscLintUnicornRules } from "./ITtscLintUnicornRules";
22
+ import type { ITtscLintVitestRules } from "./ITtscLintVitestRules";
23
+
24
+ /**
25
+ * Rule severity map accepted by `ITtscLintConfig.rules`.
26
+ *
27
+ * Built-in rule families are exposed as separate interfaces under this
28
+ * directory so users can import a narrow family type when composing configs.
29
+ * `ITtscLintRules` is the intersection of every built-in family plus the
30
+ * open-ended contributor plugin signature.
31
+ *
32
+ * Rule id conventions:
33
+ *
34
+ * - Bare kebab-case ids (`eqeqeq`, `no-console`) belong to
35
+ * {@link ITtscLintCoreRules} — generic ESLint-compatible rules that apply to
36
+ * both JS and TS source.
37
+ * - `typescript/*` ids belong to {@link ITtscLintTypeScriptRules} —
38
+ * TypeScript-only and `@typescript-eslint` plugin rules. `@ttsc/lint` does
39
+ * not accept legacy bare names or `@typescript-eslint/*` aliases for these
40
+ * rules.
41
+ * - `react/*` ids in {@link ITtscLintReactRules} bundle `eslint-plugin-react`,
42
+ * `eslint-plugin-react-hooks`, and `eslint-plugin-react-refresh`.
43
+ * Performance-only React rules live separately in
44
+ * {@link ITtscLintReactPerfRules} because they are opt-in toggles rather than
45
+ * correctness checks (matching Oxlint).
46
+ * - Every other namespaced id (`boundaries/*`, `cypress/*`, `functional/*`, ...)
47
+ * is a built-in family with a matching interface in this directory.
48
+ * - Formatter behavior is **not** configured here. Use the top-level `format`
49
+ * block (typed as `ITtscLintFormat`); `format/*` is an internal
50
+ * implementation detail of `ttsc format` and is deliberately absent from the
51
+ * public rules surface.
52
+ * - Any other `"<namespace>/<rule>"` key is accepted via
53
+ * {@link ITtscLintContributorRules} so plugin-shipped rules compose cleanly
54
+ * without ambient module augmentation.
55
+ */
56
+ export type ITtscLintRules = ITtscLintCoreRules &
57
+ ITtscLintTypeScriptRules &
58
+ ITtscLintBoundariesRules &
59
+ ITtscLintCypressRules &
60
+ ITtscLintFunctionalRules &
61
+ ITtscLintJestRules &
62
+ ITtscLintJsdocRules &
63
+ ITtscLintJsxA11yRules &
64
+ ITtscLintNextjsRules &
65
+ ITtscLintPlaywrightRules &
66
+ ITtscLintPromiseRules &
67
+ ITtscLintReactRules &
68
+ ITtscLintReactPerfRules &
69
+ ITtscLintRegexpRules &
70
+ ITtscLintSecurityRules &
71
+ ITtscLintSolidRules &
72
+ ITtscLintStorybookRules &
73
+ ITtscLintTanstackQueryRules &
74
+ ITtscLintTestingLibraryRules &
75
+ ITtscLintUnicornRules &
76
+ ITtscLintVitestRules &
77
+ ITtscLintContributorRules;
@@ -0,0 +1,155 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * Security-focused TypeScript source rules from `eslint-plugin-security`.
5
+ *
6
+ * Reports likely security smells — non-literal sinks for eval, file I/O, regex
7
+ * construction, child-process spawning, cryptographic primitives — that warrant
8
+ * human review even if no exploit is statically provable.
9
+ *
10
+ * Treat findings as _hints_, not proofs.
11
+ *
12
+ * @reference https://github.com/eslint-community/eslint-plugin-security
13
+ */
14
+ export interface ITtscLintSecurityRules {
15
+ /**
16
+ * Detect Trojan-Source bidi control characters (U+202A, U+202E, ...) hidden
17
+ * inside source.
18
+ *
19
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-bidi-characters.md
20
+ */
21
+ "security/detect-bidi-characters"?: TtscLintRuleSetting;
22
+
23
+ /**
24
+ * Detect Buffer reads/writes called with `noAssert = true`, which skips
25
+ * Node's offset/length bounds checks.
26
+ *
27
+ * The flag lets the offset slide past the buffer end and read unrelated
28
+ * memory, so production code should never set it.
29
+ *
30
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-buffer-noassert.md
31
+ */
32
+ "security/detect-buffer-noassert"?: TtscLintRuleSetting;
33
+
34
+ /**
35
+ * Detect any import of `child_process` and any `exec`/`execSync` call whose
36
+ * command argument is not a string literal.
37
+ *
38
+ * Non-literal commands are the canonical shell-injection sink in Node
39
+ * services.
40
+ *
41
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-child-process.md
42
+ */
43
+ "security/detect-child-process"?: TtscLintRuleSetting;
44
+
45
+ /**
46
+ * Detect assignments setting `escapeMarkup = false` (or the equivalent option
47
+ * on Handlebars/Mustache-style engines), which turns off HTML entity escaping
48
+ * in template output.
49
+ *
50
+ * Result: an unguarded XSS sink for caller-controlled strings.
51
+ *
52
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-disable-mustache-escape.md
53
+ */
54
+ "security/detect-disable-mustache-escape"?: TtscLintRuleSetting;
55
+
56
+ /**
57
+ * Detect `eval(...)` calls whose argument is not a string literal.
58
+ *
59
+ * Any expression argument means caller-controlled data can reach a
60
+ * code-execution sink. The rule flags the call shape, not proven taint.
61
+ *
62
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-eval-with-expression.md
63
+ */
64
+ "security/detect-eval-with-expression"?: TtscLintRuleSetting;
65
+
66
+ /**
67
+ * Detect `new Buffer(input)` constructions with non-literal input —
68
+ * historical source of allocation-disclosure bugs.
69
+ *
70
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-new-buffer.md
71
+ */
72
+ "security/detect-new-buffer"?: TtscLintRuleSetting;
73
+
74
+ /**
75
+ * Detect Express applications mounting `csrf` middleware before
76
+ * `methodOverride`, which lets the CSRF token be bypassed.
77
+ *
78
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-no-csrf-before-method-override.md
79
+ */
80
+ "security/detect-no-csrf-before-method-override"?: TtscLintRuleSetting;
81
+
82
+ /**
83
+ * Detect `fs` calls (`readFile`, `writeFile`, `createReadStream`, ...) whose
84
+ * filename argument is not a string literal.
85
+ *
86
+ * Dynamic filenames are the standard path-traversal sink; sanitise or
87
+ * allow-list before the call.
88
+ *
89
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-fs-filename.md
90
+ */
91
+ "security/detect-non-literal-fs-filename"?: TtscLintRuleSetting;
92
+
93
+ /**
94
+ * Detect `new RegExp(...)` construction whose pattern argument is not a
95
+ * string literal.
96
+ *
97
+ * Caller-controlled patterns can both trigger catastrophic backtracking and
98
+ * let an attacker reshape the matcher to bypass intended validation.
99
+ *
100
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-regexp.md
101
+ */
102
+ "security/detect-non-literal-regexp"?: TtscLintRuleSetting;
103
+
104
+ /**
105
+ * Detect `require(...)` calls whose specifier is computed at runtime.
106
+ *
107
+ * A dynamic specifier lets caller-controlled data choose the module to load,
108
+ * bypassing any module allow-list on Node.
109
+ *
110
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-require.md
111
+ */
112
+ "security/detect-non-literal-require"?: TtscLintRuleSetting;
113
+
114
+ /**
115
+ * Detect dynamic bracket-access such as `obj[req.body.x] = ...`, which can
116
+ * let caller-controlled keys overwrite prototype-shaped properties or pull
117
+ * out unintended fields.
118
+ *
119
+ * Fires on virtually any computed property access; expect a high
120
+ * false-positive rate in normal application code.
121
+ *
122
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-object-injection.md
123
+ */
124
+ "security/detect-object-injection"?: TtscLintRuleSetting;
125
+
126
+ /**
127
+ * Detect direct equality comparisons involving secret-like identifiers (`if
128
+ * (token === expected)`) — use `crypto.timingSafeEqual` instead.
129
+ *
130
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-possible-timing-attacks.md
131
+ */
132
+ "security/detect-possible-timing-attacks"?: TtscLintRuleSetting;
133
+
134
+ /**
135
+ * Detect `crypto.pseudoRandomBytes`, which produces values that are not
136
+ * cryptographically secure.
137
+ *
138
+ * Tokens, session ids, and key material must use `crypto.randomBytes` (or Web
139
+ * Crypto's `getRandomValues`) instead.
140
+ *
141
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-pseudoRandomBytes.md
142
+ */
143
+ "security/detect-pseudoRandomBytes"?: TtscLintRuleSetting;
144
+
145
+ /**
146
+ * Detect regex literals with catastrophic backtracking potential (ReDoS) —
147
+ * typically nested or overlapping quantifiers over the same character set.
148
+ *
149
+ * Matching caller-controlled input against such a pattern can block the event
150
+ * loop for seconds.
151
+ *
152
+ * @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-unsafe-regex.md
153
+ */
154
+ "security/detect-unsafe-regex"?: TtscLintRuleSetting;
155
+ }