@ttsc/lint 0.14.0-dev.20260529.2 → 0.14.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 (380) hide show
  1. package/README.md +23 -25
  2. package/lib/defaultFormat.d.ts +10 -6
  3. package/lib/defaultFormat.js +10 -6
  4. package/lib/defaultFormat.js.map +1 -1
  5. package/lib/structures/ITtscLintConfig.d.ts +5 -5
  6. package/lib/structures/TtscLintRuleSetting.d.ts +19 -19
  7. package/lib/structures/{ITtscLintFormat.d.ts → format/ITtscLintFormat.d.ts} +45 -70
  8. package/lib/structures/format/ITtscLintFormat.js.map +1 -0
  9. package/lib/structures/format/ITtscLintFormatJsDoc.d.ts +15 -0
  10. package/lib/structures/format/ITtscLintFormatJsDoc.js +3 -0
  11. package/lib/structures/format/ITtscLintFormatJsDoc.js.map +1 -0
  12. package/lib/structures/format/ITtscLintFormatSortImports.d.ts +54 -0
  13. package/lib/structures/format/ITtscLintFormatSortImports.js +3 -0
  14. package/lib/structures/format/ITtscLintFormatSortImports.js.map +1 -0
  15. package/lib/structures/format/index.d.ts +3 -0
  16. package/lib/structures/format/index.js +20 -0
  17. package/lib/structures/format/index.js.map +1 -0
  18. package/lib/structures/index.d.ts +1 -1
  19. package/lib/structures/index.js +1 -1
  20. package/lib/structures/index.js.map +1 -1
  21. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +18 -27
  22. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +4 -5
  23. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -1
  24. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +29 -33
  25. package/lib/structures/rules/ITtscLintContributorRules.d.ts +6 -7
  26. package/lib/structures/rules/ITtscLintCoreRules.d.ts +380 -408
  27. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +5 -5
  28. package/lib/structures/rules/ITtscLintCypressRuleOptions.js +2 -2
  29. package/lib/structures/rules/ITtscLintCypressRules.d.ts +34 -38
  30. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +21 -24
  31. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +2 -2
  32. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +51 -56
  33. package/lib/structures/rules/ITtscLintJestRules.d.ts +63 -74
  34. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +47 -54
  35. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +94 -102
  36. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +50 -55
  37. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +104 -122
  38. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +62 -71
  39. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +4 -4
  40. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +17 -19
  41. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +8 -10
  42. package/lib/structures/rules/ITtscLintReactRuleOptions.js +1 -2
  43. package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -1
  44. package/lib/structures/rules/ITtscLintReactRules.d.ts +91 -104
  45. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +46 -54
  46. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +7 -8
  47. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +45 -52
  48. package/lib/structures/rules/ITtscLintSolidRules.d.ts +53 -56
  49. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +3 -4
  50. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +60 -69
  51. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +31 -37
  52. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +2 -3
  53. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +102 -119
  54. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +460 -518
  55. package/lib/structures/rules/ITtscLintVitestRules.d.ts +43 -51
  56. package/linthost/config.go +89 -72
  57. package/linthost/config_format.go +265 -99
  58. package/linthost/directives.go +5 -1
  59. package/linthost/display_width.go +72 -0
  60. package/linthost/fix.go +26 -1
  61. package/linthost/format.go +222 -25
  62. package/linthost/format_editor_settings.go +262 -0
  63. package/linthost/lsp.go +8 -4
  64. package/linthost/print_dispatch.go +3 -0
  65. package/linthost/print_doc.go +13 -0
  66. package/linthost/print_engine.go +68 -11
  67. package/linthost/print_nodes_array.go +167 -5
  68. package/linthost/print_nodes_call.go +786 -77
  69. package/linthost/print_nodes_function.go +43 -0
  70. package/linthost/print_nodes_imports.go +64 -14
  71. package/linthost/print_nodes_list.go +214 -8
  72. package/linthost/print_nodes_object.go +14 -6
  73. package/linthost/print_nodes_ternary.go +147 -0
  74. package/linthost/rules_boundaries.go +400 -400
  75. package/linthost/rules_camelcase.go +81 -81
  76. package/linthost/rules_complexity.go +52 -51
  77. package/linthost/rules_consistent_return.go +81 -81
  78. package/linthost/rules_core_extra.go +472 -472
  79. package/linthost/rules_curly.go +43 -43
  80. package/linthost/rules_default_case.go +15 -15
  81. package/linthost/rules_default_case_last.go +22 -22
  82. package/linthost/rules_format_arrow_parens.go +213 -0
  83. package/linthost/rules_format_bracket_spacing.go +117 -0
  84. package/linthost/rules_format_clause_join.go +179 -0
  85. package/linthost/rules_format_declaration_header.go +664 -0
  86. package/linthost/rules_format_indent.go +616 -0
  87. package/linthost/rules_format_jsdoc.go +4 -4
  88. package/linthost/rules_format_orphan_semi.go +106 -0
  89. package/linthost/rules_format_parameter_properties.go +175 -0
  90. package/linthost/rules_format_print_width.go +180 -69
  91. package/linthost/rules_format_quote_props.go +169 -0
  92. package/linthost/rules_format_quotes.go +75 -29
  93. package/linthost/rules_format_semi.go +185 -10
  94. package/linthost/rules_format_sort_imports.go +517 -121
  95. package/linthost/rules_format_statement_split.go +368 -0
  96. package/linthost/rules_format_ternary_nullish_parens.go +77 -0
  97. package/linthost/rules_format_trailing_comma.go +21 -2
  98. package/linthost/rules_format_whitespace.go +336 -0
  99. package/linthost/rules_functional.go +688 -688
  100. package/linthost/rules_gap.go +146 -11
  101. package/linthost/rules_grouped_accessor_pairs.go +60 -60
  102. package/linthost/rules_guard_for_in.go +122 -122
  103. package/linthost/rules_id_length.go +44 -44
  104. package/linthost/rules_imports.go +11 -3
  105. package/linthost/rules_init_declarations.go +25 -25
  106. package/linthost/rules_jsx_a11y.go +844 -844
  107. package/linthost/rules_max_classes_per_file.go +24 -24
  108. package/linthost/rules_max_depth.go +43 -43
  109. package/linthost/rules_max_lines.go +53 -53
  110. package/linthost/rules_max_lines_per_function.go +28 -28
  111. package/linthost/rules_max_nested_callbacks.go +26 -26
  112. package/linthost/rules_max_params.go +20 -20
  113. package/linthost/rules_max_statements.go +29 -29
  114. package/linthost/rules_nextjs.go +5 -5
  115. package/linthost/rules_no_else_return.go +38 -38
  116. package/linthost/rules_no_empty_named_blocks.go +45 -45
  117. package/linthost/rules_no_import_assign.go +96 -96
  118. package/linthost/rules_no_invalid_this.go +19 -19
  119. package/linthost/rules_no_loop_func.go +43 -43
  120. package/linthost/rules_no_magic_numbers.go +60 -60
  121. package/linthost/rules_no_mixed_operators.go +44 -44
  122. package/linthost/rules_no_param_reassign.go +64 -64
  123. package/linthost/rules_no_restricted_imports.go +45 -45
  124. package/linthost/rules_no_restricted_syntax.go +17 -17
  125. package/linthost/rules_no_shadow.go +112 -112
  126. package/linthost/rules_no_unreachable.go +36 -36
  127. package/linthost/rules_no_useless_assignment.go +79 -79
  128. package/linthost/rules_no_useless_constructor.go +167 -167
  129. package/linthost/rules_no_useless_return.go +28 -28
  130. package/linthost/rules_prefer_arrow_callback.go +74 -74
  131. package/linthost/rules_prefer_destructuring.go +61 -61
  132. package/linthost/rules_prefer_named_capture_group.go +87 -87
  133. package/linthost/rules_prefer_rest_params.go +61 -61
  134. package/linthost/rules_promise.go +800 -800
  135. package/linthost/rules_react.go +600 -600
  136. package/linthost/rules_react_extras.go +162 -162
  137. package/linthost/rules_react_hooks.go +2 -2
  138. package/linthost/rules_react_perf.go +231 -231
  139. package/linthost/rules_regexp.go +293 -293
  140. package/linthost/rules_security.go +613 -613
  141. package/linthost/rules_sort_imports.go +37 -37
  142. package/linthost/rules_sort_keys.go +88 -88
  143. package/linthost/rules_suggestions.go +13 -0
  144. package/linthost/rules_ts.go +2 -2
  145. package/linthost/rules_ts_async.go +247 -247
  146. package/linthost/rules_ts_class_literal_property_style.go +64 -64
  147. package/linthost/rules_ts_consistent_type_exports.go +209 -209
  148. package/linthost/rules_ts_explicit_function_return_type.go +35 -35
  149. package/linthost/rules_ts_extra.go +6 -2
  150. package/linthost/rules_ts_no_base_to_string.go +140 -140
  151. package/linthost/rules_ts_no_confusing_void.go +28 -28
  152. package/linthost/rules_ts_no_deprecated.go +110 -110
  153. package/linthost/rules_ts_no_for_in_array.go +45 -45
  154. package/linthost/rules_ts_no_magic_numbers.go +67 -67
  155. package/linthost/rules_ts_no_meaningless_void_operator.go +44 -44
  156. package/linthost/rules_ts_no_misused_spread.go +64 -64
  157. package/linthost/rules_ts_no_redundant_type_constituents.go +72 -72
  158. package/linthost/rules_ts_no_restricted_types.go +28 -28
  159. package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +87 -87
  160. package/linthost/rules_ts_no_unnecessary_condition.go +184 -184
  161. package/linthost/rules_ts_no_unnecessary_qualifier.go +72 -72
  162. package/linthost/rules_ts_no_unnecessary_template_expression.go +120 -120
  163. package/linthost/rules_ts_no_unnecessary_type_arguments.go +171 -171
  164. package/linthost/rules_ts_no_unnecessary_type_assertion.go +90 -90
  165. package/linthost/rules_ts_no_unsafe_argument.go +50 -50
  166. package/linthost/rules_ts_no_unsafe_assignment.go +60 -60
  167. package/linthost/rules_ts_no_unsafe_call.go +40 -40
  168. package/linthost/rules_ts_no_unsafe_enum_comparison.go +147 -147
  169. package/linthost/rules_ts_no_unsafe_member_access.go +29 -29
  170. package/linthost/rules_ts_no_unsafe_return.go +64 -64
  171. package/linthost/rules_ts_no_unsafe_unary_minus.go +42 -42
  172. package/linthost/rules_ts_no_useless_constructor.go +20 -20
  173. package/linthost/rules_ts_non_nullable_type_assertion_style.go +60 -60
  174. package/linthost/rules_ts_parameter_properties.go +10 -10
  175. package/linthost/rules_ts_prefer_find.go +116 -116
  176. package/linthost/rules_ts_prefer_includes.go +173 -173
  177. package/linthost/rules_ts_prefer_nullish_coalescing.go +54 -54
  178. package/linthost/rules_ts_prefer_optional_chain.go +156 -156
  179. package/linthost/rules_ts_prefer_promise_reject_errors.go +104 -104
  180. package/linthost/rules_ts_prefer_readonly.go +31 -31
  181. package/linthost/rules_ts_prefer_reduce_type_parameter.go +74 -74
  182. package/linthost/rules_ts_prefer_regexp_exec.go +69 -69
  183. package/linthost/rules_ts_prefer_return_this_type.go +79 -79
  184. package/linthost/rules_ts_prefer_string_starts_ends_with.go +237 -237
  185. package/linthost/rules_ts_promise_function_async.go +41 -41
  186. package/linthost/rules_ts_related_getter_setter_pairs.go +61 -61
  187. package/linthost/rules_ts_require_array_sort_compare.go +58 -58
  188. package/linthost/rules_ts_restrict_plus_operands.go +82 -82
  189. package/linthost/rules_ts_restrict_template_expressions.go +50 -50
  190. package/linthost/rules_ts_simple.go +249 -249
  191. package/linthost/rules_ts_sort_type_constituents.go +88 -88
  192. package/linthost/rules_ts_strict_boolean_expressions.go +103 -103
  193. package/linthost/rules_ts_switch_exhaustiveness_check.go +90 -90
  194. package/linthost/rules_ts_unbound_method.go +65 -65
  195. package/linthost/rules_tsdoc.go +88 -88
  196. package/linthost/rules_unicorn_better_regex.go +1 -1
  197. package/linthost/rules_unicorn_catch_error_name.go +19 -19
  198. package/linthost/rules_unicorn_consistent_assert.go +20 -20
  199. package/linthost/rules_unicorn_consistent_date_clone.go +27 -27
  200. package/linthost/rules_unicorn_consistent_destructuring.go +3 -3
  201. package/linthost/rules_unicorn_consistent_empty_array_spread.go +34 -34
  202. package/linthost/rules_unicorn_consistent_existence_index_check.go +42 -42
  203. package/linthost/rules_unicorn_consistent_function_scoping.go +3 -3
  204. package/linthost/rules_unicorn_consistent_template_literal_escape.go +3 -3
  205. package/linthost/rules_unicorn_custom_error_definition.go +92 -92
  206. package/linthost/rules_unicorn_empty_brace_spaces.go +47 -47
  207. package/linthost/rules_unicorn_error_message.go +34 -34
  208. package/linthost/rules_unicorn_escape_case.go +14 -14
  209. package/linthost/rules_unicorn_expiring_todo_comments.go +36 -36
  210. package/linthost/rules_unicorn_explicit_length_check.go +51 -51
  211. package/linthost/rules_unicorn_filename_case.go +1 -1
  212. package/linthost/rules_unicorn_import_style.go +1 -1
  213. package/linthost/rules_unicorn_isolated_functions.go +2 -2
  214. package/linthost/rules_unicorn_new_for_builtins.go +49 -49
  215. package/linthost/rules_unicorn_no_abusive_eslint_disable.go +31 -31
  216. package/linthost/rules_unicorn_no_accessor_recursion.go +69 -69
  217. package/linthost/rules_unicorn_no_anonymous_default_export.go +40 -40
  218. package/linthost/rules_unicorn_no_array_callback_reference.go +33 -33
  219. package/linthost/rules_unicorn_no_array_for_each.go +14 -14
  220. package/linthost/rules_unicorn_no_array_method_this_argument.go +29 -29
  221. package/linthost/rules_unicorn_no_array_reduce.go +15 -15
  222. package/linthost/rules_unicorn_no_array_reverse.go +17 -17
  223. package/linthost/rules_unicorn_no_array_sort.go +17 -17
  224. package/linthost/rules_unicorn_no_await_expression_member.go +12 -12
  225. package/linthost/rules_unicorn_no_await_in_promise_methods.go +38 -38
  226. package/linthost/rules_unicorn_no_console_spaces.go +30 -30
  227. package/linthost/rules_unicorn_no_document_cookie.go +13 -13
  228. package/linthost/rules_unicorn_no_empty_file.go +16 -16
  229. package/linthost/rules_unicorn_no_for_loop.go +58 -58
  230. package/linthost/rules_unicorn_no_hex_escape.go +11 -11
  231. package/linthost/rules_unicorn_no_immediate_mutation.go +55 -55
  232. package/linthost/rules_unicorn_no_instanceof_builtins.go +34 -34
  233. package/linthost/rules_unicorn_no_invalid_fetch_options.go +52 -52
  234. package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +25 -25
  235. package/linthost/rules_unicorn_no_keyword_prefix.go +56 -56
  236. package/linthost/rules_unicorn_no_lonely_if.go +21 -21
  237. package/linthost/rules_unicorn_no_magic_array_flat_depth.go +22 -22
  238. package/linthost/rules_unicorn_no_named_default.go +25 -25
  239. package/linthost/rules_unicorn_no_negated_condition.go +54 -54
  240. package/linthost/rules_unicorn_no_negation_in_equality_check.go +23 -23
  241. package/linthost/rules_unicorn_no_nested_ternary.go +15 -15
  242. package/linthost/rules_unicorn_no_new_array.go +5 -5
  243. package/linthost/rules_unicorn_no_new_buffer.go +5 -5
  244. package/linthost/rules_unicorn_no_null.go +2 -2
  245. package/linthost/rules_unicorn_no_object_as_default_parameter.go +19 -19
  246. package/linthost/rules_unicorn_no_process_exit.go +17 -17
  247. package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +29 -29
  248. package/linthost/rules_unicorn_no_static_only_class.go +27 -27
  249. package/linthost/rules_unicorn_no_thenable.go +47 -47
  250. package/linthost/rules_unicorn_no_this_assignment.go +10 -10
  251. package/linthost/rules_unicorn_no_typeof_undefined.go +31 -31
  252. package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +23 -23
  253. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +37 -37
  254. package/linthost/rules_unicorn_no_unnecessary_await.go +24 -24
  255. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +22 -22
  256. package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +67 -67
  257. package/linthost/rules_unicorn_no_unreadable_iife.go +22 -22
  258. package/linthost/rules_unicorn_no_useless_collection_argument.go +34 -34
  259. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +18 -18
  260. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +49 -49
  261. package/linthost/rules_unicorn_no_useless_iterator_to_array.go +41 -41
  262. package/linthost/rules_unicorn_no_useless_length_check.go +82 -82
  263. package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +42 -42
  264. package/linthost/rules_unicorn_no_useless_spread.go +38 -38
  265. package/linthost/rules_unicorn_no_useless_switch_case.go +29 -29
  266. package/linthost/rules_unicorn_no_useless_undefined.go +25 -25
  267. package/linthost/rules_unicorn_no_zero_fractions.go +17 -17
  268. package/linthost/rules_unicorn_number_literal_case.go +33 -33
  269. package/linthost/rules_unicorn_numeric_separators_style.go +36 -36
  270. package/linthost/rules_unicorn_prefer_add_event_listener.go +30 -30
  271. package/linthost/rules_unicorn_prefer_array_find.go +27 -27
  272. package/linthost/rules_unicorn_prefer_array_flat.go +25 -25
  273. package/linthost/rules_unicorn_prefer_array_flat_map.go +37 -37
  274. package/linthost/rules_unicorn_prefer_array_index_of.go +108 -108
  275. package/linthost/rules_unicorn_prefer_array_some.go +43 -43
  276. package/linthost/rules_unicorn_prefer_at.go +42 -42
  277. package/linthost/rules_unicorn_prefer_bigint_literals.go +42 -42
  278. package/linthost/rules_unicorn_prefer_blob_reading_methods.go +15 -15
  279. package/linthost/rules_unicorn_prefer_class_fields.go +57 -57
  280. package/linthost/rules_unicorn_prefer_classlist_toggle.go +76 -76
  281. package/linthost/rules_unicorn_prefer_code_point.go +21 -21
  282. package/linthost/rules_unicorn_prefer_date_now.go +47 -47
  283. package/linthost/rules_unicorn_prefer_default_parameters.go +96 -96
  284. package/linthost/rules_unicorn_prefer_dom_node_append.go +14 -14
  285. package/linthost/rules_unicorn_prefer_dom_node_dataset.go +27 -27
  286. package/linthost/rules_unicorn_prefer_dom_node_remove.go +17 -17
  287. package/linthost/rules_unicorn_prefer_dom_node_text_content.go +11 -11
  288. package/linthost/rules_unicorn_prefer_event_target.go +10 -10
  289. package/linthost/rules_unicorn_prefer_export_from.go +99 -99
  290. package/linthost/rules_unicorn_prefer_global_this.go +91 -91
  291. package/linthost/rules_unicorn_prefer_import_meta_properties.go +38 -38
  292. package/linthost/rules_unicorn_prefer_includes.go +108 -108
  293. package/linthost/rules_unicorn_prefer_json_parse_buffer.go +37 -37
  294. package/linthost/rules_unicorn_prefer_keyboard_event_key.go +10 -10
  295. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +20 -20
  296. package/linthost/rules_unicorn_prefer_math_min_max.go +33 -33
  297. package/linthost/rules_unicorn_prefer_math_trunc.go +32 -32
  298. package/linthost/rules_unicorn_prefer_modern_dom_apis.go +18 -18
  299. package/linthost/rules_unicorn_prefer_modern_math_apis.go +38 -38
  300. package/linthost/rules_unicorn_prefer_module.go +22 -22
  301. package/linthost/rules_unicorn_prefer_native_coercion_functions.go +73 -73
  302. package/linthost/rules_unicorn_prefer_negative_index.go +46 -46
  303. package/linthost/rules_unicorn_prefer_node_protocol.go +90 -90
  304. package/linthost/rules_unicorn_prefer_number_properties.go +57 -57
  305. package/linthost/rules_unicorn_prefer_object_from_entries.go +26 -26
  306. package/linthost/rules_unicorn_prefer_optional_catch_binding.go +24 -24
  307. package/linthost/rules_unicorn_prefer_prototype_methods.go +25 -25
  308. package/linthost/rules_unicorn_prefer_query_selector.go +25 -25
  309. package/linthost/rules_unicorn_prefer_reflect_apply.go +10 -10
  310. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +47 -47
  311. package/linthost/rules_unicorn_prefer_response_static_json.go +26 -26
  312. package/linthost/rules_unicorn_prefer_set_has.go +16 -16
  313. package/linthost/rules_unicorn_prefer_set_size.go +22 -22
  314. package/linthost/rules_unicorn_prefer_simple_condition_first.go +3 -3
  315. package/linthost/rules_unicorn_prefer_single_call.go +59 -59
  316. package/linthost/rules_unicorn_prefer_spread.go +24 -24
  317. package/linthost/rules_unicorn_prefer_string_raw.go +12 -12
  318. package/linthost/rules_unicorn_prefer_string_replace_all.go +46 -46
  319. package/linthost/rules_unicorn_prefer_string_slice.go +17 -17
  320. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +104 -104
  321. package/linthost/rules_unicorn_prefer_string_trim_start_end.go +21 -21
  322. package/linthost/rules_unicorn_prefer_structured_clone.go +36 -36
  323. package/linthost/rules_unicorn_prefer_switch.go +65 -65
  324. package/linthost/rules_unicorn_prefer_ternary.go +35 -35
  325. package/linthost/rules_unicorn_prefer_top_level_await.go +34 -34
  326. package/linthost/rules_unicorn_prefer_type_error.go +84 -84
  327. package/linthost/rules_unicorn_prevent_abbreviations.go +68 -68
  328. package/linthost/rules_unicorn_relative_url_style.go +19 -19
  329. package/linthost/rules_unicorn_require_array_join_separator.go +18 -18
  330. package/linthost/rules_unicorn_require_module_attributes.go +25 -25
  331. package/linthost/rules_unicorn_require_module_specifiers.go +28 -28
  332. package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +18 -18
  333. package/linthost/rules_unicorn_require_post_message_target_origin.go +18 -18
  334. package/linthost/rules_unicorn_string_content.go +1 -1
  335. package/linthost/rules_unicorn_switch_case_braces.go +16 -16
  336. package/linthost/rules_unicorn_switch_case_break_position.go +3 -3
  337. package/linthost/rules_unicorn_template_indent.go +1 -1
  338. package/linthost/rules_unicorn_text_encoding_identifier_case.go +36 -36
  339. package/linthost/rules_unicorn_throw_new_error.go +30 -30
  340. package/linthost/rules_var.go +273 -3
  341. package/package.json +3 -3
  342. package/src/defaultFormat.ts +11 -7
  343. package/src/structures/ITtscLintConfig.ts +5 -5
  344. package/src/structures/TtscLintRuleSetting.ts +19 -19
  345. package/src/structures/{ITtscLintFormat.ts → format/ITtscLintFormat.ts} +48 -75
  346. package/src/structures/format/ITtscLintFormatJsDoc.ts +16 -0
  347. package/src/structures/format/ITtscLintFormatSortImports.ts +62 -0
  348. package/src/structures/format/index.ts +3 -0
  349. package/src/structures/index.ts +1 -1
  350. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +20 -31
  351. package/src/structures/rules/ITtscLintBoundariesRules.ts +32 -36
  352. package/src/structures/rules/ITtscLintContributorRules.ts +6 -7
  353. package/src/structures/rules/ITtscLintCoreRules.ts +380 -408
  354. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +5 -5
  355. package/src/structures/rules/ITtscLintCypressRules.ts +34 -38
  356. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +28 -41
  357. package/src/structures/rules/ITtscLintFunctionalRules.ts +51 -56
  358. package/src/structures/rules/ITtscLintJestRules.ts +63 -74
  359. package/src/structures/rules/ITtscLintJsdocRules.ts +47 -54
  360. package/src/structures/rules/ITtscLintJsxA11yRules.ts +94 -102
  361. package/src/structures/rules/ITtscLintNextjsRules.ts +50 -55
  362. package/src/structures/rules/ITtscLintPlaywrightRules.ts +104 -122
  363. package/src/structures/rules/ITtscLintPromiseRules.ts +62 -71
  364. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +4 -4
  365. package/src/structures/rules/ITtscLintReactPerfRules.ts +17 -19
  366. package/src/structures/rules/ITtscLintReactRuleOptions.ts +8 -10
  367. package/src/structures/rules/ITtscLintReactRules.ts +91 -104
  368. package/src/structures/rules/ITtscLintRegexpRules.ts +46 -54
  369. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +7 -8
  370. package/src/structures/rules/ITtscLintSecurityRules.ts +45 -52
  371. package/src/structures/rules/ITtscLintSolidRules.ts +53 -56
  372. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +3 -4
  373. package/src/structures/rules/ITtscLintStorybookRules.ts +60 -69
  374. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +31 -37
  375. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +2 -3
  376. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +102 -119
  377. package/src/structures/rules/ITtscLintTypeScriptRules.ts +460 -518
  378. package/src/structures/rules/ITtscLintVitestRules.ts +43 -51
  379. package/lib/structures/ITtscLintFormat.js.map +0 -1
  380. /package/lib/structures/{ITtscLintFormat.js → format/ITtscLintFormat.js} +0 -0
@@ -1,78 +1,76 @@
1
1
  import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
2
2
 
3
3
  /**
4
- * JSX accessibility rules from `eslint-plugin-jsx-a11y`, applied to
5
- * TSX (and JSX-in-TS) sources.
4
+ * JSX accessibility rules from `eslint-plugin-jsx-a11y`, applied to TSX (and
5
+ * JSX-in-TS) sources.
6
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.
7
+ * Checks the static structure of JSX elements against WAI-ARIA authoring
8
+ * guidance — interactive controls should be focusable, labels should reference
9
+ * a control, ARIA properties should match the element role, and so on. Runtime
10
+ * accessibility issues require live audits; this family catches the
11
+ * statically-decidable subset.
12
12
  *
13
13
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y
14
14
  */
15
15
  export interface ITtscLintJsxA11yRules {
16
16
  /**
17
- * Require image-like JSX elements (`<img>`, `<input
18
- * type="image">`, `<object>`, `<area>`) to expose alt text or an
19
- * ARIA label.
17
+ * Require image-like JSX elements (`<img>`, `<input type="image">`,
18
+ * `<object>`, `<area>`) to expose alt text or an ARIA label.
20
19
  *
21
20
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/alt-text.md
22
21
  */
23
22
  "jsx-a11y/alt-text"?: TtscLintRuleSetting;
24
23
 
25
24
  /**
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.
25
+ * Reject `<a>` elements whose visible text is one of a small set of phrases
26
+ * that carry no information out of context. Screen-reader users navigate by
27
+ * listing links — "click here" / "more" / "read more" turn that list into
28
+ * noise.
30
29
  *
31
30
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-ambiguous-text.md
32
31
  */
33
32
  "jsx-a11y/anchor-ambiguous-text"?: TtscLintRuleSetting;
34
33
 
35
34
  /**
36
- * Reject empty JSX anchors with no accessible content (text,
37
- * `aria-label`, or labelled child).
35
+ * Reject empty JSX anchors with no accessible content (text, `aria-label`, or
36
+ * labelled child).
38
37
  *
39
38
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-has-content.md
40
39
  */
41
40
  "jsx-a11y/anchor-has-content"?: TtscLintRuleSetting;
42
41
 
43
42
  /**
44
- * Reject anchors with missing, `#`-only, empty, or `javascript:`
45
- * `href` values, all of which break navigation semantics.
43
+ * Reject anchors with missing, `#`-only, empty, or `javascript:` `href`
44
+ * values, all of which break navigation semantics.
46
45
  *
47
46
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-is-valid.md
48
47
  */
49
48
  "jsx-a11y/anchor-is-valid"?: TtscLintRuleSetting;
50
49
 
51
50
  /**
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.
51
+ * Require `tabIndex` on any element carrying `aria-activedescendant` unless
52
+ * the tag is already focusable by default (`<input>`, etc.) — the
53
+ * composite-widget host must keep document focus for the descendant id to do
54
+ * anything.
56
55
  *
57
56
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-activedescendant-has-tabindex.md
58
57
  */
59
58
  "jsx-a11y/aria-activedescendant-has-tabindex"?: TtscLintRuleSetting;
60
59
 
61
60
  /**
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.
61
+ * Reject `aria-*` JSX attribute names that are not part of the WAI-ARIA
62
+ * States and Properties spec — catches typos such as `aria-labeledby`
63
+ * (missing second `l`) that silently disable assistive-tech support.
66
64
  *
67
65
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-props.md
68
66
  */
69
67
  "jsx-a11y/aria-props"?: TtscLintRuleSetting;
70
68
 
71
69
  /**
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.
70
+ * Validate literal values supplied to ARIA properties against the type the
71
+ * spec declares for them — e.g. `aria-checked` must be one of `true`,
72
+ * `false`, `"mixed"`, and `aria-hidden="yes"` is rejected because the type is
73
+ * boolean.
76
74
  *
77
75
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-proptypes.md
78
76
  */
@@ -80,80 +78,78 @@ export interface ITtscLintJsxA11yRules {
80
78
 
81
79
  /**
82
80
  * 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.
81
+ * (`"button"`, `"checkbox"`, ...). Rejects misspellings and abstract roles
82
+ * like `"range"`; computed values are skipped because the concrete role
83
+ * cannot be checked statically.
86
84
  *
87
85
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-role.md
88
86
  */
89
87
  "jsx-a11y/aria-role"?: TtscLintRuleSetting;
90
88
 
91
89
  /**
92
- * Reject ARIA roles and attributes on elements that do not
93
- * support them (e.g. `aria-checked` on a `<meta>` tag).
90
+ * Reject ARIA roles and attributes on elements that do not support them (e.g.
91
+ * `aria-checked` on a `<meta>` tag).
94
92
  *
95
93
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-unsupported-elements.md
96
94
  */
97
95
  "jsx-a11y/aria-unsupported-elements"?: TtscLintRuleSetting;
98
96
 
99
97
  /**
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.
98
+ * Validate the literal `autocomplete` token against the HTML spec vocabulary
99
+ * and against the `type` of the surrounding input — e.g. `autocomplete="url"`
100
+ * on `<input type="email">` is rejected because the two sets do not overlap.
104
101
  *
105
102
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/autocomplete-valid.md
106
103
  */
107
104
  "jsx-a11y/autocomplete-valid"?: TtscLintRuleSetting;
108
105
 
109
106
  /**
110
- * Require keyboard handlers alongside `onClick` on non-interactive
111
- * JSX elements so the element is also reachable by keyboard.
107
+ * Require keyboard handlers alongside `onClick` on non-interactive JSX
108
+ * elements so the element is also reachable by keyboard.
112
109
  *
113
110
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/click-events-have-key-events.md
114
111
  */
115
112
  "jsx-a11y/click-events-have-key-events"?: TtscLintRuleSetting;
116
113
 
117
114
  /**
118
- * Require interactive controls to have an accessible label
119
- * (visible text, `aria-label`, or `aria-labelledby`).
115
+ * Require interactive controls to have an accessible label (visible text,
116
+ * `aria-label`, or `aria-labelledby`).
120
117
  *
121
118
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/control-has-associated-label.md
122
119
  */
123
120
  "jsx-a11y/control-has-associated-label"?: TtscLintRuleSetting;
124
121
 
125
122
  /**
126
- * Reject empty JSX headings (`<h1>{}</h1>`) — assistive
127
- * technology cannot announce content that does not exist.
123
+ * Reject empty JSX headings (`<h1>{}</h1>`) — assistive technology cannot
124
+ * announce content that does not exist.
128
125
  *
129
126
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/heading-has-content.md
130
127
  */
131
128
  "jsx-a11y/heading-has-content"?: TtscLintRuleSetting;
132
129
 
133
130
  /**
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.
131
+ * Require `<html>` JSX elements to declare a non-empty `lang` attribute so
132
+ * screen readers can pick the correct pronunciation. Largely superseded by
133
+ * `jsx-a11y/lang`, which also validates the tag value.
138
134
  *
139
135
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/html-has-lang.md
140
136
  */
141
137
  "jsx-a11y/html-has-lang"?: TtscLintRuleSetting;
142
138
 
143
139
  /**
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.
140
+ * Require every `<iframe>` JSX element to declare a non-empty, unique `title`
141
+ * so assistive tech can announce the embedded content. Empty strings,
142
+ * booleans, numbers, and `{...spread}` without a literal title are all
143
+ * flagged.
148
144
  *
149
145
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/iframe-has-title.md
150
146
  */
151
147
  "jsx-a11y/iframe-has-title"?: TtscLintRuleSetting;
152
148
 
153
149
  /**
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".
150
+ * Reject redundant words such as _image_, _photo_, or _picture_ inside the
151
+ * `alt` attribute of an `<img>` — the role already conveys "this is an
152
+ * image".
157
153
  *
158
154
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/img-redundant-alt.md
159
155
  */
@@ -168,27 +164,27 @@ export interface ITtscLintJsxA11yRules {
168
164
  "jsx-a11y/interactive-supports-focus"?: TtscLintRuleSetting;
169
165
 
170
166
  /**
171
- * Require `<label>` elements to either wrap a form control or
172
- * reference one via `htmlFor`.
167
+ * Require `<label>` elements to either wrap a form control or reference one
168
+ * via `htmlFor`.
173
169
  *
174
170
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-associated-control.md
175
171
  */
176
172
  "jsx-a11y/label-has-associated-control"?: TtscLintRuleSetting;
177
173
 
178
174
  /**
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.
175
+ * Deprecated predecessor of `label-has-associated-control`. Checks the same
176
+ * nesting / `htmlFor` association requirement and supports configuring which
177
+ * custom components count as labels. Off in `recommended`; kept only for
178
+ * legacy configs.
183
179
  *
184
180
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-for.md
185
181
  */
186
182
  "jsx-a11y/label-has-for"?: TtscLintRuleSetting;
187
183
 
188
184
  /**
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"`.
185
+ * Require the `<html lang>` value to be a valid IETF BCP-47 tag (`"en"`,
186
+ * `"en-US"`, ...). Superset of `html-has-lang`, since it also catches
187
+ * present-but-invalid tags like `lang="foo"`.
192
188
  *
193
189
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/lang.md
194
190
  */
@@ -203,9 +199,8 @@ export interface ITtscLintJsxA11yRules {
203
199
  "jsx-a11y/media-has-caption"?: TtscLintRuleSetting;
204
200
 
205
201
  /**
206
- * Require `onMouseOver` / `onMouseOut` handlers to have
207
- * `onFocus` / `onBlur` parity so keyboard users get the same
208
- * interaction.
202
+ * Require `onMouseOver` / `onMouseOut` handlers to have `onFocus` / `onBlur`
203
+ * parity so keyboard users get the same interaction.
209
204
  *
210
205
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/mouse-events-have-key-events.md
211
206
  */
@@ -220,118 +215,115 @@ export interface ITtscLintJsxA11yRules {
220
215
  "jsx-a11y/no-access-key"?: TtscLintRuleSetting;
221
216
 
222
217
  /**
223
- * Reject `aria-hidden` on focusable JSX elements — focus would
224
- * land on an element hidden from assistive tech.
218
+ * Reject `aria-hidden` on focusable JSX elements — focus would land on an
219
+ * element hidden from assistive tech.
225
220
  *
226
221
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-aria-hidden-on-focusable.md
227
222
  */
228
223
  "jsx-a11y/no-aria-hidden-on-focusable"?: TtscLintRuleSetting;
229
224
 
230
225
  /**
231
- * Reject `autoFocus` / `autofocus` JSX attributes — they steal
232
- * focus on page load and disorient keyboard users.
226
+ * Reject `autoFocus` / `autofocus` JSX attributes — they steal focus on page
227
+ * load and disorient keyboard users.
233
228
  *
234
229
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-autofocus.md
235
230
  */
236
231
  "jsx-a11y/no-autofocus"?: TtscLintRuleSetting;
237
232
 
238
233
  /**
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.
234
+ * Reject `<blink>` and `<marquee>` — moving content cannot be paused and
235
+ * harms users with cognitive or visual impairments (WCAG 2.2.2). The list is
236
+ * closed: extra elements cannot be added.
242
237
  *
243
238
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-distracting-elements.md
244
239
  */
245
240
  "jsx-a11y/no-distracting-elements"?: TtscLintRuleSetting;
246
241
 
247
242
  /**
248
- * Reject non-interactive ARIA roles applied to natively
249
- * interactive elements (e.g. `<button role="presentation">`).
243
+ * Reject non-interactive ARIA roles applied to natively interactive elements
244
+ * (e.g. `<button role="presentation">`).
250
245
  *
251
246
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-interactive-element-to-noninteractive-role.md
252
247
  */
253
248
  "jsx-a11y/no-interactive-element-to-noninteractive-role"?: TtscLintRuleSetting;
254
249
 
255
250
  /**
256
- * Reject interaction event handlers (`onClick`, `onKeyDown`)
257
- * placed on known non-interactive elements without a role
258
- * override.
251
+ * Reject interaction event handlers (`onClick`, `onKeyDown`) placed on known
252
+ * non-interactive elements without a role override.
259
253
  *
260
254
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-interactions.md
261
255
  */
262
256
  "jsx-a11y/no-noninteractive-element-interactions"?: TtscLintRuleSetting;
263
257
 
264
258
  /**
265
- * Reject interactive ARIA roles applied to non-interactive
266
- * elements (e.g. `<li role="button">`); use the matching
267
- * interactive tag.
259
+ * Reject interactive ARIA roles applied to non-interactive elements (e.g.
260
+ * `<li role="button">`); use the matching interactive tag.
268
261
  *
269
262
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-to-interactive-role.md
270
263
  */
271
264
  "jsx-a11y/no-noninteractive-element-to-interactive-role"?: TtscLintRuleSetting;
272
265
 
273
266
  /**
274
- * Reject `tabIndex` on non-interactive JSX elements that have
275
- * no interactive role.
267
+ * Reject `tabIndex` on non-interactive JSX elements that have no interactive
268
+ * role.
276
269
  *
277
270
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-tabindex.md
278
271
  */
279
272
  "jsx-a11y/no-noninteractive-tabindex"?: TtscLintRuleSetting;
280
273
 
281
274
  /**
282
- * Reject explicit `role` attributes that duplicate the
283
- * native semantics of the element (e.g. `<button
284
- * role="button">`).
275
+ * Reject explicit `role` attributes that duplicate the native semantics of
276
+ * the element (e.g. `<button role="button">`).
285
277
  *
286
278
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-redundant-roles.md
287
279
  */
288
280
  "jsx-a11y/no-redundant-roles"?: TtscLintRuleSetting;
289
281
 
290
282
  /**
291
- * Require static elements with interaction handlers to declare
292
- * an interactive `role`.
283
+ * Require static elements with interaction handlers to declare an interactive
284
+ * `role`.
293
285
  *
294
286
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-static-element-interactions.md
295
287
  */
296
288
  "jsx-a11y/no-static-element-interactions"?: TtscLintRuleSetting;
297
289
 
298
290
  /**
299
- * Prefer native JSX tags over `div` / `span` plus an equivalent
300
- * `role` (e.g. `<button>` over `<div role="button">`).
291
+ * Prefer native JSX tags over `div` / `span` plus an equivalent `role` (e.g.
292
+ * `<button>` over `<div role="button">`).
301
293
  *
302
294
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/prefer-tag-over-role.md
303
295
  */
304
296
  "jsx-a11y/prefer-tag-over-role"?: TtscLintRuleSetting;
305
297
 
306
298
  /**
307
- * Require ARIA properties that the chosen role mandates (e.g.
308
- * `aria-checked` on `role="checkbox"`).
299
+ * Require ARIA properties that the chosen role mandates (e.g. `aria-checked`
300
+ * on `role="checkbox"`).
309
301
  *
310
302
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-has-required-aria-props.md
311
303
  */
312
304
  "jsx-a11y/role-has-required-aria-props"?: TtscLintRuleSetting;
313
305
 
314
306
  /**
315
- * Reject ARIA properties that the role does not support (e.g.
316
- * `aria-checked` on `role="link"`).
307
+ * Reject ARIA properties that the role does not support (e.g. `aria-checked`
308
+ * on `role="link"`).
317
309
  *
318
310
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-supports-aria-props.md
319
311
  */
320
312
  "jsx-a11y/role-supports-aria-props"?: TtscLintRuleSetting;
321
313
 
322
314
  /**
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.
315
+ * Restrict the `scope` attribute to `<th>` cells. On any other tag (`<div
316
+ * scope="col">`, `<td scope="row">`) the attribute is ignored by browsers and
317
+ * confuses table-aware assistive tech.
326
318
  *
327
319
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/scope.md
328
320
  */
329
321
  "jsx-a11y/scope"?: TtscLintRuleSetting;
330
322
 
331
323
  /**
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.
324
+ * Reject `tabIndex` values greater than zero. Positive indices jump the
325
+ * keyboard focus order out of document order and almost always desynchronize
326
+ * from later DOM changes; `0` and `-1` remain allowed.
335
327
  *
336
328
  * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/tabindex-no-positive.md
337
329
  */
@@ -4,26 +4,25 @@ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
4
4
  * Next.js framework rules from `@next/eslint-plugin-next`, applied to
5
5
  * TypeScript and TSX sources inside Next.js apps.
6
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.
7
+ * Checks Next.js-specific conventions — pages/app routing, `<Head>` placement,
8
+ * font and script loading, image and link components — that the framework's
9
+ * runtime treats as load-bearing.
10
10
  *
11
11
  * @reference https://nextjs.org/docs/app/api-reference/config/eslint
12
12
  */
13
13
  export interface ITtscLintNextjsRules {
14
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`.
15
+ * Require a non-blocking `display=` value on Google Fonts stylesheet links;
16
+ * reject `auto`, `block`, and `fallback`, which keep text invisible while the
17
+ * font loads and hurt LCP. Prefer `optional` or `swap`.
19
18
  *
20
19
  * @reference https://nextjs.org/docs/messages/google-font-display
21
20
  */
22
21
  "nextjs/google-font-display"?: TtscLintRuleSetting;
23
22
 
24
23
  /**
25
- * Require `rel="preconnect"` for `fonts.gstatic.com` links to
26
- * shave latency off Google Font fetches.
24
+ * Require `rel="preconnect"` for `fonts.gstatic.com` links to shave latency
25
+ * off Google Font fetches.
27
26
  *
28
27
  * @reference https://nextjs.org/docs/messages/google-font-preconnect
29
28
  */
@@ -33,26 +32,25 @@ export interface ITtscLintNextjsRules {
33
32
  * Require an `id` attribute on inline `<Script>` components from
34
33
  * `next/script`.
35
34
  *
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.
35
+ * Next.js uses the id to track the script across client navigations and to
36
+ * satisfy its loading-strategy budget; an inline script without one is
37
+ * silently dropped on subsequent renders.
40
38
  *
41
39
  * @reference https://nextjs.org/docs/messages/inline-script-id
42
40
  */
43
41
  "nextjs/inline-script-id"?: TtscLintRuleSetting;
44
42
 
45
43
  /**
46
- * Prefer the Next.js Google Analytics integration over
47
- * hand-written `gtag` script tags.
44
+ * Prefer the Next.js Google Analytics integration over hand-written `gtag`
45
+ * script tags.
48
46
  *
49
47
  * @reference https://nextjs.org/docs/messages/next-script-for-ga
50
48
  */
51
49
  "nextjs/next-script-for-ga"?: TtscLintRuleSetting;
52
50
 
53
51
  /**
54
- * Reject local declarations named `module`, which shadow the
55
- * CommonJS `module` binding Next.js relies on.
52
+ * Reject local declarations named `module`, which shadow the CommonJS
53
+ * `module` binding Next.js relies on.
56
54
  *
57
55
  * @reference https://nextjs.org/docs/messages/no-assign-module-variable
58
56
  */
@@ -61,19 +59,19 @@ export interface ITtscLintNextjsRules {
61
59
  /**
62
60
  * Reject `async` function bodies on React Client Components.
63
61
  *
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.
62
+ * The client-side React runtime can't await a component's render, so an
63
+ * `async` `"use client"` component returns a pending promise that crashes
64
+ * hydration; do data fetching in a Server Component or in `useEffect`
65
+ * instead.
68
66
  *
69
67
  * @reference https://nextjs.org/docs/messages/no-async-client-component
70
68
  */
71
69
  "nextjs/no-async-client-component"?: TtscLintRuleSetting;
72
70
 
73
71
  /**
74
- * Restrict the `next/script` `strategy="beforeInteractive"` option
75
- * to `pages/_document.tsx` — anywhere else, the strategy is
76
- * downgraded silently.
72
+ * Restrict the `next/script` `strategy="beforeInteractive"` option to
73
+ * `pages/_document.tsx` — anywhere else, the strategy is downgraded
74
+ * silently.
77
75
  *
78
76
  * @reference https://nextjs.org/docs/messages/no-before-interactive-script-outside-document
79
77
  */
@@ -82,18 +80,17 @@ export interface ITtscLintNextjsRules {
82
80
  /**
83
81
  * Reject raw `<link rel="stylesheet">` tags.
84
82
  *
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.
83
+ * Next.js handles CSS through its bundler — imported stylesheets, CSS
84
+ * Modules, or `next/font` — and manual stylesheet links skip the runtime's
85
+ * critical-CSS extraction and render-blocking heuristics.
89
86
  *
90
87
  * @reference https://nextjs.org/docs/messages/no-css-tags
91
88
  */
92
89
  "nextjs/no-css-tags"?: TtscLintRuleSetting;
93
90
 
94
91
  /**
95
- * Restrict `next/document` imports to `pages/_document.tsx` —
96
- * `Document` cannot be used in a regular page.
92
+ * Restrict `next/document` imports to `pages/_document.tsx` — `Document`
93
+ * cannot be used in a regular page.
97
94
  *
98
95
  * @reference https://nextjs.org/docs/messages/no-document-import-in-page
99
96
  */
@@ -103,17 +100,17 @@ export interface ITtscLintNextjsRules {
103
100
  * Reject more than one `<Head>` element from `next/document` in
104
101
  * `pages/_document.tsx`.
105
102
  *
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.
103
+ * Next.js merges metadata into the single `<Head>` it renders into the HTML
104
+ * shell; additional instances are dropped silently and any tags inside them
105
+ * never reach the page.
109
106
  *
110
107
  * @reference https://nextjs.org/docs/messages/no-duplicate-head
111
108
  */
112
109
  "nextjs/no-duplicate-head"?: TtscLintRuleSetting;
113
110
 
114
111
  /**
115
- * Reject raw `<head>` elements outside the `app/` directory —
116
- * use `next/head` or the metadata exports.
112
+ * Reject raw `<head>` elements outside the `app/` directory — use `next/head`
113
+ * or the metadata exports.
117
114
  *
118
115
  * @reference https://nextjs.org/docs/messages/no-head-element
119
116
  */
@@ -128,57 +125,56 @@ export interface ITtscLintNextjsRules {
128
125
  "nextjs/no-head-import-in-document"?: TtscLintRuleSetting;
129
126
 
130
127
  /**
131
- * Prefer `next/link` for internal anchors with a static `href`,
132
- * since `Link` performs client-side routing.
128
+ * Prefer `next/link` for internal anchors with a static `href`, since `Link`
129
+ * performs client-side routing.
133
130
  *
134
131
  * @reference https://nextjs.org/docs/messages/no-html-link-for-pages
135
132
  */
136
133
  "nextjs/no-html-link-for-pages"?: TtscLintRuleSetting;
137
134
 
138
135
  /**
139
- * Prefer `next/image` over raw `<img>` elements so the framework
140
- * can optimize the asset.
136
+ * Prefer `next/image` over raw `<img>` elements so the framework can optimize
137
+ * the asset.
141
138
  *
142
139
  * @reference https://nextjs.org/docs/messages/no-img-element
143
140
  */
144
141
  "nextjs/no-img-element"?: TtscLintRuleSetting;
145
142
 
146
143
  /**
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).
144
+ * Reject Google font `<link>` tags inside regular pages files — load fonts in
145
+ * `_document.tsx` (pages router) or via `next/font` (app router).
150
146
  *
151
147
  * @reference https://nextjs.org/docs/messages/no-page-custom-font
152
148
  */
153
149
  "nextjs/no-page-custom-font"?: TtscLintRuleSetting;
154
150
 
155
151
  /**
156
- * Reject `next/script` inside `next/head` — `<Script>` must
157
- * appear in the JSX tree, not in `<Head>`.
152
+ * Reject `next/script` inside `next/head` — `<Script>` must appear in the JSX
153
+ * tree, not in `<Head>`.
158
154
  *
159
155
  * @reference https://nextjs.org/docs/messages/no-script-component-in-head
160
156
  */
161
157
  "nextjs/no-script-component-in-head"?: TtscLintRuleSetting;
162
158
 
163
159
  /**
164
- * Reject styled-jsx tags inside `pages/_document.tsx`, which the
165
- * server renders incorrectly.
160
+ * Reject styled-jsx tags inside `pages/_document.tsx`, which the server
161
+ * renders incorrectly.
166
162
  *
167
163
  * @reference https://nextjs.org/docs/messages/no-styled-jsx-in-document
168
164
  */
169
165
  "nextjs/no-styled-jsx-in-document"?: TtscLintRuleSetting;
170
166
 
171
167
  /**
172
- * Require `async` or `defer` on external raw `<script>` tags so
173
- * loading does not block render.
168
+ * Require `async` or `defer` on external raw `<script>` tags so loading does
169
+ * not block render.
174
170
  *
175
171
  * @reference https://nextjs.org/docs/messages/no-sync-scripts
176
172
  */
177
173
  "nextjs/no-sync-scripts"?: TtscLintRuleSetting;
178
174
 
179
175
  /**
180
- * Reject `<title>` inside `Head` from `next/document`. Set the
181
- * title from the metadata exports instead.
176
+ * Reject `<title>` inside `Head` from `next/document`. Set the title from the
177
+ * metadata exports instead.
182
178
  *
183
179
  * @reference https://nextjs.org/docs/messages/no-title-in-document-head
184
180
  */
@@ -188,17 +184,16 @@ export interface ITtscLintNextjsRules {
188
184
  * Catch near-miss typos in Next.js data-fetching export names
189
185
  * (`getStaticProps`, `getStaticPaths`, `getServerSideProps`).
190
186
  *
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.
187
+ * A misspelled export is treated as ordinary module state, so the page
188
+ * silently falls back to client-side rendering with no build-time warning.
194
189
  *
195
190
  * @reference https://nextjs.org/docs/messages/no-typos
196
191
  */
197
192
  "nextjs/no-typos"?: TtscLintRuleSetting;
198
193
 
199
194
  /**
200
- * Reject Polyfill.io script URLs — Next.js already polyfills
201
- * modern browsers, and Polyfill.io has a checkered history.
195
+ * Reject Polyfill.io script URLs — Next.js already polyfills modern browsers,
196
+ * and Polyfill.io has a checkered history.
202
197
  *
203
198
  * @reference https://nextjs.org/docs/messages/no-unwanted-polyfillio
204
199
  */