@ttsc/lint 0.14.0-dev.20260529.2 → 0.14.0

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 +21 -23
  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 +108 -5
  68. package/linthost/print_nodes_call.go +515 -74
  69. package/linthost/print_nodes_function.go +25 -0
  70. package/linthost/print_nodes_imports.go +47 -14
  71. package/linthost/print_nodes_list.go +191 -8
  72. package/linthost/print_nodes_object.go +12 -6
  73. package/linthost/print_nodes_ternary.go +106 -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 +167 -0
  83. package/linthost/rules_format_bracket_spacing.go +117 -0
  84. package/linthost/rules_format_clause_join.go +172 -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 +185 -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 +456 -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
@@ -17,51 +17,51 @@
17
17
  package linthost
18
18
 
19
19
  import (
20
- shimast "github.com/microsoft/typescript-go/shim/ast"
20
+ shimast "github.com/microsoft/typescript-go/shim/ast"
21
21
  )
22
22
 
23
23
  type explicitFunctionReturnType struct{}
24
24
 
25
25
  func (explicitFunctionReturnType) Name() string {
26
- return "typescript/explicit-function-return-type"
26
+ return "typescript/explicit-function-return-type"
27
27
  }
28
28
  func (explicitFunctionReturnType) Visits() []shimast.Kind {
29
- return []shimast.Kind{
30
- shimast.KindFunctionDeclaration,
31
- shimast.KindMethodDeclaration,
32
- }
29
+ return []shimast.Kind{
30
+ shimast.KindFunctionDeclaration,
31
+ shimast.KindMethodDeclaration,
32
+ }
33
33
  }
34
34
  func (explicitFunctionReturnType) Check(ctx *Context, node *shimast.Node) {
35
- var typeNode *shimast.Node
36
- switch node.Kind {
37
- case shimast.KindFunctionDeclaration:
38
- decl := node.AsFunctionDeclaration()
39
- if decl == nil {
40
- return
41
- }
42
- // Overload signatures (no body) already separate the return type
43
- // onto each declaration; skip the implementation signature when
44
- // it has no body either.
45
- if decl.Body == nil {
46
- return
47
- }
48
- typeNode = decl.Type
49
- case shimast.KindMethodDeclaration:
50
- decl := node.AsMethodDeclaration()
51
- if decl == nil {
52
- return
53
- }
54
- if decl.Body == nil {
55
- return
56
- }
57
- typeNode = decl.Type
58
- }
59
- if typeNode != nil {
60
- return
61
- }
62
- ctx.Report(node, "Missing return type on function — add an explicit return-type annotation.")
35
+ var typeNode *shimast.Node
36
+ switch node.Kind {
37
+ case shimast.KindFunctionDeclaration:
38
+ decl := node.AsFunctionDeclaration()
39
+ if decl == nil {
40
+ return
41
+ }
42
+ // Overload signatures (no body) already separate the return type
43
+ // onto each declaration; skip the implementation signature when
44
+ // it has no body either.
45
+ if decl.Body == nil {
46
+ return
47
+ }
48
+ typeNode = decl.Type
49
+ case shimast.KindMethodDeclaration:
50
+ decl := node.AsMethodDeclaration()
51
+ if decl == nil {
52
+ return
53
+ }
54
+ if decl.Body == nil {
55
+ return
56
+ }
57
+ typeNode = decl.Type
58
+ }
59
+ if typeNode != nil {
60
+ return
61
+ }
62
+ ctx.Report(node, "Missing return type on function — add an explicit return-type annotation.")
63
63
  }
64
64
 
65
65
  func init() {
66
- Register(explicitFunctionReturnType{})
66
+ Register(explicitFunctionReturnType{})
67
67
  }
@@ -173,7 +173,9 @@ func (noExtraNonNullAssertion) Check(ctx *Context, node *shimast.Node) {
173
173
  // undefined; asserting non-null on the whole chain defeats the chain.
174
174
  type noNonNullAssertedOptionalChain struct{}
175
175
 
176
- func (noNonNullAssertedOptionalChain) Name() string { return "typescript/no-non-null-asserted-optional-chain" }
176
+ func (noNonNullAssertedOptionalChain) Name() string {
177
+ return "typescript/no-non-null-asserted-optional-chain"
178
+ }
177
179
  func (noNonNullAssertedOptionalChain) Visits() []shimast.Kind {
178
180
  return []shimast.Kind{shimast.KindNonNullExpression}
179
181
  }
@@ -711,7 +713,9 @@ func (arrayType) Check(ctx *Context, node *shimast.Node) {
711
713
  // `Record<string, T>`. ESLint default prefers `Record`.
712
714
  type consistentIndexedObjectStyle struct{}
713
715
 
714
- func (consistentIndexedObjectStyle) Name() string { return "typescript/consistent-indexed-object-style" }
716
+ func (consistentIndexedObjectStyle) Name() string {
717
+ return "typescript/consistent-indexed-object-style"
718
+ }
715
719
  func (consistentIndexedObjectStyle) Visits() []shimast.Kind {
716
720
  return []shimast.Kind{shimast.KindTypeLiteral}
717
721
  }
@@ -22,87 +22,87 @@
22
22
  package linthost
23
23
 
24
24
  import (
25
- shimast "github.com/microsoft/typescript-go/shim/ast"
26
- shimchecker "github.com/microsoft/typescript-go/shim/checker"
25
+ shimast "github.com/microsoft/typescript-go/shim/ast"
26
+ shimchecker "github.com/microsoft/typescript-go/shim/checker"
27
27
  )
28
28
 
29
29
  type noBaseToString struct{}
30
30
 
31
31
  func (noBaseToString) Name() string { return "typescript/no-base-to-string" }
32
32
  func (noBaseToString) NeedsTypeChecker() bool {
33
- return true
33
+ return true
34
34
  }
35
35
  func (noBaseToString) Visits() []shimast.Kind {
36
- return []shimast.Kind{
37
- shimast.KindTemplateExpression,
38
- shimast.KindBinaryExpression,
39
- shimast.KindCallExpression,
40
- }
36
+ return []shimast.Kind{
37
+ shimast.KindTemplateExpression,
38
+ shimast.KindBinaryExpression,
39
+ shimast.KindCallExpression,
40
+ }
41
41
  }
42
42
  func (noBaseToString) Check(ctx *Context, node *shimast.Node) {
43
- if ctx.Checker == nil {
44
- return
45
- }
46
- switch node.Kind {
47
- case shimast.KindTemplateExpression:
48
- expr := node.AsTemplateExpression()
49
- if expr == nil || expr.TemplateSpans == nil {
50
- return
51
- }
52
- for _, spanNode := range expr.TemplateSpans.Nodes {
53
- span := spanNode.AsTemplateSpan()
54
- if span == nil || span.Expression == nil {
55
- continue
56
- }
57
- reportIfBaseToString(ctx, span.Expression)
58
- }
59
- case shimast.KindBinaryExpression:
60
- bin := node.AsBinaryExpression()
61
- if bin == nil || bin.OperatorToken == nil || bin.OperatorToken.Kind != shimast.KindPlusToken {
62
- return
63
- }
64
- left := stripParens(bin.Left)
65
- right := stripParens(bin.Right)
66
- if left == nil || right == nil {
67
- return
68
- }
69
- leftType := ctx.Checker.GetTypeAtLocation(left)
70
- rightType := ctx.Checker.GetTypeAtLocation(right)
71
- if isStringLikeType(leftType) {
72
- if !isSafeToStringType(ctx.Checker, rightType) {
73
- ctx.Report(right, baseToStringMessage)
74
- }
75
- } else if isStringLikeType(rightType) {
76
- if !isSafeToStringType(ctx.Checker, leftType) {
77
- ctx.Report(left, baseToStringMessage)
78
- }
79
- }
80
- case shimast.KindCallExpression:
81
- call := node.AsCallExpression()
82
- if call == nil || call.Expression == nil || call.Arguments == nil {
83
- return
84
- }
85
- if call.Expression.Kind != shimast.KindIdentifier || identifierText(call.Expression) != "String" {
86
- return
87
- }
88
- if len(call.Arguments.Nodes) != 1 {
89
- return
90
- }
91
- reportIfBaseToString(ctx, call.Arguments.Nodes[0])
92
- }
43
+ if ctx.Checker == nil {
44
+ return
45
+ }
46
+ switch node.Kind {
47
+ case shimast.KindTemplateExpression:
48
+ expr := node.AsTemplateExpression()
49
+ if expr == nil || expr.TemplateSpans == nil {
50
+ return
51
+ }
52
+ for _, spanNode := range expr.TemplateSpans.Nodes {
53
+ span := spanNode.AsTemplateSpan()
54
+ if span == nil || span.Expression == nil {
55
+ continue
56
+ }
57
+ reportIfBaseToString(ctx, span.Expression)
58
+ }
59
+ case shimast.KindBinaryExpression:
60
+ bin := node.AsBinaryExpression()
61
+ if bin == nil || bin.OperatorToken == nil || bin.OperatorToken.Kind != shimast.KindPlusToken {
62
+ return
63
+ }
64
+ left := stripParens(bin.Left)
65
+ right := stripParens(bin.Right)
66
+ if left == nil || right == nil {
67
+ return
68
+ }
69
+ leftType := ctx.Checker.GetTypeAtLocation(left)
70
+ rightType := ctx.Checker.GetTypeAtLocation(right)
71
+ if isStringLikeType(leftType) {
72
+ if !isSafeToStringType(ctx.Checker, rightType) {
73
+ ctx.Report(right, baseToStringMessage)
74
+ }
75
+ } else if isStringLikeType(rightType) {
76
+ if !isSafeToStringType(ctx.Checker, leftType) {
77
+ ctx.Report(left, baseToStringMessage)
78
+ }
79
+ }
80
+ case shimast.KindCallExpression:
81
+ call := node.AsCallExpression()
82
+ if call == nil || call.Expression == nil || call.Arguments == nil {
83
+ return
84
+ }
85
+ if call.Expression.Kind != shimast.KindIdentifier || identifierText(call.Expression) != "String" {
86
+ return
87
+ }
88
+ if len(call.Arguments.Nodes) != 1 {
89
+ return
90
+ }
91
+ reportIfBaseToString(ctx, call.Arguments.Nodes[0])
92
+ }
93
93
  }
94
94
 
95
95
  const baseToStringMessage = "Value implicitly coerces to '[object Object]'. Override `toString` or pass an explicit string representation."
96
96
 
97
97
  func reportIfBaseToString(ctx *Context, expr *shimast.Node) {
98
- if expr == nil {
99
- return
100
- }
101
- t := ctx.Checker.GetTypeAtLocation(expr)
102
- if isSafeToStringType(ctx.Checker, t) {
103
- return
104
- }
105
- ctx.Report(expr, baseToStringMessage)
98
+ if expr == nil {
99
+ return
100
+ }
101
+ t := ctx.Checker.GetTypeAtLocation(expr)
102
+ if isSafeToStringType(ctx.Checker, t) {
103
+ return
104
+ }
105
+ ctx.Report(expr, baseToStringMessage)
106
106
  }
107
107
 
108
108
  // isStringLikeType reports whether t is provably string-typed (a
@@ -110,22 +110,22 @@ func reportIfBaseToString(ctx *Context, expr *shimast.Node) {
110
110
  // thereof). Used to decide whether the OTHER operand of a `+`
111
111
  // expression is being coerced.
112
112
  func isStringLikeType(t *shimchecker.Type) bool {
113
- if t == nil {
114
- return false
115
- }
116
- flags := t.Flags()
117
- if flags&shimchecker.TypeFlagsStringLike != 0 {
118
- return true
119
- }
120
- if flags&shimchecker.TypeFlagsUnion != 0 {
121
- for _, part := range t.Types() {
122
- if !isStringLikeType(part) {
123
- return false
124
- }
125
- }
126
- return true
127
- }
128
- return false
113
+ if t == nil {
114
+ return false
115
+ }
116
+ flags := t.Flags()
117
+ if flags&shimchecker.TypeFlagsStringLike != 0 {
118
+ return true
119
+ }
120
+ if flags&shimchecker.TypeFlagsUnion != 0 {
121
+ for _, part := range t.Types() {
122
+ if !isStringLikeType(part) {
123
+ return false
124
+ }
125
+ }
126
+ return true
127
+ }
128
+ return false
129
129
  }
130
130
 
131
131
  // isSafeToStringType reports whether `t` can be implicitly coerced to a
@@ -136,38 +136,38 @@ func isStringLikeType(t *shimchecker.Type) bool {
136
136
  // because flagging them would explode at generic-helper boundaries —
137
137
  // the same conservatism `no-floating-promises` adopts.
138
138
  func isSafeToStringType(checker *shimchecker.Checker, t *shimchecker.Type) bool {
139
- if checker == nil || t == nil {
140
- return true
141
- }
142
- flags := t.Flags()
143
- if flags&(shimchecker.TypeFlagsAny|shimchecker.TypeFlagsUnknown|shimchecker.TypeFlagsNever) != 0 {
144
- return true
145
- }
146
- if flags&(shimchecker.TypeFlagsStringLike|
147
- shimchecker.TypeFlagsNumberLike|
148
- shimchecker.TypeFlagsBigIntLike|
149
- shimchecker.TypeFlagsBooleanLike|
150
- shimchecker.TypeFlagsNull|
151
- shimchecker.TypeFlagsUndefined) != 0 {
152
- return true
153
- }
154
- if flags&shimchecker.TypeFlagsUnion != 0 {
155
- for _, part := range t.Types() {
156
- if !isSafeToStringType(checker, part) {
157
- return false
158
- }
159
- }
160
- return true
161
- }
162
- if flags&shimchecker.TypeFlagsIntersection != 0 {
163
- for _, part := range t.Types() {
164
- if isSafeToStringType(checker, part) {
165
- return true
166
- }
167
- }
168
- return false
169
- }
170
- return typeOverridesToString(checker, t)
139
+ if checker == nil || t == nil {
140
+ return true
141
+ }
142
+ flags := t.Flags()
143
+ if flags&(shimchecker.TypeFlagsAny|shimchecker.TypeFlagsUnknown|shimchecker.TypeFlagsNever) != 0 {
144
+ return true
145
+ }
146
+ if flags&(shimchecker.TypeFlagsStringLike|
147
+ shimchecker.TypeFlagsNumberLike|
148
+ shimchecker.TypeFlagsBigIntLike|
149
+ shimchecker.TypeFlagsBooleanLike|
150
+ shimchecker.TypeFlagsNull|
151
+ shimchecker.TypeFlagsUndefined) != 0 {
152
+ return true
153
+ }
154
+ if flags&shimchecker.TypeFlagsUnion != 0 {
155
+ for _, part := range t.Types() {
156
+ if !isSafeToStringType(checker, part) {
157
+ return false
158
+ }
159
+ }
160
+ return true
161
+ }
162
+ if flags&shimchecker.TypeFlagsIntersection != 0 {
163
+ for _, part := range t.Types() {
164
+ if isSafeToStringType(checker, part) {
165
+ return true
166
+ }
167
+ }
168
+ return false
169
+ }
170
+ return typeOverridesToString(checker, t)
171
171
  }
172
172
 
173
173
  // typeOverridesToString reports whether `t` carries a `toString` method
@@ -177,19 +177,19 @@ func isSafeToStringType(checker *shimchecker.Checker, t *shimchecker.Type) bool
177
177
  // `toString` is reachable at all the type is treated as base — the
178
178
  // only way to coerce it is the prototype-chain default.
179
179
  func typeOverridesToString(checker *shimchecker.Checker, t *shimchecker.Type) bool {
180
- prop := checker.GetPropertyOfType(t, "toString")
181
- if prop == nil {
182
- return false
183
- }
184
- for _, decl := range prop.Declarations {
185
- if decl == nil {
186
- continue
187
- }
188
- if !isObjectToStringDeclaration(decl) {
189
- return true
190
- }
191
- }
192
- return false
180
+ prop := checker.GetPropertyOfType(t, "toString")
181
+ if prop == nil {
182
+ return false
183
+ }
184
+ for _, decl := range prop.Declarations {
185
+ if decl == nil {
186
+ continue
187
+ }
188
+ if !isObjectToStringDeclaration(decl) {
189
+ return true
190
+ }
191
+ }
192
+ return false
193
193
  }
194
194
 
195
195
  // isObjectToStringDeclaration reports whether `decl` is the
@@ -199,20 +199,20 @@ func typeOverridesToString(checker *shimchecker.Checker, t *shimchecker.Type) bo
199
199
  // declaration; anything else (Array, Date, Error, user classes, etc.)
200
200
  // counts as a real override.
201
201
  func isObjectToStringDeclaration(decl *shimast.Node) bool {
202
- parent := decl.Parent
203
- if parent == nil {
204
- return false
205
- }
206
- if parent.Kind != shimast.KindInterfaceDeclaration {
207
- return false
208
- }
209
- iface := parent.AsInterfaceDeclaration()
210
- if iface == nil {
211
- return false
212
- }
213
- return identifierText(iface.Name()) == "Object"
202
+ parent := decl.Parent
203
+ if parent == nil {
204
+ return false
205
+ }
206
+ if parent.Kind != shimast.KindInterfaceDeclaration {
207
+ return false
208
+ }
209
+ iface := parent.AsInterfaceDeclaration()
210
+ if iface == nil {
211
+ return false
212
+ }
213
+ return identifierText(iface.Name()) == "Object"
214
214
  }
215
215
 
216
216
  func init() {
217
- Register(noBaseToString{})
217
+ Register(noBaseToString{})
218
218
  }
@@ -22,22 +22,22 @@
22
22
  package linthost
23
23
 
24
24
  import (
25
- shimast "github.com/microsoft/typescript-go/shim/ast"
25
+ shimast "github.com/microsoft/typescript-go/shim/ast"
26
26
  )
27
27
 
28
28
  type noConfusingVoidExpression struct{}
29
29
 
30
30
  func (noConfusingVoidExpression) Name() string {
31
- return "typescript/no-confusing-void-expression"
31
+ return "typescript/no-confusing-void-expression"
32
32
  }
33
33
  func (noConfusingVoidExpression) Visits() []shimast.Kind {
34
- return []shimast.Kind{shimast.KindVoidExpression}
34
+ return []shimast.Kind{shimast.KindVoidExpression}
35
35
  }
36
36
  func (noConfusingVoidExpression) Check(ctx *Context, node *shimast.Node) {
37
- if isValidVoidExpressionPosition(node) {
38
- return
39
- }
40
- ctx.Report(node, "Placing `void` operator in a value position is confusing — use it only as a statement, an arrow concise body, or inside another `void`.")
37
+ if isValidVoidExpressionPosition(node) {
38
+ return
39
+ }
40
+ ctx.Report(node, "Placing `void` operator in a value position is confusing — use it only as a statement, an arrow concise body, or inside another `void`.")
41
41
  }
42
42
 
43
43
  // isValidVoidExpressionPosition reports whether the `void X`
@@ -45,28 +45,28 @@ func (noConfusingVoidExpression) Check(ctx *Context, node *shimast.Node) {
45
45
  // Parenthesized expressions are transparent — `(void x)` keeps the
46
46
  // same effective context as `void x` for the surrounding code.
47
47
  func isValidVoidExpressionPosition(node *shimast.Node) bool {
48
- parent := node.Parent
49
- for parent != nil && parent.Kind == shimast.KindParenthesizedExpression {
50
- node = parent
51
- parent = parent.Parent
52
- }
53
- if parent == nil {
54
- return false
55
- }
56
- switch parent.Kind {
57
- case shimast.KindExpressionStatement:
58
- return true
59
- case shimast.KindVoidExpression:
60
- // `void void x` — the inner `void` is the operand of another
61
- // `void`, which discards the result anyway.
62
- return true
63
- case shimast.KindArrowFunction:
64
- arrow := parent.AsArrowFunction()
65
- return arrow != nil && arrow.Body == node
66
- }
67
- return false
48
+ parent := node.Parent
49
+ for parent != nil && parent.Kind == shimast.KindParenthesizedExpression {
50
+ node = parent
51
+ parent = parent.Parent
52
+ }
53
+ if parent == nil {
54
+ return false
55
+ }
56
+ switch parent.Kind {
57
+ case shimast.KindExpressionStatement:
58
+ return true
59
+ case shimast.KindVoidExpression:
60
+ // `void void x` — the inner `void` is the operand of another
61
+ // `void`, which discards the result anyway.
62
+ return true
63
+ case shimast.KindArrowFunction:
64
+ arrow := parent.AsArrowFunction()
65
+ return arrow != nil && arrow.Body == node
66
+ }
67
+ return false
68
68
  }
69
69
 
70
70
  func init() {
71
- Register(noConfusingVoidExpression{})
71
+ Register(noConfusingVoidExpression{})
72
72
  }