@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
@@ -20,79 +20,79 @@
20
20
  package linthost
21
21
 
22
22
  import (
23
- shimast "github.com/microsoft/typescript-go/shim/ast"
23
+ shimast "github.com/microsoft/typescript-go/shim/ast"
24
24
  )
25
25
 
26
26
  type preferDestructuring struct{}
27
27
 
28
28
  func (preferDestructuring) Name() string { return "prefer-destructuring" }
29
29
  func (preferDestructuring) Visits() []shimast.Kind {
30
- return []shimast.Kind{shimast.KindVariableDeclaration}
30
+ return []shimast.Kind{shimast.KindVariableDeclaration}
31
31
  }
32
32
  func (preferDestructuring) Check(ctx *Context, node *shimast.Node) {
33
- decl := node.AsVariableDeclaration()
34
- if decl == nil || decl.Initializer == nil {
35
- return
36
- }
37
- // Only fire on plain identifier bindings — destructuring already
38
- // happens on `const { a } = obj;`.
39
- name := decl.Name()
40
- if name == nil || name.Kind != shimast.KindIdentifier {
41
- return
42
- }
43
- varName := identifierText(name)
44
- if varName == "" {
45
- return
46
- }
47
- init := stripParens(decl.Initializer)
48
- if init == nil {
49
- return
50
- }
51
- switch init.Kind {
52
- case shimast.KindPropertyAccessExpression:
53
- access := init.AsPropertyAccessExpression()
54
- if access == nil || access.Expression == nil || !preferDestructuringSimpleReceiver(access.Expression) {
55
- return
56
- }
57
- propName := access.Name()
58
- if propName == nil || propName.Kind != shimast.KindIdentifier {
59
- return
60
- }
61
- if identifierText(propName) != varName {
62
- return
63
- }
64
- ctx.Report(node, "Use object destructuring (`const { "+varName+" } = obj`).")
65
- case shimast.KindElementAccessExpression:
66
- access := init.AsElementAccessExpression()
67
- if access == nil || access.Expression == nil || access.ArgumentExpression == nil {
68
- return
69
- }
70
- if !preferDestructuringSimpleReceiver(access.Expression) {
71
- return
72
- }
73
- // Only numeric-literal index — array destructuring.
74
- idx := stripParens(access.ArgumentExpression)
75
- if idx == nil || idx.Kind != shimast.KindNumericLiteral {
76
- return
77
- }
78
- ctx.Report(node, "Use array destructuring (`const ["+varName+"] = arr`).")
79
- }
33
+ decl := node.AsVariableDeclaration()
34
+ if decl == nil || decl.Initializer == nil {
35
+ return
36
+ }
37
+ // Only fire on plain identifier bindings — destructuring already
38
+ // happens on `const { a } = obj;`.
39
+ name := decl.Name()
40
+ if name == nil || name.Kind != shimast.KindIdentifier {
41
+ return
42
+ }
43
+ varName := identifierText(name)
44
+ if varName == "" {
45
+ return
46
+ }
47
+ init := stripParens(decl.Initializer)
48
+ if init == nil {
49
+ return
50
+ }
51
+ switch init.Kind {
52
+ case shimast.KindPropertyAccessExpression:
53
+ access := init.AsPropertyAccessExpression()
54
+ if access == nil || access.Expression == nil || !preferDestructuringSimpleReceiver(access.Expression) {
55
+ return
56
+ }
57
+ propName := access.Name()
58
+ if propName == nil || propName.Kind != shimast.KindIdentifier {
59
+ return
60
+ }
61
+ if identifierText(propName) != varName {
62
+ return
63
+ }
64
+ ctx.Report(node, "Use object destructuring (`const { "+varName+" } = obj`).")
65
+ case shimast.KindElementAccessExpression:
66
+ access := init.AsElementAccessExpression()
67
+ if access == nil || access.Expression == nil || access.ArgumentExpression == nil {
68
+ return
69
+ }
70
+ if !preferDestructuringSimpleReceiver(access.Expression) {
71
+ return
72
+ }
73
+ // Only numeric-literal index — array destructuring.
74
+ idx := stripParens(access.ArgumentExpression)
75
+ if idx == nil || idx.Kind != shimast.KindNumericLiteral {
76
+ return
77
+ }
78
+ ctx.Report(node, "Use array destructuring (`const ["+varName+"] = arr`).")
79
+ }
80
80
  }
81
81
 
82
82
  func preferDestructuringSimpleReceiver(node *shimast.Node) bool {
83
- n := stripParens(node)
84
- if n == nil {
85
- return false
86
- }
87
- switch n.Kind {
88
- case shimast.KindIdentifier,
89
- shimast.KindThisKeyword,
90
- shimast.KindPropertyAccessExpression:
91
- return true
92
- }
93
- return false
83
+ n := stripParens(node)
84
+ if n == nil {
85
+ return false
86
+ }
87
+ switch n.Kind {
88
+ case shimast.KindIdentifier,
89
+ shimast.KindThisKeyword,
90
+ shimast.KindPropertyAccessExpression:
91
+ return true
92
+ }
93
+ return false
94
94
  }
95
95
 
96
96
  func init() {
97
- Register(preferDestructuring{})
97
+ Register(preferDestructuring{})
98
98
  }
@@ -19,21 +19,21 @@ type preferNamedCaptureGroup struct{}
19
19
 
20
20
  func (preferNamedCaptureGroup) Name() string { return "prefer-named-capture-group" }
21
21
  func (preferNamedCaptureGroup) Visits() []shimast.Kind {
22
- return []shimast.Kind{shimast.KindRegularExpressionLiteral}
22
+ return []shimast.Kind{shimast.KindRegularExpressionLiteral}
23
23
  }
24
24
  func (preferNamedCaptureGroup) Check(ctx *Context, node *shimast.Node) {
25
- raw := nodeText(ctx.File, node)
26
- if len(raw) < 2 || raw[0] != '/' {
27
- return
28
- }
29
- closing := lastSlashOutsideClass(raw)
30
- if closing <= 0 {
31
- return
32
- }
33
- pattern := raw[1:closing]
34
- if regexpHasUnnamedCapture(pattern) {
35
- ctx.Report(node, "Capture group should be named.")
36
- }
25
+ raw := nodeText(ctx.File, node)
26
+ if len(raw) < 2 || raw[0] != '/' {
27
+ return
28
+ }
29
+ closing := lastSlashOutsideClass(raw)
30
+ if closing <= 0 {
31
+ return
32
+ }
33
+ pattern := raw[1:closing]
34
+ if regexpHasUnnamedCapture(pattern) {
35
+ ctx.Report(node, "Capture group should be named.")
36
+ }
37
37
  }
38
38
 
39
39
  // regexpHasUnnamedCapture reports whether `pattern` contains at least
@@ -43,87 +43,87 @@ func (preferNamedCaptureGroup) Check(ctx *Context, node *shimast.Node) {
43
43
  // character-class contents because `(` is a literal byte in those
44
44
  // positions and never opens a group.
45
45
  func regexpHasUnnamedCapture(pattern string) bool {
46
- inClass := false
47
- for i := 0; i < len(pattern); i++ {
48
- ch := pattern[i]
49
- if ch == '\\' {
50
- i++
51
- continue
52
- }
53
- if inClass {
54
- if ch == ']' {
55
- inClass = false
56
- }
57
- continue
58
- }
59
- if ch == '[' {
60
- inClass = true
61
- continue
62
- }
63
- if ch != '(' {
64
- continue
65
- }
66
- // `(` is a group opener; classify what follows.
67
- if i+1 >= len(pattern) || pattern[i+1] != '?' {
68
- return true
69
- }
70
- if i+2 >= len(pattern) {
71
- // `(?` with nothing after — treat as malformed but not flagged;
72
- // the parser would have rejected this regex if it was truly
73
- // invalid, so leave it alone.
74
- continue
75
- }
76
- switch pattern[i+2] {
77
- case ':', '=', '!':
78
- // non-capturing or lookahead
79
- continue
80
- case '<':
81
- if i+3 < len(pattern) && (pattern[i+3] == '=' || pattern[i+3] == '!') {
82
- // lookbehind `(?<=` / `(?<!`
83
- continue
84
- }
85
- // named capture `(?<name>…)`
86
- continue
87
- }
88
- // `(?` followed by something else (e.g. an inline flag group).
89
- // Treat as unnamed; ESLint flags these too because they still
90
- // capture under the standard regex semantics they target.
91
- return true
92
- }
93
- return false
46
+ inClass := false
47
+ for i := 0; i < len(pattern); i++ {
48
+ ch := pattern[i]
49
+ if ch == '\\' {
50
+ i++
51
+ continue
52
+ }
53
+ if inClass {
54
+ if ch == ']' {
55
+ inClass = false
56
+ }
57
+ continue
58
+ }
59
+ if ch == '[' {
60
+ inClass = true
61
+ continue
62
+ }
63
+ if ch != '(' {
64
+ continue
65
+ }
66
+ // `(` is a group opener; classify what follows.
67
+ if i+1 >= len(pattern) || pattern[i+1] != '?' {
68
+ return true
69
+ }
70
+ if i+2 >= len(pattern) {
71
+ // `(?` with nothing after — treat as malformed but not flagged;
72
+ // the parser would have rejected this regex if it was truly
73
+ // invalid, so leave it alone.
74
+ continue
75
+ }
76
+ switch pattern[i+2] {
77
+ case ':', '=', '!':
78
+ // non-capturing or lookahead
79
+ continue
80
+ case '<':
81
+ if i+3 < len(pattern) && (pattern[i+3] == '=' || pattern[i+3] == '!') {
82
+ // lookbehind `(?<=` / `(?<!`
83
+ continue
84
+ }
85
+ // named capture `(?<name>…)`
86
+ continue
87
+ }
88
+ // `(?` followed by something else (e.g. an inline flag group).
89
+ // Treat as unnamed; ESLint flags these too because they still
90
+ // capture under the standard regex semantics they target.
91
+ return true
92
+ }
93
+ return false
94
94
  }
95
95
 
96
96
  // lastSlashOutsideClass returns the index of the closing `/` of a regex
97
97
  // literal, accounting for `/` characters that appear inside escapes or
98
98
  // character classes. Returns -1 when no closing slash is found.
99
99
  func lastSlashOutsideClass(raw string) int {
100
- if len(raw) < 2 || raw[0] != '/' {
101
- return -1
102
- }
103
- inClass := false
104
- for i := 1; i < len(raw); i++ {
105
- ch := raw[i]
106
- if ch == '\\' {
107
- i++
108
- continue
109
- }
110
- if inClass {
111
- if ch == ']' {
112
- inClass = false
113
- }
114
- continue
115
- }
116
- if ch == '[' {
117
- inClass = true
118
- continue
119
- }
120
- if ch == '/' {
121
- return i
122
- }
123
- }
124
- return -1
100
+ if len(raw) < 2 || raw[0] != '/' {
101
+ return -1
102
+ }
103
+ inClass := false
104
+ for i := 1; i < len(raw); i++ {
105
+ ch := raw[i]
106
+ if ch == '\\' {
107
+ i++
108
+ continue
109
+ }
110
+ if inClass {
111
+ if ch == ']' {
112
+ inClass = false
113
+ }
114
+ continue
115
+ }
116
+ if ch == '[' {
117
+ inClass = true
118
+ continue
119
+ }
120
+ if ch == '/' {
121
+ return i
122
+ }
123
+ }
124
+ return -1
125
125
  }
126
126
 
127
127
  func init() {
128
- Register(preferNamedCaptureGroup{})
128
+ Register(preferNamedCaptureGroup{})
129
129
  }
@@ -16,79 +16,79 @@
16
16
  package linthost
17
17
 
18
18
  import (
19
- shimast "github.com/microsoft/typescript-go/shim/ast"
19
+ shimast "github.com/microsoft/typescript-go/shim/ast"
20
20
  )
21
21
 
22
22
  type preferRestParams struct{}
23
23
 
24
24
  func (preferRestParams) Name() string { return "prefer-rest-params" }
25
25
  func (preferRestParams) Visits() []shimast.Kind {
26
- return []shimast.Kind{
27
- shimast.KindFunctionDeclaration,
28
- shimast.KindFunctionExpression,
29
- shimast.KindMethodDeclaration,
30
- shimast.KindGetAccessor,
31
- shimast.KindSetAccessor,
32
- shimast.KindConstructor,
33
- }
26
+ return []shimast.Kind{
27
+ shimast.KindFunctionDeclaration,
28
+ shimast.KindFunctionExpression,
29
+ shimast.KindMethodDeclaration,
30
+ shimast.KindGetAccessor,
31
+ shimast.KindSetAccessor,
32
+ shimast.KindConstructor,
33
+ }
34
34
  }
35
35
  func (preferRestParams) Check(ctx *Context, node *shimast.Node) {
36
- body := preferRestParamsBody(node)
37
- if body == nil {
38
- return
39
- }
40
- reported := false
41
- walkFunctionBody(body, func(child *shimast.Node) {
42
- if reported || child == nil {
43
- return
44
- }
45
- if child.Kind != shimast.KindIdentifier {
46
- return
47
- }
48
- if identifierText(child) != "arguments" {
49
- return
50
- }
51
- // Skip `obj.arguments` — that's an unrelated member access.
52
- if parent := child.Parent; parent != nil && parent.Kind == shimast.KindPropertyAccessExpression {
53
- if access := parent.AsPropertyAccessExpression(); access != nil && access.Name() == child {
54
- return
55
- }
56
- }
57
- reported = true
58
- ctx.Report(child, "Use rest parameters (`...args`) instead of `arguments`.")
59
- })
36
+ body := preferRestParamsBody(node)
37
+ if body == nil {
38
+ return
39
+ }
40
+ reported := false
41
+ walkFunctionBody(body, func(child *shimast.Node) {
42
+ if reported || child == nil {
43
+ return
44
+ }
45
+ if child.Kind != shimast.KindIdentifier {
46
+ return
47
+ }
48
+ if identifierText(child) != "arguments" {
49
+ return
50
+ }
51
+ // Skip `obj.arguments` — that's an unrelated member access.
52
+ if parent := child.Parent; parent != nil && parent.Kind == shimast.KindPropertyAccessExpression {
53
+ if access := parent.AsPropertyAccessExpression(); access != nil && access.Name() == child {
54
+ return
55
+ }
56
+ }
57
+ reported = true
58
+ ctx.Report(child, "Use rest parameters (`...args`) instead of `arguments`.")
59
+ })
60
60
  }
61
61
 
62
62
  func preferRestParamsBody(node *shimast.Node) *shimast.Node {
63
- switch node.Kind {
64
- case shimast.KindFunctionDeclaration:
65
- if fn := node.AsFunctionDeclaration(); fn != nil {
66
- return fn.Body
67
- }
68
- case shimast.KindFunctionExpression:
69
- if fn := node.AsFunctionExpression(); fn != nil {
70
- return fn.Body
71
- }
72
- case shimast.KindMethodDeclaration:
73
- if m := node.AsMethodDeclaration(); m != nil {
74
- return m.Body
75
- }
76
- case shimast.KindGetAccessor:
77
- if a := node.AsGetAccessorDeclaration(); a != nil {
78
- return a.Body
79
- }
80
- case shimast.KindSetAccessor:
81
- if a := node.AsSetAccessorDeclaration(); a != nil {
82
- return a.Body
83
- }
84
- case shimast.KindConstructor:
85
- if c := node.AsConstructorDeclaration(); c != nil {
86
- return c.Body
87
- }
88
- }
89
- return nil
63
+ switch node.Kind {
64
+ case shimast.KindFunctionDeclaration:
65
+ if fn := node.AsFunctionDeclaration(); fn != nil {
66
+ return fn.Body
67
+ }
68
+ case shimast.KindFunctionExpression:
69
+ if fn := node.AsFunctionExpression(); fn != nil {
70
+ return fn.Body
71
+ }
72
+ case shimast.KindMethodDeclaration:
73
+ if m := node.AsMethodDeclaration(); m != nil {
74
+ return m.Body
75
+ }
76
+ case shimast.KindGetAccessor:
77
+ if a := node.AsGetAccessorDeclaration(); a != nil {
78
+ return a.Body
79
+ }
80
+ case shimast.KindSetAccessor:
81
+ if a := node.AsSetAccessorDeclaration(); a != nil {
82
+ return a.Body
83
+ }
84
+ case shimast.KindConstructor:
85
+ if c := node.AsConstructorDeclaration(); c != nil {
86
+ return c.Body
87
+ }
88
+ }
89
+ return nil
90
90
  }
91
91
 
92
92
  func init() {
93
- Register(preferRestParams{})
93
+ Register(preferRestParams{})
94
94
  }