@ttsc/lint 0.14.0-dev.20260529.1 → 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 +85 -87
  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
@@ -14,56 +14,56 @@
14
14
  package linthost
15
15
 
16
16
  import (
17
- shimast "github.com/microsoft/typescript-go/shim/ast"
17
+ shimast "github.com/microsoft/typescript-go/shim/ast"
18
18
  )
19
19
 
20
20
  type camelcase struct{}
21
21
 
22
22
  func (camelcase) Name() string { return "camelcase" }
23
23
  func (camelcase) Visits() []shimast.Kind {
24
- return []shimast.Kind{
25
- shimast.KindVariableDeclaration,
26
- shimast.KindParameter,
27
- shimast.KindFunctionDeclaration,
28
- shimast.KindClassDeclaration,
29
- }
24
+ return []shimast.Kind{
25
+ shimast.KindVariableDeclaration,
26
+ shimast.KindParameter,
27
+ shimast.KindFunctionDeclaration,
28
+ shimast.KindClassDeclaration,
29
+ }
30
30
  }
31
31
  func (camelcase) Check(ctx *Context, node *shimast.Node) {
32
- var nameNode *shimast.Node
33
- switch node.Kind {
34
- case shimast.KindVariableDeclaration:
35
- decl := node.AsVariableDeclaration()
36
- if decl == nil {
37
- return
38
- }
39
- nameNode = decl.Name()
40
- case shimast.KindParameter:
41
- decl := node.AsParameterDeclaration()
42
- if decl == nil {
43
- return
44
- }
45
- nameNode = decl.Name()
46
- case shimast.KindFunctionDeclaration:
47
- decl := node.AsFunctionDeclaration()
48
- if decl == nil {
49
- return
50
- }
51
- nameNode = decl.Name()
52
- case shimast.KindClassDeclaration:
53
- decl := node.AsClassDeclaration()
54
- if decl == nil {
55
- return
56
- }
57
- nameNode = decl.Name()
58
- }
59
- name := identifierText(nameNode)
60
- if name == "" {
61
- return
62
- }
63
- if isCamelOrPascalCaseName(name) {
64
- return
65
- }
66
- ctx.Report(nameNode, "Identifier '"+name+"' is not in camelCase.")
32
+ var nameNode *shimast.Node
33
+ switch node.Kind {
34
+ case shimast.KindVariableDeclaration:
35
+ decl := node.AsVariableDeclaration()
36
+ if decl == nil {
37
+ return
38
+ }
39
+ nameNode = decl.Name()
40
+ case shimast.KindParameter:
41
+ decl := node.AsParameterDeclaration()
42
+ if decl == nil {
43
+ return
44
+ }
45
+ nameNode = decl.Name()
46
+ case shimast.KindFunctionDeclaration:
47
+ decl := node.AsFunctionDeclaration()
48
+ if decl == nil {
49
+ return
50
+ }
51
+ nameNode = decl.Name()
52
+ case shimast.KindClassDeclaration:
53
+ decl := node.AsClassDeclaration()
54
+ if decl == nil {
55
+ return
56
+ }
57
+ nameNode = decl.Name()
58
+ }
59
+ name := identifierText(nameNode)
60
+ if name == "" {
61
+ return
62
+ }
63
+ if isCamelOrPascalCaseName(name) {
64
+ return
65
+ }
66
+ ctx.Report(nameNode, "Identifier '"+name+"' is not in camelCase.")
67
67
  }
68
68
 
69
69
  // isCamelOrPascalCaseName reports whether `name` matches the convention
@@ -76,58 +76,58 @@ func (camelcase) Check(ctx *Context, node *shimast.Node) {
76
76
  // SCREAMING_SNAKE constant and accepted; everything else with an
77
77
  // interior underscore is reported.
78
78
  func isCamelOrPascalCaseName(name string) bool {
79
- if name == "" {
80
- return true
81
- }
82
- trimmed := trimUnderscores(name)
83
- if trimmed == "" {
84
- return true
85
- }
86
- if !containsUnderscore(trimmed) {
87
- return true
88
- }
89
- return isAllUpperOrUnderscore(trimmed)
79
+ if name == "" {
80
+ return true
81
+ }
82
+ trimmed := trimUnderscores(name)
83
+ if trimmed == "" {
84
+ return true
85
+ }
86
+ if !containsUnderscore(trimmed) {
87
+ return true
88
+ }
89
+ return isAllUpperOrUnderscore(trimmed)
90
90
  }
91
91
 
92
92
  func trimUnderscores(s string) string {
93
- start, end := 0, len(s)
94
- for start < end && s[start] == '_' {
95
- start++
96
- }
97
- for end > start && s[end-1] == '_' {
98
- end--
99
- }
100
- return s[start:end]
93
+ start, end := 0, len(s)
94
+ for start < end && s[start] == '_' {
95
+ start++
96
+ }
97
+ for end > start && s[end-1] == '_' {
98
+ end--
99
+ }
100
+ return s[start:end]
101
101
  }
102
102
 
103
103
  func containsUnderscore(s string) bool {
104
- for i := 0; i < len(s); i++ {
105
- if s[i] == '_' {
106
- return true
107
- }
108
- }
109
- return false
104
+ for i := 0; i < len(s); i++ {
105
+ if s[i] == '_' {
106
+ return true
107
+ }
108
+ }
109
+ return false
110
110
  }
111
111
 
112
112
  // isAllUpperOrUnderscore returns true when every character is either an
113
113
  // uppercase ASCII letter, a digit, or an underscore. Lowercase letters
114
114
  // disqualify the string and force the rule to report.
115
115
  func isAllUpperOrUnderscore(s string) bool {
116
- hasUpper := false
117
- for i := 0; i < len(s); i++ {
118
- ch := s[i]
119
- switch {
120
- case ch >= 'A' && ch <= 'Z':
121
- hasUpper = true
122
- case ch >= '0' && ch <= '9':
123
- case ch == '_':
124
- default:
125
- return false
126
- }
127
- }
128
- return hasUpper
116
+ hasUpper := false
117
+ for i := 0; i < len(s); i++ {
118
+ ch := s[i]
119
+ switch {
120
+ case ch >= 'A' && ch <= 'Z':
121
+ hasUpper = true
122
+ case ch >= '0' && ch <= '9':
123
+ case ch == '_':
124
+ default:
125
+ return false
126
+ }
127
+ }
128
+ return hasUpper
129
129
  }
130
130
 
131
131
  func init() {
132
- Register(camelcase{})
132
+ Register(camelcase{})
133
133
  }
@@ -11,6 +11,7 @@
11
11
  // - `catch` clauses on `try`,
12
12
  // - ternary (`?:`) expressions,
13
13
  // - short-circuit operators `&&`, `||`, `??`.
14
+ //
14
15
  // Nested function-likes start their own complexity counter and are
15
16
  // visited independently, so an inner closure's branches do not
16
17
  // inflate the outer function's score.
@@ -18,9 +19,9 @@
18
19
  package linthost
19
20
 
20
21
  import (
21
- "fmt"
22
+ "fmt"
22
23
 
23
- shimast "github.com/microsoft/typescript-go/shim/ast"
24
+ shimast "github.com/microsoft/typescript-go/shim/ast"
24
25
  )
25
26
 
26
27
  // complexityLimit is the cyclomatic-complexity ceiling. Above this
@@ -31,64 +32,64 @@ type complexity struct{}
31
32
 
32
33
  func (complexity) Name() string { return "complexity" }
33
34
  func (complexity) Visits() []shimast.Kind {
34
- return []shimast.Kind{
35
- shimast.KindFunctionDeclaration,
36
- shimast.KindFunctionExpression,
37
- shimast.KindArrowFunction,
38
- shimast.KindMethodDeclaration,
39
- shimast.KindGetAccessor,
40
- shimast.KindSetAccessor,
41
- shimast.KindConstructor,
42
- }
35
+ return []shimast.Kind{
36
+ shimast.KindFunctionDeclaration,
37
+ shimast.KindFunctionExpression,
38
+ shimast.KindArrowFunction,
39
+ shimast.KindMethodDeclaration,
40
+ shimast.KindGetAccessor,
41
+ shimast.KindSetAccessor,
42
+ shimast.KindConstructor,
43
+ }
43
44
  }
44
45
  func (complexity) Check(ctx *Context, node *shimast.Node) {
45
- if node == nil {
46
- return
47
- }
48
- body := node.Body()
49
- if body == nil || body.Kind != shimast.KindBlock {
50
- return
51
- }
52
- score := 1
53
- walkComplexityBody(body, node, &score)
54
- if score > complexityLimit {
55
- ctx.Report(node, fmt.Sprintf("Function has a complexity of %d. Maximum allowed is %d.", score, complexityLimit))
56
- }
46
+ if node == nil {
47
+ return
48
+ }
49
+ body := node.Body()
50
+ if body == nil || body.Kind != shimast.KindBlock {
51
+ return
52
+ }
53
+ score := 1
54
+ walkComplexityBody(body, node, &score)
55
+ if score > complexityLimit {
56
+ ctx.Report(node, fmt.Sprintf("Function has a complexity of %d. Maximum allowed is %d.", score, complexityLimit))
57
+ }
57
58
  }
58
59
 
59
60
  // walkComplexityBody descends through `root` adding 1 to `score` at
60
61
  // every branching construct without crossing nested function-like
61
62
  // scopes. Each nested function is left for its own visit.
62
63
  func walkComplexityBody(node *shimast.Node, fn *shimast.Node, score *int) {
63
- if node == nil {
64
- return
65
- }
66
- if node != fn && isFunctionLikeKind(node) {
67
- return
68
- }
69
- switch node.Kind {
70
- case shimast.KindIfStatement,
71
- shimast.KindCaseClause,
72
- shimast.KindCatchClause,
73
- shimast.KindConditionalExpression:
74
- *score++
75
- case shimast.KindBinaryExpression:
76
- bin := node.AsBinaryExpression()
77
- if bin != nil && bin.OperatorToken != nil {
78
- switch bin.OperatorToken.Kind {
79
- case shimast.KindAmpersandAmpersandToken,
80
- shimast.KindBarBarToken,
81
- shimast.KindQuestionQuestionToken:
82
- *score++
83
- }
84
- }
85
- }
86
- node.ForEachChild(func(child *shimast.Node) bool {
87
- walkComplexityBody(child, fn, score)
88
- return false
89
- })
64
+ if node == nil {
65
+ return
66
+ }
67
+ if node != fn && isFunctionLikeKind(node) {
68
+ return
69
+ }
70
+ switch node.Kind {
71
+ case shimast.KindIfStatement,
72
+ shimast.KindCaseClause,
73
+ shimast.KindCatchClause,
74
+ shimast.KindConditionalExpression:
75
+ *score++
76
+ case shimast.KindBinaryExpression:
77
+ bin := node.AsBinaryExpression()
78
+ if bin != nil && bin.OperatorToken != nil {
79
+ switch bin.OperatorToken.Kind {
80
+ case shimast.KindAmpersandAmpersandToken,
81
+ shimast.KindBarBarToken,
82
+ shimast.KindQuestionQuestionToken:
83
+ *score++
84
+ }
85
+ }
86
+ }
87
+ node.ForEachChild(func(child *shimast.Node) bool {
88
+ walkComplexityBody(child, fn, score)
89
+ return false
90
+ })
90
91
  }
91
92
 
92
93
  func init() {
93
- Register(complexity{})
94
+ Register(complexity{})
94
95
  }
@@ -22,70 +22,70 @@ type consistentReturn struct{}
22
22
 
23
23
  func (consistentReturn) Name() string { return "consistent-return" }
24
24
  func (consistentReturn) Visits() []shimast.Kind {
25
- return []shimast.Kind{
26
- shimast.KindFunctionDeclaration,
27
- shimast.KindFunctionExpression,
28
- shimast.KindArrowFunction,
29
- shimast.KindMethodDeclaration,
30
- shimast.KindGetAccessor,
31
- shimast.KindSetAccessor,
32
- }
25
+ return []shimast.Kind{
26
+ shimast.KindFunctionDeclaration,
27
+ shimast.KindFunctionExpression,
28
+ shimast.KindArrowFunction,
29
+ shimast.KindMethodDeclaration,
30
+ shimast.KindGetAccessor,
31
+ shimast.KindSetAccessor,
32
+ }
33
33
  }
34
34
  func (consistentReturn) Check(ctx *Context, node *shimast.Node) {
35
- body := node.Body()
36
- if body == nil || body.Kind != shimast.KindBlock {
37
- return
38
- }
39
- withValue := false
40
- withoutValue := false
41
- walkConsistentReturnBody(body, func(ret *shimast.Node) {
42
- stmt := ret.AsReturnStatement()
43
- if stmt == nil {
44
- return
45
- }
46
- if stmt.Expression != nil {
47
- withValue = true
48
- } else {
49
- withoutValue = true
50
- }
51
- })
52
- if withValue && withoutValue {
53
- ctx.Report(node, "Function expected to either always or never specify a return value.")
54
- return
55
- }
56
- // A function that returns a value on at least one path but can
57
- // also fall through the end of its block leaks an implicit
58
- // `undefined`. Flag it the same as the explicit mix above.
59
- if withValue && !blockAlwaysExits(body) {
60
- ctx.Report(node, "Function expected to either always or never specify a return value.")
61
- }
35
+ body := node.Body()
36
+ if body == nil || body.Kind != shimast.KindBlock {
37
+ return
38
+ }
39
+ withValue := false
40
+ withoutValue := false
41
+ walkConsistentReturnBody(body, func(ret *shimast.Node) {
42
+ stmt := ret.AsReturnStatement()
43
+ if stmt == nil {
44
+ return
45
+ }
46
+ if stmt.Expression != nil {
47
+ withValue = true
48
+ } else {
49
+ withoutValue = true
50
+ }
51
+ })
52
+ if withValue && withoutValue {
53
+ ctx.Report(node, "Function expected to either always or never specify a return value.")
54
+ return
55
+ }
56
+ // A function that returns a value on at least one path but can
57
+ // also fall through the end of its block leaks an implicit
58
+ // `undefined`. Flag it the same as the explicit mix above.
59
+ if withValue && !blockAlwaysExits(body) {
60
+ ctx.Report(node, "Function expected to either always or never specify a return value.")
61
+ }
62
62
  }
63
63
 
64
64
  // walkConsistentReturnBody visits every `return` statement inside
65
65
  // `root` without crossing nested function-like scopes. Nested
66
66
  // function-likes report their own returns through their own visit.
67
67
  func walkConsistentReturnBody(root *shimast.Node, visit func(*shimast.Node)) {
68
- if root == nil {
69
- return
70
- }
71
- var walk func(*shimast.Node)
72
- walk = func(n *shimast.Node) {
73
- if n == nil {
74
- return
75
- }
76
- if n != root && isFunctionLikeKind(n) {
77
- return
78
- }
79
- if n.Kind == shimast.KindReturnStatement {
80
- visit(n)
81
- return
82
- }
83
- n.ForEachChild(func(child *shimast.Node) bool {
84
- walk(child)
85
- return false
86
- })
87
- }
88
- walk(root)
68
+ if root == nil {
69
+ return
70
+ }
71
+ var walk func(*shimast.Node)
72
+ walk = func(n *shimast.Node) {
73
+ if n == nil {
74
+ return
75
+ }
76
+ if n != root && isFunctionLikeKind(n) {
77
+ return
78
+ }
79
+ if n.Kind == shimast.KindReturnStatement {
80
+ visit(n)
81
+ return
82
+ }
83
+ n.ForEachChild(func(child *shimast.Node) bool {
84
+ walk(child)
85
+ return false
86
+ })
87
+ }
88
+ walk(root)
89
89
  }
90
90
 
91
91
  // blockAlwaysExits reports whether a function-body block can never
@@ -93,38 +93,38 @@ func walkConsistentReturnBody(root *shimast.Node, visit func(*shimast.Node)) {
93
93
  // `throw`, or a nested block / `if` whose branches all terminate.
94
94
  // Mirrors the shallow approximation `getter-return` uses.
95
95
  func blockAlwaysExits(body *shimast.Node) bool {
96
- if body == nil || body.Kind != shimast.KindBlock {
97
- return false
98
- }
99
- stmts := body.Statements()
100
- if len(stmts) == 0 {
101
- return false
102
- }
103
- return statementAlwaysExits(stmts[len(stmts)-1])
96
+ if body == nil || body.Kind != shimast.KindBlock {
97
+ return false
98
+ }
99
+ stmts := body.Statements()
100
+ if len(stmts) == 0 {
101
+ return false
102
+ }
103
+ return statementAlwaysExits(stmts[len(stmts)-1])
104
104
  }
105
105
 
106
106
  // statementAlwaysExits reports whether `stmt` cannot fall through to
107
107
  // the next statement: a `return`, a `throw`, a block ending in either
108
108
  // of those, or an `if` whose branches both terminate.
109
109
  func statementAlwaysExits(stmt *shimast.Node) bool {
110
- if stmt == nil {
111
- return false
112
- }
113
- switch stmt.Kind {
114
- case shimast.KindReturnStatement, shimast.KindThrowStatement:
115
- return true
116
- case shimast.KindBlock:
117
- return blockAlwaysExits(stmt)
118
- case shimast.KindIfStatement:
119
- ifStmt := stmt.AsIfStatement()
120
- if ifStmt == nil || ifStmt.ThenStatement == nil || ifStmt.ElseStatement == nil {
121
- return false
122
- }
123
- return statementAlwaysExits(ifStmt.ThenStatement) && statementAlwaysExits(ifStmt.ElseStatement)
124
- }
125
- return false
110
+ if stmt == nil {
111
+ return false
112
+ }
113
+ switch stmt.Kind {
114
+ case shimast.KindReturnStatement, shimast.KindThrowStatement:
115
+ return true
116
+ case shimast.KindBlock:
117
+ return blockAlwaysExits(stmt)
118
+ case shimast.KindIfStatement:
119
+ ifStmt := stmt.AsIfStatement()
120
+ if ifStmt == nil || ifStmt.ThenStatement == nil || ifStmt.ElseStatement == nil {
121
+ return false
122
+ }
123
+ return statementAlwaysExits(ifStmt.ThenStatement) && statementAlwaysExits(ifStmt.ElseStatement)
124
+ }
125
+ return false
126
126
  }
127
127
 
128
128
  func init() {
129
- Register(consistentReturn{})
129
+ Register(consistentReturn{})
130
130
  }