@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
@@ -26,122 +26,122 @@ type noShadow struct{}
26
26
  func (noShadow) Name() string { return "no-shadow" }
27
27
  func (noShadow) Visits() []shimast.Kind { return []shimast.Kind{shimast.KindSourceFile} }
28
28
  func (noShadow) Check(ctx *Context, node *shimast.Node) {
29
- if node == nil {
30
- return
31
- }
32
- // Each frame records the names declared at that lexical level.
33
- // `isFunction` marks frames that absorb hoisted `var` bindings.
34
- type frame struct {
35
- names map[string]bool
36
- isFunction bool
37
- }
38
- stack := []*frame{{names: map[string]bool{}, isFunction: true}}
29
+ if node == nil {
30
+ return
31
+ }
32
+ // Each frame records the names declared at that lexical level.
33
+ // `isFunction` marks frames that absorb hoisted `var` bindings.
34
+ type frame struct {
35
+ names map[string]bool
36
+ isFunction bool
37
+ }
38
+ stack := []*frame{{names: map[string]bool{}, isFunction: true}}
39
39
 
40
- outerHas := func(name string) bool {
41
- for i := len(stack) - 2; i >= 0; i-- {
42
- if stack[i].names[name] {
43
- return true
44
- }
45
- }
46
- return false
47
- }
40
+ outerHas := func(name string) bool {
41
+ for i := len(stack) - 2; i >= 0; i-- {
42
+ if stack[i].names[name] {
43
+ return true
44
+ }
45
+ }
46
+ return false
47
+ }
48
48
 
49
- declare := func(name string, declNode *shimast.Node, hoist bool) {
50
- if name == "" {
51
- return
52
- }
53
- target := stack[len(stack)-1]
54
- if hoist {
55
- for i := len(stack) - 1; i >= 0; i-- {
56
- if stack[i].isFunction {
57
- target = stack[i]
58
- break
59
- }
60
- }
61
- }
62
- if outerHas(name) {
63
- ctx.Report(declNode, "'"+name+"' is already declared in the upper scope.")
64
- }
65
- target.names[name] = true
66
- }
49
+ declare := func(name string, declNode *shimast.Node, hoist bool) {
50
+ if name == "" {
51
+ return
52
+ }
53
+ target := stack[len(stack)-1]
54
+ if hoist {
55
+ for i := len(stack) - 1; i >= 0; i-- {
56
+ if stack[i].isFunction {
57
+ target = stack[i]
58
+ break
59
+ }
60
+ }
61
+ }
62
+ if outerHas(name) {
63
+ ctx.Report(declNode, "'"+name+"' is already declared in the upper scope.")
64
+ }
65
+ target.names[name] = true
66
+ }
67
67
 
68
- var walk func(n *shimast.Node)
69
- walk = func(n *shimast.Node) {
70
- if n == nil {
71
- return
72
- }
73
- // Bind a function declaration's name in the enclosing scope
74
- // before descending into its body. `var`-style hoisting takes
75
- // the name to the nearest function frame.
76
- if n.Kind == shimast.KindFunctionDeclaration {
77
- if decl := n.AsFunctionDeclaration(); decl != nil && decl.Body != nil {
78
- if name := identifierText(decl.Name()); name != "" {
79
- declare(name, n, true)
80
- }
81
- }
82
- }
83
- // Push a frame for every scope-introducing node. Function-like
84
- // frames also receive their parameter names before descending.
85
- if isFunctionLikeKind(n) {
86
- stack = append(stack, &frame{names: map[string]bool{}, isFunction: true})
87
- for _, name := range parameterBindingNames(n) {
88
- declare(name, n, false)
89
- }
90
- n.ForEachChild(func(child *shimast.Node) bool {
91
- walk(child)
92
- return false
93
- })
94
- stack = stack[:len(stack)-1]
95
- return
96
- }
97
- switch n.Kind {
98
- case shimast.KindBlock, shimast.KindCatchClause:
99
- // Function bodies are blocks too, but the function frame
100
- // pushed above already represents that scope — skip the
101
- // extra frame so a parameter and a body-level `let` of the
102
- // same name still register as a redeclare, not a shadow.
103
- if n.Kind == shimast.KindBlock && n.Parent != nil && isFunctionLikeKind(n.Parent) {
104
- n.ForEachChild(func(child *shimast.Node) bool {
105
- walk(child)
106
- return false
107
- })
108
- return
109
- }
110
- stack = append(stack, &frame{names: map[string]bool{}})
111
- if catch := n.AsCatchClause(); catch != nil && catch.VariableDeclaration != nil {
112
- if name := identifierText(catch.VariableDeclaration.Name()); name != "" {
113
- declare(name, catch.VariableDeclaration, false)
114
- }
115
- }
116
- n.ForEachChild(func(child *shimast.Node) bool {
117
- walk(child)
118
- return false
119
- })
120
- stack = stack[:len(stack)-1]
121
- return
122
- case shimast.KindVariableStatement:
123
- vs := n.AsVariableStatement()
124
- if vs != nil && vs.DeclarationList != nil {
125
- hoist := shimast.IsVar(vs.DeclarationList)
126
- for _, name := range variableStatementBindingNames(n) {
127
- declare(name, n, hoist)
128
- }
129
- }
130
- case shimast.KindClassDeclaration:
131
- if decl := n.AsClassDeclaration(); decl != nil {
132
- if name := identifierText(decl.Name()); name != "" {
133
- declare(name, n, false)
134
- }
135
- }
136
- }
137
- n.ForEachChild(func(child *shimast.Node) bool {
138
- walk(child)
139
- return false
140
- })
141
- }
142
- walk(node)
68
+ var walk func(n *shimast.Node)
69
+ walk = func(n *shimast.Node) {
70
+ if n == nil {
71
+ return
72
+ }
73
+ // Bind a function declaration's name in the enclosing scope
74
+ // before descending into its body. `var`-style hoisting takes
75
+ // the name to the nearest function frame.
76
+ if n.Kind == shimast.KindFunctionDeclaration {
77
+ if decl := n.AsFunctionDeclaration(); decl != nil && decl.Body != nil {
78
+ if name := identifierText(decl.Name()); name != "" {
79
+ declare(name, n, true)
80
+ }
81
+ }
82
+ }
83
+ // Push a frame for every scope-introducing node. Function-like
84
+ // frames also receive their parameter names before descending.
85
+ if isFunctionLikeKind(n) {
86
+ stack = append(stack, &frame{names: map[string]bool{}, isFunction: true})
87
+ for _, name := range parameterBindingNames(n) {
88
+ declare(name, n, false)
89
+ }
90
+ n.ForEachChild(func(child *shimast.Node) bool {
91
+ walk(child)
92
+ return false
93
+ })
94
+ stack = stack[:len(stack)-1]
95
+ return
96
+ }
97
+ switch n.Kind {
98
+ case shimast.KindBlock, shimast.KindCatchClause:
99
+ // Function bodies are blocks too, but the function frame
100
+ // pushed above already represents that scope — skip the
101
+ // extra frame so a parameter and a body-level `let` of the
102
+ // same name still register as a redeclare, not a shadow.
103
+ if n.Kind == shimast.KindBlock && n.Parent != nil && isFunctionLikeKind(n.Parent) {
104
+ n.ForEachChild(func(child *shimast.Node) bool {
105
+ walk(child)
106
+ return false
107
+ })
108
+ return
109
+ }
110
+ stack = append(stack, &frame{names: map[string]bool{}})
111
+ if catch := n.AsCatchClause(); catch != nil && catch.VariableDeclaration != nil {
112
+ if name := identifierText(catch.VariableDeclaration.Name()); name != "" {
113
+ declare(name, catch.VariableDeclaration, false)
114
+ }
115
+ }
116
+ n.ForEachChild(func(child *shimast.Node) bool {
117
+ walk(child)
118
+ return false
119
+ })
120
+ stack = stack[:len(stack)-1]
121
+ return
122
+ case shimast.KindVariableStatement:
123
+ vs := n.AsVariableStatement()
124
+ if vs != nil && vs.DeclarationList != nil {
125
+ hoist := shimast.IsVar(vs.DeclarationList)
126
+ for _, name := range variableStatementBindingNames(n) {
127
+ declare(name, n, hoist)
128
+ }
129
+ }
130
+ case shimast.KindClassDeclaration:
131
+ if decl := n.AsClassDeclaration(); decl != nil {
132
+ if name := identifierText(decl.Name()); name != "" {
133
+ declare(name, n, false)
134
+ }
135
+ }
136
+ }
137
+ n.ForEachChild(func(child *shimast.Node) bool {
138
+ walk(child)
139
+ return false
140
+ })
141
+ }
142
+ walk(node)
143
143
  }
144
144
 
145
145
  func init() {
146
- Register(noShadow{})
146
+ Register(noShadow{})
147
147
  }
@@ -13,54 +13,54 @@
13
13
  package linthost
14
14
 
15
15
  import (
16
- shimast "github.com/microsoft/typescript-go/shim/ast"
16
+ shimast "github.com/microsoft/typescript-go/shim/ast"
17
17
  )
18
18
 
19
19
  type noUnreachable struct{}
20
20
 
21
21
  func (noUnreachable) Name() string { return "no-unreachable" }
22
22
  func (noUnreachable) Visits() []shimast.Kind {
23
- return []shimast.Kind{
24
- shimast.KindBlock,
25
- shimast.KindSourceFile,
26
- shimast.KindModuleBlock,
27
- }
23
+ return []shimast.Kind{
24
+ shimast.KindBlock,
25
+ shimast.KindSourceFile,
26
+ shimast.KindModuleBlock,
27
+ }
28
28
  }
29
29
  func (noUnreachable) Check(ctx *Context, node *shimast.Node) {
30
- stmts := node.Statements()
31
- if len(stmts) < 2 {
32
- return
33
- }
34
- terminated := false
35
- for _, stmt := range stmts {
36
- if stmt == nil {
37
- continue
38
- }
39
- if terminated && !isHoistableDeclaration(stmt) {
40
- ctx.Report(stmt, "Unreachable code.")
41
- continue
42
- }
43
- if isControlFlowTerminator(stmt) {
44
- terminated = true
45
- }
46
- }
30
+ stmts := node.Statements()
31
+ if len(stmts) < 2 {
32
+ return
33
+ }
34
+ terminated := false
35
+ for _, stmt := range stmts {
36
+ if stmt == nil {
37
+ continue
38
+ }
39
+ if terminated && !isHoistableDeclaration(stmt) {
40
+ ctx.Report(stmt, "Unreachable code.")
41
+ continue
42
+ }
43
+ if isControlFlowTerminator(stmt) {
44
+ terminated = true
45
+ }
46
+ }
47
47
  }
48
48
 
49
49
  // isControlFlowTerminator reports whether `stmt` is one of the four
50
50
  // statement kinds that unconditionally leave the surrounding block:
51
51
  // `return`, `throw`, `break`, `continue`.
52
52
  func isControlFlowTerminator(stmt *shimast.Node) bool {
53
- if stmt == nil {
54
- return false
55
- }
56
- switch stmt.Kind {
57
- case shimast.KindReturnStatement,
58
- shimast.KindThrowStatement,
59
- shimast.KindBreakStatement,
60
- shimast.KindContinueStatement:
61
- return true
62
- }
63
- return false
53
+ if stmt == nil {
54
+ return false
55
+ }
56
+ switch stmt.Kind {
57
+ case shimast.KindReturnStatement,
58
+ shimast.KindThrowStatement,
59
+ shimast.KindBreakStatement,
60
+ shimast.KindContinueStatement:
61
+ return true
62
+ }
63
+ return false
64
64
  }
65
65
 
66
66
  // isHoistableDeclaration reports whether `stmt` is a declaration whose
@@ -69,9 +69,9 @@ func isControlFlowTerminator(stmt *shimast.Node) bool {
69
69
  // `function f() {…}` after a `return` is still callable from earlier
70
70
  // statements and is not dead code in the ESLint sense.
71
71
  func isHoistableDeclaration(stmt *shimast.Node) bool {
72
- return stmt != nil && stmt.Kind == shimast.KindFunctionDeclaration
72
+ return stmt != nil && stmt.Kind == shimast.KindFunctionDeclaration
73
73
  }
74
74
 
75
75
  func init() {
76
- Register(noUnreachable{})
76
+ Register(noUnreachable{})
77
77
  }
@@ -13,40 +13,40 @@
13
13
  package linthost
14
14
 
15
15
  import (
16
- shimast "github.com/microsoft/typescript-go/shim/ast"
16
+ shimast "github.com/microsoft/typescript-go/shim/ast"
17
17
  )
18
18
 
19
19
  type noUselessAssignment struct{}
20
20
 
21
21
  func (noUselessAssignment) Name() string { return "no-useless-assignment" }
22
22
  func (noUselessAssignment) Visits() []shimast.Kind {
23
- return []shimast.Kind{shimast.KindBlock}
23
+ return []shimast.Kind{shimast.KindBlock}
24
24
  }
25
25
  func (noUselessAssignment) Check(ctx *Context, node *shimast.Node) {
26
- block := node.AsBlock()
27
- if block == nil || block.Statements == nil {
28
- return
29
- }
30
- stmts := block.Statements.Nodes
31
- if len(stmts) < 2 {
32
- return
33
- }
34
- for i := 0; i+1 < len(stmts); i++ {
35
- firstName, firstAssign := plainAssignmentTarget(stmts[i])
36
- if firstName == "" {
37
- continue
38
- }
39
- secondName, _ := plainAssignmentTarget(stmts[i+1])
40
- if secondName != firstName {
41
- continue
42
- }
43
- // If the second statement's RHS reads the first target, the
44
- // first write is load-bearing — skip.
45
- if assignmentRhsReadsIdent(stmts[i+1], firstName) {
46
- continue
47
- }
48
- ctx.Report(firstAssign, "Assignment to `"+firstName+"` is immediately overwritten without being read.")
49
- }
26
+ block := node.AsBlock()
27
+ if block == nil || block.Statements == nil {
28
+ return
29
+ }
30
+ stmts := block.Statements.Nodes
31
+ if len(stmts) < 2 {
32
+ return
33
+ }
34
+ for i := 0; i+1 < len(stmts); i++ {
35
+ firstName, firstAssign := plainAssignmentTarget(stmts[i])
36
+ if firstName == "" {
37
+ continue
38
+ }
39
+ secondName, _ := plainAssignmentTarget(stmts[i+1])
40
+ if secondName != firstName {
41
+ continue
42
+ }
43
+ // If the second statement's RHS reads the first target, the
44
+ // first write is load-bearing — skip.
45
+ if assignmentRhsReadsIdent(stmts[i+1], firstName) {
46
+ continue
47
+ }
48
+ ctx.Report(firstAssign, "Assignment to `"+firstName+"` is immediately overwritten without being read.")
49
+ }
50
50
  }
51
51
 
52
52
  // plainAssignmentTarget returns the identifier name on the left-hand
@@ -54,26 +54,26 @@ func (noUselessAssignment) Check(ctx *Context, node *shimast.Node) {
54
54
  // `<ident> = <expr>` assignment. Anything else (compound assignment,
55
55
  // destructuring target, property access, non-statement) returns "".
56
56
  func plainAssignmentTarget(stmt *shimast.Node) (string, *shimast.Node) {
57
- if stmt == nil || stmt.Kind != shimast.KindExpressionStatement {
58
- return "", nil
59
- }
60
- expr := stmt.AsExpressionStatement()
61
- if expr == nil || expr.Expression == nil {
62
- return "", nil
63
- }
64
- inner := stripParens(expr.Expression)
65
- if inner == nil || inner.Kind != shimast.KindBinaryExpression {
66
- return "", nil
67
- }
68
- bin := inner.AsBinaryExpression()
69
- if bin == nil || bin.OperatorToken == nil || bin.OperatorToken.Kind != shimast.KindEqualsToken {
70
- return "", nil
71
- }
72
- name := identifierText(stripParens(bin.Left))
73
- if name == "" {
74
- return "", nil
75
- }
76
- return name, stmt
57
+ if stmt == nil || stmt.Kind != shimast.KindExpressionStatement {
58
+ return "", nil
59
+ }
60
+ expr := stmt.AsExpressionStatement()
61
+ if expr == nil || expr.Expression == nil {
62
+ return "", nil
63
+ }
64
+ inner := stripParens(expr.Expression)
65
+ if inner == nil || inner.Kind != shimast.KindBinaryExpression {
66
+ return "", nil
67
+ }
68
+ bin := inner.AsBinaryExpression()
69
+ if bin == nil || bin.OperatorToken == nil || bin.OperatorToken.Kind != shimast.KindEqualsToken {
70
+ return "", nil
71
+ }
72
+ name := identifierText(stripParens(bin.Left))
73
+ if name == "" {
74
+ return "", nil
75
+ }
76
+ return name, stmt
77
77
  }
78
78
 
79
79
  // assignmentRhsReadsIdent reports whether the second statement's
@@ -81,40 +81,40 @@ func plainAssignmentTarget(stmt *shimast.Node) (string, *shimast.Node) {
81
81
  // `x = x + 1` style update reads the previous value, so the prior
82
82
  // assignment is not actually dead.
83
83
  func assignmentRhsReadsIdent(stmt *shimast.Node, name string) bool {
84
- if stmt == nil || stmt.Kind != shimast.KindExpressionStatement {
85
- return false
86
- }
87
- expr := stmt.AsExpressionStatement()
88
- if expr == nil || expr.Expression == nil {
89
- return false
90
- }
91
- inner := stripParens(expr.Expression)
92
- if inner == nil || inner.Kind != shimast.KindBinaryExpression {
93
- return false
94
- }
95
- bin := inner.AsBinaryExpression()
96
- if bin == nil || bin.Right == nil {
97
- return false
98
- }
99
- found := false
100
- var walk func(n *shimast.Node)
101
- walk = func(n *shimast.Node) {
102
- if found || n == nil {
103
- return
104
- }
105
- if n.Kind == shimast.KindIdentifier && identifierText(n) == name {
106
- found = true
107
- return
108
- }
109
- n.ForEachChild(func(child *shimast.Node) bool {
110
- walk(child)
111
- return false
112
- })
113
- }
114
- walk(bin.Right)
115
- return found
84
+ if stmt == nil || stmt.Kind != shimast.KindExpressionStatement {
85
+ return false
86
+ }
87
+ expr := stmt.AsExpressionStatement()
88
+ if expr == nil || expr.Expression == nil {
89
+ return false
90
+ }
91
+ inner := stripParens(expr.Expression)
92
+ if inner == nil || inner.Kind != shimast.KindBinaryExpression {
93
+ return false
94
+ }
95
+ bin := inner.AsBinaryExpression()
96
+ if bin == nil || bin.Right == nil {
97
+ return false
98
+ }
99
+ found := false
100
+ var walk func(n *shimast.Node)
101
+ walk = func(n *shimast.Node) {
102
+ if found || n == nil {
103
+ return
104
+ }
105
+ if n.Kind == shimast.KindIdentifier && identifierText(n) == name {
106
+ found = true
107
+ return
108
+ }
109
+ n.ForEachChild(func(child *shimast.Node) bool {
110
+ walk(child)
111
+ return false
112
+ })
113
+ }
114
+ walk(bin.Right)
115
+ return found
116
116
  }
117
117
 
118
118
  func init() {
119
- Register(noUselessAssignment{})
119
+ Register(noUselessAssignment{})
120
120
  }