@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
@@ -13,46 +13,46 @@
13
13
  package linthost
14
14
 
15
15
  import (
16
- "strings"
16
+ "strings"
17
17
 
18
- shimast "github.com/microsoft/typescript-go/shim/ast"
18
+ shimast "github.com/microsoft/typescript-go/shim/ast"
19
19
  )
20
20
 
21
21
  type preferOptionalChain struct{}
22
22
 
23
23
  func (preferOptionalChain) Name() string { return "typescript/prefer-optional-chain" }
24
24
  func (preferOptionalChain) Visits() []shimast.Kind {
25
- return []shimast.Kind{shimast.KindBinaryExpression}
25
+ return []shimast.Kind{shimast.KindBinaryExpression}
26
26
  }
27
27
  func (preferOptionalChain) Check(ctx *Context, node *shimast.Node) {
28
- expr := node.AsBinaryExpression()
29
- if expr == nil || expr.OperatorToken == nil {
30
- return
31
- }
32
- if expr.OperatorToken.Kind != shimast.KindAmpersandAmpersandToken {
33
- return
34
- }
35
- // Skip when the binary expression is itself the left side of an
36
- // outer `&&` — the outer node will be visited and report the full
37
- // chain. Reporting at every inner conjunct would flood `a && a.b
38
- // && a.b.c` with two diagnostics on the same chain.
39
- if parent := node.Parent; parent != nil && parent.Kind == shimast.KindBinaryExpression {
40
- pe := parent.AsBinaryExpression()
41
- if pe != nil && pe.OperatorToken != nil &&
42
- pe.OperatorToken.Kind == shimast.KindAmpersandAmpersandToken &&
43
- pe.Left == node {
44
- return
45
- }
46
- }
47
- guardText, ok := preferOptionalChainGuardText(ctx, expr.Left)
48
- if !ok {
49
- return
50
- }
51
- right := stripParens(expr.Right)
52
- if !preferOptionalChainRightMatches(ctx, right, guardText) {
53
- return
54
- }
55
- ctx.Report(node, "Prefer an optional chain (`a?.b`) over `a && a.b` — shorter and short-circuits to `undefined` instead of the leftmost falsy value.")
28
+ expr := node.AsBinaryExpression()
29
+ if expr == nil || expr.OperatorToken == nil {
30
+ return
31
+ }
32
+ if expr.OperatorToken.Kind != shimast.KindAmpersandAmpersandToken {
33
+ return
34
+ }
35
+ // Skip when the binary expression is itself the left side of an
36
+ // outer `&&` — the outer node will be visited and report the full
37
+ // chain. Reporting at every inner conjunct would flood `a && a.b
38
+ // && a.b.c` with two diagnostics on the same chain.
39
+ if parent := node.Parent; parent != nil && parent.Kind == shimast.KindBinaryExpression {
40
+ pe := parent.AsBinaryExpression()
41
+ if pe != nil && pe.OperatorToken != nil &&
42
+ pe.OperatorToken.Kind == shimast.KindAmpersandAmpersandToken &&
43
+ pe.Left == node {
44
+ return
45
+ }
46
+ }
47
+ guardText, ok := preferOptionalChainGuardText(ctx, expr.Left)
48
+ if !ok {
49
+ return
50
+ }
51
+ right := stripParens(expr.Right)
52
+ if !preferOptionalChainRightMatches(ctx, right, guardText) {
53
+ return
54
+ }
55
+ ctx.Report(node, "Prefer an optional chain (`a?.b`) over `a && a.b` — shorter and short-circuits to `undefined` instead of the leftmost falsy value.")
56
56
  }
57
57
 
58
58
  // preferOptionalChainRightmostConjunct returns the rightmost operand
@@ -60,17 +60,17 @@ func (preferOptionalChain) Check(ctx *Context, node *shimast.Node) {
60
60
  // rightmost conjunct of the left is `a.b`, which is the immediate
61
61
  // guard the outer `&&` was extending.
62
62
  func preferOptionalChainRightmostConjunct(node *shimast.Node) *shimast.Node {
63
- node = stripParens(node)
64
- for node != nil && node.Kind == shimast.KindBinaryExpression {
65
- inner := node.AsBinaryExpression()
66
- if inner == nil || inner.OperatorToken == nil ||
67
- inner.OperatorToken.Kind != shimast.KindAmpersandAmpersandToken ||
68
- inner.Right == nil {
69
- return node
70
- }
71
- node = stripParens(inner.Right)
72
- }
73
- return node
63
+ node = stripParens(node)
64
+ for node != nil && node.Kind == shimast.KindBinaryExpression {
65
+ inner := node.AsBinaryExpression()
66
+ if inner == nil || inner.OperatorToken == nil ||
67
+ inner.OperatorToken.Kind != shimast.KindAmpersandAmpersandToken ||
68
+ inner.Right == nil {
69
+ return node
70
+ }
71
+ node = stripParens(inner.Right)
72
+ }
73
+ return node
74
74
  }
75
75
 
76
76
  // preferOptionalChainGuardText returns the textual identity of the
@@ -80,84 +80,84 @@ func preferOptionalChainRightmostConjunct(node *shimast.Node) *shimast.Node {
80
80
  // comparison form, the returned text is the non-null side, which is
81
81
  // what the right-hand access must start with.
82
82
  func preferOptionalChainGuardText(ctx *Context, left *shimast.Node) (string, bool) {
83
- left = stripParens(left)
84
- if left == nil {
85
- return "", false
86
- }
87
- switch left.Kind {
88
- case shimast.KindIdentifier, shimast.KindPropertyAccessExpression:
89
- text := nodeText(ctx.File, left)
90
- return text, text != ""
91
- case shimast.KindBinaryExpression:
92
- inner := left.AsBinaryExpression()
93
- if inner == nil || inner.OperatorToken == nil {
94
- return "", false
95
- }
96
- // Chain extension: `(x && a.b) && a.b.c` — peel down to the
97
- // rightmost conjunct (`a.b`) and use it as the guard against
98
- // the outer right side.
99
- if inner.OperatorToken.Kind == shimast.KindAmpersandAmpersandToken {
100
- conjunct := preferOptionalChainRightmostConjunct(left)
101
- if conjunct == nil {
102
- return "", false
103
- }
104
- switch conjunct.Kind {
105
- case shimast.KindIdentifier, shimast.KindPropertyAccessExpression:
106
- text := nodeText(ctx.File, conjunct)
107
- return text, text != ""
108
- }
109
- return "", false
110
- }
111
- if inner.OperatorToken.Kind != shimast.KindExclamationEqualsToken &&
112
- inner.OperatorToken.Kind != shimast.KindExclamationEqualsEqualsToken {
113
- return "", false
114
- }
115
- lhs := stripParens(inner.Left)
116
- rhs := stripParens(inner.Right)
117
- if subject, ok := preferOptionalChainNullishCompareSubject(ctx, lhs, rhs); ok {
118
- return subject, true
119
- }
120
- if subject, ok := preferOptionalChainNullishCompareSubject(ctx, rhs, lhs); ok {
121
- return subject, true
122
- }
123
- }
124
- return "", false
83
+ left = stripParens(left)
84
+ if left == nil {
85
+ return "", false
86
+ }
87
+ switch left.Kind {
88
+ case shimast.KindIdentifier, shimast.KindPropertyAccessExpression:
89
+ text := nodeText(ctx.File, left)
90
+ return text, text != ""
91
+ case shimast.KindBinaryExpression:
92
+ inner := left.AsBinaryExpression()
93
+ if inner == nil || inner.OperatorToken == nil {
94
+ return "", false
95
+ }
96
+ // Chain extension: `(x && a.b) && a.b.c` — peel down to the
97
+ // rightmost conjunct (`a.b`) and use it as the guard against
98
+ // the outer right side.
99
+ if inner.OperatorToken.Kind == shimast.KindAmpersandAmpersandToken {
100
+ conjunct := preferOptionalChainRightmostConjunct(left)
101
+ if conjunct == nil {
102
+ return "", false
103
+ }
104
+ switch conjunct.Kind {
105
+ case shimast.KindIdentifier, shimast.KindPropertyAccessExpression:
106
+ text := nodeText(ctx.File, conjunct)
107
+ return text, text != ""
108
+ }
109
+ return "", false
110
+ }
111
+ if inner.OperatorToken.Kind != shimast.KindExclamationEqualsToken &&
112
+ inner.OperatorToken.Kind != shimast.KindExclamationEqualsEqualsToken {
113
+ return "", false
114
+ }
115
+ lhs := stripParens(inner.Left)
116
+ rhs := stripParens(inner.Right)
117
+ if subject, ok := preferOptionalChainNullishCompareSubject(ctx, lhs, rhs); ok {
118
+ return subject, true
119
+ }
120
+ if subject, ok := preferOptionalChainNullishCompareSubject(ctx, rhs, lhs); ok {
121
+ return subject, true
122
+ }
123
+ }
124
+ return "", false
125
125
  }
126
126
 
127
127
  // preferOptionalChainNullishCompareSubject returns the textual identity
128
128
  // of `subject` when `nullish` is `null` or `undefined` and `subject` is
129
129
  // an identifier or property access. Returns the empty text otherwise.
130
130
  func preferOptionalChainNullishCompareSubject(
131
- ctx *Context,
132
- subject, nullish *shimast.Node,
131
+ ctx *Context,
132
+ subject, nullish *shimast.Node,
133
133
  ) (string, bool) {
134
- if subject == nil || nullish == nil {
135
- return "", false
136
- }
137
- if !preferOptionalChainIsNullOrUndefined(nullish) {
138
- return "", false
139
- }
140
- switch subject.Kind {
141
- case shimast.KindIdentifier, shimast.KindPropertyAccessExpression:
142
- text := nodeText(ctx.File, subject)
143
- return text, text != ""
144
- }
145
- return "", false
134
+ if subject == nil || nullish == nil {
135
+ return "", false
136
+ }
137
+ if !preferOptionalChainIsNullOrUndefined(nullish) {
138
+ return "", false
139
+ }
140
+ switch subject.Kind {
141
+ case shimast.KindIdentifier, shimast.KindPropertyAccessExpression:
142
+ text := nodeText(ctx.File, subject)
143
+ return text, text != ""
144
+ }
145
+ return "", false
146
146
  }
147
147
 
148
148
  // preferOptionalChainIsNullOrUndefined reports whether node is the
149
149
  // `null` keyword or the `undefined` identifier.
150
150
  func preferOptionalChainIsNullOrUndefined(node *shimast.Node) bool {
151
- if node == nil {
152
- return false
153
- }
154
- if node.Kind == shimast.KindNullKeyword {
155
- return true
156
- }
157
- if node.Kind == shimast.KindIdentifier {
158
- return identifierText(node) == "undefined"
159
- }
160
- return false
151
+ if node == nil {
152
+ return false
153
+ }
154
+ if node.Kind == shimast.KindNullKeyword {
155
+ return true
156
+ }
157
+ if node.Kind == shimast.KindIdentifier {
158
+ return identifierText(node) == "undefined"
159
+ }
160
+ return false
161
161
  }
162
162
 
163
163
  // preferOptionalChainRightMatches reports whether `right` is a
@@ -166,63 +166,63 @@ func preferOptionalChainIsNullOrUndefined(node *shimast.Node) bool {
166
166
  // rejected — the `?.` rewrite would not preserve side-effect ordering
167
167
  // when the arguments themselves can have side effects.
168
168
  func preferOptionalChainRightMatches(
169
- ctx *Context,
170
- right *shimast.Node,
171
- guardText string,
169
+ ctx *Context,
170
+ right *shimast.Node,
171
+ guardText string,
172
172
  ) bool {
173
- if right == nil || guardText == "" {
174
- return false
175
- }
176
- switch right.Kind {
177
- case shimast.KindPropertyAccessExpression:
178
- access := right.AsPropertyAccessExpression()
179
- if access == nil || access.Expression == nil {
180
- return false
181
- }
182
- return preferOptionalChainHasPrefix(ctx, right, guardText)
183
- case shimast.KindCallExpression:
184
- call := right.AsCallExpression()
185
- if call == nil || call.Expression == nil {
186
- return false
187
- }
188
- // Skip calls with arguments — their evaluation cannot be
189
- // observed identically through `?.()`.
190
- if call.Arguments != nil && len(call.Arguments.Nodes) > 0 {
191
- return false
192
- }
193
- // The callee receiver must itself be a property access; a
194
- // bare identifier call (`a()`) has no chain to fold.
195
- callee := stripParens(call.Expression)
196
- if callee == nil || callee.Kind != shimast.KindPropertyAccessExpression {
197
- return false
198
- }
199
- return preferOptionalChainHasPrefix(ctx, right, guardText)
200
- }
201
- return false
173
+ if right == nil || guardText == "" {
174
+ return false
175
+ }
176
+ switch right.Kind {
177
+ case shimast.KindPropertyAccessExpression:
178
+ access := right.AsPropertyAccessExpression()
179
+ if access == nil || access.Expression == nil {
180
+ return false
181
+ }
182
+ return preferOptionalChainHasPrefix(ctx, right, guardText)
183
+ case shimast.KindCallExpression:
184
+ call := right.AsCallExpression()
185
+ if call == nil || call.Expression == nil {
186
+ return false
187
+ }
188
+ // Skip calls with arguments — their evaluation cannot be
189
+ // observed identically through `?.()`.
190
+ if call.Arguments != nil && len(call.Arguments.Nodes) > 0 {
191
+ return false
192
+ }
193
+ // The callee receiver must itself be a property access; a
194
+ // bare identifier call (`a()`) has no chain to fold.
195
+ callee := stripParens(call.Expression)
196
+ if callee == nil || callee.Kind != shimast.KindPropertyAccessExpression {
197
+ return false
198
+ }
199
+ return preferOptionalChainHasPrefix(ctx, right, guardText)
200
+ }
201
+ return false
202
202
  }
203
203
 
204
204
  // preferOptionalChainHasPrefix returns whether the textual form of
205
205
  // `node` begins with `guard` followed by a `.` or `[` — the only
206
206
  // continuations that mean "a property of the guarded value".
207
207
  func preferOptionalChainHasPrefix(
208
- ctx *Context,
209
- node *shimast.Node,
210
- guard string,
208
+ ctx *Context,
209
+ node *shimast.Node,
210
+ guard string,
211
211
  ) bool {
212
- text := nodeText(ctx.File, node)
213
- if !strings.HasPrefix(text, guard) {
214
- return false
215
- }
216
- if len(text) == len(guard) {
217
- return false
218
- }
219
- switch text[len(guard)] {
220
- case '.', '[', '(':
221
- return true
222
- }
223
- return false
212
+ text := nodeText(ctx.File, node)
213
+ if !strings.HasPrefix(text, guard) {
214
+ return false
215
+ }
216
+ if len(text) == len(guard) {
217
+ return false
218
+ }
219
+ switch text[len(guard)] {
220
+ case '.', '[', '(':
221
+ return true
222
+ }
223
+ return false
224
224
  }
225
225
 
226
226
  func init() {
227
- Register(preferOptionalChain{})
227
+ Register(preferOptionalChain{})
228
228
  }
@@ -8,8 +8,8 @@
8
8
  package linthost
9
9
 
10
10
  import (
11
- shimast "github.com/microsoft/typescript-go/shim/ast"
12
- shimchecker "github.com/microsoft/typescript-go/shim/checker"
11
+ shimast "github.com/microsoft/typescript-go/shim/ast"
12
+ shimchecker "github.com/microsoft/typescript-go/shim/checker"
13
13
  )
14
14
 
15
15
  // preferPromiseRejectErrors reports `Promise.reject(arg)`, `p.reject(arg)`
@@ -27,39 +27,39 @@ import (
27
27
  type preferPromiseRejectErrors struct{}
28
28
 
29
29
  func (preferPromiseRejectErrors) Name() string {
30
- return "typescript/prefer-promise-reject-errors"
30
+ return "typescript/prefer-promise-reject-errors"
31
31
  }
32
32
  func (preferPromiseRejectErrors) NeedsTypeChecker() bool {
33
- return true
33
+ return true
34
34
  }
35
35
  func (preferPromiseRejectErrors) Visits() []shimast.Kind {
36
- return []shimast.Kind{shimast.KindCallExpression}
36
+ return []shimast.Kind{shimast.KindCallExpression}
37
37
  }
38
38
  func (preferPromiseRejectErrors) Check(ctx *Context, node *shimast.Node) {
39
- if ctx.Checker == nil {
40
- return
41
- }
42
- call := node.AsCallExpression()
43
- if call == nil || call.Expression == nil {
44
- return
45
- }
46
- if !preferPromiseRejectErrorsIsRejectCall(ctx, call, node) {
47
- return
48
- }
49
- if call.Arguments == nil || len(call.Arguments.Nodes) == 0 {
50
- return
51
- }
52
- arg := stripParens(call.Arguments.Nodes[0])
53
- if arg == nil {
54
- return
55
- }
56
- t := ctx.Checker.GetTypeAtLocation(arg)
57
- if t == nil {
58
- return
59
- }
60
- if preferPromiseRejectErrorsIsNonError(ctx.Checker, t) {
61
- ctx.Report(node, "Reject promises with an Error object instead of a non-Error value.")
62
- }
39
+ if ctx.Checker == nil {
40
+ return
41
+ }
42
+ call := node.AsCallExpression()
43
+ if call == nil || call.Expression == nil {
44
+ return
45
+ }
46
+ if !preferPromiseRejectErrorsIsRejectCall(ctx, call, node) {
47
+ return
48
+ }
49
+ if call.Arguments == nil || len(call.Arguments.Nodes) == 0 {
50
+ return
51
+ }
52
+ arg := stripParens(call.Arguments.Nodes[0])
53
+ if arg == nil {
54
+ return
55
+ }
56
+ t := ctx.Checker.GetTypeAtLocation(arg)
57
+ if t == nil {
58
+ return
59
+ }
60
+ if preferPromiseRejectErrorsIsNonError(ctx.Checker, t) {
61
+ ctx.Report(node, "Reject promises with an Error object instead of a non-Error value.")
62
+ }
63
63
  }
64
64
 
65
65
  // preferPromiseRejectErrorsIsRejectCall returns true when `call` is one of
@@ -70,25 +70,25 @@ func (preferPromiseRejectErrors) Check(ctx *Context, node *shimast.Node) {
70
70
  //
71
71
  // `node` is the AST node form of `call`, used for the parent walk.
72
72
  func preferPromiseRejectErrorsIsRejectCall(ctx *Context, call *shimast.CallExpression, node *shimast.Node) bool {
73
- receiver, method, ok := promisePropertyAccessParts(call.Expression)
74
- if ok && method == "reject" {
75
- if identifierText(receiver) == "Promise" {
76
- return true
77
- }
78
- if ctx.Checker != nil && receiver != nil {
79
- if t := ctx.Checker.GetTypeAtLocation(receiver); t != nil &&
80
- isPromiseTypedExpression(ctx.Checker, t) {
81
- return true
82
- }
83
- }
84
- return false
85
- }
86
- // Bare identifier call — check Promise executor binding.
87
- name := callCalleeName(call)
88
- if name == "" {
89
- return false
90
- }
91
- return preferPromiseRejectErrorsIsExecutorReject(node, name)
73
+ receiver, method, ok := promisePropertyAccessParts(call.Expression)
74
+ if ok && method == "reject" {
75
+ if identifierText(receiver) == "Promise" {
76
+ return true
77
+ }
78
+ if ctx.Checker != nil && receiver != nil {
79
+ if t := ctx.Checker.GetTypeAtLocation(receiver); t != nil &&
80
+ isPromiseTypedExpression(ctx.Checker, t) {
81
+ return true
82
+ }
83
+ }
84
+ return false
85
+ }
86
+ // Bare identifier call — check Promise executor binding.
87
+ name := callCalleeName(call)
88
+ if name == "" {
89
+ return false
90
+ }
91
+ return preferPromiseRejectErrorsIsExecutorReject(node, name)
92
92
  }
93
93
 
94
94
  // preferPromiseRejectErrorsIsExecutorReject walks parent function-like
@@ -97,19 +97,19 @@ func preferPromiseRejectErrorsIsRejectCall(ctx *Context, call *shimast.CallExpre
97
97
  // parameter is named `name`. Mirrors the param walking used by
98
98
  // `promiseNoMultipleResolved`.
99
99
  func preferPromiseRejectErrorsIsExecutorReject(node *shimast.Node, name string) bool {
100
- for fn := nearestFunctionLike(node); fn != nil; fn = nearestFunctionLike(fn) {
101
- if !preferPromiseRejectErrorsIsPromiseExecutorFn(fn) {
102
- continue
103
- }
104
- params := fn.Parameters()
105
- if len(params) < 2 {
106
- continue
107
- }
108
- if parameterIdentifierName(params[1]) == name {
109
- return true
110
- }
111
- }
112
- return false
100
+ for fn := nearestFunctionLike(node); fn != nil; fn = nearestFunctionLike(fn) {
101
+ if !preferPromiseRejectErrorsIsPromiseExecutorFn(fn) {
102
+ continue
103
+ }
104
+ params := fn.Parameters()
105
+ if len(params) < 2 {
106
+ continue
107
+ }
108
+ if parameterIdentifierName(params[1]) == name {
109
+ return true
110
+ }
111
+ }
112
+ return false
113
113
  }
114
114
 
115
115
  // preferPromiseRejectErrorsIsPromiseExecutorFn reports whether `fn` is
@@ -118,22 +118,22 @@ func preferPromiseRejectErrorsIsExecutorReject(node *shimast.Node, name string)
118
118
  // does in rules_promise.go so `new Promise(((_, reject) => …))` still
119
119
  // matches.
120
120
  func preferPromiseRejectErrorsIsPromiseExecutorFn(fn *shimast.Node) bool {
121
- if fn == nil || !isFunctionLikeKind(fn) {
122
- return false
123
- }
124
- cur := fn
125
- for parent := cur.Parent; parent != nil && parent.Kind == shimast.KindParenthesizedExpression; parent = parent.Parent {
126
- cur = parent
127
- }
128
- newExpr := cur.Parent
129
- if newExpr == nil || newExpr.Kind != shimast.KindNewExpression {
130
- return false
131
- }
132
- ne := newExpr.AsNewExpression()
133
- if ne == nil || identifierText(ne.Expression) != "Promise" || ne.Arguments == nil || len(ne.Arguments.Nodes) == 0 {
134
- return false
135
- }
136
- return stripParens(ne.Arguments.Nodes[0]) == fn
121
+ if fn == nil || !isFunctionLikeKind(fn) {
122
+ return false
123
+ }
124
+ cur := fn
125
+ for parent := cur.Parent; parent != nil && parent.Kind == shimast.KindParenthesizedExpression; parent = parent.Parent {
126
+ cur = parent
127
+ }
128
+ newExpr := cur.Parent
129
+ if newExpr == nil || newExpr.Kind != shimast.KindNewExpression {
130
+ return false
131
+ }
132
+ ne := newExpr.AsNewExpression()
133
+ if ne == nil || identifierText(ne.Expression) != "Promise" || ne.Arguments == nil || len(ne.Arguments.Nodes) == 0 {
134
+ return false
135
+ }
136
+ return stripParens(ne.Arguments.Nodes[0]) == fn
137
137
  }
138
138
 
139
139
  // preferPromiseRejectErrorsIsNonError mirrors `onlyThrowErrorIsPrimitive`
@@ -143,34 +143,34 @@ func preferPromiseRejectErrorsIsPromiseExecutorFn(fn *shimast.Node) bool {
143
143
  // Union and intersection types recurse: a constituent that is primitive
144
144
  // is enough to fire, matching the throw-side baseline.
145
145
  func preferPromiseRejectErrorsIsNonError(checker *shimchecker.Checker, t *shimchecker.Type) bool {
146
- if checker == nil || t == nil {
147
- return false
148
- }
149
- flags := t.Flags()
150
- if flags&(shimchecker.TypeFlagsAny|shimchecker.TypeFlagsUnknown|shimchecker.TypeFlagsNever) != 0 {
151
- return false
152
- }
153
- if flags&(shimchecker.TypeFlagsUnion|shimchecker.TypeFlagsIntersection) != 0 {
154
- for _, part := range t.Types() {
155
- if part == nil {
156
- continue
157
- }
158
- if preferPromiseRejectErrorsIsNonError(checker, part) {
159
- return true
160
- }
161
- }
162
- return false
163
- }
164
- const primitiveMask = shimchecker.TypeFlagsStringLike |
165
- shimchecker.TypeFlagsNumberLike |
166
- shimchecker.TypeFlagsBigIntLike |
167
- shimchecker.TypeFlagsBooleanLike |
168
- shimchecker.TypeFlagsVoid |
169
- shimchecker.TypeFlagsUndefined |
170
- shimchecker.TypeFlagsNull
171
- return flags&primitiveMask != 0
146
+ if checker == nil || t == nil {
147
+ return false
148
+ }
149
+ flags := t.Flags()
150
+ if flags&(shimchecker.TypeFlagsAny|shimchecker.TypeFlagsUnknown|shimchecker.TypeFlagsNever) != 0 {
151
+ return false
152
+ }
153
+ if flags&(shimchecker.TypeFlagsUnion|shimchecker.TypeFlagsIntersection) != 0 {
154
+ for _, part := range t.Types() {
155
+ if part == nil {
156
+ continue
157
+ }
158
+ if preferPromiseRejectErrorsIsNonError(checker, part) {
159
+ return true
160
+ }
161
+ }
162
+ return false
163
+ }
164
+ const primitiveMask = shimchecker.TypeFlagsStringLike |
165
+ shimchecker.TypeFlagsNumberLike |
166
+ shimchecker.TypeFlagsBigIntLike |
167
+ shimchecker.TypeFlagsBooleanLike |
168
+ shimchecker.TypeFlagsVoid |
169
+ shimchecker.TypeFlagsUndefined |
170
+ shimchecker.TypeFlagsNull
171
+ return flags&primitiveMask != 0
172
172
  }
173
173
 
174
174
  func init() {
175
- Register(preferPromiseRejectErrors{})
175
+ Register(preferPromiseRejectErrors{})
176
176
  }