@ttsc/lint 0.13.1 → 0.14.0-dev.20260528.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 (464) hide show
  1. package/README.md +948 -69
  2. package/lib/defaultFormat.d.ts +9 -6
  3. package/lib/defaultFormat.js +9 -6
  4. package/lib/defaultFormat.js.map +1 -1
  5. package/lib/index.d.ts +46 -0
  6. package/lib/index.js +35 -10
  7. package/lib/index.js.map +1 -1
  8. package/lib/structures/ITtscLintConfig.d.ts +12 -6
  9. package/lib/structures/{ITtscLintFormatConfig.d.ts → ITtscLintFormat.d.ts} +2 -2
  10. package/lib/structures/{TtscLintRuleMap.js → ITtscLintFormat.js} +1 -1
  11. package/lib/structures/ITtscLintFormat.js.map +1 -0
  12. package/lib/structures/TtscLintRuleSetting.d.ts +49 -0
  13. package/lib/structures/{TtscLintRuleOptions.js → TtscLintRuleSetting.js} +1 -1
  14. package/lib/structures/TtscLintRuleSetting.js.map +1 -0
  15. package/lib/structures/index.d.ts +3 -4
  16. package/lib/structures/index.js +3 -4
  17. package/lib/structures/index.js.map +1 -1
  18. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +104 -0
  19. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +14 -0
  20. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -0
  21. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +79 -0
  22. package/lib/structures/rules/ITtscLintBoundariesRules.js +3 -0
  23. package/lib/structures/rules/ITtscLintBoundariesRules.js.map +1 -0
  24. package/lib/structures/rules/ITtscLintContributorRules.d.ts +17 -0
  25. package/lib/structures/rules/ITtscLintContributorRules.js +3 -0
  26. package/lib/structures/rules/ITtscLintContributorRules.js.map +1 -0
  27. package/lib/structures/rules/ITtscLintCoreRules.d.ts +1257 -0
  28. package/lib/structures/{ITtscLintFormatConfig.js → rules/ITtscLintCoreRules.js} +1 -1
  29. package/lib/structures/rules/ITtscLintCoreRules.js.map +1 -0
  30. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +17 -0
  31. package/lib/structures/rules/ITtscLintCypressRuleOptions.js +10 -0
  32. package/lib/structures/rules/ITtscLintCypressRuleOptions.js.map +1 -0
  33. package/lib/structures/rules/ITtscLintCypressRules.d.ts +129 -0
  34. package/lib/structures/rules/ITtscLintCypressRules.js +3 -0
  35. package/lib/structures/rules/ITtscLintCypressRules.js.map +1 -0
  36. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +157 -0
  37. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +13 -0
  38. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js.map +1 -0
  39. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +167 -0
  40. package/lib/structures/rules/ITtscLintFunctionalRules.js +3 -0
  41. package/lib/structures/rules/ITtscLintFunctionalRules.js.map +1 -0
  42. package/lib/structures/rules/ITtscLintJestRules.d.ts +201 -0
  43. package/lib/structures/rules/ITtscLintJestRules.js +3 -0
  44. package/lib/structures/rules/ITtscLintJestRules.js.map +1 -0
  45. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +140 -0
  46. package/lib/structures/rules/ITtscLintJsdocRules.js +3 -0
  47. package/lib/structures/rules/ITtscLintJsdocRules.js.map +1 -0
  48. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +302 -0
  49. package/lib/structures/rules/ITtscLintJsxA11yRules.js +3 -0
  50. package/lib/structures/rules/ITtscLintJsxA11yRules.js.map +1 -0
  51. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +185 -0
  52. package/lib/structures/rules/ITtscLintNextjsRules.js +3 -0
  53. package/lib/structures/rules/ITtscLintNextjsRules.js.map +1 -0
  54. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +330 -0
  55. package/lib/structures/rules/ITtscLintPlaywrightRules.js +3 -0
  56. package/lib/structures/rules/ITtscLintPlaywrightRules.js.map +1 -0
  57. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +188 -0
  58. package/lib/structures/rules/ITtscLintPromiseRules.js +3 -0
  59. package/lib/structures/rules/ITtscLintPromiseRules.js.map +1 -0
  60. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +18 -0
  61. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js +8 -0
  62. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js.map +1 -0
  63. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +51 -0
  64. package/lib/structures/rules/ITtscLintReactPerfRules.js +3 -0
  65. package/lib/structures/rules/ITtscLintReactPerfRules.js.map +1 -0
  66. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +39 -0
  67. package/lib/structures/rules/ITtscLintReactRuleOptions.js +12 -0
  68. package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -0
  69. package/lib/structures/rules/ITtscLintReactRules.d.ts +289 -0
  70. package/lib/structures/rules/ITtscLintReactRules.js +3 -0
  71. package/lib/structures/rules/ITtscLintReactRules.js.map +1 -0
  72. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +190 -0
  73. package/lib/structures/rules/ITtscLintRegexpRules.js +3 -0
  74. package/lib/structures/rules/ITtscLintRegexpRules.js.map +1 -0
  75. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +66 -0
  76. package/lib/structures/rules/ITtscLintRuleOptionsMap.js +3 -0
  77. package/lib/structures/rules/ITtscLintRuleOptionsMap.js.map +1 -0
  78. package/lib/structures/rules/ITtscLintRules.d.ts +55 -0
  79. package/lib/structures/{TtscLintRule.js → rules/ITtscLintRules.js} +1 -1
  80. package/lib/structures/rules/ITtscLintRules.js.map +1 -0
  81. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +148 -0
  82. package/lib/structures/rules/ITtscLintSecurityRules.js +3 -0
  83. package/lib/structures/rules/ITtscLintSecurityRules.js.map +1 -0
  84. package/lib/structures/rules/ITtscLintSolidRules.d.ts +181 -0
  85. package/lib/structures/rules/ITtscLintSolidRules.js +3 -0
  86. package/lib/structures/rules/ITtscLintSolidRules.js.map +1 -0
  87. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +21 -0
  88. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js +9 -0
  89. package/lib/structures/rules/ITtscLintStorybookRuleOptions.js.map +1 -0
  90. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +174 -0
  91. package/lib/structures/rules/ITtscLintStorybookRules.js +3 -0
  92. package/lib/structures/rules/ITtscLintStorybookRules.js.map +1 -0
  93. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +94 -0
  94. package/lib/structures/rules/ITtscLintTanstackQueryRules.js +3 -0
  95. package/lib/structures/rules/ITtscLintTanstackQueryRules.js.map +1 -0
  96. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +22 -0
  97. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js +10 -0
  98. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js.map +1 -0
  99. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +310 -0
  100. package/lib/structures/rules/ITtscLintTestingLibraryRules.js +3 -0
  101. package/lib/structures/rules/ITtscLintTestingLibraryRules.js.map +1 -0
  102. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +1132 -0
  103. package/lib/structures/rules/ITtscLintTypeScriptRules.js +3 -0
  104. package/lib/structures/rules/ITtscLintTypeScriptRules.js.map +1 -0
  105. package/lib/structures/rules/ITtscLintUnicornRules.d.ts +997 -0
  106. package/lib/structures/rules/ITtscLintUnicornRules.js +3 -0
  107. package/lib/structures/rules/ITtscLintUnicornRules.js.map +1 -0
  108. package/lib/structures/rules/ITtscLintVitestRules.d.ts +141 -0
  109. package/lib/structures/rules/ITtscLintVitestRules.js +3 -0
  110. package/lib/structures/rules/ITtscLintVitestRules.js.map +1 -0
  111. package/lib/structures/rules/index.d.ts +31 -0
  112. package/lib/structures/rules/index.js +48 -0
  113. package/lib/structures/rules/index.js.map +1 -0
  114. package/linthost/ast_helpers.go +30 -5
  115. package/linthost/config.go +48 -17
  116. package/linthost/config_format.go +9 -9
  117. package/linthost/directives.go +67 -25
  118. package/linthost/dispatch.go +14 -3
  119. package/linthost/engine.go +152 -31
  120. package/linthost/fix.go +2 -2
  121. package/linthost/lsp.go +747 -0
  122. package/linthost/print_dispatch.go +2 -2
  123. package/linthost/print_nodes_function.go +2 -2
  124. package/linthost/print_nodes_object.go +1 -1
  125. package/linthost/rule_names.go +14 -0
  126. package/linthost/rules_arrays.go +2 -2
  127. package/linthost/rules_boundaries.go +532 -0
  128. package/linthost/rules_camelcase.go +133 -0
  129. package/linthost/rules_complexity.go +94 -0
  130. package/linthost/rules_consistent_return.go +130 -0
  131. package/linthost/rules_console.go +1 -1
  132. package/linthost/rules_core_extra.go +739 -0
  133. package/linthost/rules_curly.go +70 -0
  134. package/linthost/rules_cypress.go +608 -0
  135. package/linthost/rules_debugger.go +2 -2
  136. package/linthost/rules_default_case.go +39 -0
  137. package/linthost/rules_default_case_last.go +46 -0
  138. package/linthost/rules_dupes.go +3 -3
  139. package/linthost/rules_empty.go +3 -3
  140. package/linthost/rules_escape.go +44 -24
  141. package/linthost/rules_eval.go +2 -2
  142. package/linthost/rules_finally.go +2 -2
  143. package/linthost/rules_format_jsdoc.go +1 -1
  144. package/linthost/rules_format_print_width.go +9 -9
  145. package/linthost/rules_format_quotes.go +1 -1
  146. package/linthost/rules_format_semi.go +1 -1
  147. package/linthost/rules_format_sort_imports.go +1 -1
  148. package/linthost/rules_format_trailing_comma.go +1 -1
  149. package/linthost/rules_functional.go +967 -0
  150. package/linthost/rules_gap.go +24 -45
  151. package/linthost/rules_grouped_accessor_pairs.go +87 -0
  152. package/linthost/rules_guard_for_in.go +198 -0
  153. package/linthost/rules_id_length.go +77 -0
  154. package/linthost/rules_imports.go +70 -2
  155. package/linthost/rules_init_declarations.go +53 -0
  156. package/linthost/rules_jest.go +618 -0
  157. package/linthost/rules_jsdoc.go +502 -0
  158. package/linthost/rules_jsx_a11y.go +1264 -0
  159. package/linthost/rules_logic.go +12 -12
  160. package/linthost/rules_loops.go +1 -1
  161. package/linthost/rules_max_classes_per_file.go +58 -0
  162. package/linthost/rules_max_depth.go +83 -0
  163. package/linthost/rules_max_lines.go +101 -0
  164. package/linthost/rules_max_lines_per_function.go +57 -0
  165. package/linthost/rules_max_nested_callbacks.go +61 -0
  166. package/linthost/rules_max_params.go +49 -0
  167. package/linthost/rules_max_statements.go +59 -0
  168. package/linthost/rules_misc.go +1 -1
  169. package/linthost/rules_nextjs.go +697 -0
  170. package/linthost/rules_no_else_return.go +75 -0
  171. package/linthost/rules_no_empty_named_blocks.go +91 -0
  172. package/linthost/rules_no_extend_native.go +51 -0
  173. package/linthost/rules_no_import_assign.go +140 -0
  174. package/linthost/rules_no_invalid_this.go +52 -0
  175. package/linthost/rules_no_loop_func.go +85 -0
  176. package/linthost/rules_no_magic_numbers.go +123 -0
  177. package/linthost/rules_no_mixed_operators.go +80 -0
  178. package/linthost/rules_no_param_reassign.go +98 -0
  179. package/linthost/rules_no_redeclare.go +270 -0
  180. package/linthost/rules_no_restricted_imports.go +105 -0
  181. package/linthost/rules_no_restricted_syntax.go +49 -0
  182. package/linthost/rules_no_shadow.go +147 -0
  183. package/linthost/rules_no_unreachable.go +77 -0
  184. package/linthost/rules_no_useless_assignment.go +120 -0
  185. package/linthost/rules_no_useless_constructor.go +245 -0
  186. package/linthost/rules_no_useless_return.go +51 -0
  187. package/linthost/rules_params.go +1 -1
  188. package/linthost/rules_playwright.go +788 -0
  189. package/linthost/rules_prefer_arrow_callback.go +124 -0
  190. package/linthost/rules_prefer_destructuring.go +98 -0
  191. package/linthost/rules_prefer_named_capture_group.go +129 -0
  192. package/linthost/rules_prefer_rest_params.go +94 -0
  193. package/linthost/rules_problems.go +41 -30
  194. package/linthost/rules_promise.go +1128 -73
  195. package/linthost/rules_protos.go +2 -2
  196. package/linthost/rules_react.go +773 -0
  197. package/linthost/rules_react_extras.go +227 -0
  198. package/linthost/rules_react_hooks.go +848 -0
  199. package/linthost/rules_react_perf.go +293 -0
  200. package/linthost/rules_react_refresh.go +583 -0
  201. package/linthost/rules_regexp.go +410 -0
  202. package/linthost/rules_security.go +830 -0
  203. package/linthost/rules_self.go +2 -2
  204. package/linthost/rules_solid.go +1073 -0
  205. package/linthost/rules_sort_imports.go +69 -0
  206. package/linthost/rules_sort_keys.go +134 -0
  207. package/linthost/rules_storybook.go +1176 -0
  208. package/linthost/rules_strings.go +4 -4
  209. package/linthost/rules_suggestions.go +38 -38
  210. package/linthost/rules_tanstack_query.go +844 -0
  211. package/linthost/rules_testing_library.go +1204 -0
  212. package/linthost/rules_throw.go +1 -1
  213. package/linthost/rules_ts.go +19 -19
  214. package/linthost/rules_ts_async.go +399 -0
  215. package/linthost/rules_ts_class_literal_property_style.go +115 -0
  216. package/linthost/rules_ts_consistent_type_exports.go +256 -0
  217. package/linthost/rules_ts_explicit_function_return_type.go +67 -0
  218. package/linthost/rules_ts_extra.go +155 -36
  219. package/linthost/rules_ts_no_base_to_string.go +218 -0
  220. package/linthost/rules_ts_no_confusing_void.go +72 -0
  221. package/linthost/rules_ts_no_deprecated.go +195 -0
  222. package/linthost/rules_ts_no_for_in_array.go +84 -0
  223. package/linthost/rules_ts_no_magic_numbers.go +124 -0
  224. package/linthost/rules_ts_no_meaningless_void_operator.go +84 -0
  225. package/linthost/rules_ts_no_misused_spread.go +104 -0
  226. package/linthost/rules_ts_no_redundant_type_constituents.go +113 -0
  227. package/linthost/rules_ts_no_restricted_types.go +62 -0
  228. package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +129 -0
  229. package/linthost/rules_ts_no_unnecessary_condition.go +250 -0
  230. package/linthost/rules_ts_no_unnecessary_qualifier.go +118 -0
  231. package/linthost/rules_ts_no_unnecessary_template_expression.go +178 -0
  232. package/linthost/rules_ts_no_unnecessary_type_arguments.go +234 -0
  233. package/linthost/rules_ts_no_unnecessary_type_assertion.go +157 -0
  234. package/linthost/rules_ts_no_unsafe_argument.go +82 -0
  235. package/linthost/rules_ts_no_unsafe_assignment.go +102 -0
  236. package/linthost/rules_ts_no_unsafe_call.go +82 -0
  237. package/linthost/rules_ts_no_unsafe_enum_comparison.go +235 -0
  238. package/linthost/rules_ts_no_unsafe_member_access.go +58 -0
  239. package/linthost/rules_ts_no_unsafe_return.go +126 -0
  240. package/linthost/rules_ts_no_unsafe_unary_minus.go +81 -0
  241. package/linthost/rules_ts_no_useless_constructor.go +52 -0
  242. package/linthost/rules_ts_non_nullable_type_assertion_style.go +108 -0
  243. package/linthost/rules_ts_parameter_properties.go +38 -0
  244. package/linthost/rules_ts_prefer_find.go +178 -0
  245. package/linthost/rules_ts_prefer_includes.go +255 -0
  246. package/linthost/rules_ts_prefer_nullish_coalescing.go +104 -0
  247. package/linthost/rules_ts_prefer_optional_chain.go +228 -0
  248. package/linthost/rules_ts_prefer_promise_reject_errors.go +176 -0
  249. package/linthost/rules_ts_prefer_readonly.go +73 -0
  250. package/linthost/rules_ts_prefer_reduce_type_parameter.go +116 -0
  251. package/linthost/rules_ts_prefer_regexp_exec.go +122 -0
  252. package/linthost/rules_ts_prefer_return_this_type.go +135 -0
  253. package/linthost/rules_ts_prefer_string_starts_ends_with.go +360 -0
  254. package/linthost/rules_ts_promise_function_async.go +77 -0
  255. package/linthost/rules_ts_related_getter_setter_pairs.go +113 -0
  256. package/linthost/rules_ts_require_array_sort_compare.go +96 -0
  257. package/linthost/rules_ts_restrict_plus_operands.go +127 -0
  258. package/linthost/rules_ts_restrict_template_expressions.go +95 -0
  259. package/linthost/rules_ts_simple.go +387 -0
  260. package/linthost/rules_ts_sort_type_constituents.go +144 -0
  261. package/linthost/rules_ts_strict_boolean_expressions.go +157 -0
  262. package/linthost/rules_ts_switch_exhaustiveness_check.go +147 -0
  263. package/linthost/rules_ts_unbound_method.go +126 -0
  264. package/linthost/rules_tsdoc.go +136 -0
  265. package/linthost/rules_unicorn_better_regex.go +27 -0
  266. package/linthost/rules_unicorn_catch_error_name.go +46 -0
  267. package/linthost/rules_unicorn_consistent_assert.go +47 -0
  268. package/linthost/rules_unicorn_consistent_date_clone.go +54 -0
  269. package/linthost/rules_unicorn_consistent_destructuring.go +25 -0
  270. package/linthost/rules_unicorn_consistent_empty_array_spread.go +62 -0
  271. package/linthost/rules_unicorn_consistent_existence_index_check.go +80 -0
  272. package/linthost/rules_unicorn_consistent_function_scoping.go +25 -0
  273. package/linthost/rules_unicorn_consistent_template_literal_escape.go +25 -0
  274. package/linthost/rules_unicorn_custom_error_definition.go +138 -0
  275. package/linthost/rules_unicorn_empty_brace_spaces.go +73 -0
  276. package/linthost/rules_unicorn_error_message.go +64 -0
  277. package/linthost/rules_unicorn_escape_case.go +51 -0
  278. package/linthost/rules_unicorn_expiring_todo_comments.go +78 -0
  279. package/linthost/rules_unicorn_explicit_length_check.go +88 -0
  280. package/linthost/rules_unicorn_filename_case.go +29 -0
  281. package/linthost/rules_unicorn_import_style.go +28 -0
  282. package/linthost/rules_unicorn_isolated_functions.go +29 -0
  283. package/linthost/rules_unicorn_new_for_builtins.go +87 -0
  284. package/linthost/rules_unicorn_no_abusive_eslint_disable.go +63 -0
  285. package/linthost/rules_unicorn_no_accessor_recursion.go +115 -0
  286. package/linthost/rules_unicorn_no_anonymous_default_export.go +74 -0
  287. package/linthost/rules_unicorn_no_array_callback_reference.go +65 -0
  288. package/linthost/rules_unicorn_no_array_for_each.go +40 -0
  289. package/linthost/rules_unicorn_no_array_method_this_argument.go +61 -0
  290. package/linthost/rules_unicorn_no_array_reduce.go +41 -0
  291. package/linthost/rules_unicorn_no_array_reverse.go +44 -0
  292. package/linthost/rules_unicorn_no_array_sort.go +43 -0
  293. package/linthost/rules_unicorn_no_await_expression_member.go +40 -0
  294. package/linthost/rules_unicorn_no_await_in_promise_methods.go +69 -0
  295. package/linthost/rules_unicorn_no_console_spaces.go +61 -0
  296. package/linthost/rules_unicorn_no_document_cookie.go +41 -0
  297. package/linthost/rules_unicorn_no_empty_file.go +44 -0
  298. package/linthost/rules_unicorn_no_for_loop.go +102 -0
  299. package/linthost/rules_unicorn_no_hex_escape.go +42 -0
  300. package/linthost/rules_unicorn_no_immediate_mutation.go +90 -0
  301. package/linthost/rules_unicorn_no_instanceof_builtins.go +66 -0
  302. package/linthost/rules_unicorn_no_invalid_fetch_options.go +79 -0
  303. package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +51 -0
  304. package/linthost/rules_unicorn_no_keyword_prefix.go +101 -0
  305. package/linthost/rules_unicorn_no_lonely_if.go +44 -0
  306. package/linthost/rules_unicorn_no_magic_array_flat_depth.go +51 -0
  307. package/linthost/rules_unicorn_no_named_default.go +54 -0
  308. package/linthost/rules_unicorn_no_negated_condition.go +85 -0
  309. package/linthost/rules_unicorn_no_negation_in_equality_check.go +50 -0
  310. package/linthost/rules_unicorn_no_nested_ternary.go +43 -0
  311. package/linthost/rules_unicorn_no_new_array.go +30 -0
  312. package/linthost/rules_unicorn_no_new_buffer.go +31 -0
  313. package/linthost/rules_unicorn_no_null.go +24 -0
  314. package/linthost/rules_unicorn_no_object_as_default_parameter.go +48 -0
  315. package/linthost/rules_unicorn_no_process_exit.go +43 -0
  316. package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +59 -0
  317. package/linthost/rules_unicorn_no_static_only_class.go +56 -0
  318. package/linthost/rules_unicorn_no_thenable.go +74 -0
  319. package/linthost/rules_unicorn_no_this_assignment.go +35 -0
  320. package/linthost/rules_unicorn_no_typeof_undefined.go +58 -0
  321. package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +49 -0
  322. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +70 -0
  323. package/linthost/rules_unicorn_no_unnecessary_await.go +51 -0
  324. package/linthost/rules_unicorn_no_unnecessary_polyfills.go +32 -0
  325. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +48 -0
  326. package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +115 -0
  327. package/linthost/rules_unicorn_no_unreadable_iife.go +50 -0
  328. package/linthost/rules_unicorn_no_unused_properties.go +30 -0
  329. package/linthost/rules_unicorn_no_useless_collection_argument.go +63 -0
  330. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +46 -0
  331. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +81 -0
  332. package/linthost/rules_unicorn_no_useless_iterator_to_array.go +72 -0
  333. package/linthost/rules_unicorn_no_useless_length_check.go +144 -0
  334. package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +81 -0
  335. package/linthost/rules_unicorn_no_useless_spread.go +67 -0
  336. package/linthost/rules_unicorn_no_useless_switch_case.go +55 -0
  337. package/linthost/rules_unicorn_no_useless_undefined.go +55 -0
  338. package/linthost/rules_unicorn_no_zero_fractions.go +52 -0
  339. package/linthost/rules_unicorn_number_literal_case.go +69 -0
  340. package/linthost/rules_unicorn_numeric_separators_style.go +75 -0
  341. package/linthost/rules_unicorn_prefer_add_event_listener.go +66 -0
  342. package/linthost/rules_unicorn_prefer_array_find.go +51 -0
  343. package/linthost/rules_unicorn_prefer_array_flat.go +52 -0
  344. package/linthost/rules_unicorn_prefer_array_flat_map.go +63 -0
  345. package/linthost/rules_unicorn_prefer_array_index_of.go +147 -0
  346. package/linthost/rules_unicorn_prefer_array_some.go +67 -0
  347. package/linthost/rules_unicorn_prefer_at.go +77 -0
  348. package/linthost/rules_unicorn_prefer_bigint_literals.go +77 -0
  349. package/linthost/rules_unicorn_prefer_blob_reading_methods.go +44 -0
  350. package/linthost/rules_unicorn_prefer_class_fields.go +93 -0
  351. package/linthost/rules_unicorn_prefer_classlist_toggle.go +120 -0
  352. package/linthost/rules_unicorn_prefer_code_point.go +49 -0
  353. package/linthost/rules_unicorn_prefer_date_now.go +78 -0
  354. package/linthost/rules_unicorn_prefer_default_parameters.go +144 -0
  355. package/linthost/rules_unicorn_prefer_dom_node_append.go +40 -0
  356. package/linthost/rules_unicorn_prefer_dom_node_dataset.go +55 -0
  357. package/linthost/rules_unicorn_prefer_dom_node_remove.go +41 -0
  358. package/linthost/rules_unicorn_prefer_dom_node_text_content.go +37 -0
  359. package/linthost/rules_unicorn_prefer_event_target.go +36 -0
  360. package/linthost/rules_unicorn_prefer_export_from.go +129 -0
  361. package/linthost/rules_unicorn_prefer_global_this.go +127 -0
  362. package/linthost/rules_unicorn_prefer_import_meta_properties.go +66 -0
  363. package/linthost/rules_unicorn_prefer_includes.go +149 -0
  364. package/linthost/rules_unicorn_prefer_json_parse_buffer.go +65 -0
  365. package/linthost/rules_unicorn_prefer_keyboard_event_key.go +38 -0
  366. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +48 -0
  367. package/linthost/rules_unicorn_prefer_math_min_max.go +60 -0
  368. package/linthost/rules_unicorn_prefer_math_trunc.go +62 -0
  369. package/linthost/rules_unicorn_prefer_modern_dom_apis.go +47 -0
  370. package/linthost/rules_unicorn_prefer_modern_math_apis.go +70 -0
  371. package/linthost/rules_unicorn_prefer_module.go +50 -0
  372. package/linthost/rules_unicorn_prefer_native_coercion_functions.go +114 -0
  373. package/linthost/rules_unicorn_prefer_negative_index.go +74 -0
  374. package/linthost/rules_unicorn_prefer_node_protocol.go +122 -0
  375. package/linthost/rules_unicorn_prefer_number_properties.go +88 -0
  376. package/linthost/rules_unicorn_prefer_object_from_entries.go +55 -0
  377. package/linthost/rules_unicorn_prefer_optional_catch_binding.go +62 -0
  378. package/linthost/rules_unicorn_prefer_prototype_methods.go +54 -0
  379. package/linthost/rules_unicorn_prefer_query_selector.go +56 -0
  380. package/linthost/rules_unicorn_prefer_reflect_apply.go +36 -0
  381. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +80 -0
  382. package/linthost/rules_unicorn_prefer_response_static_json.go +53 -0
  383. package/linthost/rules_unicorn_prefer_set_has.go +42 -0
  384. package/linthost/rules_unicorn_prefer_set_size.go +48 -0
  385. package/linthost/rules_unicorn_prefer_simple_condition_first.go +34 -0
  386. package/linthost/rules_unicorn_prefer_single_call.go +96 -0
  387. package/linthost/rules_unicorn_prefer_spread.go +51 -0
  388. package/linthost/rules_unicorn_prefer_string_raw.go +43 -0
  389. package/linthost/rules_unicorn_prefer_string_replace_all.go +95 -0
  390. package/linthost/rules_unicorn_prefer_string_slice.go +43 -0
  391. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +148 -0
  392. package/linthost/rules_unicorn_prefer_string_trim_start_end.go +48 -0
  393. package/linthost/rules_unicorn_prefer_structured_clone.go +71 -0
  394. package/linthost/rules_unicorn_prefer_switch.go +103 -0
  395. package/linthost/rules_unicorn_prefer_ternary.go +71 -0
  396. package/linthost/rules_unicorn_prefer_top_level_await.go +72 -0
  397. package/linthost/rules_unicorn_prefer_type_error.go +127 -0
  398. package/linthost/rules_unicorn_prevent_abbreviations.go +127 -0
  399. package/linthost/rules_unicorn_relative_url_style.go +49 -0
  400. package/linthost/rules_unicorn_require_array_join_separator.go +45 -0
  401. package/linthost/rules_unicorn_require_module_attributes.go +54 -0
  402. package/linthost/rules_unicorn_require_module_specifiers.go +55 -0
  403. package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +43 -0
  404. package/linthost/rules_unicorn_require_post_message_target_origin.go +44 -0
  405. package/linthost/rules_unicorn_string_content.go +27 -0
  406. package/linthost/rules_unicorn_switch_case_braces.go +42 -0
  407. package/linthost/rules_unicorn_switch_case_break_position.go +31 -0
  408. package/linthost/rules_unicorn_template_indent.go +28 -0
  409. package/linthost/rules_unicorn_text_encoding_identifier_case.go +72 -0
  410. package/linthost/rules_unicorn_throw_new_error.go +61 -0
  411. package/linthost/rules_var.go +4 -4
  412. package/linthost/rules_vitest.go +568 -0
  413. package/package.json +3 -3
  414. package/plugin/main.go +49 -3
  415. package/rule/astutil/astutil.go +10 -3
  416. package/rule/rule.go +12 -10
  417. package/src/defaultFormat.ts +11 -8
  418. package/src/index.ts +40 -16
  419. package/src/structures/ITtscLintConfig.ts +12 -6
  420. package/src/structures/{ITtscLintFormatConfig.ts → ITtscLintFormat.ts} +2 -2
  421. package/src/structures/TtscLintRuleSetting.ts +55 -0
  422. package/src/structures/index.ts +3 -4
  423. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +128 -0
  424. package/src/structures/rules/ITtscLintBoundariesRules.ts +95 -0
  425. package/src/structures/rules/ITtscLintContributorRules.ts +21 -0
  426. package/src/structures/rules/ITtscLintCoreRules.ts +1406 -0
  427. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +18 -0
  428. package/src/structures/rules/ITtscLintCypressRules.ts +145 -0
  429. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +213 -0
  430. package/src/structures/rules/ITtscLintFunctionalRules.ts +202 -0
  431. package/src/structures/rules/ITtscLintJestRules.ts +220 -0
  432. package/src/structures/rules/ITtscLintJsdocRules.ts +153 -0
  433. package/src/structures/rules/ITtscLintJsxA11yRules.ts +339 -0
  434. package/src/structures/rules/ITtscLintNextjsRules.ts +206 -0
  435. package/src/structures/rules/ITtscLintPlaywrightRules.ts +361 -0
  436. package/src/structures/rules/ITtscLintPromiseRules.ts +205 -0
  437. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +19 -0
  438. package/src/structures/rules/ITtscLintReactPerfRules.ts +55 -0
  439. package/src/structures/rules/ITtscLintReactRuleOptions.ts +43 -0
  440. package/src/structures/rules/ITtscLintReactRules.ts +321 -0
  441. package/src/structures/rules/ITtscLintRegexpRules.ts +212 -0
  442. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +89 -0
  443. package/src/structures/rules/ITtscLintRules.ts +77 -0
  444. package/src/structures/rules/ITtscLintSecurityRules.ts +162 -0
  445. package/src/structures/rules/ITtscLintSolidRules.ts +202 -0
  446. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +23 -0
  447. package/src/structures/rules/ITtscLintStorybookRules.ts +193 -0
  448. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +102 -0
  449. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +24 -0
  450. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +342 -0
  451. package/src/structures/rules/ITtscLintTypeScriptRules.ts +1230 -0
  452. package/src/structures/rules/ITtscLintUnicornRules.ts +1143 -0
  453. package/src/structures/rules/ITtscLintVitestRules.ts +154 -0
  454. package/src/structures/rules/index.ts +31 -0
  455. package/lib/structures/ITtscLintFormatConfig.js.map +0 -1
  456. package/lib/structures/TtscLintRule.d.ts +0 -17
  457. package/lib/structures/TtscLintRule.js.map +0 -1
  458. package/lib/structures/TtscLintRuleMap.d.ts +0 -46
  459. package/lib/structures/TtscLintRuleMap.js.map +0 -1
  460. package/lib/structures/TtscLintRuleOptions.d.ts +0 -137
  461. package/lib/structures/TtscLintRuleOptions.js.map +0 -1
  462. package/src/structures/TtscLintRule.ts +0 -160
  463. package/src/structures/TtscLintRuleMap.ts +0 -55
  464. package/src/structures/TtscLintRuleOptions.ts +0 -151
@@ -0,0 +1,39 @@
1
+ // defaultCase: a `switch` statement that omits the `default` clause
2
+ // silently drops every discriminant value not matched by an explicit
3
+ // `case` label. The rule wants the catch-all path written out so an
4
+ // unhandled discriminant becomes an intentional branch — even if that
5
+ // branch is a `// no default` comment marker.
6
+ //
7
+ // AST-only: each visited `SwitchStatement` checks its `CaseBlock`
8
+ // clauses for any node of kind `DefaultClause`. The rule reports on the
9
+ // switch keyword itself rather than the case block so the diagnostic
10
+ // lands at the head of the statement.
11
+ // https://eslint.org/docs/latest/rules/default-case
12
+ package linthost
13
+
14
+ import shimast "github.com/microsoft/typescript-go/shim/ast"
15
+
16
+ type defaultCase struct{}
17
+
18
+ func (defaultCase) Name() string { return "default-case" }
19
+ func (defaultCase) Visits() []shimast.Kind { return []shimast.Kind{shimast.KindSwitchStatement} }
20
+ func (defaultCase) Check(ctx *Context, node *shimast.Node) {
21
+ sw := node.AsSwitchStatement()
22
+ if sw == nil || sw.CaseBlock == nil {
23
+ return
24
+ }
25
+ block := sw.CaseBlock.AsCaseBlock()
26
+ if block == nil || block.Clauses == nil {
27
+ return
28
+ }
29
+ for _, clause := range block.Clauses.Nodes {
30
+ if clause != nil && clause.Kind == shimast.KindDefaultClause {
31
+ return
32
+ }
33
+ }
34
+ ctx.Report(node, "Expected a default case.")
35
+ }
36
+
37
+ func init() {
38
+ Register(defaultCase{})
39
+ }
@@ -0,0 +1,46 @@
1
+ // defaultCaseLast: a `switch` statement whose `default` clause is not
2
+ // the final clause changes fall-through semantics in a way that almost
3
+ // never matches the author's intent — running `default` then falling
4
+ // into `case "b"` is rarely what a misordered switch wants. The rule
5
+ // requires `default` to appear after every `case` label.
6
+ //
7
+ // AST-only: each visited `SwitchStatement` walks its `CaseBlock`
8
+ // clauses, and any `DefaultClause` that is not the last element is
9
+ // reported on the clause itself.
10
+ // https://eslint.org/docs/latest/rules/default-case-last
11
+ package linthost
12
+
13
+ import shimast "github.com/microsoft/typescript-go/shim/ast"
14
+
15
+ type defaultCaseLast struct{}
16
+
17
+ func (defaultCaseLast) Name() string { return "default-case-last" }
18
+ func (defaultCaseLast) Visits() []shimast.Kind {
19
+ return []shimast.Kind{shimast.KindSwitchStatement}
20
+ }
21
+ func (defaultCaseLast) Check(ctx *Context, node *shimast.Node) {
22
+ sw := node.AsSwitchStatement()
23
+ if sw == nil || sw.CaseBlock == nil {
24
+ return
25
+ }
26
+ block := sw.CaseBlock.AsCaseBlock()
27
+ if block == nil || block.Clauses == nil {
28
+ return
29
+ }
30
+ clauses := block.Clauses.Nodes
31
+ if len(clauses) == 0 {
32
+ return
33
+ }
34
+ last := clauses[len(clauses)-1]
35
+ for i := 0; i < len(clauses)-1; i++ {
36
+ clause := clauses[i]
37
+ if clause != nil && clause.Kind == shimast.KindDefaultClause {
38
+ _ = last
39
+ ctx.Report(clause, "Default clause should be the last clause.")
40
+ }
41
+ }
42
+ }
43
+
44
+ func init() {
45
+ Register(defaultCaseLast{})
46
+ }
@@ -2,7 +2,7 @@ package linthost
2
2
 
3
3
  import shimast "github.com/microsoft/typescript-go/shim/ast"
4
4
 
5
- // no-duplicate-case: duplicated `case` labels in a single switch.
5
+ // noDuplicateCase: duplicated `case` labels in a single switch.
6
6
  // https://eslint.org/docs/latest/rules/no-duplicate-case
7
7
  type noDuplicateCase struct{}
8
8
 
@@ -38,7 +38,7 @@ func (noDuplicateCase) Check(ctx *Context, node *shimast.Node) {
38
38
  }
39
39
  }
40
40
 
41
- // no-dupe-keys: duplicated property names in a single object literal.
41
+ // noDupeKeys: duplicated property names in a single object literal.
42
42
  // https://eslint.org/docs/latest/rules/no-dupe-keys
43
43
  type noDupeKeys struct{}
44
44
 
@@ -63,7 +63,7 @@ func (noDupeKeys) Check(ctx *Context, node *shimast.Node) {
63
63
  }
64
64
  }
65
65
 
66
- // no-dupe-args: duplicated parameter names in a single function head.
66
+ // noDupeArgs: duplicated parameter names in a single function head.
67
67
  // https://eslint.org/docs/latest/rules/no-dupe-args
68
68
  type noDupeArgs struct{}
69
69
 
@@ -2,7 +2,7 @@ package linthost
2
2
 
3
3
  import shimast "github.com/microsoft/typescript-go/shim/ast"
4
4
 
5
- // no-empty: empty block statements (`{}`), but allow empty catch
5
+ // noEmpty: empty block statements (`{}`), but allow empty catch
6
6
  // clauses since they're idiomatic for "ignore the error".
7
7
  // https://eslint.org/docs/latest/rules/no-empty
8
8
  type noEmpty struct{}
@@ -27,7 +27,7 @@ func (noEmpty) Check(ctx *Context, node *shimast.Node) {
27
27
  ctx.Report(node, "Empty block statement.")
28
28
  }
29
29
 
30
- // no-empty-function: empty function / method / arrow / accessor bodies.
30
+ // noEmptyFunction: empty function / method / arrow / accessor bodies.
31
31
  // https://eslint.org/docs/latest/rules/no-empty-function
32
32
  type noEmptyFunction struct{}
33
33
 
@@ -60,7 +60,7 @@ func (noEmptyFunction) Check(ctx *Context, node *shimast.Node) {
60
60
  }
61
61
  }
62
62
 
63
- // no-empty-pattern: `({}) => x` or `function ({}) {}` — destructuring
63
+ // noEmptyPattern: `({}) => x` or `function ({}) {}` — destructuring
64
64
  // patterns with no bindings are usually a bug.
65
65
  // https://eslint.org/docs/latest/rules/no-empty-pattern
66
66
  type noEmptyPattern struct{}
@@ -6,7 +6,7 @@ import (
6
6
  shimast "github.com/microsoft/typescript-go/shim/ast"
7
7
  )
8
8
 
9
- // no-useless-escape: flag backslashes that escape characters which do not
9
+ // noUselessEscape: flag backslashes that escape characters which do not
10
10
  // require escaping. Inside string/template literals the meaningful
11
11
  // escapes are limited to a fixed set; everywhere else the backslash is
12
12
  // noise from a copy/paste accident or a confused author. ESLint
@@ -41,13 +41,16 @@ func (noUselessEscape) Check(ctx *Context, node *shimast.Node) {
41
41
  if isInsideTaggedTemplate(node) {
42
42
  return
43
43
  }
44
- src := ctx.File.Text()
45
- pos := node.Pos()
46
- end := node.End()
47
- if pos < 0 || end > len(src) || pos >= end {
44
+ // tsgo's `node.Pos()` points at the start of leading trivia; the regex
45
+ // scanner relies on `raw[0] == '/'`, so we have to anchor on the
46
+ // post-trivia token start. String/template scans tolerate leading
47
+ // trivia bytes by accident, but using `tokenRange` for every branch
48
+ // keeps reported offsets aligned with the actual literal.
49
+ pos, end := tokenRange(ctx.File, node)
50
+ if pos < 0 || pos >= end {
48
51
  return
49
52
  }
50
- raw := src[pos:end]
53
+ raw := ctx.File.Text()[pos:end]
51
54
  // Determine quote/scan delimiters based on node kind so the
52
55
  // single-char escape whitelist matches ESLint per-context.
53
56
  switch node.Kind {
@@ -66,12 +69,18 @@ func (noUselessEscape) Check(ctx *Context, node *shimast.Node) {
66
69
  const stringValidEscapes = "'\"\\bfnrtv0xuU\n\r"
67
70
  const templateValidEscapes = "`'\"\\bfnrtv0xuU$\n\r"
68
71
 
69
- // regexValidEscapes covers characters that are *always* meaningful when
70
- // preceded by `\` in a regex pattern. Character classes and group syntax
71
- // inside a regex add more legitimate escapes (`\d`, `\w`, …); we handle
72
- // those by allowing every ASCII letter (which makes the fix conservative
73
- // it never deletes a backslash whose meaning could be context-sensitive).
74
- const regexValidEscapes = "^$\\.*+?()[]{}|/-\n\r"
72
+ // regexNonClassValidEscapes covers characters that are meaningful when
73
+ // preceded by `\` outside a character class every regex meta-char plus
74
+ // the line terminators. Inside a `[...]` most of these characters lose
75
+ // their special meaning (`.`, `*`, `+`, `?`, `(`, `)`, `{`, `}`, `|`, `$`,
76
+ // `/` are all literal in a class), so the in-class allowlist is narrower:
77
+ // backslash, the class-delimiting `]`, the range operator `-`, and `^`
78
+ // (which would otherwise turn the class into a negation if the escape
79
+ // were stripped). Standard shorthand escapes (`\d`, `\w`, …) and the
80
+ // Unicode/hex/control escapes are handled separately in
81
+ // `isUselessRegexEscape` and apply in both contexts.
82
+ const regexNonClassValidEscapes = "^$\\.*+?()[]{}|/-\n\r"
83
+ const regexClassValidEscapes = "\\]-^\n\r"
75
84
 
76
85
  // reportStringEscapes walks the raw source bytes of a string or template
77
86
  // literal and reports each backslash whose following character is not in
@@ -212,29 +221,40 @@ func isUselessStringEscape(ch byte, whitelist string) bool {
212
221
 
213
222
  // isUselessRegexEscape reports whether a backslash before `ch` is redundant
214
223
  // in a regex pattern. `inClass` is true when the escape occurs inside a `[…]`
215
- // character class, which widens the set of meaningful escapes.
224
+ // character class, which narrows the set of meaningful meta-char escapes:
225
+ // most regex meta-chars (`.`, `*`, `+`, `?`, `(`, `)`, `{`, `}`, `|`, `^`,
226
+ // `$`, `/`) are literal inside a class, so escaping them there is noise.
216
227
  func isUselessRegexEscape(ch byte, inClass bool) bool {
217
228
  if ch < 0x20 {
218
229
  return false
219
230
  }
220
- // Regex meta-chars and their friends.
221
- if strings.IndexByte(regexValidEscapes, ch) >= 0 {
222
- return false
223
- }
224
- // Inside a character class `]`, `\`, and `-` are still meaningful
225
- // beyond the always-list; everything else stays useless.
226
231
  if inClass {
227
- switch ch {
228
- case ']', '\\', '-', 'b':
232
+ if strings.IndexByte(regexClassValidEscapes, ch) >= 0 {
229
233
  return false
230
234
  }
235
+ } else if strings.IndexByte(regexNonClassValidEscapes, ch) >= 0 {
236
+ return false
231
237
  }
232
- // Common regex shorthand: \d \D \w \W \s \S \b \B \f \n \r \t \v \0
238
+ // Common regex shorthand: \d \D \w \W \s \S \b \f \n \r \t \v \0 \x \u \c \p \P,
239
+ // plus decimal back-references \1..\9. `\B` (non-word-boundary) and `\k<name>`
240
+ // (named backref) are only meaningful outside a character class; `\q{...}` is
241
+ // a v-flag string-disjunction escape that is also class-only-meaningful.
233
242
  switch ch {
234
- case 'd', 'D', 'w', 'W', 's', 'S', 'b', 'B', 'f', 'n', 'r', 't', 'v', '0',
235
- 'x', 'u', 'c', 'p', 'P', 'k', 'q':
243
+ case 'd', 'D', 'w', 'W', 's', 'S', 'b', 'f', 'n', 'r', 't', 'v', '0',
244
+ 'x', 'u', 'c', 'p', 'P',
245
+ '1', '2', '3', '4', '5', '6', '7', '8', '9':
236
246
  return false
237
247
  }
248
+ if !inClass {
249
+ switch ch {
250
+ case 'B', 'k':
251
+ return false
252
+ }
253
+ } else {
254
+ if ch == 'q' {
255
+ return false
256
+ }
257
+ }
238
258
  return true
239
259
  }
240
260
 
@@ -2,7 +2,7 @@ package linthost
2
2
 
3
3
  import shimast "github.com/microsoft/typescript-go/shim/ast"
4
4
 
5
- // no-eval: forbid `eval(...)` calls. Members of nested namespaces (e.g.
5
+ // noEval: forbid `eval(...)` calls. Members of nested namespaces (e.g.
6
6
  // `globalThis.eval(...)`) are not flagged here — that's
7
7
  // `no-implied-eval`, which we don't ship in v0.
8
8
  // https://eslint.org/docs/latest/rules/no-eval
@@ -20,7 +20,7 @@ func (noEval) Check(ctx *Context, node *shimast.Node) {
20
20
  }
21
21
  }
22
22
 
23
- // no-script-url: forbid `"javascript:..."` literals. Often used to inject
23
+ // noScriptUrl: forbid `"javascript:..."` literals. Often used to inject
24
24
  // inline JS via DOM `href`/`src`; legacy and dangerous.
25
25
  // https://eslint.org/docs/latest/rules/no-script-url
26
26
  type noScriptURL struct{}
@@ -2,7 +2,7 @@ package linthost
2
2
 
3
3
  import shimast "github.com/microsoft/typescript-go/shim/ast"
4
4
 
5
- // no-unsafe-finally: `return` / `break` / `continue` / `throw` inside a
5
+ // noUnsafeFinally: `return` / `break` / `continue` / `throw` inside a
6
6
  // `finally` clause silently overrides the in-flight exception or value.
7
7
  // https://eslint.org/docs/latest/rules/no-unsafe-finally
8
8
  type noUnsafeFinally struct{}
@@ -83,7 +83,7 @@ func keywordOfControl(node *shimast.Node) string {
83
83
  return "control flow"
84
84
  }
85
85
 
86
- // no-useless-catch: `catch (err) { throw err; }` adds no behavior.
86
+ // noUselessCatch: `catch (err) { throw err; }` adds no behavior.
87
87
  // https://eslint.org/docs/latest/rules/no-useless-catch
88
88
  type noUselessCatch struct{}
89
89
 
@@ -5,7 +5,7 @@ import (
5
5
  shimscanner "github.com/microsoft/typescript-go/shim/scanner"
6
6
  )
7
7
 
8
- // format/jsdoc rewrites JSDoc blocks toward the prettier-plugin-jsdoc
8
+ // formatJsdoc rewrites JSDoc blocks toward the prettier-plugin-jsdoc
9
9
  // canonical shape. The MVP implementation handles tag-synonym
10
10
  // normalization; future passes will fold in tag sorting, @param column
11
11
  // alignment, and description wrapping under the same rule name so
@@ -7,7 +7,7 @@ import (
7
7
  shimscanner "github.com/microsoft/typescript-go/shim/scanner"
8
8
  )
9
9
 
10
- // format/print-width reflows expressions and declarations so they fit
10
+ // formatPrintWidth reflows expressions and declarations so they fit
11
11
  // within a `printWidth`-column budget, mirroring Prettier's headline
12
12
  // formatting feature.
13
13
  //
@@ -102,7 +102,7 @@ func (formatPrintWidth) Visits() []shimast.Kind {
102
102
  // reflow surface.
103
103
  //
104
104
  // Both cases are tracked benchmark cases that forced
105
- // `format/print-width: 'off'` on the ttsc-lint branch. They are listed
105
+ // `formatPrintWidth: 'off'` on the ttsc-lint branch. They are listed
106
106
  // here so a future slice can pick them up without rediscovering the
107
107
  // divergence.
108
108
  func (formatPrintWidth) Check(ctx *Context, node *shimast.Node) {
@@ -253,8 +253,8 @@ func (formatPrintWidth) Check(ctx *Context, node *shimast.Node) {
253
253
  }
254
254
 
255
255
  // trailingLineWidth returns the visual column width of src[end:] up to
256
- // the next newline, with trailing whitespace trimmed. The format/print-
257
- // width reflow replaces only the node's own byte range, so whatever
256
+ // the next newline, with trailing whitespace trimmed. The formatPrintWidth
257
+ // reflow replaces only the node's own byte range, so whatever
258
258
  // shares the node's last source line — a statement `;`, a `) {` header
259
259
  // tail, a `, nextArg)` continuation — stays put. Charging that width
260
260
  // against the budget keeps the rule from emitting a line that overflows
@@ -265,7 +265,7 @@ func (formatPrintWidth) Check(ctx *Context, node *shimast.Node) {
265
265
  // the reflowed node to make the comment fit cannot help — Prettier 3
266
266
  // keeps the node inline and lets the comment trail (see typeorm's
267
267
  // `comment.replaceAll(...) // Null bytes' shape that pushed
268
- // `format/print-width: 'off'` onto the ttsc-lint benchmark branch).
268
+ // `formatPrintWidth: 'off'` onto the ttsc-lint benchmark branch).
269
269
  // Excluding the comment from `trailingLineWidth` matches that
270
270
  // behavior: the fast path sees just the un-movable punctuation suffix,
271
271
  // and the shrunk-budget re-render does not over-shrink and over-break.
@@ -457,7 +457,7 @@ func lineStartOffset(src string, pos int) int {
457
457
 
458
458
  // ternaryArmIndentBonus returns 2 when the line containing `pos` begins,
459
459
  // after its leading whitespace, with a `? ` or `: ` ternary-arm marker,
460
- // and 0 otherwise. format/print-width adds it to BaseIndent so a node
460
+ // and 0 otherwise. formatPrintWidth adds it to BaseIndent so a node
461
461
  // reflowed inside a ternary arm indents its broken continuation under
462
462
  // the arm's expression rather than under the `?`/`:` token. In practice
463
463
  // only a ternary arm opens a reflow target's line with `? ` / `: `; the
@@ -475,7 +475,7 @@ func ternaryArmIndentBonus(src string, pos int) int {
475
475
  }
476
476
 
477
477
  // hasReflowAncestor reports whether any ancestor of `node` would also
478
- // match the format/print-width visitor. The rule uses this to suppress
478
+ // match the formatPrintWidth visitor. The rule uses this to suppress
479
479
  // nested fires when an enclosing reflow target already covers the
480
480
  // child.
481
481
  func hasReflowAncestor(node *shimast.Node) bool {
@@ -491,7 +491,7 @@ func hasReflowAncestor(node *shimast.Node) bool {
491
491
  }
492
492
 
493
493
  // hasTemplateSubstitutionAncestor reports whether `node` sits inside a
494
- // template-literal substitution (`${…}`). format/print-width abstains
494
+ // template-literal substitution (`${…}`). formatPrintWidth abstains
495
495
  // on such nodes: Prettier prints template interpolations at infinite
496
496
  // printWidth and only keeps a break the source already had, so a reflow
497
497
  // of a nested call or literal would split a one-line `${…}` and never
@@ -509,7 +509,7 @@ func hasTemplateSubstitutionAncestor(node *shimast.Node) bool {
509
509
  }
510
510
 
511
511
  // isReflowKind reports whether `k` is one of the node kinds the
512
- // format/print-width rule visits. Kept in sync with Visits() so
512
+ // formatPrintWidth rule visits. Kept in sync with Visits() so
513
513
  // hasReflowAncestor does not need to call Visits() at runtime.
514
514
  func isReflowKind(k shimast.Kind) bool {
515
515
  switch k {
@@ -6,7 +6,7 @@ import (
6
6
  shimast "github.com/microsoft/typescript-go/shim/ast"
7
7
  )
8
8
 
9
- // format/quotes normalizes string-literal quote style. Mirrors
9
+ // formatQuotes normalizes string-literal quote style. Mirrors
10
10
  // prettier's `singleQuote` option:
11
11
  //
12
12
  // - `prefer: "double"` (default) converts single-quoted literals to
@@ -4,7 +4,7 @@ import (
4
4
  shimast "github.com/microsoft/typescript-go/shim/ast"
5
5
  )
6
6
 
7
- // format/semi controls trailing-semicolon style on ASI statements.
7
+ // formatSemi controls trailing-semicolon style on ASI statements.
8
8
  // Mirrors prettier's `semi` option:
9
9
  //
10
10
  // - `prefer: "always"` (default) inserts a missing terminator.
@@ -29,7 +29,7 @@ type formatSortImportsOptions struct {
29
29
  // landed, so omitting `importOrder` produces the same output.
30
30
  var defaultImportOrder = []string{thirdPartyModulesPlaceholder, `^\.`}
31
31
 
32
- // format/sort-imports orders the file's top-level import declarations into
32
+ // formatSortImports orders the file's top-level import declarations into
33
33
  // canonical groups and alphabetizes each group. Compatible-by-spirit with
34
34
  // `@trivago/prettier-plugin-sort-imports`. Groups are user-configurable via
35
35
  // the `importOrder` option; when omitted, the rule falls back to a
@@ -4,7 +4,7 @@ import (
4
4
  shimast "github.com/microsoft/typescript-go/shim/ast"
5
5
  )
6
6
 
7
- // format/trailing-comma adds trailing commas to multi-line lists. Mirrors
7
+ // formatTrailingComma adds trailing commas to multi-line lists. Mirrors
8
8
  // prettier's `trailingComma: "all"` default — *not* a tunable.
9
9
  //
10
10
  // Scope (intentionally narrower than the closing-brace surface of TS):