@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
@@ -20,56 +20,56 @@
20
20
  package linthost
21
21
 
22
22
  import (
23
- shimast "github.com/microsoft/typescript-go/shim/ast"
23
+ shimast "github.com/microsoft/typescript-go/shim/ast"
24
24
  )
25
25
 
26
26
  type noElseReturn struct{}
27
27
 
28
28
  func (noElseReturn) Name() string { return "no-else-return" }
29
29
  func (noElseReturn) Visits() []shimast.Kind {
30
- return []shimast.Kind{shimast.KindIfStatement}
30
+ return []shimast.Kind{shimast.KindIfStatement}
31
31
  }
32
32
  func (noElseReturn) Check(ctx *Context, node *shimast.Node) {
33
- ifStmt := node.AsIfStatement()
34
- if ifStmt == nil || ifStmt.ElseStatement == nil {
35
- return
36
- }
37
- if !noElseReturnTerminates(ifStmt.ThenStatement) {
38
- return
39
- }
40
- ctx.Report(ifStmt.ElseStatement, "Remove the `else` — the preceding branch already terminates.")
33
+ ifStmt := node.AsIfStatement()
34
+ if ifStmt == nil || ifStmt.ElseStatement == nil {
35
+ return
36
+ }
37
+ if !noElseReturnTerminates(ifStmt.ThenStatement) {
38
+ return
39
+ }
40
+ ctx.Report(ifStmt.ElseStatement, "Remove the `else` — the preceding branch already terminates.")
41
41
  }
42
42
 
43
43
  func noElseReturnTerminates(stmt *shimast.Node) bool {
44
- if stmt == nil {
45
- return false
46
- }
47
- switch stmt.Kind {
48
- case shimast.KindReturnStatement,
49
- shimast.KindThrowStatement,
50
- shimast.KindBreakStatement,
51
- shimast.KindContinueStatement:
52
- return true
53
- case shimast.KindBlock:
54
- block := stmt.AsBlock()
55
- if block == nil || block.Statements == nil {
56
- return false
57
- }
58
- stmts := block.Statements.Nodes
59
- if len(stmts) == 0 {
60
- return false
61
- }
62
- return noElseReturnTerminates(stmts[len(stmts)-1])
63
- case shimast.KindIfStatement:
64
- inner := stmt.AsIfStatement()
65
- if inner == nil || inner.ElseStatement == nil {
66
- return false
67
- }
68
- return noElseReturnTerminates(inner.ThenStatement) && noElseReturnTerminates(inner.ElseStatement)
69
- }
70
- return false
44
+ if stmt == nil {
45
+ return false
46
+ }
47
+ switch stmt.Kind {
48
+ case shimast.KindReturnStatement,
49
+ shimast.KindThrowStatement,
50
+ shimast.KindBreakStatement,
51
+ shimast.KindContinueStatement:
52
+ return true
53
+ case shimast.KindBlock:
54
+ block := stmt.AsBlock()
55
+ if block == nil || block.Statements == nil {
56
+ return false
57
+ }
58
+ stmts := block.Statements.Nodes
59
+ if len(stmts) == 0 {
60
+ return false
61
+ }
62
+ return noElseReturnTerminates(stmts[len(stmts)-1])
63
+ case shimast.KindIfStatement:
64
+ inner := stmt.AsIfStatement()
65
+ if inner == nil || inner.ElseStatement == nil {
66
+ return false
67
+ }
68
+ return noElseReturnTerminates(inner.ThenStatement) && noElseReturnTerminates(inner.ElseStatement)
69
+ }
70
+ return false
71
71
  }
72
72
 
73
73
  func init() {
74
- Register(noElseReturn{})
74
+ Register(noElseReturn{})
75
75
  }
@@ -23,15 +23,15 @@ type noEmptyNamedBlocks struct{}
23
23
 
24
24
  func (noEmptyNamedBlocks) Name() string { return "no-empty-named-blocks" }
25
25
  func (noEmptyNamedBlocks) Visits() []shimast.Kind {
26
- return []shimast.Kind{shimast.KindImportDeclaration, shimast.KindExportDeclaration}
26
+ return []shimast.Kind{shimast.KindImportDeclaration, shimast.KindExportDeclaration}
27
27
  }
28
28
  func (noEmptyNamedBlocks) Check(ctx *Context, node *shimast.Node) {
29
- switch node.Kind {
30
- case shimast.KindImportDeclaration:
31
- noEmptyNamedBlocksCheckImport(ctx, node)
32
- case shimast.KindExportDeclaration:
33
- noEmptyNamedBlocksCheckExport(ctx, node)
34
- }
29
+ switch node.Kind {
30
+ case shimast.KindImportDeclaration:
31
+ noEmptyNamedBlocksCheckImport(ctx, node)
32
+ case shimast.KindExportDeclaration:
33
+ noEmptyNamedBlocksCheckExport(ctx, node)
34
+ }
35
35
  }
36
36
 
37
37
  // noEmptyNamedBlocksCheckImport flags `import {} from "x"` and
@@ -39,31 +39,31 @@ func (noEmptyNamedBlocks) Check(ctx *Context, node *shimast.Node) {
39
39
  // a bare `import "x"`; the default-plus-empty form should drop the
40
40
  // empty clause and keep the default binding.
41
41
  func noEmptyNamedBlocksCheckImport(ctx *Context, node *shimast.Node) {
42
- decl := node.AsImportDeclaration()
43
- if decl == nil || decl.ImportClause == nil {
44
- return
45
- }
46
- clause := decl.ImportClause.AsImportClause()
47
- if clause == nil {
48
- return
49
- }
50
- if clause.NamedBindings == nil {
51
- return
52
- }
53
- if clause.NamedBindings.Kind != shimast.KindNamedImports {
54
- return
55
- }
56
- named := clause.NamedBindings.AsNamedImports()
57
- if named == nil || named.Elements == nil || len(named.Elements.Nodes) > 0 {
58
- return
59
- }
60
- // Two shapes both reach here:
61
- // `import {} from "x"` — clause.Name() == nil
62
- // `import name, {} from "x"` — clause.Name() != nil
63
- // Either way the empty `{}` is what the rule blames; the report
64
- // target is the empty named-imports node so the highlight points at
65
- // the `{}` token, not the whole declaration.
66
- ctx.Report(clause.NamedBindings, "Unexpected empty named import block.")
42
+ decl := node.AsImportDeclaration()
43
+ if decl == nil || decl.ImportClause == nil {
44
+ return
45
+ }
46
+ clause := decl.ImportClause.AsImportClause()
47
+ if clause == nil {
48
+ return
49
+ }
50
+ if clause.NamedBindings == nil {
51
+ return
52
+ }
53
+ if clause.NamedBindings.Kind != shimast.KindNamedImports {
54
+ return
55
+ }
56
+ named := clause.NamedBindings.AsNamedImports()
57
+ if named == nil || named.Elements == nil || len(named.Elements.Nodes) > 0 {
58
+ return
59
+ }
60
+ // Two shapes both reach here:
61
+ // `import {} from "x"` — clause.Name() == nil
62
+ // `import name, {} from "x"` — clause.Name() != nil
63
+ // Either way the empty `{}` is what the rule blames; the report
64
+ // target is the empty named-imports node so the highlight points at
65
+ // the `{}` token, not the whole declaration.
66
+ ctx.Report(clause.NamedBindings, "Unexpected empty named import block.")
67
67
  }
68
68
 
69
69
  // noEmptyNamedBlocksCheckExport flags `export {}` (with or without a
@@ -72,20 +72,20 @@ func noEmptyNamedBlocksCheckImport(ctx *Context, node *shimast.Node) {
72
72
  // uniformly across both module and non-module sources, leaving
73
73
  // `no-useless-empty-export` to gate the narrower redundant-marker case.
74
74
  func noEmptyNamedBlocksCheckExport(ctx *Context, node *shimast.Node) {
75
- decl := node.AsExportDeclaration()
76
- if decl == nil || decl.ExportClause == nil {
77
- return
78
- }
79
- if decl.ExportClause.Kind != shimast.KindNamedExports {
80
- return
81
- }
82
- named := decl.ExportClause.AsNamedExports()
83
- if named == nil || named.Elements == nil || len(named.Elements.Nodes) > 0 {
84
- return
85
- }
86
- ctx.Report(node, "Unexpected empty named export block.")
75
+ decl := node.AsExportDeclaration()
76
+ if decl == nil || decl.ExportClause == nil {
77
+ return
78
+ }
79
+ if decl.ExportClause.Kind != shimast.KindNamedExports {
80
+ return
81
+ }
82
+ named := decl.ExportClause.AsNamedExports()
83
+ if named == nil || named.Elements == nil || len(named.Elements.Nodes) > 0 {
84
+ return
85
+ }
86
+ ctx.Report(node, "Unexpected empty named export block.")
87
87
  }
88
88
 
89
89
  func init() {
90
- Register(noEmptyNamedBlocks{})
90
+ Register(noEmptyNamedBlocks{})
91
91
  }
@@ -25,37 +25,37 @@ type noImportAssign struct{}
25
25
  func (noImportAssign) Name() string { return "no-import-assign" }
26
26
  func (noImportAssign) Visits() []shimast.Kind { return []shimast.Kind{shimast.KindSourceFile} }
27
27
  func (noImportAssign) Check(ctx *Context, node *shimast.Node) {
28
- if node == nil {
29
- return
30
- }
31
- imported := map[string]bool{}
32
- namespaces := map[string]bool{}
33
- collectImportedBindings(node, imported, namespaces)
34
- if len(imported) == 0 {
35
- return
36
- }
37
- walkDescendants(node, func(n *shimast.Node) {
38
- switch n.Kind {
39
- case shimast.KindBinaryExpression:
40
- expr := n.AsBinaryExpression()
41
- if expr == nil || expr.OperatorToken == nil || !isAssignmentOperator(expr.OperatorToken.Kind) {
42
- return
43
- }
44
- reportImportTarget(ctx, expr.Left, imported, namespaces)
45
- case shimast.KindPrefixUnaryExpression:
46
- pre := n.AsPrefixUnaryExpression()
47
- if pre == nil || (pre.Operator != shimast.KindPlusPlusToken && pre.Operator != shimast.KindMinusMinusToken) {
48
- return
49
- }
50
- reportImportTarget(ctx, pre.Operand, imported, namespaces)
51
- case shimast.KindPostfixUnaryExpression:
52
- post := n.AsPostfixUnaryExpression()
53
- if post == nil || (post.Operator != shimast.KindPlusPlusToken && post.Operator != shimast.KindMinusMinusToken) {
54
- return
55
- }
56
- reportImportTarget(ctx, post.Operand, imported, namespaces)
57
- }
58
- })
28
+ if node == nil {
29
+ return
30
+ }
31
+ imported := map[string]bool{}
32
+ namespaces := map[string]bool{}
33
+ collectImportedBindings(node, imported, namespaces)
34
+ if len(imported) == 0 {
35
+ return
36
+ }
37
+ walkDescendants(node, func(n *shimast.Node) {
38
+ switch n.Kind {
39
+ case shimast.KindBinaryExpression:
40
+ expr := n.AsBinaryExpression()
41
+ if expr == nil || expr.OperatorToken == nil || !isAssignmentOperator(expr.OperatorToken.Kind) {
42
+ return
43
+ }
44
+ reportImportTarget(ctx, expr.Left, imported, namespaces)
45
+ case shimast.KindPrefixUnaryExpression:
46
+ pre := n.AsPrefixUnaryExpression()
47
+ if pre == nil || (pre.Operator != shimast.KindPlusPlusToken && pre.Operator != shimast.KindMinusMinusToken) {
48
+ return
49
+ }
50
+ reportImportTarget(ctx, pre.Operand, imported, namespaces)
51
+ case shimast.KindPostfixUnaryExpression:
52
+ post := n.AsPostfixUnaryExpression()
53
+ if post == nil || (post.Operator != shimast.KindPlusPlusToken && post.Operator != shimast.KindMinusMinusToken) {
54
+ return
55
+ }
56
+ reportImportTarget(ctx, post.Operand, imported, namespaces)
57
+ }
58
+ })
59
59
  }
60
60
 
61
61
  // collectImportedBindings walks every `import` declaration in `file` and
@@ -63,78 +63,78 @@ func (noImportAssign) Check(ctx *Context, node *shimast.Node) {
63
63
  // additionally remembered so callers can flag property mutations like
64
64
  // `ns.foo = …`.
65
65
  func collectImportedBindings(file *shimast.Node, imported, namespaces map[string]bool) {
66
- walkDescendants(file, func(n *shimast.Node) {
67
- if n == nil || n.Kind != shimast.KindImportDeclaration {
68
- return
69
- }
70
- decl := n.AsImportDeclaration()
71
- if decl == nil || decl.ImportClause == nil {
72
- return
73
- }
74
- clause := decl.ImportClause.AsImportClause()
75
- if clause == nil {
76
- return
77
- }
78
- // `import Default from "x"` — default specifier.
79
- if name := identifierText(clause.Name()); name != "" {
80
- imported[name] = true
81
- }
82
- if clause.NamedBindings == nil {
83
- return
84
- }
85
- switch clause.NamedBindings.Kind {
86
- case shimast.KindNamedImports:
87
- named := clause.NamedBindings.AsNamedImports()
88
- if named == nil || named.Elements == nil {
89
- return
90
- }
91
- for _, specNode := range named.Elements.Nodes {
92
- spec := specNode.AsImportSpecifier()
93
- if spec == nil {
94
- continue
95
- }
96
- if name := identifierText(spec.Name()); name != "" {
97
- imported[name] = true
98
- }
99
- }
100
- case shimast.KindNamespaceImport:
101
- ns := clause.NamedBindings.AsNamespaceImport()
102
- if ns == nil {
103
- return
104
- }
105
- if name := identifierText(ns.Name()); name != "" {
106
- imported[name] = true
107
- namespaces[name] = true
108
- }
109
- }
110
- })
66
+ walkDescendants(file, func(n *shimast.Node) {
67
+ if n == nil || n.Kind != shimast.KindImportDeclaration {
68
+ return
69
+ }
70
+ decl := n.AsImportDeclaration()
71
+ if decl == nil || decl.ImportClause == nil {
72
+ return
73
+ }
74
+ clause := decl.ImportClause.AsImportClause()
75
+ if clause == nil {
76
+ return
77
+ }
78
+ // `import Default from "x"` — default specifier.
79
+ if name := identifierText(clause.Name()); name != "" {
80
+ imported[name] = true
81
+ }
82
+ if clause.NamedBindings == nil {
83
+ return
84
+ }
85
+ switch clause.NamedBindings.Kind {
86
+ case shimast.KindNamedImports:
87
+ named := clause.NamedBindings.AsNamedImports()
88
+ if named == nil || named.Elements == nil {
89
+ return
90
+ }
91
+ for _, specNode := range named.Elements.Nodes {
92
+ spec := specNode.AsImportSpecifier()
93
+ if spec == nil {
94
+ continue
95
+ }
96
+ if name := identifierText(spec.Name()); name != "" {
97
+ imported[name] = true
98
+ }
99
+ }
100
+ case shimast.KindNamespaceImport:
101
+ ns := clause.NamedBindings.AsNamespaceImport()
102
+ if ns == nil {
103
+ return
104
+ }
105
+ if name := identifierText(ns.Name()); name != "" {
106
+ imported[name] = true
107
+ namespaces[name] = true
108
+ }
109
+ }
110
+ })
111
111
  }
112
112
 
113
113
  // reportImportTarget flags `target` when it writes to an imported name.
114
114
  // A bare identifier matching an imported binding is always flagged; a
115
115
  // `ns.<key>` property access is flagged when `ns` is a namespace import.
116
116
  func reportImportTarget(ctx *Context, target *shimast.Node, imported, namespaces map[string]bool) {
117
- stripped := stripParens(target)
118
- if stripped == nil {
119
- return
120
- }
121
- if name := identifierText(stripped); name != "" {
122
- if imported[name] {
123
- ctx.Report(target, "'"+name+"' is read-only.")
124
- }
125
- return
126
- }
127
- if stripped.Kind == shimast.KindPropertyAccessExpression {
128
- access := stripped.AsPropertyAccessExpression()
129
- if access == nil || access.Expression == nil {
130
- return
131
- }
132
- if ns := identifierText(stripParens(access.Expression)); ns != "" && namespaces[ns] {
133
- ctx.Report(target, "The members of '"+ns+"' are read-only.")
134
- }
135
- }
117
+ stripped := stripParens(target)
118
+ if stripped == nil {
119
+ return
120
+ }
121
+ if name := identifierText(stripped); name != "" {
122
+ if imported[name] {
123
+ ctx.Report(target, "'"+name+"' is read-only.")
124
+ }
125
+ return
126
+ }
127
+ if stripped.Kind == shimast.KindPropertyAccessExpression {
128
+ access := stripped.AsPropertyAccessExpression()
129
+ if access == nil || access.Expression == nil {
130
+ return
131
+ }
132
+ if ns := identifierText(stripParens(access.Expression)); ns != "" && namespaces[ns] {
133
+ ctx.Report(target, "The members of '"+ns+"' are read-only.")
134
+ }
135
+ }
136
136
  }
137
137
 
138
138
  func init() {
139
- Register(noImportAssign{})
139
+ Register(noImportAssign{})
140
140
  }
@@ -13,7 +13,7 @@
13
13
  package linthost
14
14
 
15
15
  import (
16
- shimast "github.com/microsoft/typescript-go/shim/ast"
16
+ shimast "github.com/microsoft/typescript-go/shim/ast"
17
17
  )
18
18
 
19
19
  type noInvalidThis struct{}
@@ -21,10 +21,10 @@ type noInvalidThis struct{}
21
21
  func (noInvalidThis) Name() string { return "no-invalid-this" }
22
22
  func (noInvalidThis) Visits() []shimast.Kind { return []shimast.Kind{shimast.KindThisKeyword} }
23
23
  func (noInvalidThis) Check(ctx *Context, node *shimast.Node) {
24
- if hasThisBindingAncestor(node) {
25
- return
26
- }
27
- ctx.Report(node, "Unexpected 'this'.")
24
+ if hasThisBindingAncestor(node) {
25
+ return
26
+ }
27
+ ctx.Report(node, "Unexpected 'this'.")
28
28
  }
29
29
 
30
30
  // hasThisBindingAncestor reports whether `node` is lexically enclosed by
@@ -32,21 +32,21 @@ func (noInvalidThis) Check(ctx *Context, node *shimast.Node) {
32
32
  // because they capture `this` from the surrounding scope; the walk only
33
33
  // stops on a real binding site or at the SourceFile root.
34
34
  func hasThisBindingAncestor(node *shimast.Node) bool {
35
- for cur := node.Parent; cur != nil; cur = cur.Parent {
36
- switch cur.Kind {
37
- case shimast.KindFunctionDeclaration,
38
- shimast.KindFunctionExpression,
39
- shimast.KindMethodDeclaration,
40
- shimast.KindGetAccessor,
41
- shimast.KindSetAccessor,
42
- shimast.KindConstructor,
43
- shimast.KindClassStaticBlockDeclaration:
44
- return true
45
- }
46
- }
47
- return false
35
+ for cur := node.Parent; cur != nil; cur = cur.Parent {
36
+ switch cur.Kind {
37
+ case shimast.KindFunctionDeclaration,
38
+ shimast.KindFunctionExpression,
39
+ shimast.KindMethodDeclaration,
40
+ shimast.KindGetAccessor,
41
+ shimast.KindSetAccessor,
42
+ shimast.KindConstructor,
43
+ shimast.KindClassStaticBlockDeclaration:
44
+ return true
45
+ }
46
+ }
47
+ return false
48
48
  }
49
49
 
50
50
  func init() {
51
- Register(noInvalidThis{})
51
+ Register(noInvalidThis{})
52
52
  }
@@ -22,64 +22,64 @@
22
22
  package linthost
23
23
 
24
24
  import (
25
- shimast "github.com/microsoft/typescript-go/shim/ast"
25
+ shimast "github.com/microsoft/typescript-go/shim/ast"
26
26
  )
27
27
 
28
28
  type noLoopFunc struct{}
29
29
 
30
30
  func (noLoopFunc) Name() string { return "no-loop-func" }
31
31
  func (noLoopFunc) Visits() []shimast.Kind {
32
- return []shimast.Kind{
33
- shimast.KindForStatement,
34
- shimast.KindForInStatement,
35
- shimast.KindForOfStatement,
36
- shimast.KindWhileStatement,
37
- shimast.KindDoStatement,
38
- }
32
+ return []shimast.Kind{
33
+ shimast.KindForStatement,
34
+ shimast.KindForInStatement,
35
+ shimast.KindForOfStatement,
36
+ shimast.KindWhileStatement,
37
+ shimast.KindDoStatement,
38
+ }
39
39
  }
40
40
  func (noLoopFunc) Check(ctx *Context, node *shimast.Node) {
41
- var walk func(n *shimast.Node)
42
- walk = func(n *shimast.Node) {
43
- if n == nil {
44
- return
45
- }
46
- if isFunctionLikeKind(n) {
47
- ctx.Report(n, "Function declared in a loop closes over the loop's bindings — hoist it out.")
48
- return
49
- }
50
- if n != node && isLoopKind(n) {
51
- // Nested loops report their own contents when visited.
52
- return
53
- }
54
- n.ForEachChild(func(child *shimast.Node) bool {
55
- walk(child)
56
- return false
57
- })
58
- }
59
- node.ForEachChild(func(child *shimast.Node) bool {
60
- walk(child)
61
- return false
62
- })
41
+ var walk func(n *shimast.Node)
42
+ walk = func(n *shimast.Node) {
43
+ if n == nil {
44
+ return
45
+ }
46
+ if isFunctionLikeKind(n) {
47
+ ctx.Report(n, "Function declared in a loop closes over the loop's bindings — hoist it out.")
48
+ return
49
+ }
50
+ if n != node && isLoopKind(n) {
51
+ // Nested loops report their own contents when visited.
52
+ return
53
+ }
54
+ n.ForEachChild(func(child *shimast.Node) bool {
55
+ walk(child)
56
+ return false
57
+ })
58
+ }
59
+ node.ForEachChild(func(child *shimast.Node) bool {
60
+ walk(child)
61
+ return false
62
+ })
63
63
  }
64
64
 
65
65
  // isLoopKind reports whether n is one of the loop statement kinds this
66
66
  // rule visits. Used to stop the walk at a nested loop boundary so each
67
67
  // loop reports only the function-likes directly inside its own body.
68
68
  func isLoopKind(n *shimast.Node) bool {
69
- if n == nil {
70
- return false
71
- }
72
- switch n.Kind {
73
- case shimast.KindForStatement,
74
- shimast.KindForInStatement,
75
- shimast.KindForOfStatement,
76
- shimast.KindWhileStatement,
77
- shimast.KindDoStatement:
78
- return true
79
- }
80
- return false
69
+ if n == nil {
70
+ return false
71
+ }
72
+ switch n.Kind {
73
+ case shimast.KindForStatement,
74
+ shimast.KindForInStatement,
75
+ shimast.KindForOfStatement,
76
+ shimast.KindWhileStatement,
77
+ shimast.KindDoStatement:
78
+ return true
79
+ }
80
+ return false
81
81
  }
82
82
 
83
83
  func init() {
84
- Register(noLoopFunc{})
84
+ Register(noLoopFunc{})
85
85
  }