@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,339 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * JSX accessibility rules from `eslint-plugin-jsx-a11y`, applied to
5
+ * TSX (and JSX-in-TS) sources.
6
+ *
7
+ * Checks the static structure of JSX elements against WAI-ARIA
8
+ * authoring guidance — interactive controls should be focusable,
9
+ * labels should reference a control, ARIA properties should match the
10
+ * element role, and so on. Runtime accessibility issues require live
11
+ * audits; this family catches the statically-decidable subset.
12
+ *
13
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y
14
+ */
15
+ export interface ITtscLintJsxA11yRules {
16
+ /**
17
+ * Require image-like JSX elements (`<img>`, `<input
18
+ * type="image">`, `<object>`, `<area>`) to expose alt text or an
19
+ * ARIA label.
20
+ *
21
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/alt-text.md
22
+ */
23
+ "jsx-a11y/alt-text"?: TtscLintRuleSetting;
24
+
25
+ /**
26
+ * Reject `<a>` elements whose visible text is one of a small set of
27
+ * phrases that carry no information out of context. Screen-reader
28
+ * users navigate by listing links — "click here" / "more" / "read
29
+ * more" turn that list into noise.
30
+ *
31
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-ambiguous-text.md
32
+ */
33
+ "jsx-a11y/anchor-ambiguous-text"?: TtscLintRuleSetting;
34
+
35
+ /**
36
+ * Reject empty JSX anchors with no accessible content (text,
37
+ * `aria-label`, or labelled child).
38
+ *
39
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-has-content.md
40
+ */
41
+ "jsx-a11y/anchor-has-content"?: TtscLintRuleSetting;
42
+
43
+ /**
44
+ * Reject anchors with missing, `#`-only, empty, or `javascript:`
45
+ * `href` values, all of which break navigation semantics.
46
+ *
47
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-is-valid.md
48
+ */
49
+ "jsx-a11y/anchor-is-valid"?: TtscLintRuleSetting;
50
+
51
+ /**
52
+ * Require `tabIndex` on any element carrying `aria-activedescendant`
53
+ * unless the tag is already focusable by default (`<input>`, etc.) —
54
+ * the composite-widget host must keep document focus for the
55
+ * descendant id to do anything.
56
+ *
57
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-activedescendant-has-tabindex.md
58
+ */
59
+ "jsx-a11y/aria-activedescendant-has-tabindex"?: TtscLintRuleSetting;
60
+
61
+ /**
62
+ * Reject `aria-*` JSX attribute names that are not part of the
63
+ * WAI-ARIA States and Properties spec — catches typos such as
64
+ * `aria-labeledby` (missing second `l`) that silently disable
65
+ * assistive-tech support.
66
+ *
67
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-props.md
68
+ */
69
+ "jsx-a11y/aria-props"?: TtscLintRuleSetting;
70
+
71
+ /**
72
+ * Validate literal values supplied to ARIA properties against the
73
+ * type the spec declares for them — e.g. `aria-checked` must be
74
+ * one of `true`, `false`, `"mixed"`, and `aria-hidden="yes"` is
75
+ * rejected because the type is boolean.
76
+ *
77
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-proptypes.md
78
+ */
79
+ "jsx-a11y/aria-proptypes"?: TtscLintRuleSetting;
80
+
81
+ /**
82
+ * Require `role` values to be a concrete, non-abstract WAI-ARIA role
83
+ * (`"button"`, `"checkbox"`, ...). Rejects misspellings and abstract
84
+ * roles like `"range"`; computed values are skipped because the
85
+ * concrete role cannot be checked statically.
86
+ *
87
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-role.md
88
+ */
89
+ "jsx-a11y/aria-role"?: TtscLintRuleSetting;
90
+
91
+ /**
92
+ * Reject ARIA roles and attributes on elements that do not
93
+ * support them (e.g. `aria-checked` on a `<meta>` tag).
94
+ *
95
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-unsupported-elements.md
96
+ */
97
+ "jsx-a11y/aria-unsupported-elements"?: TtscLintRuleSetting;
98
+
99
+ /**
100
+ * Validate the literal `autocomplete` token against the HTML spec
101
+ * vocabulary and against the `type` of the surrounding input — e.g.
102
+ * `autocomplete="url"` on `<input type="email">` is rejected because
103
+ * the two sets do not overlap.
104
+ *
105
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/autocomplete-valid.md
106
+ */
107
+ "jsx-a11y/autocomplete-valid"?: TtscLintRuleSetting;
108
+
109
+ /**
110
+ * Require keyboard handlers alongside `onClick` on non-interactive
111
+ * JSX elements so the element is also reachable by keyboard.
112
+ *
113
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/click-events-have-key-events.md
114
+ */
115
+ "jsx-a11y/click-events-have-key-events"?: TtscLintRuleSetting;
116
+
117
+ /**
118
+ * Require interactive controls to have an accessible label
119
+ * (visible text, `aria-label`, or `aria-labelledby`).
120
+ *
121
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/control-has-associated-label.md
122
+ */
123
+ "jsx-a11y/control-has-associated-label"?: TtscLintRuleSetting;
124
+
125
+ /**
126
+ * Reject empty JSX headings (`<h1>{}</h1>`) — assistive
127
+ * technology cannot announce content that does not exist.
128
+ *
129
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/heading-has-content.md
130
+ */
131
+ "jsx-a11y/heading-has-content"?: TtscLintRuleSetting;
132
+
133
+ /**
134
+ * Require `<html>` JSX elements to declare a non-empty `lang`
135
+ * attribute so screen readers can pick the correct pronunciation.
136
+ * Largely superseded by `jsx-a11y/lang`, which also validates the
137
+ * tag value.
138
+ *
139
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/html-has-lang.md
140
+ */
141
+ "jsx-a11y/html-has-lang"?: TtscLintRuleSetting;
142
+
143
+ /**
144
+ * Require every `<iframe>` JSX element to declare a non-empty,
145
+ * unique `title` so assistive tech can announce the embedded
146
+ * content. Empty strings, booleans, numbers, and `{...spread}`
147
+ * without a literal title are all flagged.
148
+ *
149
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/iframe-has-title.md
150
+ */
151
+ "jsx-a11y/iframe-has-title"?: TtscLintRuleSetting;
152
+
153
+ /**
154
+ * Reject redundant words such as *image*, *photo*, or *picture*
155
+ * inside the `alt` attribute of an `<img>` — the role already
156
+ * conveys "this is an image".
157
+ *
158
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/img-redundant-alt.md
159
+ */
160
+ "jsx-a11y/img-redundant-alt"?: TtscLintRuleSetting;
161
+
162
+ /**
163
+ * Require elements with interactive ARIA roles (`role="button"`,
164
+ * `role="link"`, ...) to be focusable.
165
+ *
166
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/interactive-supports-focus.md
167
+ */
168
+ "jsx-a11y/interactive-supports-focus"?: TtscLintRuleSetting;
169
+
170
+ /**
171
+ * Require `<label>` elements to either wrap a form control or
172
+ * reference one via `htmlFor`.
173
+ *
174
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-associated-control.md
175
+ */
176
+ "jsx-a11y/label-has-associated-control"?: TtscLintRuleSetting;
177
+
178
+ /**
179
+ * Deprecated predecessor of `label-has-associated-control`. Checks
180
+ * the same nesting / `htmlFor` association requirement and supports
181
+ * configuring which custom components count as labels. Off in
182
+ * `recommended`; kept only for legacy configs.
183
+ *
184
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-for.md
185
+ */
186
+ "jsx-a11y/label-has-for"?: TtscLintRuleSetting;
187
+
188
+ /**
189
+ * Require the `<html lang>` value to be a valid IETF BCP-47 tag
190
+ * (`"en"`, `"en-US"`, ...). Superset of `html-has-lang`, since it
191
+ * also catches present-but-invalid tags like `lang="foo"`.
192
+ *
193
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/lang.md
194
+ */
195
+ "jsx-a11y/lang"?: TtscLintRuleSetting;
196
+
197
+ /**
198
+ * Require `<audio>` and `<video>` elements to provide a `<track
199
+ * kind="captions">` child.
200
+ *
201
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/media-has-caption.md
202
+ */
203
+ "jsx-a11y/media-has-caption"?: TtscLintRuleSetting;
204
+
205
+ /**
206
+ * Require `onMouseOver` / `onMouseOut` handlers to have
207
+ * `onFocus` / `onBlur` parity so keyboard users get the same
208
+ * interaction.
209
+ *
210
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/mouse-events-have-key-events.md
211
+ */
212
+ "jsx-a11y/mouse-events-have-key-events"?: TtscLintRuleSetting;
213
+
214
+ /**
215
+ * Reject the `accessKey` JSX attribute — it conflicts with
216
+ * assistive-technology keyboard shortcuts.
217
+ *
218
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-access-key.md
219
+ */
220
+ "jsx-a11y/no-access-key"?: TtscLintRuleSetting;
221
+
222
+ /**
223
+ * Reject `aria-hidden` on focusable JSX elements — focus would
224
+ * land on an element hidden from assistive tech.
225
+ *
226
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-aria-hidden-on-focusable.md
227
+ */
228
+ "jsx-a11y/no-aria-hidden-on-focusable"?: TtscLintRuleSetting;
229
+
230
+ /**
231
+ * Reject `autoFocus` / `autofocus` JSX attributes — they steal
232
+ * focus on page load and disorient keyboard users.
233
+ *
234
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-autofocus.md
235
+ */
236
+ "jsx-a11y/no-autofocus"?: TtscLintRuleSetting;
237
+
238
+ /**
239
+ * Reject `<blink>` and `<marquee>` — moving content cannot be
240
+ * paused and harms users with cognitive or visual impairments
241
+ * (WCAG 2.2.2). The list is closed: extra elements cannot be added.
242
+ *
243
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-distracting-elements.md
244
+ */
245
+ "jsx-a11y/no-distracting-elements"?: TtscLintRuleSetting;
246
+
247
+ /**
248
+ * Reject non-interactive ARIA roles applied to natively
249
+ * interactive elements (e.g. `<button role="presentation">`).
250
+ *
251
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-interactive-element-to-noninteractive-role.md
252
+ */
253
+ "jsx-a11y/no-interactive-element-to-noninteractive-role"?: TtscLintRuleSetting;
254
+
255
+ /**
256
+ * Reject interaction event handlers (`onClick`, `onKeyDown`)
257
+ * placed on known non-interactive elements without a role
258
+ * override.
259
+ *
260
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-interactions.md
261
+ */
262
+ "jsx-a11y/no-noninteractive-element-interactions"?: TtscLintRuleSetting;
263
+
264
+ /**
265
+ * Reject interactive ARIA roles applied to non-interactive
266
+ * elements (e.g. `<li role="button">`); use the matching
267
+ * interactive tag.
268
+ *
269
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-to-interactive-role.md
270
+ */
271
+ "jsx-a11y/no-noninteractive-element-to-interactive-role"?: TtscLintRuleSetting;
272
+
273
+ /**
274
+ * Reject `tabIndex` on non-interactive JSX elements that have
275
+ * no interactive role.
276
+ *
277
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-tabindex.md
278
+ */
279
+ "jsx-a11y/no-noninteractive-tabindex"?: TtscLintRuleSetting;
280
+
281
+ /**
282
+ * Reject explicit `role` attributes that duplicate the
283
+ * native semantics of the element (e.g. `<button
284
+ * role="button">`).
285
+ *
286
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-redundant-roles.md
287
+ */
288
+ "jsx-a11y/no-redundant-roles"?: TtscLintRuleSetting;
289
+
290
+ /**
291
+ * Require static elements with interaction handlers to declare
292
+ * an interactive `role`.
293
+ *
294
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-static-element-interactions.md
295
+ */
296
+ "jsx-a11y/no-static-element-interactions"?: TtscLintRuleSetting;
297
+
298
+ /**
299
+ * Prefer native JSX tags over `div` / `span` plus an equivalent
300
+ * `role` (e.g. `<button>` over `<div role="button">`).
301
+ *
302
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/prefer-tag-over-role.md
303
+ */
304
+ "jsx-a11y/prefer-tag-over-role"?: TtscLintRuleSetting;
305
+
306
+ /**
307
+ * Require ARIA properties that the chosen role mandates (e.g.
308
+ * `aria-checked` on `role="checkbox"`).
309
+ *
310
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-has-required-aria-props.md
311
+ */
312
+ "jsx-a11y/role-has-required-aria-props"?: TtscLintRuleSetting;
313
+
314
+ /**
315
+ * Reject ARIA properties that the role does not support (e.g.
316
+ * `aria-checked` on `role="link"`).
317
+ *
318
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-supports-aria-props.md
319
+ */
320
+ "jsx-a11y/role-supports-aria-props"?: TtscLintRuleSetting;
321
+
322
+ /**
323
+ * Restrict the `scope` attribute to `<th>` cells. On any other tag
324
+ * (`<div scope="col">`, `<td scope="row">`) the attribute is ignored
325
+ * by browsers and confuses table-aware assistive tech.
326
+ *
327
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/scope.md
328
+ */
329
+ "jsx-a11y/scope"?: TtscLintRuleSetting;
330
+
331
+ /**
332
+ * Reject `tabIndex` values greater than zero. Positive indices jump
333
+ * the keyboard focus order out of document order and almost always
334
+ * desynchronize from later DOM changes; `0` and `-1` remain allowed.
335
+ *
336
+ * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/tabindex-no-positive.md
337
+ */
338
+ "jsx-a11y/tabindex-no-positive"?: TtscLintRuleSetting;
339
+ }
@@ -0,0 +1,206 @@
1
+ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
+
3
+ /**
4
+ * Next.js framework rules from `@next/eslint-plugin-next`, applied to
5
+ * TypeScript and TSX sources inside Next.js apps.
6
+ *
7
+ * Checks Next.js-specific conventions — pages/app routing, `<Head>`
8
+ * placement, font and script loading, image and link components —
9
+ * that the framework's runtime treats as load-bearing.
10
+ *
11
+ * @reference https://nextjs.org/docs/app/api-reference/config/eslint
12
+ */
13
+ export interface ITtscLintNextjsRules {
14
+ /**
15
+ * Require a non-blocking `display=` value on Google Fonts
16
+ * stylesheet links; reject `auto`, `block`, and `fallback`, which
17
+ * keep text invisible while the font loads and hurt LCP. Prefer
18
+ * `optional` or `swap`.
19
+ *
20
+ * @reference https://nextjs.org/docs/messages/google-font-display
21
+ */
22
+ "nextjs/google-font-display"?: TtscLintRuleSetting;
23
+
24
+ /**
25
+ * Require `rel="preconnect"` for `fonts.gstatic.com` links to
26
+ * shave latency off Google Font fetches.
27
+ *
28
+ * @reference https://nextjs.org/docs/messages/google-font-preconnect
29
+ */
30
+ "nextjs/google-font-preconnect"?: TtscLintRuleSetting;
31
+
32
+ /**
33
+ * Require an `id` attribute on inline `<Script>` components from
34
+ * `next/script`.
35
+ *
36
+ * Next.js uses the id to track the script across client
37
+ * navigations and to satisfy its loading-strategy budget; an
38
+ * inline script without one is silently dropped on subsequent
39
+ * renders.
40
+ *
41
+ * @reference https://nextjs.org/docs/messages/inline-script-id
42
+ */
43
+ "nextjs/inline-script-id"?: TtscLintRuleSetting;
44
+
45
+ /**
46
+ * Prefer the Next.js Google Analytics integration over
47
+ * hand-written `gtag` script tags.
48
+ *
49
+ * @reference https://nextjs.org/docs/messages/next-script-for-ga
50
+ */
51
+ "nextjs/next-script-for-ga"?: TtscLintRuleSetting;
52
+
53
+ /**
54
+ * Reject local declarations named `module`, which shadow the
55
+ * CommonJS `module` binding Next.js relies on.
56
+ *
57
+ * @reference https://nextjs.org/docs/messages/no-assign-module-variable
58
+ */
59
+ "nextjs/no-assign-module-variable"?: TtscLintRuleSetting;
60
+
61
+ /**
62
+ * Reject `async` function bodies on React Client Components.
63
+ *
64
+ * The client-side React runtime can't await a component's render,
65
+ * so an `async` `"use client"` component returns a pending promise
66
+ * that crashes hydration; do data fetching in a Server Component
67
+ * or in `useEffect` instead.
68
+ *
69
+ * @reference https://nextjs.org/docs/messages/no-async-client-component
70
+ */
71
+ "nextjs/no-async-client-component"?: TtscLintRuleSetting;
72
+
73
+ /**
74
+ * Restrict the `next/script` `strategy="beforeInteractive"` option
75
+ * to `pages/_document.tsx` — anywhere else, the strategy is
76
+ * downgraded silently.
77
+ *
78
+ * @reference https://nextjs.org/docs/messages/no-before-interactive-script-outside-document
79
+ */
80
+ "nextjs/no-before-interactive-script-outside-document"?: TtscLintRuleSetting;
81
+
82
+ /**
83
+ * Reject raw `<link rel="stylesheet">` tags.
84
+ *
85
+ * Next.js handles CSS through its bundler — imported stylesheets,
86
+ * CSS Modules, or `next/font` — and manual stylesheet links skip
87
+ * the runtime's critical-CSS extraction and render-blocking
88
+ * heuristics.
89
+ *
90
+ * @reference https://nextjs.org/docs/messages/no-css-tags
91
+ */
92
+ "nextjs/no-css-tags"?: TtscLintRuleSetting;
93
+
94
+ /**
95
+ * Restrict `next/document` imports to `pages/_document.tsx` —
96
+ * `Document` cannot be used in a regular page.
97
+ *
98
+ * @reference https://nextjs.org/docs/messages/no-document-import-in-page
99
+ */
100
+ "nextjs/no-document-import-in-page"?: TtscLintRuleSetting;
101
+
102
+ /**
103
+ * Reject more than one `<Head>` element from `next/document` in
104
+ * `pages/_document.tsx`.
105
+ *
106
+ * Next.js merges metadata into the single `<Head>` it renders into
107
+ * the HTML shell; additional instances are dropped silently and
108
+ * any tags inside them never reach the page.
109
+ *
110
+ * @reference https://nextjs.org/docs/messages/no-duplicate-head
111
+ */
112
+ "nextjs/no-duplicate-head"?: TtscLintRuleSetting;
113
+
114
+ /**
115
+ * Reject raw `<head>` elements outside the `app/` directory —
116
+ * use `next/head` or the metadata exports.
117
+ *
118
+ * @reference https://nextjs.org/docs/messages/no-head-element
119
+ */
120
+ "nextjs/no-head-element"?: TtscLintRuleSetting;
121
+
122
+ /**
123
+ * Reject `next/head` imports inside `pages/_document.tsx` — use
124
+ * `next/document`'s `Head` there.
125
+ *
126
+ * @reference https://nextjs.org/docs/messages/no-head-import-in-document
127
+ */
128
+ "nextjs/no-head-import-in-document"?: TtscLintRuleSetting;
129
+
130
+ /**
131
+ * Prefer `next/link` for internal anchors with a static `href`,
132
+ * since `Link` performs client-side routing.
133
+ *
134
+ * @reference https://nextjs.org/docs/messages/no-html-link-for-pages
135
+ */
136
+ "nextjs/no-html-link-for-pages"?: TtscLintRuleSetting;
137
+
138
+ /**
139
+ * Prefer `next/image` over raw `<img>` elements so the framework
140
+ * can optimize the asset.
141
+ *
142
+ * @reference https://nextjs.org/docs/messages/no-img-element
143
+ */
144
+ "nextjs/no-img-element"?: TtscLintRuleSetting;
145
+
146
+ /**
147
+ * Reject Google font `<link>` tags inside regular pages files —
148
+ * load fonts in `_document.tsx` (pages router) or via
149
+ * `next/font` (app router).
150
+ *
151
+ * @reference https://nextjs.org/docs/messages/no-page-custom-font
152
+ */
153
+ "nextjs/no-page-custom-font"?: TtscLintRuleSetting;
154
+
155
+ /**
156
+ * Reject `next/script` inside `next/head` — `<Script>` must
157
+ * appear in the JSX tree, not in `<Head>`.
158
+ *
159
+ * @reference https://nextjs.org/docs/messages/no-script-component-in-head
160
+ */
161
+ "nextjs/no-script-component-in-head"?: TtscLintRuleSetting;
162
+
163
+ /**
164
+ * Reject styled-jsx tags inside `pages/_document.tsx`, which the
165
+ * server renders incorrectly.
166
+ *
167
+ * @reference https://nextjs.org/docs/messages/no-styled-jsx-in-document
168
+ */
169
+ "nextjs/no-styled-jsx-in-document"?: TtscLintRuleSetting;
170
+
171
+ /**
172
+ * Require `async` or `defer` on external raw `<script>` tags so
173
+ * loading does not block render.
174
+ *
175
+ * @reference https://nextjs.org/docs/messages/no-sync-scripts
176
+ */
177
+ "nextjs/no-sync-scripts"?: TtscLintRuleSetting;
178
+
179
+ /**
180
+ * Reject `<title>` inside `Head` from `next/document`. Set the
181
+ * title from the metadata exports instead.
182
+ *
183
+ * @reference https://nextjs.org/docs/messages/no-title-in-document-head
184
+ */
185
+ "nextjs/no-title-in-document-head"?: TtscLintRuleSetting;
186
+
187
+ /**
188
+ * Catch near-miss typos in Next.js data-fetching export names
189
+ * (`getStaticProps`, `getStaticPaths`, `getServerSideProps`).
190
+ *
191
+ * A misspelled export is treated as ordinary module state, so the
192
+ * page silently falls back to client-side rendering with no
193
+ * build-time warning.
194
+ *
195
+ * @reference https://nextjs.org/docs/messages/no-typos
196
+ */
197
+ "nextjs/no-typos"?: TtscLintRuleSetting;
198
+
199
+ /**
200
+ * Reject Polyfill.io script URLs — Next.js already polyfills
201
+ * modern browsers, and Polyfill.io has a checkered history.
202
+ *
203
+ * @reference https://nextjs.org/docs/messages/no-unwanted-polyfillio
204
+ */
205
+ "nextjs/no-unwanted-polyfillio"?: TtscLintRuleSetting;
206
+ }