@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
@@ -1,293 +1,293 @@
1
1
  package linthost
2
2
 
3
3
  import (
4
- "encoding/json"
5
- "path/filepath"
6
- "strings"
4
+ "encoding/json"
5
+ "path/filepath"
6
+ "strings"
7
7
 
8
- shimast "github.com/microsoft/typescript-go/shim/ast"
9
- shimscanner "github.com/microsoft/typescript-go/shim/scanner"
8
+ shimast "github.com/microsoft/typescript-go/shim/ast"
9
+ shimscanner "github.com/microsoft/typescript-go/shim/scanner"
10
10
  )
11
11
 
12
12
  type reactPerfMatcher func(*shimast.Node) bool
13
13
 
14
14
  type reactPerfRule struct {
15
- name string
16
- message string
17
- matcher reactPerfMatcher
15
+ name string
16
+ message string
17
+ matcher reactPerfMatcher
18
18
  }
19
19
 
20
20
  func (r reactPerfRule) Name() string { return r.name }
21
21
  func (r reactPerfRule) Visits() []shimast.Kind {
22
- return []shimast.Kind{shimast.KindJsxAttribute}
22
+ return []shimast.Kind{shimast.KindJsxAttribute}
23
23
  }
24
24
  func (r reactPerfRule) Check(ctx *Context, node *shimast.Node) {
25
- if !reactPerfIsTSXFile(ctx) {
26
- return
27
- }
28
- attr := node.AsJsxAttribute()
29
- if attr == nil || attr.Initializer == nil {
30
- return
31
- }
32
- attrName := shimast.NodeText(attr.Name())
33
- if reactPerfNativeAllowed(ctx, node, attrName) {
34
- return
35
- }
36
- expr := reactPerfAttributeExpression(attr.Initializer)
37
- if expr == nil {
38
- return
39
- }
40
- if matched := reactPerfFindNewValue(expr, r.matcher); matched != nil {
41
- ctx.Report(matched, r.message)
42
- }
25
+ if !reactPerfIsTSXFile(ctx) {
26
+ return
27
+ }
28
+ attr := node.AsJsxAttribute()
29
+ if attr == nil || attr.Initializer == nil {
30
+ return
31
+ }
32
+ attrName := shimast.NodeText(attr.Name())
33
+ if reactPerfNativeAllowed(ctx, node, attrName) {
34
+ return
35
+ }
36
+ expr := reactPerfAttributeExpression(attr.Initializer)
37
+ if expr == nil {
38
+ return
39
+ }
40
+ if matched := reactPerfFindNewValue(expr, r.matcher); matched != nil {
41
+ ctx.Report(matched, r.message)
42
+ }
43
43
  }
44
44
 
45
45
  type reactPerfRuleOptions struct {
46
- NativeAllowList json.RawMessage `json:"nativeAllowList"`
46
+ NativeAllowList json.RawMessage `json:"nativeAllowList"`
47
47
  }
48
48
 
49
49
  type reactPerfNativeAllowList struct {
50
- all bool
51
- names map[string]struct{}
50
+ all bool
51
+ names map[string]struct{}
52
52
  }
53
53
 
54
54
  func reactPerfIsTSXFile(ctx *Context) bool {
55
- if ctx == nil || ctx.File == nil {
56
- return false
57
- }
58
- return strings.EqualFold(filepath.Ext(ctx.File.FileName()), ".tsx")
55
+ if ctx == nil || ctx.File == nil {
56
+ return false
57
+ }
58
+ return strings.EqualFold(filepath.Ext(ctx.File.FileName()), ".tsx")
59
59
  }
60
60
 
61
61
  func reactPerfAttributeExpression(initializer *shimast.Node) *shimast.Node {
62
- if initializer == nil {
63
- return nil
64
- }
65
- if initializer.Kind == shimast.KindJsxExpression {
66
- expr := initializer.AsJsxExpression()
67
- if expr == nil {
68
- return nil
69
- }
70
- return expr.Expression
71
- }
72
- return initializer
62
+ if initializer == nil {
63
+ return nil
64
+ }
65
+ if initializer.Kind == shimast.KindJsxExpression {
66
+ expr := initializer.AsJsxExpression()
67
+ if expr == nil {
68
+ return nil
69
+ }
70
+ return expr.Expression
71
+ }
72
+ return initializer
73
73
  }
74
74
 
75
75
  func reactPerfNativeAllowed(ctx *Context, attrNode *shimast.Node, attrName string) bool {
76
- if !reactPerfIsIntrinsicAttribute(attrNode) {
77
- return false
78
- }
79
- allow := reactPerfLoadNativeAllowList(ctx)
80
- if allow.all {
81
- return true
82
- }
83
- if attrName == "" || len(allow.names) == 0 {
84
- return false
85
- }
86
- _, ok := allow.names[attrName]
87
- return ok
76
+ if !reactPerfIsIntrinsicAttribute(attrNode) {
77
+ return false
78
+ }
79
+ allow := reactPerfLoadNativeAllowList(ctx)
80
+ if allow.all {
81
+ return true
82
+ }
83
+ if attrName == "" || len(allow.names) == 0 {
84
+ return false
85
+ }
86
+ _, ok := allow.names[attrName]
87
+ return ok
88
88
  }
89
89
 
90
90
  func reactPerfLoadNativeAllowList(ctx *Context) reactPerfNativeAllowList {
91
- var raw reactPerfRuleOptions
92
- _ = ctx.DecodeOptions(&raw)
93
- if len(raw.NativeAllowList) == 0 {
94
- return reactPerfNativeAllowList{}
95
- }
91
+ var raw reactPerfRuleOptions
92
+ _ = ctx.DecodeOptions(&raw)
93
+ if len(raw.NativeAllowList) == 0 {
94
+ return reactPerfNativeAllowList{}
95
+ }
96
96
 
97
- var mode string
98
- if err := json.Unmarshal(raw.NativeAllowList, &mode); err == nil {
99
- if mode == "all" {
100
- return reactPerfNativeAllowList{all: true}
101
- }
102
- return reactPerfNativeAllowList{}
103
- }
97
+ var mode string
98
+ if err := json.Unmarshal(raw.NativeAllowList, &mode); err == nil {
99
+ if mode == "all" {
100
+ return reactPerfNativeAllowList{all: true}
101
+ }
102
+ return reactPerfNativeAllowList{}
103
+ }
104
104
 
105
- var names []string
106
- if err := json.Unmarshal(raw.NativeAllowList, &names); err != nil {
107
- return reactPerfNativeAllowList{}
108
- }
109
- out := reactPerfNativeAllowList{names: make(map[string]struct{}, len(names))}
110
- for _, name := range names {
111
- if name != "" {
112
- out.names[name] = struct{}{}
113
- }
114
- }
115
- return out
105
+ var names []string
106
+ if err := json.Unmarshal(raw.NativeAllowList, &names); err != nil {
107
+ return reactPerfNativeAllowList{}
108
+ }
109
+ out := reactPerfNativeAllowList{names: make(map[string]struct{}, len(names))}
110
+ for _, name := range names {
111
+ if name != "" {
112
+ out.names[name] = struct{}{}
113
+ }
114
+ }
115
+ return out
116
116
  }
117
117
 
118
118
  func reactPerfIsIntrinsicAttribute(attrNode *shimast.Node) bool {
119
- if attrNode == nil {
120
- return false
121
- }
122
- parent := attrNode.Parent
123
- if parent == nil || parent.Kind != shimast.KindJsxAttributes {
124
- return false
125
- }
126
- owner := parent.Parent
127
- if owner == nil {
128
- return false
129
- }
119
+ if attrNode == nil {
120
+ return false
121
+ }
122
+ parent := attrNode.Parent
123
+ if parent == nil || parent.Kind != shimast.KindJsxAttributes {
124
+ return false
125
+ }
126
+ owner := parent.Parent
127
+ if owner == nil {
128
+ return false
129
+ }
130
130
 
131
- var tag *shimast.Node
132
- switch owner.Kind {
133
- case shimast.KindJsxOpeningElement:
134
- opening := owner.AsJsxOpeningElement()
135
- if opening != nil {
136
- tag = opening.TagName
137
- }
138
- case shimast.KindJsxSelfClosingElement:
139
- selfClosing := owner.AsJsxSelfClosingElement()
140
- if selfClosing != nil {
141
- tag = selfClosing.TagName
142
- }
143
- }
144
- if tag == nil || tag.Kind != shimast.KindIdentifier {
145
- return false
146
- }
147
- return shimscanner.IsIntrinsicJsxName(identifierText(tag))
131
+ var tag *shimast.Node
132
+ switch owner.Kind {
133
+ case shimast.KindJsxOpeningElement:
134
+ opening := owner.AsJsxOpeningElement()
135
+ if opening != nil {
136
+ tag = opening.TagName
137
+ }
138
+ case shimast.KindJsxSelfClosingElement:
139
+ selfClosing := owner.AsJsxSelfClosingElement()
140
+ if selfClosing != nil {
141
+ tag = selfClosing.TagName
142
+ }
143
+ }
144
+ if tag == nil || tag.Kind != shimast.KindIdentifier {
145
+ return false
146
+ }
147
+ return shimscanner.IsIntrinsicJsxName(identifierText(tag))
148
148
  }
149
149
 
150
150
  func reactPerfFindNewValue(node *shimast.Node, matcher reactPerfMatcher) *shimast.Node {
151
- node = reactPerfUnwrapExpression(node)
152
- if node == nil {
153
- return nil
154
- }
155
- if matcher(node) {
156
- return node
157
- }
151
+ node = reactPerfUnwrapExpression(node)
152
+ if node == nil {
153
+ return nil
154
+ }
155
+ if matcher(node) {
156
+ return node
157
+ }
158
158
 
159
- switch node.Kind {
160
- case shimast.KindBinaryExpression:
161
- binary := node.AsBinaryExpression()
162
- if binary == nil || binary.OperatorToken == nil {
163
- return nil
164
- }
165
- switch binary.OperatorToken.Kind {
166
- case shimast.KindBarBarToken, shimast.KindQuestionQuestionToken:
167
- if matched := reactPerfFindNewValue(binary.Left, matcher); matched != nil {
168
- return matched
169
- }
170
- return reactPerfFindNewValue(binary.Right, matcher)
171
- }
172
- case shimast.KindConditionalExpression:
173
- cond := node.AsConditionalExpression()
174
- if cond == nil {
175
- return nil
176
- }
177
- if matched := reactPerfFindNewValue(cond.WhenTrue, matcher); matched != nil {
178
- return matched
179
- }
180
- return reactPerfFindNewValue(cond.WhenFalse, matcher)
181
- }
182
- return nil
159
+ switch node.Kind {
160
+ case shimast.KindBinaryExpression:
161
+ binary := node.AsBinaryExpression()
162
+ if binary == nil || binary.OperatorToken == nil {
163
+ return nil
164
+ }
165
+ switch binary.OperatorToken.Kind {
166
+ case shimast.KindBarBarToken, shimast.KindQuestionQuestionToken:
167
+ if matched := reactPerfFindNewValue(binary.Left, matcher); matched != nil {
168
+ return matched
169
+ }
170
+ return reactPerfFindNewValue(binary.Right, matcher)
171
+ }
172
+ case shimast.KindConditionalExpression:
173
+ cond := node.AsConditionalExpression()
174
+ if cond == nil {
175
+ return nil
176
+ }
177
+ if matched := reactPerfFindNewValue(cond.WhenTrue, matcher); matched != nil {
178
+ return matched
179
+ }
180
+ return reactPerfFindNewValue(cond.WhenFalse, matcher)
181
+ }
182
+ return nil
183
183
  }
184
184
 
185
185
  func reactPerfUnwrapExpression(node *shimast.Node) *shimast.Node {
186
- for {
187
- node = stripParens(node)
188
- if node == nil {
189
- return nil
190
- }
191
- switch node.Kind {
192
- case shimast.KindAsExpression:
193
- expr := node.AsAsExpression()
194
- if expr == nil {
195
- return node
196
- }
197
- node = expr.Expression
198
- case shimast.KindSatisfiesExpression:
199
- expr := node.AsSatisfiesExpression()
200
- if expr == nil {
201
- return node
202
- }
203
- node = expr.Expression
204
- case shimast.KindNonNullExpression:
205
- expr := node.AsNonNullExpression()
206
- if expr == nil {
207
- return node
208
- }
209
- node = expr.Expression
210
- case shimast.KindTypeAssertionExpression:
211
- expr := node.AsTypeAssertion()
212
- if expr == nil {
213
- return node
214
- }
215
- node = expr.Expression
216
- default:
217
- return node
218
- }
219
- }
186
+ for {
187
+ node = stripParens(node)
188
+ if node == nil {
189
+ return nil
190
+ }
191
+ switch node.Kind {
192
+ case shimast.KindAsExpression:
193
+ expr := node.AsAsExpression()
194
+ if expr == nil {
195
+ return node
196
+ }
197
+ node = expr.Expression
198
+ case shimast.KindSatisfiesExpression:
199
+ expr := node.AsSatisfiesExpression()
200
+ if expr == nil {
201
+ return node
202
+ }
203
+ node = expr.Expression
204
+ case shimast.KindNonNullExpression:
205
+ expr := node.AsNonNullExpression()
206
+ if expr == nil {
207
+ return node
208
+ }
209
+ node = expr.Expression
210
+ case shimast.KindTypeAssertionExpression:
211
+ expr := node.AsTypeAssertion()
212
+ if expr == nil {
213
+ return node
214
+ }
215
+ node = expr.Expression
216
+ default:
217
+ return node
218
+ }
219
+ }
220
220
  }
221
221
 
222
222
  func reactPerfIsNewObjectValue(node *shimast.Node) bool {
223
- switch node.Kind {
224
- case shimast.KindObjectLiteralExpression:
225
- return true
226
- case shimast.KindNewExpression:
227
- expr := node.AsNewExpression()
228
- return expr != nil && identifierText(expr.Expression) == "Object"
229
- case shimast.KindCallExpression:
230
- call := node.AsCallExpression()
231
- return call != nil && identifierText(call.Expression) == "Object"
232
- }
233
- return false
223
+ switch node.Kind {
224
+ case shimast.KindObjectLiteralExpression:
225
+ return true
226
+ case shimast.KindNewExpression:
227
+ expr := node.AsNewExpression()
228
+ return expr != nil && identifierText(expr.Expression) == "Object"
229
+ case shimast.KindCallExpression:
230
+ call := node.AsCallExpression()
231
+ return call != nil && identifierText(call.Expression) == "Object"
232
+ }
233
+ return false
234
234
  }
235
235
 
236
236
  func reactPerfIsNewArrayValue(node *shimast.Node) bool {
237
- switch node.Kind {
238
- case shimast.KindArrayLiteralExpression:
239
- return true
240
- case shimast.KindNewExpression:
241
- expr := node.AsNewExpression()
242
- return expr != nil && identifierText(expr.Expression) == "Array"
243
- case shimast.KindCallExpression:
244
- call := node.AsCallExpression()
245
- return call != nil && identifierText(call.Expression) == "Array"
246
- }
247
- return false
237
+ switch node.Kind {
238
+ case shimast.KindArrayLiteralExpression:
239
+ return true
240
+ case shimast.KindNewExpression:
241
+ expr := node.AsNewExpression()
242
+ return expr != nil && identifierText(expr.Expression) == "Array"
243
+ case shimast.KindCallExpression:
244
+ call := node.AsCallExpression()
245
+ return call != nil && identifierText(call.Expression) == "Array"
246
+ }
247
+ return false
248
248
  }
249
249
 
250
250
  func reactPerfIsNewFunctionValue(node *shimast.Node) bool {
251
- switch node.Kind {
252
- case shimast.KindFunctionExpression, shimast.KindArrowFunction:
253
- return true
254
- case shimast.KindNewExpression:
255
- expr := node.AsNewExpression()
256
- return expr != nil && identifierText(expr.Expression) == "Function"
257
- case shimast.KindCallExpression:
258
- call := node.AsCallExpression()
259
- return call != nil && identifierText(call.Expression) == "Function"
260
- }
261
- return false
251
+ switch node.Kind {
252
+ case shimast.KindFunctionExpression, shimast.KindArrowFunction:
253
+ return true
254
+ case shimast.KindNewExpression:
255
+ expr := node.AsNewExpression()
256
+ return expr != nil && identifierText(expr.Expression) == "Function"
257
+ case shimast.KindCallExpression:
258
+ call := node.AsCallExpression()
259
+ return call != nil && identifierText(call.Expression) == "Function"
260
+ }
261
+ return false
262
262
  }
263
263
 
264
264
  func reactPerfIsNewJSXValue(node *shimast.Node) bool {
265
- switch node.Kind {
266
- case shimast.KindJsxElement, shimast.KindJsxSelfClosingElement, shimast.KindJsxFragment:
267
- return true
268
- }
269
- return false
265
+ switch node.Kind {
266
+ case shimast.KindJsxElement, shimast.KindJsxSelfClosingElement, shimast.KindJsxFragment:
267
+ return true
268
+ }
269
+ return false
270
270
  }
271
271
 
272
272
  func init() {
273
- Register(reactPerfRule{
274
- name: "react-perf/jsx-no-new-object-as-prop",
275
- message: "Do not pass a freshly-created object as a JSX prop.",
276
- matcher: reactPerfIsNewObjectValue,
277
- })
278
- Register(reactPerfRule{
279
- name: "react-perf/jsx-no-new-array-as-prop",
280
- message: "Do not pass a freshly-created array as a JSX prop.",
281
- matcher: reactPerfIsNewArrayValue,
282
- })
283
- Register(reactPerfRule{
284
- name: "react-perf/jsx-no-new-function-as-prop",
285
- message: "Do not pass a freshly-created function as a JSX prop.",
286
- matcher: reactPerfIsNewFunctionValue,
287
- })
288
- Register(reactPerfRule{
289
- name: "react-perf/jsx-no-jsx-as-prop",
290
- message: "Do not pass freshly-created JSX as a JSX prop.",
291
- matcher: reactPerfIsNewJSXValue,
292
- })
273
+ Register(reactPerfRule{
274
+ name: "react-perf/jsx-no-new-object-as-prop",
275
+ message: "Do not pass a freshly-created object as a JSX prop.",
276
+ matcher: reactPerfIsNewObjectValue,
277
+ })
278
+ Register(reactPerfRule{
279
+ name: "react-perf/jsx-no-new-array-as-prop",
280
+ message: "Do not pass a freshly-created array as a JSX prop.",
281
+ matcher: reactPerfIsNewArrayValue,
282
+ })
283
+ Register(reactPerfRule{
284
+ name: "react-perf/jsx-no-new-function-as-prop",
285
+ message: "Do not pass a freshly-created function as a JSX prop.",
286
+ matcher: reactPerfIsNewFunctionValue,
287
+ })
288
+ Register(reactPerfRule{
289
+ name: "react-perf/jsx-no-jsx-as-prop",
290
+ message: "Do not pass freshly-created JSX as a JSX prop.",
291
+ matcher: reactPerfIsNewJSXValue,
292
+ })
293
293
  }