@ttsc/lint 0.14.0-dev.20260529.2 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +23 -25
  2. package/lib/defaultFormat.d.ts +10 -6
  3. package/lib/defaultFormat.js +10 -6
  4. package/lib/defaultFormat.js.map +1 -1
  5. package/lib/structures/ITtscLintConfig.d.ts +5 -5
  6. package/lib/structures/TtscLintRuleSetting.d.ts +19 -19
  7. package/lib/structures/{ITtscLintFormat.d.ts → format/ITtscLintFormat.d.ts} +45 -70
  8. package/lib/structures/format/ITtscLintFormat.js.map +1 -0
  9. package/lib/structures/format/ITtscLintFormatJsDoc.d.ts +15 -0
  10. package/lib/structures/format/ITtscLintFormatJsDoc.js +3 -0
  11. package/lib/structures/format/ITtscLintFormatJsDoc.js.map +1 -0
  12. package/lib/structures/format/ITtscLintFormatSortImports.d.ts +54 -0
  13. package/lib/structures/format/ITtscLintFormatSortImports.js +3 -0
  14. package/lib/structures/format/ITtscLintFormatSortImports.js.map +1 -0
  15. package/lib/structures/format/index.d.ts +3 -0
  16. package/lib/structures/format/index.js +20 -0
  17. package/lib/structures/format/index.js.map +1 -0
  18. package/lib/structures/index.d.ts +1 -1
  19. package/lib/structures/index.js +1 -1
  20. package/lib/structures/index.js.map +1 -1
  21. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +18 -27
  22. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +4 -5
  23. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -1
  24. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +29 -33
  25. package/lib/structures/rules/ITtscLintContributorRules.d.ts +6 -7
  26. package/lib/structures/rules/ITtscLintCoreRules.d.ts +380 -408
  27. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +5 -5
  28. package/lib/structures/rules/ITtscLintCypressRuleOptions.js +2 -2
  29. package/lib/structures/rules/ITtscLintCypressRules.d.ts +34 -38
  30. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +21 -24
  31. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +2 -2
  32. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +51 -56
  33. package/lib/structures/rules/ITtscLintJestRules.d.ts +63 -74
  34. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +47 -54
  35. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +94 -102
  36. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +50 -55
  37. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +104 -122
  38. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +62 -71
  39. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +4 -4
  40. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +17 -19
  41. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +8 -10
  42. package/lib/structures/rules/ITtscLintReactRuleOptions.js +1 -2
  43. package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -1
  44. package/lib/structures/rules/ITtscLintReactRules.d.ts +91 -104
  45. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +46 -54
  46. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +7 -8
  47. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +45 -52
  48. package/lib/structures/rules/ITtscLintSolidRules.d.ts +53 -56
  49. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +3 -4
  50. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +60 -69
  51. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +31 -37
  52. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +2 -3
  53. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +102 -119
  54. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +460 -518
  55. package/lib/structures/rules/ITtscLintVitestRules.d.ts +43 -51
  56. package/linthost/config.go +89 -72
  57. package/linthost/config_format.go +265 -99
  58. package/linthost/directives.go +5 -1
  59. package/linthost/display_width.go +72 -0
  60. package/linthost/fix.go +26 -1
  61. package/linthost/format.go +222 -25
  62. package/linthost/format_editor_settings.go +262 -0
  63. package/linthost/lsp.go +8 -4
  64. package/linthost/print_dispatch.go +3 -0
  65. package/linthost/print_doc.go +13 -0
  66. package/linthost/print_engine.go +68 -11
  67. package/linthost/print_nodes_array.go +167 -5
  68. package/linthost/print_nodes_call.go +786 -77
  69. package/linthost/print_nodes_function.go +43 -0
  70. package/linthost/print_nodes_imports.go +64 -14
  71. package/linthost/print_nodes_list.go +214 -8
  72. package/linthost/print_nodes_object.go +14 -6
  73. package/linthost/print_nodes_ternary.go +147 -0
  74. package/linthost/rules_boundaries.go +400 -400
  75. package/linthost/rules_camelcase.go +81 -81
  76. package/linthost/rules_complexity.go +52 -51
  77. package/linthost/rules_consistent_return.go +81 -81
  78. package/linthost/rules_core_extra.go +472 -472
  79. package/linthost/rules_curly.go +43 -43
  80. package/linthost/rules_default_case.go +15 -15
  81. package/linthost/rules_default_case_last.go +22 -22
  82. package/linthost/rules_format_arrow_parens.go +213 -0
  83. package/linthost/rules_format_bracket_spacing.go +117 -0
  84. package/linthost/rules_format_clause_join.go +179 -0
  85. package/linthost/rules_format_declaration_header.go +664 -0
  86. package/linthost/rules_format_indent.go +616 -0
  87. package/linthost/rules_format_jsdoc.go +4 -4
  88. package/linthost/rules_format_orphan_semi.go +106 -0
  89. package/linthost/rules_format_parameter_properties.go +175 -0
  90. package/linthost/rules_format_print_width.go +180 -69
  91. package/linthost/rules_format_quote_props.go +169 -0
  92. package/linthost/rules_format_quotes.go +75 -29
  93. package/linthost/rules_format_semi.go +185 -10
  94. package/linthost/rules_format_sort_imports.go +517 -121
  95. package/linthost/rules_format_statement_split.go +368 -0
  96. package/linthost/rules_format_ternary_nullish_parens.go +77 -0
  97. package/linthost/rules_format_trailing_comma.go +21 -2
  98. package/linthost/rules_format_whitespace.go +336 -0
  99. package/linthost/rules_functional.go +688 -688
  100. package/linthost/rules_gap.go +146 -11
  101. package/linthost/rules_grouped_accessor_pairs.go +60 -60
  102. package/linthost/rules_guard_for_in.go +122 -122
  103. package/linthost/rules_id_length.go +44 -44
  104. package/linthost/rules_imports.go +11 -3
  105. package/linthost/rules_init_declarations.go +25 -25
  106. package/linthost/rules_jsx_a11y.go +844 -844
  107. package/linthost/rules_max_classes_per_file.go +24 -24
  108. package/linthost/rules_max_depth.go +43 -43
  109. package/linthost/rules_max_lines.go +53 -53
  110. package/linthost/rules_max_lines_per_function.go +28 -28
  111. package/linthost/rules_max_nested_callbacks.go +26 -26
  112. package/linthost/rules_max_params.go +20 -20
  113. package/linthost/rules_max_statements.go +29 -29
  114. package/linthost/rules_nextjs.go +5 -5
  115. package/linthost/rules_no_else_return.go +38 -38
  116. package/linthost/rules_no_empty_named_blocks.go +45 -45
  117. package/linthost/rules_no_import_assign.go +96 -96
  118. package/linthost/rules_no_invalid_this.go +19 -19
  119. package/linthost/rules_no_loop_func.go +43 -43
  120. package/linthost/rules_no_magic_numbers.go +60 -60
  121. package/linthost/rules_no_mixed_operators.go +44 -44
  122. package/linthost/rules_no_param_reassign.go +64 -64
  123. package/linthost/rules_no_restricted_imports.go +45 -45
  124. package/linthost/rules_no_restricted_syntax.go +17 -17
  125. package/linthost/rules_no_shadow.go +112 -112
  126. package/linthost/rules_no_unreachable.go +36 -36
  127. package/linthost/rules_no_useless_assignment.go +79 -79
  128. package/linthost/rules_no_useless_constructor.go +167 -167
  129. package/linthost/rules_no_useless_return.go +28 -28
  130. package/linthost/rules_prefer_arrow_callback.go +74 -74
  131. package/linthost/rules_prefer_destructuring.go +61 -61
  132. package/linthost/rules_prefer_named_capture_group.go +87 -87
  133. package/linthost/rules_prefer_rest_params.go +61 -61
  134. package/linthost/rules_promise.go +800 -800
  135. package/linthost/rules_react.go +600 -600
  136. package/linthost/rules_react_extras.go +162 -162
  137. package/linthost/rules_react_hooks.go +2 -2
  138. package/linthost/rules_react_perf.go +231 -231
  139. package/linthost/rules_regexp.go +293 -293
  140. package/linthost/rules_security.go +613 -613
  141. package/linthost/rules_sort_imports.go +37 -37
  142. package/linthost/rules_sort_keys.go +88 -88
  143. package/linthost/rules_suggestions.go +13 -0
  144. package/linthost/rules_ts.go +2 -2
  145. package/linthost/rules_ts_async.go +247 -247
  146. package/linthost/rules_ts_class_literal_property_style.go +64 -64
  147. package/linthost/rules_ts_consistent_type_exports.go +209 -209
  148. package/linthost/rules_ts_explicit_function_return_type.go +35 -35
  149. package/linthost/rules_ts_extra.go +6 -2
  150. package/linthost/rules_ts_no_base_to_string.go +140 -140
  151. package/linthost/rules_ts_no_confusing_void.go +28 -28
  152. package/linthost/rules_ts_no_deprecated.go +110 -110
  153. package/linthost/rules_ts_no_for_in_array.go +45 -45
  154. package/linthost/rules_ts_no_magic_numbers.go +67 -67
  155. package/linthost/rules_ts_no_meaningless_void_operator.go +44 -44
  156. package/linthost/rules_ts_no_misused_spread.go +64 -64
  157. package/linthost/rules_ts_no_redundant_type_constituents.go +72 -72
  158. package/linthost/rules_ts_no_restricted_types.go +28 -28
  159. package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +87 -87
  160. package/linthost/rules_ts_no_unnecessary_condition.go +184 -184
  161. package/linthost/rules_ts_no_unnecessary_qualifier.go +72 -72
  162. package/linthost/rules_ts_no_unnecessary_template_expression.go +120 -120
  163. package/linthost/rules_ts_no_unnecessary_type_arguments.go +171 -171
  164. package/linthost/rules_ts_no_unnecessary_type_assertion.go +90 -90
  165. package/linthost/rules_ts_no_unsafe_argument.go +50 -50
  166. package/linthost/rules_ts_no_unsafe_assignment.go +60 -60
  167. package/linthost/rules_ts_no_unsafe_call.go +40 -40
  168. package/linthost/rules_ts_no_unsafe_enum_comparison.go +147 -147
  169. package/linthost/rules_ts_no_unsafe_member_access.go +29 -29
  170. package/linthost/rules_ts_no_unsafe_return.go +64 -64
  171. package/linthost/rules_ts_no_unsafe_unary_minus.go +42 -42
  172. package/linthost/rules_ts_no_useless_constructor.go +20 -20
  173. package/linthost/rules_ts_non_nullable_type_assertion_style.go +60 -60
  174. package/linthost/rules_ts_parameter_properties.go +10 -10
  175. package/linthost/rules_ts_prefer_find.go +116 -116
  176. package/linthost/rules_ts_prefer_includes.go +173 -173
  177. package/linthost/rules_ts_prefer_nullish_coalescing.go +54 -54
  178. package/linthost/rules_ts_prefer_optional_chain.go +156 -156
  179. package/linthost/rules_ts_prefer_promise_reject_errors.go +104 -104
  180. package/linthost/rules_ts_prefer_readonly.go +31 -31
  181. package/linthost/rules_ts_prefer_reduce_type_parameter.go +74 -74
  182. package/linthost/rules_ts_prefer_regexp_exec.go +69 -69
  183. package/linthost/rules_ts_prefer_return_this_type.go +79 -79
  184. package/linthost/rules_ts_prefer_string_starts_ends_with.go +237 -237
  185. package/linthost/rules_ts_promise_function_async.go +41 -41
  186. package/linthost/rules_ts_related_getter_setter_pairs.go +61 -61
  187. package/linthost/rules_ts_require_array_sort_compare.go +58 -58
  188. package/linthost/rules_ts_restrict_plus_operands.go +82 -82
  189. package/linthost/rules_ts_restrict_template_expressions.go +50 -50
  190. package/linthost/rules_ts_simple.go +249 -249
  191. package/linthost/rules_ts_sort_type_constituents.go +88 -88
  192. package/linthost/rules_ts_strict_boolean_expressions.go +103 -103
  193. package/linthost/rules_ts_switch_exhaustiveness_check.go +90 -90
  194. package/linthost/rules_ts_unbound_method.go +65 -65
  195. package/linthost/rules_tsdoc.go +88 -88
  196. package/linthost/rules_unicorn_better_regex.go +1 -1
  197. package/linthost/rules_unicorn_catch_error_name.go +19 -19
  198. package/linthost/rules_unicorn_consistent_assert.go +20 -20
  199. package/linthost/rules_unicorn_consistent_date_clone.go +27 -27
  200. package/linthost/rules_unicorn_consistent_destructuring.go +3 -3
  201. package/linthost/rules_unicorn_consistent_empty_array_spread.go +34 -34
  202. package/linthost/rules_unicorn_consistent_existence_index_check.go +42 -42
  203. package/linthost/rules_unicorn_consistent_function_scoping.go +3 -3
  204. package/linthost/rules_unicorn_consistent_template_literal_escape.go +3 -3
  205. package/linthost/rules_unicorn_custom_error_definition.go +92 -92
  206. package/linthost/rules_unicorn_empty_brace_spaces.go +47 -47
  207. package/linthost/rules_unicorn_error_message.go +34 -34
  208. package/linthost/rules_unicorn_escape_case.go +14 -14
  209. package/linthost/rules_unicorn_expiring_todo_comments.go +36 -36
  210. package/linthost/rules_unicorn_explicit_length_check.go +51 -51
  211. package/linthost/rules_unicorn_filename_case.go +1 -1
  212. package/linthost/rules_unicorn_import_style.go +1 -1
  213. package/linthost/rules_unicorn_isolated_functions.go +2 -2
  214. package/linthost/rules_unicorn_new_for_builtins.go +49 -49
  215. package/linthost/rules_unicorn_no_abusive_eslint_disable.go +31 -31
  216. package/linthost/rules_unicorn_no_accessor_recursion.go +69 -69
  217. package/linthost/rules_unicorn_no_anonymous_default_export.go +40 -40
  218. package/linthost/rules_unicorn_no_array_callback_reference.go +33 -33
  219. package/linthost/rules_unicorn_no_array_for_each.go +14 -14
  220. package/linthost/rules_unicorn_no_array_method_this_argument.go +29 -29
  221. package/linthost/rules_unicorn_no_array_reduce.go +15 -15
  222. package/linthost/rules_unicorn_no_array_reverse.go +17 -17
  223. package/linthost/rules_unicorn_no_array_sort.go +17 -17
  224. package/linthost/rules_unicorn_no_await_expression_member.go +12 -12
  225. package/linthost/rules_unicorn_no_await_in_promise_methods.go +38 -38
  226. package/linthost/rules_unicorn_no_console_spaces.go +30 -30
  227. package/linthost/rules_unicorn_no_document_cookie.go +13 -13
  228. package/linthost/rules_unicorn_no_empty_file.go +16 -16
  229. package/linthost/rules_unicorn_no_for_loop.go +58 -58
  230. package/linthost/rules_unicorn_no_hex_escape.go +11 -11
  231. package/linthost/rules_unicorn_no_immediate_mutation.go +55 -55
  232. package/linthost/rules_unicorn_no_instanceof_builtins.go +34 -34
  233. package/linthost/rules_unicorn_no_invalid_fetch_options.go +52 -52
  234. package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +25 -25
  235. package/linthost/rules_unicorn_no_keyword_prefix.go +56 -56
  236. package/linthost/rules_unicorn_no_lonely_if.go +21 -21
  237. package/linthost/rules_unicorn_no_magic_array_flat_depth.go +22 -22
  238. package/linthost/rules_unicorn_no_named_default.go +25 -25
  239. package/linthost/rules_unicorn_no_negated_condition.go +54 -54
  240. package/linthost/rules_unicorn_no_negation_in_equality_check.go +23 -23
  241. package/linthost/rules_unicorn_no_nested_ternary.go +15 -15
  242. package/linthost/rules_unicorn_no_new_array.go +5 -5
  243. package/linthost/rules_unicorn_no_new_buffer.go +5 -5
  244. package/linthost/rules_unicorn_no_null.go +2 -2
  245. package/linthost/rules_unicorn_no_object_as_default_parameter.go +19 -19
  246. package/linthost/rules_unicorn_no_process_exit.go +17 -17
  247. package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +29 -29
  248. package/linthost/rules_unicorn_no_static_only_class.go +27 -27
  249. package/linthost/rules_unicorn_no_thenable.go +47 -47
  250. package/linthost/rules_unicorn_no_this_assignment.go +10 -10
  251. package/linthost/rules_unicorn_no_typeof_undefined.go +31 -31
  252. package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +23 -23
  253. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +37 -37
  254. package/linthost/rules_unicorn_no_unnecessary_await.go +24 -24
  255. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +22 -22
  256. package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +67 -67
  257. package/linthost/rules_unicorn_no_unreadable_iife.go +22 -22
  258. package/linthost/rules_unicorn_no_useless_collection_argument.go +34 -34
  259. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +18 -18
  260. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +49 -49
  261. package/linthost/rules_unicorn_no_useless_iterator_to_array.go +41 -41
  262. package/linthost/rules_unicorn_no_useless_length_check.go +82 -82
  263. package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +42 -42
  264. package/linthost/rules_unicorn_no_useless_spread.go +38 -38
  265. package/linthost/rules_unicorn_no_useless_switch_case.go +29 -29
  266. package/linthost/rules_unicorn_no_useless_undefined.go +25 -25
  267. package/linthost/rules_unicorn_no_zero_fractions.go +17 -17
  268. package/linthost/rules_unicorn_number_literal_case.go +33 -33
  269. package/linthost/rules_unicorn_numeric_separators_style.go +36 -36
  270. package/linthost/rules_unicorn_prefer_add_event_listener.go +30 -30
  271. package/linthost/rules_unicorn_prefer_array_find.go +27 -27
  272. package/linthost/rules_unicorn_prefer_array_flat.go +25 -25
  273. package/linthost/rules_unicorn_prefer_array_flat_map.go +37 -37
  274. package/linthost/rules_unicorn_prefer_array_index_of.go +108 -108
  275. package/linthost/rules_unicorn_prefer_array_some.go +43 -43
  276. package/linthost/rules_unicorn_prefer_at.go +42 -42
  277. package/linthost/rules_unicorn_prefer_bigint_literals.go +42 -42
  278. package/linthost/rules_unicorn_prefer_blob_reading_methods.go +15 -15
  279. package/linthost/rules_unicorn_prefer_class_fields.go +57 -57
  280. package/linthost/rules_unicorn_prefer_classlist_toggle.go +76 -76
  281. package/linthost/rules_unicorn_prefer_code_point.go +21 -21
  282. package/linthost/rules_unicorn_prefer_date_now.go +47 -47
  283. package/linthost/rules_unicorn_prefer_default_parameters.go +96 -96
  284. package/linthost/rules_unicorn_prefer_dom_node_append.go +14 -14
  285. package/linthost/rules_unicorn_prefer_dom_node_dataset.go +27 -27
  286. package/linthost/rules_unicorn_prefer_dom_node_remove.go +17 -17
  287. package/linthost/rules_unicorn_prefer_dom_node_text_content.go +11 -11
  288. package/linthost/rules_unicorn_prefer_event_target.go +10 -10
  289. package/linthost/rules_unicorn_prefer_export_from.go +99 -99
  290. package/linthost/rules_unicorn_prefer_global_this.go +91 -91
  291. package/linthost/rules_unicorn_prefer_import_meta_properties.go +38 -38
  292. package/linthost/rules_unicorn_prefer_includes.go +108 -108
  293. package/linthost/rules_unicorn_prefer_json_parse_buffer.go +37 -37
  294. package/linthost/rules_unicorn_prefer_keyboard_event_key.go +10 -10
  295. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +20 -20
  296. package/linthost/rules_unicorn_prefer_math_min_max.go +33 -33
  297. package/linthost/rules_unicorn_prefer_math_trunc.go +32 -32
  298. package/linthost/rules_unicorn_prefer_modern_dom_apis.go +18 -18
  299. package/linthost/rules_unicorn_prefer_modern_math_apis.go +38 -38
  300. package/linthost/rules_unicorn_prefer_module.go +22 -22
  301. package/linthost/rules_unicorn_prefer_native_coercion_functions.go +73 -73
  302. package/linthost/rules_unicorn_prefer_negative_index.go +46 -46
  303. package/linthost/rules_unicorn_prefer_node_protocol.go +90 -90
  304. package/linthost/rules_unicorn_prefer_number_properties.go +57 -57
  305. package/linthost/rules_unicorn_prefer_object_from_entries.go +26 -26
  306. package/linthost/rules_unicorn_prefer_optional_catch_binding.go +24 -24
  307. package/linthost/rules_unicorn_prefer_prototype_methods.go +25 -25
  308. package/linthost/rules_unicorn_prefer_query_selector.go +25 -25
  309. package/linthost/rules_unicorn_prefer_reflect_apply.go +10 -10
  310. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +47 -47
  311. package/linthost/rules_unicorn_prefer_response_static_json.go +26 -26
  312. package/linthost/rules_unicorn_prefer_set_has.go +16 -16
  313. package/linthost/rules_unicorn_prefer_set_size.go +22 -22
  314. package/linthost/rules_unicorn_prefer_simple_condition_first.go +3 -3
  315. package/linthost/rules_unicorn_prefer_single_call.go +59 -59
  316. package/linthost/rules_unicorn_prefer_spread.go +24 -24
  317. package/linthost/rules_unicorn_prefer_string_raw.go +12 -12
  318. package/linthost/rules_unicorn_prefer_string_replace_all.go +46 -46
  319. package/linthost/rules_unicorn_prefer_string_slice.go +17 -17
  320. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +104 -104
  321. package/linthost/rules_unicorn_prefer_string_trim_start_end.go +21 -21
  322. package/linthost/rules_unicorn_prefer_structured_clone.go +36 -36
  323. package/linthost/rules_unicorn_prefer_switch.go +65 -65
  324. package/linthost/rules_unicorn_prefer_ternary.go +35 -35
  325. package/linthost/rules_unicorn_prefer_top_level_await.go +34 -34
  326. package/linthost/rules_unicorn_prefer_type_error.go +84 -84
  327. package/linthost/rules_unicorn_prevent_abbreviations.go +68 -68
  328. package/linthost/rules_unicorn_relative_url_style.go +19 -19
  329. package/linthost/rules_unicorn_require_array_join_separator.go +18 -18
  330. package/linthost/rules_unicorn_require_module_attributes.go +25 -25
  331. package/linthost/rules_unicorn_require_module_specifiers.go +28 -28
  332. package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +18 -18
  333. package/linthost/rules_unicorn_require_post_message_target_origin.go +18 -18
  334. package/linthost/rules_unicorn_string_content.go +1 -1
  335. package/linthost/rules_unicorn_switch_case_braces.go +16 -16
  336. package/linthost/rules_unicorn_switch_case_break_position.go +3 -3
  337. package/linthost/rules_unicorn_template_indent.go +1 -1
  338. package/linthost/rules_unicorn_text_encoding_identifier_case.go +36 -36
  339. package/linthost/rules_unicorn_throw_new_error.go +30 -30
  340. package/linthost/rules_var.go +273 -3
  341. package/package.json +3 -3
  342. package/src/defaultFormat.ts +11 -7
  343. package/src/structures/ITtscLintConfig.ts +5 -5
  344. package/src/structures/TtscLintRuleSetting.ts +19 -19
  345. package/src/structures/{ITtscLintFormat.ts → format/ITtscLintFormat.ts} +48 -75
  346. package/src/structures/format/ITtscLintFormatJsDoc.ts +16 -0
  347. package/src/structures/format/ITtscLintFormatSortImports.ts +62 -0
  348. package/src/structures/format/index.ts +3 -0
  349. package/src/structures/index.ts +1 -1
  350. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +20 -31
  351. package/src/structures/rules/ITtscLintBoundariesRules.ts +32 -36
  352. package/src/structures/rules/ITtscLintContributorRules.ts +6 -7
  353. package/src/structures/rules/ITtscLintCoreRules.ts +380 -408
  354. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +5 -5
  355. package/src/structures/rules/ITtscLintCypressRules.ts +34 -38
  356. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +28 -41
  357. package/src/structures/rules/ITtscLintFunctionalRules.ts +51 -56
  358. package/src/structures/rules/ITtscLintJestRules.ts +63 -74
  359. package/src/structures/rules/ITtscLintJsdocRules.ts +47 -54
  360. package/src/structures/rules/ITtscLintJsxA11yRules.ts +94 -102
  361. package/src/structures/rules/ITtscLintNextjsRules.ts +50 -55
  362. package/src/structures/rules/ITtscLintPlaywrightRules.ts +104 -122
  363. package/src/structures/rules/ITtscLintPromiseRules.ts +62 -71
  364. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +4 -4
  365. package/src/structures/rules/ITtscLintReactPerfRules.ts +17 -19
  366. package/src/structures/rules/ITtscLintReactRuleOptions.ts +8 -10
  367. package/src/structures/rules/ITtscLintReactRules.ts +91 -104
  368. package/src/structures/rules/ITtscLintRegexpRules.ts +46 -54
  369. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +7 -8
  370. package/src/structures/rules/ITtscLintSecurityRules.ts +45 -52
  371. package/src/structures/rules/ITtscLintSolidRules.ts +53 -56
  372. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +3 -4
  373. package/src/structures/rules/ITtscLintStorybookRules.ts +60 -69
  374. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +31 -37
  375. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +2 -3
  376. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +102 -119
  377. package/src/structures/rules/ITtscLintTypeScriptRules.ts +460 -518
  378. package/src/structures/rules/ITtscLintVitestRules.ts +43 -51
  379. package/lib/structures/ITtscLintFormat.js.map +0 -1
  380. /package/lib/structures/{ITtscLintFormat.js → format/ITtscLintFormat.js} +0 -0
@@ -28,48 +28,48 @@ type noUselessConstructor struct{}
28
28
  func (noUselessConstructor) Name() string { return "no-useless-constructor" }
29
29
  func (noUselessConstructor) Visits() []shimast.Kind { return []shimast.Kind{shimast.KindConstructor} }
30
30
  func (noUselessConstructor) Check(ctx *Context, node *shimast.Node) {
31
- ctor := node.AsConstructorDeclaration()
32
- if ctor == nil || ctor.Body == nil {
33
- return
34
- }
35
- // Accessibility modifiers (`private`/`protected`) on the constructor
36
- // itself are load-bearing: they restrict who can `new` the class.
37
- // Removing the constructor would silently widen visibility.
38
- if node.ModifierFlags()&(shimast.ModifierFlagsPrivate|shimast.ModifierFlagsProtected) != 0 {
39
- return
40
- }
41
- if hasParameterProperty(node) {
42
- return
43
- }
44
- body := ctor.Body.AsBlock()
45
- if body == nil || body.Statements == nil {
46
- return
47
- }
48
- params := node.Parameters()
31
+ ctor := node.AsConstructorDeclaration()
32
+ if ctor == nil || ctor.Body == nil {
33
+ return
34
+ }
35
+ // Accessibility modifiers (`private`/`protected`) on the constructor
36
+ // itself are load-bearing: they restrict who can `new` the class.
37
+ // Removing the constructor would silently widen visibility.
38
+ if node.ModifierFlags()&(shimast.ModifierFlagsPrivate|shimast.ModifierFlagsProtected) != 0 {
39
+ return
40
+ }
41
+ if hasParameterProperty(node) {
42
+ return
43
+ }
44
+ body := ctor.Body.AsBlock()
45
+ if body == nil || body.Statements == nil {
46
+ return
47
+ }
48
+ params := node.Parameters()
49
49
 
50
- // Shape 1: empty body, no parameters. The implicit constructor that
51
- // the engine generates when no constructor is written is identical,
52
- // so the explicit declaration is noise.
53
- if len(params) == 0 && len(body.Statements.Nodes) == 0 {
54
- ctx.Report(node, "Useless empty constructor.")
55
- return
56
- }
50
+ // Shape 1: empty body, no parameters. The implicit constructor that
51
+ // the engine generates when no constructor is written is identical,
52
+ // so the explicit declaration is noise.
53
+ if len(params) == 0 && len(body.Statements.Nodes) == 0 {
54
+ ctx.Report(node, "Useless empty constructor.")
55
+ return
56
+ }
57
57
 
58
- // Shape 2: derived class constructor that only forwards arguments to
59
- // `super(...args)` without modification. The synthetic default
60
- // constructor of a subclass behaves identically, so the explicit
61
- // declaration is noise. Only fires when the class extends another.
62
- parent := node.Parent
63
- if parent == nil || !classExtendsAnother(parent) {
64
- return
65
- }
66
- if len(body.Statements.Nodes) != 1 {
67
- return
68
- }
69
- if !isPlainSuperForwarder(params, body.Statements.Nodes[0]) {
70
- return
71
- }
72
- ctx.Report(node, "Useless constructor: forwards arguments to `super` unchanged.")
58
+ // Shape 2: derived class constructor that only forwards arguments to
59
+ // `super(...args)` without modification. The synthetic default
60
+ // constructor of a subclass behaves identically, so the explicit
61
+ // declaration is noise. Only fires when the class extends another.
62
+ parent := node.Parent
63
+ if parent == nil || !classExtendsAnother(parent) {
64
+ return
65
+ }
66
+ if len(body.Statements.Nodes) != 1 {
67
+ return
68
+ }
69
+ if !isPlainSuperForwarder(params, body.Statements.Nodes[0]) {
70
+ return
71
+ }
72
+ ctx.Report(node, "Useless constructor: forwards arguments to `super` unchanged.")
73
73
  }
74
74
 
75
75
  // hasParameterProperty reports whether any constructor parameter carries
@@ -78,25 +78,25 @@ func (noUselessConstructor) Check(ctx *Context, node *shimast.Node) {
78
78
  // field, so the constructor is doing real work even if its body is
79
79
  // empty — removing it would drop the field.
80
80
  func hasParameterProperty(node *shimast.Node) bool {
81
- for _, p := range node.Parameters() {
82
- if p == nil {
83
- continue
84
- }
85
- if p.ModifierFlags()&(shimast.ModifierFlagsPrivate|shimast.ModifierFlagsProtected|shimast.ModifierFlagsReadonly) != 0 {
86
- return true
87
- }
88
- // `public` is not represented by any of the above flags but does
89
- // still create a parameter property. Inspect the raw modifier
90
- // list for a PublicKeyword.
91
- decl := p.AsParameterDeclaration()
92
- if decl == nil {
93
- continue
94
- }
95
- if hasPublicModifier(decl.Modifiers()) {
96
- return true
97
- }
98
- }
99
- return false
81
+ for _, p := range node.Parameters() {
82
+ if p == nil {
83
+ continue
84
+ }
85
+ if p.ModifierFlags()&(shimast.ModifierFlagsPrivate|shimast.ModifierFlagsProtected|shimast.ModifierFlagsReadonly) != 0 {
86
+ return true
87
+ }
88
+ // `public` is not represented by any of the above flags but does
89
+ // still create a parameter property. Inspect the raw modifier
90
+ // list for a PublicKeyword.
91
+ decl := p.AsParameterDeclaration()
92
+ if decl == nil {
93
+ continue
94
+ }
95
+ if hasPublicModifier(decl.Modifiers()) {
96
+ return true
97
+ }
98
+ }
99
+ return false
100
100
  }
101
101
 
102
102
  // hasPublicModifier reports whether `mods` includes a `public` keyword.
@@ -104,15 +104,15 @@ func hasParameterProperty(node *shimast.Node) bool {
104
104
  // the Private/Protected/Readonly modifier flags, so we walk the raw
105
105
  // modifier list to detect it.
106
106
  func hasPublicModifier(mods *shimast.ModifierList) bool {
107
- if mods == nil {
108
- return false
109
- }
110
- for _, m := range mods.Nodes {
111
- if m != nil && m.Kind == shimast.KindPublicKeyword {
112
- return true
113
- }
114
- }
115
- return false
107
+ if mods == nil {
108
+ return false
109
+ }
110
+ for _, m := range mods.Nodes {
111
+ if m != nil && m.Kind == shimast.KindPublicKeyword {
112
+ return true
113
+ }
114
+ }
115
+ return false
116
116
  }
117
117
 
118
118
  // isPlainSuperForwarder reports whether `stmt` is exactly
@@ -123,57 +123,57 @@ func hasPublicModifier(mods *shimast.ModifierList) bool {
123
123
  // the rest parameter are allowed — `(...args: unknown[])` still
124
124
  // forwards unchanged.
125
125
  func isPlainSuperForwarder(params []*shimast.Node, stmt *shimast.Node) bool {
126
- if stmt == nil || stmt.Kind != shimast.KindExpressionStatement {
127
- return false
128
- }
129
- exprStmt := stmt.AsExpressionStatement()
130
- if exprStmt == nil || exprStmt.Expression == nil {
131
- return false
132
- }
133
- expr := stripParens(exprStmt.Expression)
134
- if expr == nil || expr.Kind != shimast.KindCallExpression {
135
- return false
136
- }
137
- call := expr.AsCallExpression()
138
- if call == nil || call.Expression == nil || call.Expression.Kind != shimast.KindSuperKeyword {
139
- return false
140
- }
141
- if call.Arguments == nil {
142
- return false
143
- }
144
- args := call.Arguments.Nodes
145
- // `super()` — zero arguments — only matches when the constructor
146
- // also declares zero parameters. ESLint flags this shape too: the
147
- // synthetic default constructor of a derived class would call
148
- // `super(...args)`, which for a zero-arg case is the same thing.
149
- if len(args) == 0 {
150
- return len(params) == 0
151
- }
152
- if len(args) != len(params) {
153
- return false
154
- }
155
- // All arguments must be `...name` spreading the identically named
156
- // rest parameter. ESLint also accepts the positional `super(a, b)`
157
- // over `(a, b)` shape — match that too: every parameter must be a
158
- // plain identifier (or rest), and the argument must spread/use the
159
- // same identifier in the same position.
160
- for i, arg := range args {
161
- paramName, paramRest, ok := plainParamIdentifier(params[i])
162
- if !ok {
163
- return false
164
- }
165
- argName, argSpread, ok := plainArgIdentifier(arg)
166
- if !ok {
167
- return false
168
- }
169
- if paramName != argName {
170
- return false
171
- }
172
- if paramRest != argSpread {
173
- return false
174
- }
175
- }
176
- return true
126
+ if stmt == nil || stmt.Kind != shimast.KindExpressionStatement {
127
+ return false
128
+ }
129
+ exprStmt := stmt.AsExpressionStatement()
130
+ if exprStmt == nil || exprStmt.Expression == nil {
131
+ return false
132
+ }
133
+ expr := stripParens(exprStmt.Expression)
134
+ if expr == nil || expr.Kind != shimast.KindCallExpression {
135
+ return false
136
+ }
137
+ call := expr.AsCallExpression()
138
+ if call == nil || call.Expression == nil || call.Expression.Kind != shimast.KindSuperKeyword {
139
+ return false
140
+ }
141
+ if call.Arguments == nil {
142
+ return false
143
+ }
144
+ args := call.Arguments.Nodes
145
+ // `super()` — zero arguments — only matches when the constructor
146
+ // also declares zero parameters. ESLint flags this shape too: the
147
+ // synthetic default constructor of a derived class would call
148
+ // `super(...args)`, which for a zero-arg case is the same thing.
149
+ if len(args) == 0 {
150
+ return len(params) == 0
151
+ }
152
+ if len(args) != len(params) {
153
+ return false
154
+ }
155
+ // All arguments must be `...name` spreading the identically named
156
+ // rest parameter. ESLint also accepts the positional `super(a, b)`
157
+ // over `(a, b)` shape — match that too: every parameter must be a
158
+ // plain identifier (or rest), and the argument must spread/use the
159
+ // same identifier in the same position.
160
+ for i, arg := range args {
161
+ paramName, paramRest, ok := plainParamIdentifier(params[i])
162
+ if !ok {
163
+ return false
164
+ }
165
+ argName, argSpread, ok := plainArgIdentifier(arg)
166
+ if !ok {
167
+ return false
168
+ }
169
+ if paramName != argName {
170
+ return false
171
+ }
172
+ if paramRest != argSpread {
173
+ return false
174
+ }
175
+ }
176
+ return true
177
177
  }
178
178
 
179
179
  // plainParamIdentifier extracts the identifier name of a parameter that
@@ -184,29 +184,29 @@ func isPlainSuperForwarder(params []*shimast.Node, stmt *shimast.Node) bool {
184
184
  // Type annotations are intentionally ignored — they do not change the
185
185
  // runtime forwarding behavior.
186
186
  func plainParamIdentifier(param *shimast.Node) (string, bool, bool) {
187
- if param == nil {
188
- return "", false, false
189
- }
190
- decl := param.AsParameterDeclaration()
191
- if decl == nil {
192
- return "", false, false
193
- }
194
- if decl.Initializer != nil || decl.QuestionToken != nil {
195
- return "", false, false
196
- }
197
- // Accessibility modifier on the parameter would already have been
198
- // caught by hasParameterProperty above, but guard locally too.
199
- if param.ModifierFlags()&(shimast.ModifierFlagsPrivate|shimast.ModifierFlagsProtected|shimast.ModifierFlagsReadonly) != 0 {
200
- return "", false, false
201
- }
202
- if hasPublicModifier(decl.Modifiers()) {
203
- return "", false, false
204
- }
205
- name := identifierText(decl.Name())
206
- if name == "" {
207
- return "", false, false
208
- }
209
- return name, decl.DotDotDotToken != nil, true
187
+ if param == nil {
188
+ return "", false, false
189
+ }
190
+ decl := param.AsParameterDeclaration()
191
+ if decl == nil {
192
+ return "", false, false
193
+ }
194
+ if decl.Initializer != nil || decl.QuestionToken != nil {
195
+ return "", false, false
196
+ }
197
+ // Accessibility modifier on the parameter would already have been
198
+ // caught by hasParameterProperty above, but guard locally too.
199
+ if param.ModifierFlags()&(shimast.ModifierFlagsPrivate|shimast.ModifierFlagsProtected|shimast.ModifierFlagsReadonly) != 0 {
200
+ return "", false, false
201
+ }
202
+ if hasPublicModifier(decl.Modifiers()) {
203
+ return "", false, false
204
+ }
205
+ name := identifierText(decl.Name())
206
+ if name == "" {
207
+ return "", false, false
208
+ }
209
+ return name, decl.DotDotDotToken != nil, true
210
210
  }
211
211
 
212
212
  // plainArgIdentifier extracts the identifier name of a call argument
@@ -214,32 +214,32 @@ func plainParamIdentifier(param *shimast.Node) (string, bool, bool) {
214
214
  // on match. Anything else — a literal, property access, expression —
215
215
  // is treated as observable work and disqualifies the forwarder.
216
216
  func plainArgIdentifier(arg *shimast.Node) (string, bool, bool) {
217
- if arg == nil {
218
- return "", false, false
219
- }
220
- stripped := stripParens(arg)
221
- if stripped == nil {
222
- return "", false, false
223
- }
224
- if stripped.Kind == shimast.KindSpreadElement {
225
- spread := stripped.AsSpreadElement()
226
- if spread == nil {
227
- return "", false, false
228
- }
229
- inner := stripParens(spread.Expression)
230
- name := identifierText(inner)
231
- if name == "" {
232
- return "", false, false
233
- }
234
- return name, true, true
235
- }
236
- name := identifierText(stripped)
237
- if name == "" {
238
- return "", false, false
239
- }
240
- return name, false, true
217
+ if arg == nil {
218
+ return "", false, false
219
+ }
220
+ stripped := stripParens(arg)
221
+ if stripped == nil {
222
+ return "", false, false
223
+ }
224
+ if stripped.Kind == shimast.KindSpreadElement {
225
+ spread := stripped.AsSpreadElement()
226
+ if spread == nil {
227
+ return "", false, false
228
+ }
229
+ inner := stripParens(spread.Expression)
230
+ name := identifierText(inner)
231
+ if name == "" {
232
+ return "", false, false
233
+ }
234
+ return name, true, true
235
+ }
236
+ name := identifierText(stripped)
237
+ if name == "" {
238
+ return "", false, false
239
+ }
240
+ return name, false, true
241
241
  }
242
242
 
243
243
  func init() {
244
- Register(noUselessConstructor{})
244
+ Register(noUselessConstructor{})
245
245
  }
@@ -9,43 +9,43 @@
9
9
  package linthost
10
10
 
11
11
  import (
12
- shimast "github.com/microsoft/typescript-go/shim/ast"
12
+ shimast "github.com/microsoft/typescript-go/shim/ast"
13
13
  )
14
14
 
15
15
  type noUselessReturn struct{}
16
16
 
17
17
  func (noUselessReturn) Name() string { return "no-useless-return" }
18
18
  func (noUselessReturn) Visits() []shimast.Kind {
19
- return []shimast.Kind{shimast.KindReturnStatement}
19
+ return []shimast.Kind{shimast.KindReturnStatement}
20
20
  }
21
21
  func (noUselessReturn) Check(ctx *Context, node *shimast.Node) {
22
- ret := node.AsReturnStatement()
23
- if ret == nil || ret.Expression != nil {
24
- // `return X;` is never useless: it carries a value.
25
- return
26
- }
27
- parent := node.Parent
28
- if parent == nil || parent.Kind != shimast.KindBlock {
29
- return
30
- }
31
- block := parent.AsBlock()
32
- if block == nil || block.Statements == nil {
33
- return
34
- }
35
- stmts := block.Statements.Nodes
36
- if len(stmts) == 0 || stmts[len(stmts)-1] != node {
37
- // Only the last statement of the block is provably useless;
38
- // any earlier `return;` may guard the statements that follow.
39
- return
40
- }
41
- if !isFunctionLikeKind(parent.Parent) {
42
- // The block must be the immediate body of a function-like so
43
- // the function's natural completion is what would run next.
44
- return
45
- }
46
- ctx.Report(node, "Unnecessary return statement.")
22
+ ret := node.AsReturnStatement()
23
+ if ret == nil || ret.Expression != nil {
24
+ // `return X;` is never useless: it carries a value.
25
+ return
26
+ }
27
+ parent := node.Parent
28
+ if parent == nil || parent.Kind != shimast.KindBlock {
29
+ return
30
+ }
31
+ block := parent.AsBlock()
32
+ if block == nil || block.Statements == nil {
33
+ return
34
+ }
35
+ stmts := block.Statements.Nodes
36
+ if len(stmts) == 0 || stmts[len(stmts)-1] != node {
37
+ // Only the last statement of the block is provably useless;
38
+ // any earlier `return;` may guard the statements that follow.
39
+ return
40
+ }
41
+ if !isFunctionLikeKind(parent.Parent) {
42
+ // The block must be the immediate body of a function-like so
43
+ // the function's natural completion is what would run next.
44
+ return
45
+ }
46
+ ctx.Report(node, "Unnecessary return statement.")
47
47
  }
48
48
 
49
49
  func init() {
50
- Register(noUselessReturn{})
50
+ Register(noUselessReturn{})
51
51
  }
@@ -27,44 +27,44 @@ type preferArrowCallback struct{}
27
27
 
28
28
  func (preferArrowCallback) Name() string { return "prefer-arrow-callback" }
29
29
  func (preferArrowCallback) Visits() []shimast.Kind {
30
- return []shimast.Kind{shimast.KindCallExpression, shimast.KindNewExpression}
30
+ return []shimast.Kind{shimast.KindCallExpression, shimast.KindNewExpression}
31
31
  }
32
32
  func (preferArrowCallback) Check(ctx *Context, node *shimast.Node) {
33
- args := callArgumentsList(node)
34
- if args == nil {
35
- return
36
- }
37
- for _, arg := range args.Nodes {
38
- fn := stripParens(arg)
39
- if fn == nil || fn.Kind != shimast.KindFunctionExpression {
40
- continue
41
- }
42
- if !preferArrowCallbackEligible(fn) {
43
- continue
44
- }
45
- ctx.Report(fn, "Unexpected function expression. Use an arrow function instead.")
46
- }
33
+ args := callArgumentsList(node)
34
+ if args == nil {
35
+ return
36
+ }
37
+ for _, arg := range args.Nodes {
38
+ fn := stripParens(arg)
39
+ if fn == nil || fn.Kind != shimast.KindFunctionExpression {
40
+ continue
41
+ }
42
+ if !preferArrowCallbackEligible(fn) {
43
+ continue
44
+ }
45
+ ctx.Report(fn, "Unexpected function expression. Use an arrow function instead.")
46
+ }
47
47
  }
48
48
 
49
49
  // callArgumentsList returns the argument NodeList of a CallExpression or
50
50
  // NewExpression, or nil when the node either lacks arguments or is not a
51
51
  // call/new shape.
52
52
  func callArgumentsList(node *shimast.Node) *shimast.NodeList {
53
- switch node.Kind {
54
- case shimast.KindCallExpression:
55
- call := node.AsCallExpression()
56
- if call == nil {
57
- return nil
58
- }
59
- return call.Arguments
60
- case shimast.KindNewExpression:
61
- newExpr := node.AsNewExpression()
62
- if newExpr == nil {
63
- return nil
64
- }
65
- return newExpr.Arguments
66
- }
67
- return nil
53
+ switch node.Kind {
54
+ case shimast.KindCallExpression:
55
+ call := node.AsCallExpression()
56
+ if call == nil {
57
+ return nil
58
+ }
59
+ return call.Arguments
60
+ case shimast.KindNewExpression:
61
+ newExpr := node.AsNewExpression()
62
+ if newExpr == nil {
63
+ return nil
64
+ }
65
+ return newExpr.Arguments
66
+ }
67
+ return nil
68
68
  }
69
69
 
70
70
  // preferArrowCallbackEligible reports whether `fn` (a FunctionExpression)
@@ -74,51 +74,51 @@ func callArgumentsList(node *shimast.Node) *shimast.NodeList {
74
74
  // its own inner name (a self-recursion handle that an arrow cannot
75
75
  // reproduce).
76
76
  func preferArrowCallbackEligible(fn *shimast.Node) bool {
77
- expr := fn.AsFunctionExpression()
78
- if expr == nil {
79
- return false
80
- }
81
- if expr.AsteriskToken != nil {
82
- return false
83
- }
84
- innerName := identifierText(expr.Name())
85
- body := expr.Body
86
- if body == nil {
87
- return true
88
- }
89
- usesForbidden := false
90
- walkFunctionBody(body, func(child *shimast.Node) {
91
- if usesForbidden || child == nil {
92
- return
93
- }
94
- switch child.Kind {
95
- case shimast.KindThisKeyword:
96
- usesForbidden = true
97
- case shimast.KindIdentifier:
98
- text := identifierText(child)
99
- if text == "arguments" {
100
- // Skip `obj.arguments` — that's an unrelated member access.
101
- if parent := child.Parent; parent != nil && parent.Kind == shimast.KindPropertyAccessExpression {
102
- if access := parent.AsPropertyAccessExpression(); access != nil && access.Name() == child {
103
- return
104
- }
105
- }
106
- usesForbidden = true
107
- return
108
- }
109
- if innerName != "" && text == innerName {
110
- if parent := child.Parent; parent != nil && parent.Kind == shimast.KindPropertyAccessExpression {
111
- if access := parent.AsPropertyAccessExpression(); access != nil && access.Name() == child {
112
- return
113
- }
114
- }
115
- usesForbidden = true
116
- }
117
- }
118
- })
119
- return !usesForbidden
77
+ expr := fn.AsFunctionExpression()
78
+ if expr == nil {
79
+ return false
80
+ }
81
+ if expr.AsteriskToken != nil {
82
+ return false
83
+ }
84
+ innerName := identifierText(expr.Name())
85
+ body := expr.Body
86
+ if body == nil {
87
+ return true
88
+ }
89
+ usesForbidden := false
90
+ walkFunctionBody(body, func(child *shimast.Node) {
91
+ if usesForbidden || child == nil {
92
+ return
93
+ }
94
+ switch child.Kind {
95
+ case shimast.KindThisKeyword:
96
+ usesForbidden = true
97
+ case shimast.KindIdentifier:
98
+ text := identifierText(child)
99
+ if text == "arguments" {
100
+ // Skip `obj.arguments` — that's an unrelated member access.
101
+ if parent := child.Parent; parent != nil && parent.Kind == shimast.KindPropertyAccessExpression {
102
+ if access := parent.AsPropertyAccessExpression(); access != nil && access.Name() == child {
103
+ return
104
+ }
105
+ }
106
+ usesForbidden = true
107
+ return
108
+ }
109
+ if innerName != "" && text == innerName {
110
+ if parent := child.Parent; parent != nil && parent.Kind == shimast.KindPropertyAccessExpression {
111
+ if access := parent.AsPropertyAccessExpression(); access != nil && access.Name() == child {
112
+ return
113
+ }
114
+ }
115
+ usesForbidden = true
116
+ }
117
+ }
118
+ })
119
+ return !usesForbidden
120
120
  }
121
121
 
122
122
  func init() {
123
- Register(preferArrowCallback{})
123
+ Register(preferArrowCallback{})
124
124
  }