@ttsc/lint 0.30.4 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2520) hide show
  1. package/README.md +753 -741
  2. package/go.mod +7 -5
  3. package/internal/rulecode/rule_code_allocator_is_order_independent_and_append_only_test.go +119 -0
  4. package/internal/rulecode/rule_code_allocator_rejects_invalid_or_exhausted_ledgers_test.go +60 -0
  5. package/internal/rulecode/rulecode.go +18 -0
  6. package/lib/createTtscPlugin.d.ts +84 -0
  7. package/lib/createTtscPlugin.js +2704 -0
  8. package/lib/createTtscPlugin.js.map +1 -0
  9. package/lib/index.d.ts +1 -74
  10. package/lib/index.js +4 -2644
  11. package/lib/index.js.map +1 -1
  12. package/lib/internal/configEvaluatorFailure.d.ts +17 -9
  13. package/lib/internal/configEvaluatorFailure.js +17 -9
  14. package/lib/internal/configEvaluatorFailure.js.map +1 -1
  15. package/lib/internal/lintTrace.d.ts +18 -0
  16. package/lib/internal/lintTrace.js +99 -0
  17. package/lib/internal/lintTrace.js.map +1 -0
  18. package/lib/internal/normalizeContributors.d.ts +25 -0
  19. package/lib/internal/normalizeContributors.js +65 -0
  20. package/lib/internal/normalizeContributors.js.map +1 -0
  21. package/lib/structures/ITtscLintConfig.d.ts +25 -8
  22. package/lib/structures/ITtscLintPlugin.d.ts +13 -8
  23. package/lib/structures/ITtscLintPluginConfig.d.ts +18 -7
  24. package/lib/structures/ITtscLintPluginMeta.d.ts +10 -7
  25. package/lib/structures/TtscLintRuleSetting.d.ts +18 -13
  26. package/lib/structures/TtscLintSeverity.d.ts +5 -0
  27. package/lib/structures/format/ITtscLintFormat.d.ts +14 -8
  28. package/lib/structures/format/ITtscLintFormatJsDoc.d.ts +8 -1
  29. package/lib/structures/format/ITtscLintFormatSortImports.d.ts +14 -8
  30. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +133 -25
  31. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +3 -3
  32. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +10 -5
  33. package/lib/structures/rules/ITtscLintContributorRules.d.ts +20 -13
  34. package/lib/structures/rules/ITtscLintCoreRuleOptions.d.ts +212 -24
  35. package/lib/structures/rules/ITtscLintCoreRules.d.ts +92 -72
  36. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +8 -1
  37. package/lib/structures/rules/ITtscLintCypressRules.d.ts +24 -21
  38. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +140 -24
  39. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +20 -12
  40. package/lib/structures/rules/ITtscLintJestRules.d.ts +22 -16
  41. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +5 -0
  42. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +24 -21
  43. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +40 -42
  44. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +24 -14
  45. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +23 -14
  46. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +8 -1
  47. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +18 -15
  48. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +14 -4
  49. package/lib/structures/rules/ITtscLintReactRules.d.ts +33 -27
  50. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +18 -4
  51. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +88 -15
  52. package/lib/structures/rules/ITtscLintRules.d.ts +13 -9
  53. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +33 -23
  54. package/lib/structures/rules/ITtscLintSolidRules.d.ts +57 -47
  55. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +10 -2
  56. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +52 -62
  57. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +34 -30
  58. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +12 -3
  59. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +20 -15
  60. package/lib/structures/rules/ITtscLintTypeScriptRuleOptions.d.ts +105 -16
  61. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +62 -51
  62. package/lib/structures/rules/ITtscLintUnicornRuleOptions.d.ts +234 -46
  63. package/lib/structures/rules/ITtscLintUnicornRules.d.ts +97 -44
  64. package/lib/structures/rules/ITtscLintVitestRules.d.ts +19 -11
  65. package/lib/structures/rules/TtscLintContributorOverlay.d.ts +34 -0
  66. package/lib/structures/rules/TtscLintContributorOverlay.js +3 -0
  67. package/lib/structures/rules/TtscLintContributorOverlay.js.map +1 -0
  68. package/lib/structures/rules/index.d.ts +1 -0
  69. package/lib/structures/rules/index.js +1 -0
  70. package/lib/structures/rules/index.js.map +1 -1
  71. package/linthost/all_rule_names_returns_sorted_caller_owned_enumeration_test.go +72 -0
  72. package/linthost/as_bool_rejects_non_boolean_value_test.go +39 -0
  73. package/linthost/as_int_accepts_all_integer_types_and_rejects_fractional_test.go +77 -0
  74. package/linthost/as_string_rejects_non_string_value_test.go +35 -0
  75. package/linthost/as_string_slice_rejects_non_array_and_non_string_elements_test.go +45 -0
  76. package/linthost/ast_helpers.go +28 -89
  77. package/linthost/ast_helpers_destructuring_target_rejects_reads_inside_member_and_call_test.go +61 -0
  78. package/linthost/ast_selector_expression_class_excludes_type_literals_test.go +32 -0
  79. package/linthost/ast_selector_matcher.go +5 -0
  80. package/linthost/ast_selector_parser.go +5 -0
  81. package/linthost/astutil_find_keyword_is_identifier_aware_test.go +89 -0
  82. package/linthost/astutil_keyword_start_locates_leading_keyword_test.go +79 -0
  83. package/linthost/astutil_node_text_strips_leading_trivia_test.go +48 -0
  84. package/linthost/astutil_token_range_strips_leading_trivia_test.go +58 -0
  85. package/linthost/async_query_event_and_util_promises_test.go +55 -0
  86. package/linthost/await_thenable_await_expression_offers_exact_suggestion_test.go +40 -0
  87. package/linthost/await_thenable_await_union_with_promise_allows_test.go +42 -0
  88. package/linthost/await_thenable_await_using_async_disposable_allows_test.go +65 -0
  89. package/linthost/await_thenable_await_using_async_method_under_dispose_symbol_reports_test.go +57 -0
  90. package/linthost/await_thenable_await_using_helpers_test.go +44 -0
  91. package/linthost/await_thenable_await_using_multi_declarator_reports_only_sync_resource_test.go +65 -0
  92. package/linthost/await_thenable_await_using_protocol_abstractions_allows_test.go +67 -0
  93. package/linthost/await_thenable_await_using_protocol_abstractions_reports_test.go +75 -0
  94. package/linthost/await_thenable_await_using_sync_disposable_reports_test.go +62 -0
  95. package/linthost/await_thenable_await_using_sync_only_union_reports_test.go +64 -0
  96. package/linthost/await_thenable_await_using_union_with_async_disposable_allows_test.go +56 -0
  97. package/linthost/await_thenable_awaitability_type_parameter_boundaries_test.go +51 -0
  98. package/linthost/await_thenable_for_await_of_async_iterable_allows_test.go +63 -0
  99. package/linthost/await_thenable_for_await_of_protocol_abstractions_allows_test.go +67 -0
  100. package/linthost/await_thenable_for_await_of_protocol_abstractions_reports_test.go +75 -0
  101. package/linthost/await_thenable_for_await_of_sync_iterable_reports_test.go +65 -0
  102. package/linthost/await_thenable_for_await_of_sync_only_union_reports_test.go +55 -0
  103. package/linthost/await_thenable_preserves_migrated_all_family_contexts_test.go +20 -0
  104. package/linthost/await_thenable_promise_aggregator_awaitable_inputs_allow_test.go +50 -0
  105. package/linthost/await_thenable_promise_aggregator_container_shapes_report_test.go +53 -0
  106. package/linthost/await_thenable_promise_aggregator_generic_constraint_reports_test.go +45 -0
  107. package/linthost/await_thenable_promise_aggregator_iteration_yields_allow_test.go +50 -0
  108. package/linthost/await_thenable_promise_aggregator_iteration_yields_report_test.go +64 -0
  109. package/linthost/await_thenable_promise_aggregator_literal_members_report_test.go +56 -0
  110. package/linthost/await_thenable_promise_aggregator_native_identity_test.go +60 -0
  111. package/linthost/await_thenable_promise_aggregator_native_methods_report_test.go +50 -0
  112. package/linthost/await_thenable_promise_aggregator_noniterable_boundaries_allow_test.go +39 -0
  113. package/linthost/await_thenable_protocol_members_must_be_callable_test.go +70 -0
  114. package/linthost/await_thenable_structural_thenable_signature_boundary_test.go +53 -0
  115. package/linthost/ban_ts_comment_block_comment_ignores_directive_before_last_line_test.go +32 -0
  116. package/linthost/ban_ts_comment_block_comment_reports_directive_on_last_line_test.go +57 -0
  117. package/linthost/ban_ts_comment_block_comment_splits_last_line_on_all_line_terminators_test.go +55 -0
  118. package/linthost/ban_ts_comment_default_allows_described_expect_error_test.go +27 -0
  119. package/linthost/ban_ts_comment_default_allows_ts_check_test.go +26 -0
  120. package/linthost/ban_ts_comment_default_allows_ts_nocheck_after_first_statement_test.go +32 -0
  121. package/linthost/ban_ts_comment_default_does_not_fix_ts_ignore_test.go +25 -0
  122. package/linthost/ban_ts_comment_default_reports_ignore_with_upgrade_message_test.go +56 -0
  123. package/linthost/ban_ts_comment_default_reports_indented_ignore_with_position_test.go +39 -0
  124. package/linthost/ban_ts_comment_default_reports_ts_nocheck_before_code_test.go +44 -0
  125. package/linthost/ban_ts_comment_default_reports_ts_nocheck_without_statements_test.go +34 -0
  126. package/linthost/ban_ts_comment_default_requires_description_for_bare_expect_error_test.go +51 -0
  127. package/linthost/ban_ts_comment_description_length_counts_grapheme_clusters_test.go +58 -0
  128. package/linthost/ban_ts_comment_description_length_follows_unicode_16_graphemes_test.go +91 -0
  129. package/linthost/ban_ts_comment_follows_regex_in_nested_template_test.go +39 -0
  130. package/linthost/ban_ts_comment_ignores_directive_text_inside_strings_and_templates_test.go +48 -0
  131. package/linthost/ban_ts_comment_ignores_prose_and_near_miss_comments_test.go +34 -0
  132. package/linthost/ban_ts_comment_option_description_format_accepts_matching_description_test.go +36 -0
  133. package/linthost/ban_ts_comment_option_description_format_checks_length_first_test.go +49 -0
  134. package/linthost/ban_ts_comment_option_description_format_reports_mismatch_test.go +46 -0
  135. package/linthost/ban_ts_comment_option_empty_object_directive_allows_directive_test.go +26 -0
  136. package/linthost/ban_ts_comment_option_expect_error_false_allows_directive_test.go +28 -0
  137. package/linthost/ban_ts_comment_option_expect_error_true_reports_despite_description_test.go +41 -0
  138. package/linthost/ban_ts_comment_option_invalid_description_format_keeps_length_gate_test.go +52 -0
  139. package/linthost/ban_ts_comment_option_minimum_description_length_boundary_test.go +67 -0
  140. package/linthost/ban_ts_comment_option_ts_check_true_reports_pragma_anywhere_test.go +50 -0
  141. package/linthost/ban_ts_comment_option_ts_ignore_allow_with_description_test.go +57 -0
  142. package/linthost/ban_ts_comment_option_ts_nocheck_allow_with_description_test.go +57 -0
  143. package/linthost/ban_ts_comment_option_ts_nocheck_false_allows_directive_test.go +27 -0
  144. package/linthost/ban_ts_comment_option_unrecognized_value_keeps_default_policy_test.go +53 -0
  145. package/linthost/ban_ts_comment_pragma_ignores_block_comments_test.go +33 -0
  146. package/linthost/ban_ts_comment_pragma_requires_two_or_three_slashes_test.go +49 -0
  147. package/linthost/ban_ts_comment_pragma_wins_over_error_suppression_match_test.go +29 -0
  148. package/linthost/ban_ts_comment_preserves_migrated_defaults_and_options_test.go +29 -0
  149. package/linthost/ban_ts_comment_respects_inline_disable_next_line_test.go +28 -0
  150. package/linthost/ban_ts_comment_suggestion_compiler_error_boundary_test.go +56 -0
  151. package/linthost/ban_ts_comment_suggestion_rewrites_block_comment_ignore_test.go +40 -0
  152. package/linthost/ban_ts_comment_suggestion_rewrites_many_slash_line_comment_test.go +41 -0
  153. package/linthost/base_chain_walk_crosses_generic_boundary_test.go +165 -0
  154. package/linthost/behavioral_witness_audit_accepts_production_prerequisite_kinds_test.go +57 -0
  155. package/linthost/behavioral_witness_audit_publishes_one_deterministic_route_per_rule_test.go +45 -0
  156. package/linthost/behavioral_witness_audit_rejects_inert_public_rule_test.go +46 -0
  157. package/linthost/behavioral_witness_audit_rejects_invalid_non_canonical_candidate_test.go +49 -0
  158. package/linthost/behavioral_witness_coverage_test.go +379 -0
  159. package/linthost/behavioral_witness_kind_follows_rule_checker_requirement_test.go +69 -0
  160. package/linthost/binding_diagnostic_sites_helpers_test.go +31 -0
  161. package/linthost/blank_line_between_statements_returns_false_for_out_of_range_test.go +51 -0
  162. package/linthost/block_has_non_statement_comment_returns_false_for_out_of_range_test.go +56 -0
  163. package/linthost/block_has_non_statement_comment_skips_nil_stmts_test.go +42 -0
  164. package/linthost/boundaries_dependencies_alias_resolution_test.go +60 -0
  165. package/linthost/boundaries_dependencies_bare_core_builtin_test.go +36 -0
  166. package/linthost/boundaries_dependencies_command_test.go +67 -0
  167. package/linthost/boundaries_dependencies_declaration_file_test.go +50 -0
  168. package/linthost/boundaries_dependencies_default_test.go +36 -0
  169. package/linthost/boundaries_dependencies_from_to_test.go +66 -0
  170. package/linthost/boundaries_dependencies_import_kind_test.go +46 -0
  171. package/linthost/boundaries_dependencies_import_type_kinds_test.go +56 -0
  172. package/linthost/boundaries_dependencies_legacy_to_direction_test.go +43 -0
  173. package/linthost/boundaries_dependencies_local_gates_test.go +43 -0
  174. package/linthost/boundaries_dependencies_messages_test.go +58 -0
  175. package/linthost/boundaries_dependencies_options_test.go +66 -0
  176. package/linthost/boundaries_dependencies_origins_test.go +38 -0
  177. package/linthost/boundaries_dependencies_path_separators_test.go +36 -0
  178. package/linthost/boundaries_dependencies_policy_order_test.go +41 -0
  179. package/linthost/boundaries_dependencies_syntax_test.go +86 -0
  180. package/linthost/boundaries_dependencies_test.go +38 -0
  181. package/linthost/boundaries_dependencies_visibility_selectors_test.go +52 -0
  182. package/linthost/boundaries_element_types_deny_only_names_nothing_test.go +36 -0
  183. package/linthost/boundaries_element_types_ignores_dynamic_syntax_test.go +44 -0
  184. package/linthost/boundaries_element_types_names_the_allowed_set_test.go +40 -0
  185. package/linthost/boundaries_element_types_rejects_disallowed_import_test.go +43 -0
  186. package/linthost/boundaries_entry_point_rejects_non_entry_import_test.go +43 -0
  187. package/linthost/boundaries_external_deny_only_names_nothing_test.go +25 -0
  188. package/linthost/boundaries_external_names_the_allowed_set_test.go +30 -0
  189. package/linthost/boundaries_external_rejects_disallowed_package_test.go +34 -0
  190. package/linthost/boundaries_helpers_test.go +162 -0
  191. package/linthost/boundaries_no_private_rejects_cross_element_private_import_test.go +39 -0
  192. package/linthost/boundaries_no_unknown_rejects_unknown_import_target_test.go +43 -0
  193. package/linthost/check_observations.go +236 -0
  194. package/linthost/check_observations_retains_failed_program_and_raw_inputs_test.go +266 -0
  195. package/linthost/check_serve.go +23 -3
  196. package/linthost/check_serve_reuses_program_and_matches_cold_cycles_test.go +168 -0
  197. package/linthost/check_tag_names_publishes_canonical_hints_test.go +62 -0
  198. package/linthost/check_tag_names_test.go +30 -0
  199. package/linthost/check_values_test.go +31 -0
  200. package/linthost/command_build_emits_project_output_test.go +55 -0
  201. package/linthost/command_build_rejects_conflicting_emit_flags_test.go +32 -0
  202. package/linthost/command_check_applies_a_forwarded_null_reset_test.go +62 -0
  203. package/linthost/command_check_applies_forwarded_tsgo_flag_test.go +61 -0
  204. package/linthost/command_check_corpus_clean_project_exits_zero_test.go +41 -0
  205. package/linthost/command_check_corpus_ignores_future_optional_flags_test.go +34 -0
  206. package/linthost/command_check_corpus_reports_unknown_rule_names_test.go +25 -0
  207. package/linthost/command_check_honors_no_restricted_syntax_options_test.go +59 -0
  208. package/linthost/command_check_no_param_reassign_honors_props_config_test.go +46 -0
  209. package/linthost/command_check_no_restricted_imports_uses_real_config_options_test.go +53 -0
  210. package/linthost/command_check_preserves_compiler_argument_cwd_test.go +78 -0
  211. package/linthost/command_check_preserves_severity_exit_contract_test.go +54 -0
  212. package/linthost/command_check_rejects_invalid_no_param_reassign_options_before_linting_test.go +85 -0
  213. package/linthost/command_check_rejects_invalid_no_restricted_imports_options_before_linting_test.go +52 -0
  214. package/linthost/command_check_rejects_invalid_no_restricted_syntax_selector_test.go +41 -0
  215. package/linthost/command_check_relates_files_to_the_project_directory_test.go +40 -0
  216. package/linthost/command_check_reports_imported_sibling_workspace_source_test.go +45 -0
  217. package/linthost/command_check_reports_lint_diagnostic_test.go +44 -0
  218. package/linthost/command_check_reports_the_malformed_brace_it_used_to_bless_test.go +31 -0
  219. package/linthost/command_check_scopes_extends_rule_options_per_file_test.go +70 -0
  220. package/linthost/command_check_uses_parser_context_for_comment_consumers_test.go +61 -0
  221. package/linthost/command_check_warns_unknown_rules_test.go +41 -0
  222. package/linthost/command_fix_applies_both_lint_and_format_rule_edits_test.go +51 -0
  223. package/linthost/command_fix_applies_native_autofixes_test.go +48 -0
  224. package/linthost/command_fix_leaves_suggestion_only_rules_unchanged_test.go +46 -0
  225. package/linthost/command_fix_owns_its_source_reached_through_a_link_test.go +63 -0
  226. package/linthost/command_fix_rejects_emit_flag_test.go +39 -0
  227. package/linthost/command_fix_reports_but_never_rewrites_imported_sibling_source_test.go +65 -0
  228. package/linthost/command_fix_skips_default_formatting_that_format_applies_test.go +87 -0
  229. package/linthost/command_fix_unicorn_prevent_abbreviations_keeps_cross_file_merges_diagnostic_only_test.go +44 -0
  230. package/linthost/command_fix_unicorn_prevent_abbreviations_reparses_and_is_idempotent_test.go +37 -0
  231. package/linthost/command_fix_unicorn_switch_case_break_position_converges_and_is_idempotent_test.go +58 -0
  232. package/linthost/command_fix_unicorn_template_indent_converges_and_is_idempotent_test.go +43 -0
  233. package/linthost/command_format_applies_format_block_reflow_test.go +50 -0
  234. package/linthost/command_format_applies_format_rule_edits_test.go +54 -0
  235. package/linthost/command_format_arg_hugging_test.go +329 -0
  236. package/linthost/command_format_array_of_arrays_break_test.go +62 -0
  237. package/linthost/command_format_blank_line_in_list_test.go +69 -0
  238. package/linthost/command_format_brace_ownership_negative_twins_test.go +94 -0
  239. package/linthost/command_format_cedes_chained_arrow_body_test.go +50 -0
  240. package/linthost/command_format_cedes_closing_brace_under_wrapped_head_test.go +54 -0
  241. package/linthost/command_format_class_heritage_break_test.go +108 -0
  242. package/linthost/command_format_converges_on_leading_semi_guard_in_callback_test.go +69 -0
  243. package/linthost/command_format_decorated_declaration_indent_is_idempotent_test.go +57 -0
  244. package/linthost/command_format_default_import_single_specifier_break_test.go +26 -0
  245. package/linthost/command_format_display_width_test.go +33 -0
  246. package/linthost/command_format_expands_expression_nested_block_test.go +86 -0
  247. package/linthost/command_format_expression_nested_block_honors_crlf_test.go +39 -0
  248. package/linthost/command_format_fixture_corpus_test.go +179 -0
  249. package/linthost/command_format_honors_entry_ignores_alongside_rules_test.go +79 -0
  250. package/linthost/command_format_import_multi_specifier_from_overflow_break_test.go +27 -0
  251. package/linthost/command_format_indent_idempotency_helper_test.go +57 -0
  252. package/linthost/command_format_keeps_commented_statement_body_whole_test.go +23 -0
  253. package/linthost/command_format_keeps_empty_expression_nested_block_test.go +29 -0
  254. package/linthost/command_format_lays_out_a_statement_body_test.go +90 -0
  255. package/linthost/command_format_leaves_a_braceless_control_flow_body_alone_test.go +30 -0
  256. package/linthost/command_format_leaves_imported_sibling_source_untouched_test.go +68 -0
  257. package/linthost/command_format_leaves_prettier_shaped_mapped_types_untouched_test.go +39 -0
  258. package/linthost/command_format_leaves_prettier_shaped_type_members_untouched_test.go +41 -0
  259. package/linthost/command_format_leaves_token_spacing_untouched_test.go +66 -0
  260. package/linthost/command_format_multiple_callbacks_test.go +150 -0
  261. package/linthost/command_format_nested_ternary_indent_test.go +67 -0
  262. package/linthost/command_format_nested_ternary_parens_test.go +74 -0
  263. package/linthost/command_format_numeric_array_fill_test.go +94 -0
  264. package/linthost/command_format_preserves_braceless_for_body_indent_test.go +28 -0
  265. package/linthost/command_format_preserves_braceless_if_try_body_indent_test.go +30 -0
  266. package/linthost/command_format_preserves_class_typeparam_heritage_inline_test.go +27 -0
  267. package/linthost/command_format_preserves_comments_in_reflow_test.go +66 -0
  268. package/linthost/command_format_preserves_crlf_across_reflow_rules_test.go +73 -0
  269. package/linthost/command_format_preserves_generic_arg_multiline_type_literal_indent_test.go +30 -0
  270. package/linthost/command_format_preserves_generic_arg_type_literal_indent_test.go +30 -0
  271. package/linthost/command_format_preserves_interface_qualified_heritage_own_line_test.go +28 -0
  272. package/linthost/command_format_preserves_intersection_generic_type_literal_indent_test.go +36 -0
  273. package/linthost/command_format_preserves_multi_type_heritage_empty_body_test.go +28 -0
  274. package/linthost/command_format_preserves_multiline_type_param_heritage_test.go +30 -0
  275. package/linthost/command_format_preserves_nested_variable_type_literal_indent_test.go +27 -0
  276. package/linthost/command_format_preserves_param_type_literal_indent_test.go +62 -0
  277. package/linthost/command_format_preserves_union_member_type_literal_indent_test.go +28 -0
  278. package/linthost/command_format_print_width_abstains_inside_binary_expression_test.go +84 -0
  279. package/linthost/command_format_print_width_cascades_with_semi_and_quotes_test.go +62 -0
  280. package/linthost/command_format_print_width_converges_on_unbraced_control_flow_test.go +176 -0
  281. package/linthost/command_format_rejects_emit_flag_test.go +39 -0
  282. package/linthost/command_format_respects_resolved_entry_applicability_test.go +219 -0
  283. package/linthost/command_format_restores_class_member_indent_from_flat_test.go +61 -0
  284. package/linthost/command_format_restores_closing_braces_from_flat_test.go +64 -0
  285. package/linthost/command_format_restores_decorated_member_indent_from_flat_test.go +61 -0
  286. package/linthost/command_format_restores_decorated_namespace_class_indent_from_flat_test.go +62 -0
  287. package/linthost/command_format_restores_decorated_nested_class_indent_from_flat_test.go +64 -0
  288. package/linthost/command_format_restores_decorated_nested_function_indent_from_flat_test.go +60 -0
  289. package/linthost/command_format_restores_decorated_nested_interface_indent_from_flat_test.go +59 -0
  290. package/linthost/command_format_restores_nested_class_indent_from_flat_test.go +60 -0
  291. package/linthost/command_format_restores_stranded_brace_from_one_line_block_test.go +140 -0
  292. package/linthost/command_format_restores_switch_indent_from_flat_test.go +63 -0
  293. package/linthost/command_format_return_typed_arrow_hug_test.go +74 -0
  294. package/linthost/command_format_round2_coverage_test.go +57 -0
  295. package/linthost/command_format_round2_hug_fixes_test.go +70 -0
  296. package/linthost/command_format_round3_force_break_test.go +49 -0
  297. package/linthost/command_format_settles_a_member_terminator_on_a_padded_line_test.go +34 -0
  298. package/linthost/command_format_single_specifier_abstain_does_not_block_multi_break_test.go +56 -0
  299. package/linthost/command_format_single_specifier_stays_inline_test.go +60 -0
  300. package/linthost/command_format_split_call_collapses_flat_once_isolated_test.go +54 -0
  301. package/linthost/command_format_spread_comment_test.go +36 -0
  302. package/linthost/command_format_stranded_brace_honors_crlf_test.go +51 -0
  303. package/linthost/command_format_structural_rules_are_idempotent_on_their_own_output_test.go +51 -0
  304. package/linthost/command_format_structural_rules_converge_on_headline_input_test.go +56 -0
  305. package/linthost/command_format_structural_rules_converge_on_nested_block_test.go +56 -0
  306. package/linthost/command_format_switch_case_block_indent_test.go +80 -0
  307. package/linthost/command_format_terminates_a_split_interface_member_test.go +34 -0
  308. package/linthost/command_format_test_call_hug_test.go +92 -0
  309. package/linthost/command_format_wrapped_function_body_indent_test.go +43 -0
  310. package/linthost/command_lint_corpus_semantics_helpers_test.go +29 -0
  311. package/linthost/command_prints_version_test.go +38 -0
  312. package/linthost/command_rejects_conflicting_emit_flags_test.go +33 -0
  313. package/linthost/command_rejects_unknown_test.go +32 -0
  314. package/linthost/command_requires_argument_test.go +32 -0
  315. package/linthost/command_transform_normalizes_dot_segments_in_file_path_test.go +49 -0
  316. package/linthost/command_transform_outputs_requested_file_test.go +43 -0
  317. package/linthost/command_transform_requires_file_test.go +32 -0
  318. package/linthost/comment_scan.go +3 -2
  319. package/linthost/comment_scan_handles_malformed_parser_recovery_test.go +59 -0
  320. package/linthost/comment_scan_uses_parser_lexical_ranges_across_source_modes_test.go +109 -0
  321. package/linthost/compile.go +177 -38
  322. package/linthost/compile_user_pattern_caches_option_regex_test.go +70 -0
  323. package/linthost/config.go +954 -269
  324. package/linthost/config_cache_does_not_memoize_failed_evaluation_test.go +63 -0
  325. package/linthost/config_cache_portable_dependency_policies_test.go +471 -0
  326. package/linthost/config_cache_preserves_pattern_precedence_test.go +96 -0
  327. package/linthost/config_cache_reuses_evaluation_until_content_changes_test.go +81 -0
  328. package/linthost/config_fixture_helpers_test.go +70 -0
  329. package/linthost/config_format.go +5 -5
  330. package/linthost/config_glob.go +517 -0
  331. package/linthost/config_glob_bounds_matching_work_test.go +115 -0
  332. package/linthost/config_glob_preserves_expansion_semantics_test.go +128 -0
  333. package/linthost/config_glob_preserves_stored_case_recovery_test.go +64 -0
  334. package/linthost/config_json.go +85 -0
  335. package/linthost/config_loader_sources_escape_every_literal_percent_test.go +81 -0
  336. package/linthost/config_store_option_fold_honors_both_entry_orders_test.go +70 -0
  337. package/linthost/config_store_resolves_options_with_entry_scope_test.go +95 -0
  338. package/linthost/config_store_severity_only_override_inherits_matching_options_test.go +53 -0
  339. package/linthost/config_store_validates_every_scoped_option_variant_test.go +55 -0
  340. package/linthost/consistent_return_accepts_functions_that_return_on_every_path_through_switch_and_try_test.go +43 -0
  341. package/linthost/context_report_range_suggestion_separates_opt_in_edits_test.go +76 -0
  342. package/linthost/contrib_adapter.go +3 -1
  343. package/linthost/contrib_adapter_to_internal_text_edits_returns_nil_for_empty_input_test.go +34 -0
  344. package/linthost/contrib_adapter_to_internal_text_edits_round_trips_three_edits_test.go +40 -0
  345. package/linthost/contributor_ast_only_marker_skips_standalone_checker_test.go +52 -0
  346. package/linthost/contributor_bootstrap_is_single_owner_for_reusable_main_test.go +425 -0
  347. package/linthost/contributor_cannot_mutate_later_invocation_options_test.go +55 -0
  348. package/linthost/contributor_diagnostic_ranges_are_bounded_test.go +139 -0
  349. package/linthost/contributor_generic_accepts_options_method_keeps_legacy_payload_test.go +81 -0
  350. package/linthost/contributor_metadata_panic_is_rejected_test.go +84 -0
  351. package/linthost/contributor_optionless_marker_rejects_payload_test.go +63 -0
  352. package/linthost/contributor_panics_preserve_other_rules_in_process_test.go +111 -0
  353. package/linthost/contributor_range_fix_bounds_diagnostic_independently_from_edit_test.go +52 -0
  354. package/linthost/contributor_report_related_reaches_finding_test.go +101 -0
  355. package/linthost/contributor_rule_decodes_options_through_public_context_test.go +75 -0
  356. package/linthost/contributor_rule_opt_out_skips_declaration_files_test.go +56 -0
  357. package/linthost/contributor_rule_receives_and_reports_configured_severity_test.go +65 -0
  358. package/linthost/contributor_rules_visit_declaration_files_by_default_test.go +50 -0
  359. package/linthost/contributor_tagged_rule_marks_findings_test.go +78 -0
  360. package/linthost/contributor_type_aware_marker_keeps_checker_test.go +50 -0
  361. package/linthost/contributor_without_tag_marker_leaves_findings_untagged_test.go +61 -0
  362. package/linthost/cypress_assertion_before_screenshot_allows_immediately_prior_assertion_test.go +33 -0
  363. package/linthost/cypress_assertion_before_screenshot_allows_same_chain_assertion_test.go +31 -0
  364. package/linthost/cypress_assertion_before_screenshot_reports_unchecked_screenshot_test.go +34 -0
  365. package/linthost/cypress_assertion_before_screenshot_reports_unrelated_prior_assertion_test.go +36 -0
  366. package/linthost/cypress_finding_helpers_test.go +14 -0
  367. package/linthost/cypress_no_and_reports_chain_starting_and_test.go +35 -0
  368. package/linthost/cypress_no_assigning_return_values_reports_cy_assignment_test.go +35 -0
  369. package/linthost/cypress_no_async_before_reports_async_before_each_test.go +37 -0
  370. package/linthost/cypress_no_async_tests_reports_async_it_test.go +37 -0
  371. package/linthost/cypress_no_chained_get_reports_second_get_test.go +34 -0
  372. package/linthost/cypress_no_debug_reports_debug_command_test.go +34 -0
  373. package/linthost/cypress_no_force_reports_force_true_option_test.go +34 -0
  374. package/linthost/cypress_no_pause_reports_pause_command_test.go +34 -0
  375. package/linthost/cypress_no_unnecessary_waiting_reports_numeric_wait_test.go +35 -0
  376. package/linthost/cypress_no_xpath_reports_xpath_command_test.go +34 -0
  377. package/linthost/cypress_require_data_selectors_reports_class_selector_test.go +36 -0
  378. package/linthost/cypress_unsafe_to_chain_command_reports_action_middle_test.go +35 -0
  379. package/linthost/declaration_file_allowlist_names_are_registered_rules_test.go +50 -0
  380. package/linthost/default_case_accepts_block_comment_marker_test.go +28 -0
  381. package/linthost/default_case_accepts_case_insensitive_marker_test.go +28 -0
  382. package/linthost/default_case_accepts_empty_switch_test.go +24 -0
  383. package/linthost/default_case_accepts_existing_default_clause_test.go +29 -0
  384. package/linthost/default_case_accepts_no_default_marker_test.go +28 -0
  385. package/linthost/default_case_custom_pattern_replaces_default_marker_test.go +30 -0
  386. package/linthost/default_case_helpers_test.go +58 -0
  387. package/linthost/default_case_honors_custom_comment_pattern_test.go +28 -0
  388. package/linthost/default_case_invalid_comment_pattern_falls_back_to_default_test.go +28 -0
  389. package/linthost/default_case_rejects_marker_with_trailing_text_test.go +28 -0
  390. package/linthost/default_case_rejects_unrelated_trailing_comment_test.go +28 -0
  391. package/linthost/default_case_reports_switch_without_default_test.go +27 -0
  392. package/linthost/default_case_requires_marker_to_be_last_comment_test.go +30 -0
  393. package/linthost/diagnostic_codes_distinguish_former_collision_across_cli_and_lsp_test.go +97 -0
  394. package/linthost/dispatch.go +29 -9
  395. package/linthost/dispatch_array_literal_breaks_when_overflows_test.go +38 -0
  396. package/linthost/dispatch_array_literal_falls_back_when_element_nil_test.go +53 -0
  397. package/linthost/dispatch_array_literal_falls_back_when_elements_nil_test.go +48 -0
  398. package/linthost/dispatch_array_literal_flat_when_fits_test.go +34 -0
  399. package/linthost/dispatch_array_literal_returns_empty_for_nil_node_test.go +31 -0
  400. package/linthost/dispatch_arrow_function_block_body_reindents_consistently_test.go +41 -0
  401. package/linthost/dispatch_arrow_function_returns_covered_for_nil_node_test.go +38 -0
  402. package/linthost/dispatch_arrow_function_returns_verbatim_for_nil_body_test.go +46 -0
  403. package/linthost/dispatch_block_collapses_empty_body_to_braces_test.go +40 -0
  404. package/linthost/dispatch_block_keeps_covered_for_single_line_statements_test.go +42 -0
  405. package/linthost/dispatch_block_preserves_blank_line_between_statements_test.go +41 -0
  406. package/linthost/dispatch_block_reports_uncovered_for_comment_only_body_test.go +37 -0
  407. package/linthost/dispatch_block_reports_uncovered_for_inter_statement_comment_test.go +37 -0
  408. package/linthost/dispatch_block_returns_covered_for_nil_node_test.go +34 -0
  409. package/linthost/dispatch_block_returns_verbatim_for_nil_statement_test.go +47 -0
  410. package/linthost/dispatch_block_returns_verbatim_for_nil_statements_test.go +44 -0
  411. package/linthost/dispatch_call_breaks_expression_body_arrow_argument_when_overflows_test.go +44 -0
  412. package/linthost/dispatch_call_breaks_hugged_object_when_flat_form_overflows_test.go +42 -0
  413. package/linthost/dispatch_call_explodes_when_hugged_callback_header_overflows_test.go +45 -0
  414. package/linthost/dispatch_call_explodes_when_hugged_object_header_overflows_test.go +43 -0
  415. package/linthost/dispatch_call_expression_breaks_arguments_when_overflows_test.go +40 -0
  416. package/linthost/dispatch_call_expression_flat_when_fits_test.go +33 -0
  417. package/linthost/dispatch_call_hugs_last_callback_argument_test.go +41 -0
  418. package/linthost/dispatch_call_keeps_hugged_object_flat_when_it_fits_test.go +40 -0
  419. package/linthost/dispatch_expression_statement_returns_covered_for_nil_node_test.go +36 -0
  420. package/linthost/dispatch_expression_statement_returns_verbatim_for_dirty_tail_test.go +44 -0
  421. package/linthost/dispatch_expression_statement_returns_verbatim_for_nil_expression_test.go +44 -0
  422. package/linthost/dispatch_function_expression_block_body_reindents_test.go +43 -0
  423. package/linthost/dispatch_function_expression_returns_covered_for_nil_node_test.go +36 -0
  424. package/linthost/dispatch_function_expression_returns_verbatim_for_nil_body_test.go +44 -0
  425. package/linthost/dispatch_function_like_returns_verbatim_for_out_of_range_body_test.go +50 -0
  426. package/linthost/dispatch_function_like_taints_covered_for_multiline_signature_test.go +38 -0
  427. package/linthost/dispatch_import_declaration_falls_back_for_default_import_test.go +32 -0
  428. package/linthost/dispatch_import_declaration_falls_back_for_import_attributes_test.go +33 -0
  429. package/linthost/dispatch_import_declaration_falls_back_for_namespace_import_test.go +37 -0
  430. package/linthost/dispatch_import_declaration_falls_back_for_side_effect_import_test.go +36 -0
  431. package/linthost/dispatch_import_declaration_omits_semicolon_when_absent_test.go +37 -0
  432. package/linthost/dispatch_import_declaration_preserves_type_only_keyword_test.go +34 -0
  433. package/linthost/dispatch_import_declaration_returns_empty_for_nil_node_test.go +30 -0
  434. package/linthost/dispatch_import_declaration_threads_clauses_test.go +35 -0
  435. package/linthost/dispatch_named_exports_breaks_when_overflows_test.go +38 -0
  436. package/linthost/dispatch_named_exports_falls_back_when_elements_nil_test.go +49 -0
  437. package/linthost/dispatch_named_exports_falls_back_when_specifier_nil_test.go +51 -0
  438. package/linthost/dispatch_named_exports_flat_when_fits_test.go +33 -0
  439. package/linthost/dispatch_named_exports_returns_empty_for_nil_node_test.go +31 -0
  440. package/linthost/dispatch_named_imports_breaks_when_overflows_test.go +37 -0
  441. package/linthost/dispatch_named_imports_falls_back_when_elements_nil_test.go +50 -0
  442. package/linthost/dispatch_named_imports_falls_back_when_specifier_nil_test.go +54 -0
  443. package/linthost/dispatch_named_imports_flat_when_fits_test.go +34 -0
  444. package/linthost/dispatch_named_imports_returns_empty_for_nil_node_test.go +30 -0
  445. package/linthost/dispatch_nested_callback_reflows_at_every_depth_test.go +52 -0
  446. package/linthost/dispatch_new_expression_breaks_arguments_when_overflows_test.go +39 -0
  447. package/linthost/dispatch_new_expression_flat_when_fits_test.go +36 -0
  448. package/linthost/dispatch_object_literal_breaks_when_overflows_test.go +40 -0
  449. package/linthost/dispatch_object_literal_falls_back_when_properties_nil_test.go +49 -0
  450. package/linthost/dispatch_object_literal_falls_back_when_property_nil_test.go +52 -0
  451. package/linthost/dispatch_object_literal_flat_when_fits_test.go +33 -0
  452. package/linthost/dispatch_object_literal_returns_empty_for_nil_node_test.go +31 -0
  453. package/linthost/dispatch_parenthesized_expression_reflows_inner_test.go +42 -0
  454. package/linthost/dispatch_parenthesized_expression_returns_covered_for_nil_node_test.go +35 -0
  455. package/linthost/dispatch_parenthesized_expression_returns_verbatim_for_nil_inner_test.go +44 -0
  456. package/linthost/dispatch_reports_uncovered_for_multiline_verbatim_subtree_test.go +42 -0
  457. package/linthost/dispatch_return_statement_reflows_returned_expression_test.go +45 -0
  458. package/linthost/dispatch_return_statement_returns_covered_for_nil_node_test.go +36 -0
  459. package/linthost/dispatch_return_statement_returns_verbatim_for_bare_return_test.go +41 -0
  460. package/linthost/dispatch_return_statement_returns_verbatim_for_dirty_tail_test.go +43 -0
  461. package/linthost/dispatch_verbatim_fallback_preserves_unknown_kinds_test.go +41 -0
  462. package/linthost/display_width.go +29 -5
  463. package/linthost/display_width_after_last_newline_measures_tail_test.go +33 -0
  464. package/linthost/display_width_from_column_expands_tabs_to_stops_test.go +49 -0
  465. package/linthost/display_width_matches_prettier_get_string_width_test.go +124 -0
  466. package/linthost/display_width_oracle_preconditions_test.go +32 -0
  467. package/linthost/doc_join_returns_nil_for_empty_parts_test.go +33 -0
  468. package/linthost/dot_notation_declines_fix_when_comment_in_bracket_span_test.go +40 -0
  469. package/linthost/dot_notation_fix_bracket_to_dot_for_identifier_key_test.go +27 -0
  470. package/linthost/dot_notation_fix_keeps_bracket_for_reserved_word_test.go +28 -0
  471. package/linthost/dot_notation_fix_spaces_decimal_integer_receiver_test.go +76 -0
  472. package/linthost/dot_notation_offers_reserved_word_collapse_as_suggestion_test.go +36 -0
  473. package/linthost/dot_notation_offers_withheld_bracket_collapse_as_suggestion_test.go +37 -0
  474. package/linthost/dot_notation_skips_invalid_identifier_key_test.go +27 -0
  475. package/linthost/editor_format_overrides_accepts_utf8_bom_test.go +155 -0
  476. package/linthost/editor_format_overrides_combined_sections_follow_source_order_test.go +58 -0
  477. package/linthost/editor_format_overrides_drive_idempotent_output_test.go +69 -0
  478. package/linthost/editor_format_overrides_duplicate_language_section_uses_last_value_test.go +55 -0
  479. package/linthost/editor_format_overrides_equivalent_exact_sections_use_last_scope_test.go +52 -0
  480. package/linthost/editor_format_overrides_language_section_wins_test.go +37 -0
  481. package/linthost/editor_format_overrides_normalize_full_language_selectors_test.go +44 -0
  482. package/linthost/editor_format_overrides_reads_vscode_settings_test.go +45 -0
  483. package/linthost/editor_format_overrides_reject_malformed_language_selectors_test.go +36 -0
  484. package/linthost/editor_format_overrides_single_language_precedence_is_deterministic_test.go +51 -0
  485. package/linthost/editor_format_overrides_supported_language_ids_test.go +60 -0
  486. package/linthost/empty_tags_test.go +27 -0
  487. package/linthost/engine.go +523 -91
  488. package/linthost/engine_accepts_null_tuple_slot_as_absent_options_test.go +37 -0
  489. package/linthost/engine_accepts_payload_for_option_rule_test.go +36 -0
  490. package/linthost/engine_accepts_severity_only_optionless_rule_test.go +28 -0
  491. package/linthost/engine_align_uses_current_column_test.go +27 -0
  492. package/linthost/engine_block_disable_after_code_does_not_suppress_earlier_same_line_test.go +47 -0
  493. package/linthost/engine_conditional_group_empty_renders_nothing_test.go +24 -0
  494. package/linthost/engine_conditional_group_falls_back_to_last_option_test.go +30 -0
  495. package/linthost/engine_conditional_group_picks_first_fitting_option_test.go +31 -0
  496. package/linthost/engine_crlf_terminator_emits_carriage_returns_test.go +24 -0
  497. package/linthost/engine_dedupes_duplicate_kinds_in_visits_test.go +64 -0
  498. package/linthost/engine_detects_files_without_enabled_rules_test.go +40 -0
  499. package/linthost/engine_directive_accepts_typescript_namespace_prefix_test.go +48 -0
  500. package/linthost/engine_directive_after_template_expression_test.go +37 -0
  501. package/linthost/engine_directive_records_unknown_rule_in_unknown_channel_test.go +65 -0
  502. package/linthost/engine_directive_rejects_legacy_typescript_eslint_prefix_test.go +50 -0
  503. package/linthost/engine_directive_without_rules_disables_all_rules_on_target_line_test.go +57 -0
  504. package/linthost/engine_disable_line_multiline_block_comment_targets_end_line_test.go +50 -0
  505. package/linthost/engine_dispatches_only_to_interested_rules_test.go +81 -0
  506. package/linthost/engine_end_of_line_defaults_to_lf_when_empty_test.go +23 -0
  507. package/linthost/engine_fits_first_line_counts_flat_group_lines_test.go +25 -0
  508. package/linthost/engine_fits_first_line_stops_at_first_break_test.go +85 -0
  509. package/linthost/engine_fits_measures_conditional_group_as_first_option_test.go +25 -0
  510. package/linthost/engine_fits_rejects_forced_break_group_test.go +22 -0
  511. package/linthost/engine_fits_returns_false_when_remaining_negative_test.go +21 -0
  512. package/linthost/engine_fits_treats_indent_align_as_transparent_in_flat_test.go +34 -0
  513. package/linthost/engine_flatten_resolves_breaks_to_flat_form_test.go +57 -0
  514. package/linthost/engine_group_break_flag_forces_broken_layout_test.go +29 -0
  515. package/linthost/engine_group_breaks_when_overflows_width_test.go +30 -0
  516. package/linthost/engine_group_collapses_when_fits_width_test.go +28 -0
  517. package/linthost/engine_hardline_forces_break_regardless_of_width_test.go +23 -0
  518. package/linthost/engine_ifbreak_picks_broken_branch_when_group_breaks_test.go +32 -0
  519. package/linthost/engine_ifbreak_picks_flat_branch_when_group_fits_test.go +28 -0
  520. package/linthost/engine_ignores_directive_text_inside_strings_test.go +45 -0
  521. package/linthost/engine_ignores_jsx_text_inline_disable_markers_test.go +54 -0
  522. package/linthost/engine_indent_compounds_inside_group_test.go +20 -0
  523. package/linthost/engine_line_suffix_attaches_to_next_break_test.go +33 -0
  524. package/linthost/engine_line_suffix_drain_preserves_embedded_newline_test.go +23 -0
  525. package/linthost/engine_line_suffix_drains_inline_when_no_break_follows_test.go +28 -0
  526. package/linthost/engine_line_suffix_flush_preserves_embedded_newline_test.go +28 -0
  527. package/linthost/engine_literalline_emits_newline_at_column_zero_test.go +24 -0
  528. package/linthost/engine_preserves_migrated_disable_directive_population_test.go +46 -0
  529. package/linthost/engine_print_width_defaults_when_zero_test.go +39 -0
  530. package/linthost/engine_quarantines_panicking_rule_per_file_test.go +110 -0
  531. package/linthost/engine_records_unknown_rules_test.go +42 -0
  532. package/linthost/engine_recovers_from_rule_panic_test.go +68 -0
  533. package/linthost/engine_rejects_legacy_typescript_eslint_prefix_test.go +39 -0
  534. package/linthost/engine_rejects_optionless_payload_while_rule_is_off_test.go +37 -0
  535. package/linthost/engine_rejects_payload_shapes_for_optionless_rule_test.go +46 -0
  536. package/linthost/engine_requires_type_checker_for_contributor_rule_test.go +43 -0
  537. package/linthost/engine_requires_type_checker_for_prefer_const_test.go +33 -0
  538. package/linthost/engine_requires_type_checker_for_type_aware_rule_test.go +35 -0
  539. package/linthost/engine_respects_block_disable_enable_test.go +48 -0
  540. package/linthost/engine_respects_eslint_disable_line_test.go +45 -0
  541. package/linthost/engine_respects_eslint_disable_next_line_test.go +48 -0
  542. package/linthost/engine_respects_lint_disable_next_line_alias_test.go +46 -0
  543. package/linthost/engine_run_parallel_matches_serial_finding_set_test.go +86 -0
  544. package/linthost/engine_runs_format_rules_on_declaration_files_test.go +37 -0
  545. package/linthost/engine_runs_opt_in_rules_on_declaration_files_test.go +39 -0
  546. package/linthost/engine_skips_off_rules_test.go +41 -0
  547. package/linthost/engine_skips_type_checker_for_ast_only_rule_test.go +35 -0
  548. package/linthost/engine_skips_value_rules_on_declaration_files_test.go +40 -0
  549. package/linthost/engine_softline_emits_newline_when_group_breaks_test.go +23 -0
  550. package/linthost/engine_softline_renders_empty_when_flat_test.go +22 -0
  551. package/linthost/engine_starting_indent_offsets_break_decision_test.go +29 -0
  552. package/linthost/engine_tab_width_defaults_when_zero_test.go +24 -0
  553. package/linthost/engine_text_renders_verbatim_test.go +29 -0
  554. package/linthost/engine_text_with_embedded_newline_forces_break_test.go +24 -0
  555. package/linthost/engine_use_tabs_emits_remainder_spaces_test.go +27 -0
  556. package/linthost/engine_use_tabs_emits_tab_characters_test.go +24 -0
  557. package/linthost/eqeqeq_offers_unsafe_operator_rewrite_as_suggestion_test.go +45 -0
  558. package/linthost/expect_matchers_without_argument_do_not_panic_test.go +50 -0
  559. package/linthost/file_path_from_uri_preserves_literal_percent_escapes_test.go +36 -0
  560. package/linthost/file_url_matches_node_shape_test.go +64 -0
  561. package/linthost/files_selector_scopes_rules_away_from_an_imported_sibling_test.go +70 -0
  562. package/linthost/filter_format_findings_keeps_only_format_rule_findings_test.go +56 -0
  563. package/linthost/filter_known_flags_preserves_known_values_and_skips_unknowns_test.go +49 -0
  564. package/linthost/filter_known_flags_resolves_names_case_insensitively_test.go +43 -0
  565. package/linthost/filter_lint_findings_drops_format_rule_findings_test.go +43 -0
  566. package/linthost/find_lint_config_file_discovers_nearest_ancestor_test.go +37 -0
  567. package/linthost/find_lint_config_file_discovers_plain_lint_config_test.go +37 -0
  568. package/linthost/find_lint_config_file_falls_back_to_cwd_for_out_of_tree_tsconfig_test.go +43 -0
  569. package/linthost/find_lint_config_file_prefers_nearest_directory_test.go +38 -0
  570. package/linthost/find_lint_config_file_rejects_same_directory_conflicts_test.go +38 -0
  571. package/linthost/find_lint_config_file_uses_tsconfig_directory_when_outside_cwd_test.go +45 -0
  572. package/linthost/find_lint_entry_accepts_sorted_check_plugin_payload_test.go +53 -0
  573. package/linthost/fix.go +37 -11
  574. package/linthost/fix_eqeqeq_replaces_same_type_literal_operator_test.go +26 -0
  575. package/linthost/fix_eqeqeq_replaces_typeof_operator_test.go +26 -0
  576. package/linthost/fix_eqeqeq_requires_both_operands_to_share_a_primitive_kind_test.go +29 -0
  577. package/linthost/fix_eqeqeq_skips_unsafe_identifier_comparison_test.go +25 -0
  578. package/linthost/fix_interleaved_import_type_and_bracket_spacing_stays_valid_test.go +113 -0
  579. package/linthost/fix_no_extra_bind_removes_safe_member_and_call_syntax_test.go +45 -0
  580. package/linthost/fix_no_extra_bind_skips_effectful_or_commented_removals_test.go +55 -0
  581. package/linthost/fix_no_extra_non_null_assertion_drops_trailing_bang_test.go +39 -0
  582. package/linthost/fix_no_import_type_side_effects_hoists_type_keyword_test.go +29 -0
  583. package/linthost/fix_no_import_type_side_effects_preserves_leading_comment_test.go +30 -0
  584. package/linthost/fix_no_import_type_side_effects_skips_comment_import_keyword_test.go +31 -0
  585. package/linthost/fix_no_import_type_side_effects_skips_mixed_import_test.go +28 -0
  586. package/linthost/fix_no_unnecessary_type_constraint_disambiguates_cts_generic_arrow_test.go +20 -0
  587. package/linthost/fix_no_unnecessary_type_constraint_disambiguates_mts_generic_arrow_test.go +20 -0
  588. package/linthost/fix_no_unnecessary_type_constraint_disambiguates_tsx_generic_arrow_test.go +20 -0
  589. package/linthost/fix_no_unnecessary_type_constraint_drops_extends_clause_test.go +28 -0
  590. package/linthost/fix_no_unnecessary_type_constraint_keeps_default_unambiguous_test.go +20 -0
  591. package/linthost/fix_no_unnecessary_type_constraint_keeps_multiple_parameters_unambiguous_test.go +20 -0
  592. package/linthost/fix_no_unnecessary_type_constraint_keeps_non_arrow_declarations_minimal_test.go +28 -0
  593. package/linthost/fix_no_unnecessary_type_constraint_keeps_ts_generic_arrow_minimal_test.go +20 -0
  594. package/linthost/fix_no_unnecessary_type_constraint_preserves_comma_comments_test.go +22 -0
  595. package/linthost/fix_no_unnecessary_type_constraint_preserves_existing_trailing_comma_test.go +20 -0
  596. package/linthost/fix_no_useless_escape_drops_backslash_test.go +28 -0
  597. package/linthost/fix_no_useless_escape_drops_nondigit_neighbors_of_octal_exemption_test.go +31 -0
  598. package/linthost/fix_no_useless_escape_skips_backslash_digit_escapes_test.go +48 -0
  599. package/linthost/fix_no_useless_escape_skips_tagged_template_test.go +29 -0
  600. package/linthost/fix_no_useless_escape_skips_template_substitution_escape_test.go +45 -0
  601. package/linthost/fix_no_useless_rename_drops_rename_tail_test.go +39 -0
  602. package/linthost/fix_no_useless_rename_skips_string_literal_alias_test.go +34 -0
  603. package/linthost/fix_no_var_fixes_despite_label_before_test.go +30 -0
  604. package/linthost/fix_no_var_fixes_despite_member_name_before_test.go +29 -0
  605. package/linthost/fix_no_var_fixes_despite_object_key_before_test.go +30 -0
  606. package/linthost/fix_no_var_fixes_despite_type_reference_before_test.go +32 -0
  607. package/linthost/fix_no_var_keeps_bindings_observable_by_direct_eval_test.go +41 -0
  608. package/linthost/fix_no_var_preserves_script_global_object_bindings_test.go +30 -0
  609. package/linthost/fix_no_var_replaces_closure_reference_without_loop_test.go +30 -0
  610. package/linthost/fix_no_var_replaces_for_header_binding_test.go +31 -0
  611. package/linthost/fix_no_var_replaces_for_in_header_binding_test.go +31 -0
  612. package/linthost/fix_no_var_replaces_for_of_header_binding_test.go +31 -0
  613. package/linthost/fix_no_var_replaces_loop_local_without_closure_test.go +30 -0
  614. package/linthost/fix_no_var_replaces_namespace_block_binding_test.go +28 -0
  615. package/linthost/fix_no_var_replaces_reassigned_binding_test.go +30 -0
  616. package/linthost/fix_no_var_replaces_reference_in_nested_block_test.go +30 -0
  617. package/linthost/fix_no_var_replaces_reference_inside_with_body_test.go +30 -0
  618. package/linthost/fix_no_var_replaces_same_block_references_test.go +30 -0
  619. package/linthost/fix_no_var_replaces_same_case_clause_references_test.go +30 -0
  620. package/linthost/fix_no_var_replaces_unique_binding_test.go +30 -0
  621. package/linthost/fix_no_var_replaces_var_keyword_test.go +28 -0
  622. package/linthost/fix_no_var_skips_block_scope_escape_test.go +37 -0
  623. package/linthost/fix_no_var_skips_catch_binding_redeclaration_test.go +36 -0
  624. package/linthost/fix_no_var_skips_class_field_capture_in_loop_test.go +38 -0
  625. package/linthost/fix_no_var_skips_cross_case_reference_test.go +36 -0
  626. package/linthost/fix_no_var_skips_cross_scope_same_name_over_decline_test.go +36 -0
  627. package/linthost/fix_no_var_skips_deferred_self_reference_in_init_test.go +45 -0
  628. package/linthost/fix_no_var_skips_direct_self_reference_in_init_test.go +37 -0
  629. package/linthost/fix_no_var_skips_for_header_closure_capture_test.go +38 -0
  630. package/linthost/fix_no_var_skips_for_header_multi_declarator_test.go +32 -0
  631. package/linthost/fix_no_var_skips_for_header_redeclaration_test.go +36 -0
  632. package/linthost/fix_no_var_skips_for_header_use_after_loop_test.go +37 -0
  633. package/linthost/fix_no_var_skips_for_in_annex_b_initializer_test.go +33 -0
  634. package/linthost/fix_no_var_skips_for_in_header_expression_self_reference_test.go +37 -0
  635. package/linthost/fix_no_var_skips_for_of_destructuring_header_test.go +32 -0
  636. package/linthost/fix_no_var_skips_for_of_header_closure_capture_test.go +38 -0
  637. package/linthost/fix_no_var_skips_for_of_header_expression_self_reference_test.go +36 -0
  638. package/linthost/fix_no_var_skips_function_declaration_redeclaration_test.go +39 -0
  639. package/linthost/fix_no_var_skips_function_scope_escape_test.go +28 -0
  640. package/linthost/fix_no_var_skips_iife_self_reference_in_init_test.go +39 -0
  641. package/linthost/fix_no_var_skips_let_as_binding_name_test.go +32 -0
  642. package/linthost/fix_no_var_skips_loop_closure_capture_test.go +37 -0
  643. package/linthost/fix_no_var_skips_mixed_destructure_redeclaration_test.go +38 -0
  644. package/linthost/fix_no_var_skips_mixed_destructure_use_before_test.go +36 -0
  645. package/linthost/fix_no_var_skips_parameter_redeclaration_test.go +28 -0
  646. package/linthost/fix_no_var_skips_redeclaration_test.go +37 -0
  647. package/linthost/fix_no_var_skips_shorthand_value_before_test.go +37 -0
  648. package/linthost/fix_no_var_skips_single_statement_position_test.go +33 -0
  649. package/linthost/fix_no_var_skips_typeof_self_reference_in_init_test.go +38 -0
  650. package/linthost/fix_no_var_skips_use_before_declaration_test.go +36 -0
  651. package/linthost/fix_no_var_skips_use_before_for_header_test.go +36 -0
  652. package/linthost/fix_no_var_skips_while_loop_closure_capture_test.go +35 -0
  653. package/linthost/fix_no_var_skips_with_statement_body_test.go +35 -0
  654. package/linthost/fix_no_wrapper_object_types_replaces_typename_test.go +28 -0
  655. package/linthost/fix_no_wrapper_object_types_replaces_unshadowed_const_test.go +30 -0
  656. package/linthost/fix_no_wrapper_object_types_skips_function_shadow_test.go +27 -0
  657. package/linthost/fix_no_wrapper_object_types_skips_import_equals_shadow_test.go +26 -0
  658. package/linthost/fix_no_wrapper_object_types_skips_imported_name_test.go +26 -0
  659. package/linthost/fix_no_wrapper_object_types_skips_user_shadowed_name_test.go +27 -0
  660. package/linthost/fix_object_shorthand_drops_value_tail_test.go +28 -0
  661. package/linthost/fix_object_shorthand_preserves_the_prototype_setter_test.go +28 -0
  662. package/linthost/fix_prefer_as_const_preserves_comment_before_literal_type_test.go +27 -0
  663. package/linthost/fix_prefer_as_const_replaces_angle_bracket_type_with_const_test.go +27 -0
  664. package/linthost/fix_prefer_as_const_replaces_literal_type_with_const_test.go +27 -0
  665. package/linthost/fix_prefer_as_const_replaces_parenthesized_literal_assertion_test.go +28 -0
  666. package/linthost/fix_prefer_as_const_replaces_parenthesized_literal_type_test.go +28 -0
  667. package/linthost/fix_prefer_as_const_skips_null_literal_assertion_test.go +26 -0
  668. package/linthost/fix_prefer_as_const_skips_property_annotation_rewrite_test.go +27 -0
  669. package/linthost/fix_prefer_as_const_skips_template_literal_assertion_test.go +28 -0
  670. package/linthost/fix_prefer_as_const_skips_variable_annotation_rewrite_test.go +27 -0
  671. package/linthost/fix_prefer_const_counts_nested_write_in_shorthand_default_test.go +25 -0
  672. package/linthost/fix_prefer_const_keeps_nonlocal_rewrites_diagnostic_only_test.go +54 -0
  673. package/linthost/fix_prefer_const_preserves_assertion_wrapped_assignment_targets_test.go +68 -0
  674. package/linthost/fix_prefer_const_replaces_let_with_fresh_for_of_binding_test.go +29 -0
  675. package/linthost/fix_prefer_const_replaces_single_let_keyword_test.go +26 -0
  676. package/linthost/fix_prefer_const_replaces_wholly_stable_destructuring_keyword_test.go +26 -0
  677. package/linthost/fix_prefer_const_skips_destructuring_assignment_targets_test.go +42 -0
  678. package/linthost/fix_prefer_const_skips_for_in_reassignment_test.go +28 -0
  679. package/linthost/fix_prefer_const_skips_for_of_reassignment_test.go +29 -0
  680. package/linthost/fix_prefer_const_skips_multi_declaration_list_test.go +32 -0
  681. package/linthost/fix_prefer_namespace_keyword_replaces_module_keyword_test.go +29 -0
  682. package/linthost/fix_regexp_no_useless_flag_deletes_the_flag_it_named_test.go +74 -0
  683. package/linthost/fix_regexp_no_useless_quantifier_drops_exactly_one_repeat_test.go +57 -0
  684. package/linthost/fix_regexp_no_useless_two_nums_quantifier_collapses_equal_bounds_test.go +50 -0
  685. package/linthost/fix_regexp_no_zero_quantifier_stays_diagnostic_only_test.go +39 -0
  686. package/linthost/fix_regexp_prefer_d_replaces_spelled_out_digit_class_test.go +49 -0
  687. package/linthost/fix_regexp_prefer_plus_quantifier_replaces_open_ended_one_test.go +45 -0
  688. package/linthost/fix_regexp_prefer_question_quantifier_replaces_zero_to_one_test.go +43 -0
  689. package/linthost/fix_regexp_prefer_star_quantifier_replaces_open_ended_zero_test.go +43 -0
  690. package/linthost/fix_regexp_prefer_w_replaces_spelled_out_word_class_test.go +46 -0
  691. package/linthost/fix_regexp_require_unicode_regexp_offers_u_and_v_suggestions_test.go +71 -0
  692. package/linthost/fix_regexp_require_unicode_sets_regexp_offers_the_v_flag_test.go +76 -0
  693. package/linthost/fix_regexp_sort_flags_rewrites_flag_run_in_canonical_order_test.go +48 -0
  694. package/linthost/fix_regexp_withholds_a_rewrite_the_regex_parser_rejects_test.go +62 -0
  695. package/linthost/fix_security_detect_new_buffer_offers_three_successors_test.go +93 -0
  696. package/linthost/fix_security_detect_pseudo_random_bytes_proves_automatic_rename_test.go +95 -0
  697. package/linthost/fix_select_text_edit_groups_collapses_duplicate_edit_within_finding_test.go +42 -0
  698. package/linthost/fix_select_text_edit_groups_drops_partially_overlapped_finding_whole_test.go +43 -0
  699. package/linthost/fix_select_text_edit_groups_drops_self_overlapping_finding_test.go +32 -0
  700. package/linthost/fix_select_text_edit_groups_keeps_disjoint_multi_edit_finding_whole_test.go +41 -0
  701. package/linthost/fix_select_text_edits_drops_coincident_zero_width_insert_test.go +57 -0
  702. package/linthost/fix_select_text_edits_drops_duplicate_edits_test.go +38 -0
  703. package/linthost/fix_select_text_edits_drops_overlapping_ranges_test.go +32 -0
  704. package/linthost/fix_solid_imports_rewrites_sole_specifier_module_test.go +65 -0
  705. package/linthost/fix_solid_no_react_specific_props_renames_react_props_test.go +66 -0
  706. package/linthost/fix_storybook_no_renderer_packages_offers_framework_packages_test.go +95 -0
  707. package/linthost/fix_tsx_grammar_keeps_jsx_while_rewriting_var_and_let_test.go +36 -0
  708. package/linthost/flags_gen.go +2 -2
  709. package/linthost/for_direction_honors_a_negated_compound_step_test.go +37 -0
  710. package/linthost/format.go +14 -4
  711. package/linthost/format_arrow_parens_abstains_on_comment_near_trailing_comma_test.go +68 -0
  712. package/linthost/format_arrow_parens_abstains_on_param_comment_test.go +44 -0
  713. package/linthost/format_arrow_parens_avoid_keeps_return_type_parens_test.go +24 -0
  714. package/linthost/format_arrow_parens_avoid_keeps_type_parameter_parens_test.go +23 -0
  715. package/linthost/format_arrow_parens_idempotent_on_wrapped_test.go +24 -0
  716. package/linthost/format_arrow_parens_keeps_destructured_param_under_avoid_test.go +24 -0
  717. package/linthost/format_arrow_parens_keeps_ineligible_trailing_comma_params_test.go +66 -0
  718. package/linthost/format_arrow_parens_keeps_trailing_comma_param_under_always_test.go +48 -0
  719. package/linthost/format_arrow_parens_keeps_typed_param_under_avoid_test.go +24 -0
  720. package/linthost/format_arrow_parens_strips_async_single_param_test.go +26 -0
  721. package/linthost/format_arrow_parens_strips_single_param_under_avoid_test.go +24 -0
  722. package/linthost/format_arrow_parens_strips_trailing_comma_param_under_avoid_test.go +51 -0
  723. package/linthost/format_arrow_parens_strips_wrapped_param_before_list_comma_test.go +32 -0
  724. package/linthost/format_arrow_parens_wraps_bare_single_param_test.go +25 -0
  725. package/linthost/format_block_absent_keeps_format_rules_off_test.go +42 -0
  726. package/linthost/format_block_default_severity_off_keeps_format_rules_out_of_check_test.go +48 -0
  727. package/linthost/format_block_drops_format_rule_in_rules_map_test.go +45 -0
  728. package/linthost/format_block_expands_nil_raw_to_empty_map_test.go +32 -0
  729. package/linthost/format_block_jsdoc_false_skips_rule_test.go +37 -0
  730. package/linthost/format_block_propagates_jsdoc_sort_tags_option_test.go +59 -0
  731. package/linthost/format_block_propagates_prettier_options_to_rule_test.go +159 -0
  732. package/linthost/format_block_propagates_sort_imports_options_test.go +70 -0
  733. package/linthost/format_block_rejects_empty_sort_imports_order_test.go +37 -0
  734. package/linthost/format_block_rejects_invalid_jsdoc_options_test.go +68 -0
  735. package/linthost/format_block_rejects_invalid_severity_test.go +33 -0
  736. package/linthost/format_block_rejects_invalid_trailing_comma_value_test.go +36 -0
  737. package/linthost/format_block_rejects_non_array_sort_imports_order_test.go +32 -0
  738. package/linthost/format_block_rejects_non_bool_or_object_jsdoc_test.go +36 -0
  739. package/linthost/format_block_rejects_non_bool_or_object_sort_imports_test.go +30 -0
  740. package/linthost/format_block_rejects_non_bool_semi_test.go +32 -0
  741. package/linthost/format_block_rejects_non_bool_single_quote_test.go +31 -0
  742. package/linthost/format_block_rejects_non_bool_sort_imports_options_test.go +45 -0
  743. package/linthost/format_block_rejects_non_bool_use_tabs_test.go +31 -0
  744. package/linthost/format_block_rejects_non_int_print_width_test.go +31 -0
  745. package/linthost/format_block_rejects_non_int_tab_width_test.go +32 -0
  746. package/linthost/format_block_rejects_non_string_end_of_line_test.go +48 -0
  747. package/linthost/format_block_rejects_non_string_trailing_comma_test.go +32 -0
  748. package/linthost/format_block_rejects_unknown_key_test.go +39 -0
  749. package/linthost/format_block_rejects_unknown_sort_imports_key_test.go +36 -0
  750. package/linthost/format_block_severity_warning_enables_check_diagnostics_test.go +48 -0
  751. package/linthost/format_block_sort_imports_false_keeps_rule_off_test.go +27 -0
  752. package/linthost/format_block_sort_imports_true_enables_defaults_test.go +37 -0
  753. package/linthost/format_block_targets_option_accepting_rules_test.go +90 -0
  754. package/linthost/format_block_threads_end_of_line_into_sort_imports_test.go +55 -0
  755. package/linthost/format_block_wins_over_vscode_settings_test.go +36 -0
  756. package/linthost/format_brace_continuation_corrects_a_pushed_keyword_at_the_wrong_column_test.go +28 -0
  757. package/linthost/format_brace_continuation_honors_crlf_end_of_line_test.go +29 -0
  758. package/linthost/format_brace_continuation_indents_a_pushed_keyword_to_its_statement_test.go +27 -0
  759. package/linthost/format_brace_continuation_is_idempotent_in_both_directions_test.go +32 -0
  760. package/linthost/format_brace_continuation_leaves_an_if_without_an_else_alone_test.go +23 -0
  761. package/linthost/format_brace_continuation_normalizes_a_zero_width_gap_test.go +27 -0
  762. package/linthost/format_brace_continuation_pulls_catch_and_finally_onto_their_braces_test.go +28 -0
  763. package/linthost/format_brace_continuation_pulls_do_while_onto_the_closing_brace_test.go +27 -0
  764. package/linthost/format_brace_continuation_pulls_else_onto_the_closing_brace_test.go +27 -0
  765. package/linthost/format_brace_continuation_pulls_finally_onto_a_try_without_a_catch_test.go +28 -0
  766. package/linthost/format_brace_continuation_pushes_a_do_while_off_a_statement_body_test.go +28 -0
  767. package/linthost/format_brace_continuation_pushes_else_off_a_statement_consequent_test.go +28 -0
  768. package/linthost/format_brace_continuation_pushes_past_a_brace_terminated_non_block_test.go +28 -0
  769. package/linthost/format_brace_continuation_pushes_past_a_label_prefix_test.go +48 -0
  770. package/linthost/format_brace_continuation_settles_a_shared_line_through_the_cascade_test.go +44 -0
  771. package/linthost/format_brace_continuation_skips_a_commented_gap_test.go +28 -0
  772. package/linthost/format_brace_continuation_waits_for_a_statement_to_own_its_line_test.go +27 -0
  773. package/linthost/format_bracket_spacing_idempotent_on_padded_test.go +23 -0
  774. package/linthost/format_bracket_spacing_leaves_a_prettier_shaped_type_literal_alone_test.go +27 -0
  775. package/linthost/format_bracket_spacing_leaves_empty_object_test.go +74 -0
  776. package/linthost/format_bracket_spacing_pads_an_unspaced_type_literal_test.go +29 -0
  777. package/linthost/format_bracket_spacing_pads_destructure_test.go +24 -0
  778. package/linthost/format_bracket_spacing_pads_import_attributes_test.go +28 -0
  779. package/linthost/format_bracket_spacing_pads_mapped_type_test.go +27 -0
  780. package/linthost/format_bracket_spacing_pads_named_imports_test.go +24 -0
  781. package/linthost/format_bracket_spacing_pads_object_literal_test.go +26 -0
  782. package/linthost/format_bracket_spacing_strips_object_literal_under_false_test.go +26 -0
  783. package/linthost/format_clause_join_charges_the_else_width_budget_at_its_limit_test.go +37 -0
  784. package/linthost/format_clause_join_charges_the_shift_to_the_header_lines_indent_test.go +45 -0
  785. package/linthost/format_clause_join_emits_no_shift_when_the_column_is_unchanged_test.go +50 -0
  786. package/linthost/format_clause_join_hoists_across_a_multiline_template_without_moving_it_test.go +30 -0
  787. package/linthost/format_clause_join_idempotent_on_joined_body_test.go +27 -0
  788. package/linthost/format_clause_join_joins_do_body_test.go +27 -0
  789. package/linthost/format_clause_join_joins_else_body_test.go +27 -0
  790. package/linthost/format_clause_join_joins_else_if_chain_across_lines_test.go +44 -0
  791. package/linthost/format_clause_join_joins_for_and_while_bodies_test.go +32 -0
  792. package/linthost/format_clause_join_joins_labeled_block_body_test.go +31 -0
  793. package/linthost/format_clause_join_joins_single_if_body_test.go +28 -0
  794. package/linthost/format_clause_join_joins_with_body_test.go +27 -0
  795. package/linthost/format_clause_join_keeps_a_blank_line_inside_a_hoisted_body_test.go +45 -0
  796. package/linthost/format_clause_join_keeps_overlong_body_broken_test.go +31 -0
  797. package/linthost/format_clause_join_leaves_a_block_comment_interior_untouched_test.go +45 -0
  798. package/linthost/format_clause_join_leaves_a_string_continuation_untouched_test.go +45 -0
  799. package/linthost/format_clause_join_leaves_a_template_literal_type_untouched_test.go +49 -0
  800. package/linthost/format_clause_join_reindents_a_hoisted_body_inside_a_function_test.go +43 -0
  801. package/linthost/format_clause_join_reindents_a_hoisted_else_if_chain_test.go +45 -0
  802. package/linthost/format_clause_join_reindents_a_hoisted_labeled_block_test.go +27 -0
  803. package/linthost/format_clause_join_reindents_an_indentable_block_comment_test.go +50 -0
  804. package/linthost/format_clause_join_settles_a_deep_staircase_within_the_cascade_budget_test.go +44 -0
  805. package/linthost/format_clause_join_shifts_a_tab_indented_body_with_tabs_test.go +44 -0
  806. package/linthost/format_clause_join_skips_braced_body_test.go +31 -0
  807. package/linthost/format_clause_join_skips_braced_else_and_do_bodies_test.go +38 -0
  808. package/linthost/format_clause_join_skips_commented_else_gap_test.go +29 -0
  809. package/linthost/format_clause_join_skips_empty_else_and_do_bodies_test.go +33 -0
  810. package/linthost/format_clause_join_skips_empty_statement_body_test.go +36 -0
  811. package/linthost/format_command_resolver_keeps_configured_options_inside_matching_entry_test.go +64 -0
  812. package/linthost/format_command_resolver_skips_upgrade_for_entry_ignored_file_test.go +60 -0
  813. package/linthost/format_command_resolver_skips_upgrade_for_file_outside_entry_files_test.go +61 -0
  814. package/linthost/format_command_resolver_variants_replace_bare_options_with_reachable_defaults_test.go +34 -0
  815. package/linthost/format_declaration_header_abstains_on_comment_in_header_test.go +25 -0
  816. package/linthost/format_declaration_header_abstains_on_type_params_with_multi_clause_test.go +27 -0
  817. package/linthost/format_declaration_header_breaks_empty_body_at_width_boundary_test.go +32 -0
  818. package/linthost/format_declaration_header_breaks_generic_heritage_type_args_test.go +28 -0
  819. package/linthost/format_declaration_header_breaks_multi_type_interface_test.go +29 -0
  820. package/linthost/format_declaration_header_breaks_multiple_clauses_test.go +25 -0
  821. package/linthost/format_declaration_header_breaks_single_type_clause_in_multi_clause_test.go +73 -0
  822. package/linthost/format_declaration_header_breaks_type_param_default_after_equals_test.go +29 -0
  823. package/linthost/format_declaration_header_collapses_fitting_header_test.go +29 -0
  824. package/linthost/format_declaration_header_drops_brace_for_class_body_test.go +28 -0
  825. package/linthost/format_declaration_header_explodes_and_drops_brace_for_class_body_test.go +27 -0
  826. package/linthost/format_declaration_header_explodes_type_parameters_test.go +26 -0
  827. package/linthost/format_declaration_header_generic_heritage_honors_crlf_end_of_line_test.go +32 -0
  828. package/linthost/format_declaration_header_glues_brace_for_empty_body_test.go +27 -0
  829. package/linthost/format_declaration_header_idempotent_on_broken_clauses_test.go +24 -0
  830. package/linthost/format_declaration_header_idempotent_on_broken_heritage_type_args_test.go +25 -0
  831. package/linthost/format_declaration_header_idempotent_on_exploded_class_body_test.go +25 -0
  832. package/linthost/format_declaration_header_keeps_multi_type_inline_after_break_test.go +30 -0
  833. package/linthost/format_declaration_header_keeps_single_generic_heritage_arg_inline_test.go +25 -0
  834. package/linthost/format_declaration_header_keeps_single_heritage_type_inline_test.go +26 -0
  835. package/linthost/format_declaration_header_multi_clause_honors_crlf_end_of_line_test.go +30 -0
  836. package/linthost/format_declaration_header_multi_type_honors_crlf_end_of_line_test.go +30 -0
  837. package/linthost/format_declaration_header_type_param_explode_honors_crlf_end_of_line_test.go +32 -0
  838. package/linthost/format_defaults_apply_without_format_config_test.go +46 -0
  839. package/linthost/format_indent_case_block_body_matches_case_depth_test.go +30 -0
  840. package/linthost/format_indent_cedes_body_under_multiline_arrow_head_test.go +39 -0
  841. package/linthost/format_indent_cedes_callback_argument_body_test.go +31 -0
  842. package/linthost/format_indent_defers_shared_line_to_statement_split_test.go +32 -0
  843. package/linthost/format_indent_honors_custom_tab_width_test.go +28 -0
  844. package/linthost/format_indent_honors_use_tabs_option_test.go +28 -0
  845. package/linthost/format_indent_idempotent_on_correct_class_body_test.go +27 -0
  846. package/linthost/format_indent_idempotent_on_correct_nested_block_test.go +26 -0
  847. package/linthost/format_indent_idempotent_on_decorated_member_test.go +29 -0
  848. package/linthost/format_indent_normalizes_class_method_body_depth_test.go +29 -0
  849. package/linthost/format_indent_normalizes_decorated_member_declaration_line_test.go +31 -0
  850. package/linthost/format_indent_normalizes_multiple_decorator_lines_test.go +30 -0
  851. package/linthost/format_indent_normalizes_over_indented_block_statement_test.go +27 -0
  852. package/linthost/format_indent_normalizes_plain_member_header_test.go +29 -0
  853. package/linthost/format_indent_normalizes_same_line_decorated_member_test.go +49 -0
  854. package/linthost/format_indent_normalizes_switch_case_body_depth_test.go +29 -0
  855. package/linthost/format_indent_still_fixes_single_line_head_arrow_body_test.go +27 -0
  856. package/linthost/format_indent_strips_leading_indent_from_top_level_statement_test.go +27 -0
  857. package/linthost/format_jsdoc_honors_custom_tag_synonyms_option_test.go +26 -0
  858. package/linthost/format_jsdoc_preserves_example_block_body_test.go +63 -0
  859. package/linthost/format_jsdoc_rejects_malformed_tag_synonym_value_test.go +60 -0
  860. package/linthost/format_jsdoc_rewrites_arg_synonyms_to_param_test.go +25 -0
  861. package/linthost/format_jsdoc_rewrites_return_to_returns_test.go +24 -0
  862. package/linthost/format_jsdoc_skips_canonical_tags_test.go +32 -0
  863. package/linthost/format_jsdoc_skips_inline_at_text_test.go +34 -0
  864. package/linthost/format_jsdoc_skips_jsdoc_like_strings_in_source_test.go +41 -0
  865. package/linthost/format_orphan_semi_inert_under_semi_true_test.go +24 -0
  866. package/linthost/format_orphan_semi_merges_guard_under_no_semi_test.go +35 -0
  867. package/linthost/format_orphan_semi_skips_comment_between_guard_and_statement_test.go +28 -0
  868. package/linthost/format_orphan_semi_skips_non_hazard_successor_test.go +29 -0
  869. package/linthost/format_parameter_properties_breaks_multi_param_constructor_test.go +30 -0
  870. package/linthost/format_parameter_properties_breaks_override_only_constructor_test.go +31 -0
  871. package/linthost/format_parameter_properties_honors_crlf_end_of_line_test.go +29 -0
  872. package/linthost/format_parameter_properties_idempotent_on_broken_list_test.go +28 -0
  873. package/linthost/format_parameter_properties_ignores_decorated_plain_params_test.go +31 -0
  874. package/linthost/format_parameter_properties_ignores_plain_params_test.go +27 -0
  875. package/linthost/format_parameter_properties_keeps_single_param_inline_test.go +30 -0
  876. package/linthost/format_prettier_conformance_e2e_test.go +367 -0
  877. package/linthost/format_print_width_abstains_inside_jsx_expression_test.go +50 -0
  878. package/linthost/format_print_width_abstains_inside_template_substitution_test.go +31 -0
  879. package/linthost/format_print_width_abstains_when_callback_body_holds_uncovered_statement_test.go +37 -0
  880. package/linthost/format_print_width_abstains_when_inter_member_comment_present_test.go +32 -0
  881. package/linthost/format_print_width_abstains_when_trailing_block_comment_before_close_bracket_test.go +35 -0
  882. package/linthost/format_print_width_breaks_array_rest_assignment_target_without_comma_test.go +31 -0
  883. package/linthost/format_print_width_breaks_call_when_trailing_semicolon_overflows_test.go +26 -0
  884. package/linthost/format_print_width_breaks_default_plus_named_import_shape_test.go +29 -0
  885. package/linthost/format_print_width_breaks_long_call_arguments_test.go +31 -0
  886. package/linthost/format_print_width_breaks_long_named_exports_test.go +30 -0
  887. package/linthost/format_print_width_breaks_long_named_imports_test.go +30 -0
  888. package/linthost/format_print_width_breaks_long_new_expression_arguments_test.go +31 -0
  889. package/linthost/format_print_width_breaks_long_object_literal_test.go +27 -0
  890. package/linthost/format_print_width_breaks_overflowing_react_hook_deps_array_test.go +29 -0
  891. package/linthost/format_print_width_check_abstains_when_ctx_is_nil_test.go +24 -0
  892. package/linthost/format_print_width_check_abstains_when_node_is_nil_test.go +48 -0
  893. package/linthost/format_print_width_check_abstains_when_node_range_exceeds_context_source_test.go +71 -0
  894. package/linthost/format_print_width_declines_last_arg_hug_after_arrow_lead_test.go +29 -0
  895. package/linthost/format_print_width_declines_last_arg_hug_after_callback_test.go +28 -0
  896. package/linthost/format_print_width_default_width_is_80_columns_test.go +31 -0
  897. package/linthost/format_print_width_explodes_call_when_hugged_header_overflows_test.go +26 -0
  898. package/linthost/format_print_width_hangs_broken_ternary_arm_under_arm_column_test.go +40 -0
  899. package/linthost/format_print_width_has_non_child_comments_returns_false_when_node_is_nil_test.go +46 -0
  900. package/linthost/format_print_width_has_reflow_ancestor_returns_false_when_node_is_nil_test.go +40 -0
  901. package/linthost/format_print_width_honors_crlf_end_of_line_test.go +30 -0
  902. package/linthost/format_print_width_honors_custom_tab_width_test.go +27 -0
  903. package/linthost/format_print_width_honors_tab_leading_source_test.go +27 -0
  904. package/linthost/format_print_width_honors_use_tabs_option_test.go +25 -0
  905. package/linthost/format_print_width_hugs_arrow_with_object_body_test.go +32 -0
  906. package/linthost/format_print_width_hugs_first_callback_argument_test.go +31 -0
  907. package/linthost/format_print_width_hugs_first_callback_with_array_arg_test.go +27 -0
  908. package/linthost/format_print_width_hugs_object_argument_despite_long_trailing_suffix_test.go +32 -0
  909. package/linthost/format_print_width_idempotent_on_already_reflowed_input_test.go +26 -0
  910. package/linthost/format_print_width_idempotent_on_first_hugged_call_test.go +25 -0
  911. package/linthost/format_print_width_idempotent_on_hugged_callback_call_test.go +25 -0
  912. package/linthost/format_print_width_idempotent_on_nested_ternary_staircase_test.go +25 -0
  913. package/linthost/format_print_width_indents_nested_alternate_ternary_test.go +30 -0
  914. package/linthost/format_print_width_indents_nested_consequent_ternary_test.go +30 -0
  915. package/linthost/format_print_width_indents_relative_to_line_leading_indent_test.go +42 -0
  916. package/linthost/format_print_width_inserts_after_non_rest_object_assignment_target_test.go +30 -0
  917. package/linthost/format_print_width_inserts_after_object_spread_in_value_literal_test.go +30 -0
  918. package/linthost/format_print_width_keeps_call_with_trailing_line_comment_inline_test.go +24 -0
  919. package/linthost/format_print_width_keeps_empty_array_literal_flat_test.go +25 -0
  920. package/linthost/format_print_width_keeps_empty_object_literal_flat_test.go +28 -0
  921. package/linthost/format_print_width_keeps_nested_object_that_fits_test.go +24 -0
  922. package/linthost/format_print_width_keeps_object_rest_assignment_target_without_comma_test.go +29 -0
  923. package/linthost/format_print_width_keeps_react_hook_hugged_past_open_line_test.go +26 -0
  924. package/linthost/format_print_width_keeps_short_call_with_callback_hugged_test.go +32 -0
  925. package/linthost/format_print_width_keeps_short_ternary_flat_test.go +27 -0
  926. package/linthost/format_print_width_leading_column_returns_zero_when_pos_is_nonpositive_test.go +51 -0
  927. package/linthost/format_print_width_line_leading_indent_uses_two_when_tab_width_nonpositive_test.go +47 -0
  928. package/linthost/format_print_width_max_line_width_uses_two_when_tab_width_nonpositive_test.go +47 -0
  929. package/linthost/format_print_width_preserves_blank_line_in_reflowed_callback_body_test.go +29 -0
  930. package/linthost/format_print_width_preserves_call_type_arguments_test.go +32 -0
  931. package/linthost/format_print_width_preserves_leading_jsdoc_above_reflowed_node_test.go +44 -0
  932. package/linthost/format_print_width_preserves_multiline_object_test.go +30 -0
  933. package/linthost/format_print_width_preserves_optional_call_token_test.go +32 -0
  934. package/linthost/format_print_width_preserves_terminator_decision_on_imports_test.go +42 -0
  935. package/linthost/format_print_width_reflows_call_with_nested_object_argument_test.go +33 -0
  936. package/linthost/format_print_width_reflows_wide_array_with_slash_strings_test.go +34 -0
  937. package/linthost/format_print_width_reindents_callback_body_inside_indented_block_test.go +33 -0
  938. package/linthost/format_print_width_skips_namespace_import_shape_test.go +28 -0
  939. package/linthost/format_print_width_skips_nested_target_when_ancestor_covers_it_test.go +58 -0
  940. package/linthost/format_print_width_skips_short_object_literal_test.go +29 -0
  941. package/linthost/format_print_width_slice_contains_newline_clamps_out_of_range_bounds_test.go +57 -0
  942. package/linthost/format_print_width_ternary_arm_indent_bonus_test.go +44 -0
  943. package/linthost/format_print_width_trailing_line_width_excludes_trailing_line_comment_test.go +38 -0
  944. package/linthost/format_print_width_trailing_line_width_handles_guards_and_tabs_test.go +51 -0
  945. package/linthost/format_quote_props_consistent_preserves_cooked_identifier_keys_test.go +37 -0
  946. package/linthost/format_quote_props_consistent_quotes_mixed_object_test.go +28 -0
  947. package/linthost/format_quote_props_consistent_unquotes_all_identifier_keys_test.go +24 -0
  948. package/linthost/format_quote_props_consistent_unquotes_proto_with_identifier_keys_test.go +21 -0
  949. package/linthost/format_quote_props_keeps_non_identifier_key_test.go +24 -0
  950. package/linthost/format_quote_props_keeps_numeric_key_test.go +20 -0
  951. package/linthost/format_quote_props_preserve_is_noop_test.go +23 -0
  952. package/linthost/format_quote_props_unquotes_class_method_test.go +30 -0
  953. package/linthost/format_quote_props_unquotes_identifier_keys_test.go +25 -0
  954. package/linthost/format_quote_props_unquotes_interface_member_test.go +28 -0
  955. package/linthost/format_quote_props_unquotes_proto_key_without_changing_setter_semantics_test.go +21 -0
  956. package/linthost/format_quote_props_unquotes_reserved_word_key_test.go +25 -0
  957. package/linthost/format_quote_props_unquotes_type_literal_member_test.go +28 -0
  958. package/linthost/format_quotes_converts_double_to_single_preserving_apostrophe_escape_test.go +23 -0
  959. package/linthost/format_quotes_converts_single_to_double_test.go +22 -0
  960. package/linthost/format_quotes_escapes_double_quote_when_converting_test.go +22 -0
  961. package/linthost/format_quotes_honors_prefer_single_option_test.go +27 -0
  962. package/linthost/format_quotes_keeps_double_on_escape_tie_test.go +29 -0
  963. package/linthost/format_quotes_keeps_double_with_redundant_single_escape_test.go +31 -0
  964. package/linthost/format_quotes_keeps_single_with_redundant_double_escape_test.go +31 -0
  965. package/linthost/format_quotes_preserves_strings_with_unescaped_double_quotes_test.go +34 -0
  966. package/linthost/format_quotes_skips_double_quoted_literals_test.go +24 -0
  967. package/linthost/format_quotes_skips_jsx_attribute_strings_test.go +44 -0
  968. package/linthost/format_quotes_skips_template_literals_test.go +38 -0
  969. package/linthost/format_quotes_switches_double_to_single_to_minimize_escapes_test.go +31 -0
  970. package/linthost/format_quotes_switches_single_to_double_to_minimize_escapes_test.go +22 -0
  971. package/linthost/format_quotes_unescapes_apostrophe_when_converting_test.go +30 -0
  972. package/linthost/format_reflow_preserves_import_default_gap_comment_test.go +29 -0
  973. package/linthost/format_reflow_preserves_import_type_gap_comment_test.go +29 -0
  974. package/linthost/format_reflow_preserves_nested_call_arg_comment_test.go +24 -0
  975. package/linthost/format_reflow_preserves_new_constructee_gap_comment_test.go +21 -0
  976. package/linthost/format_reflow_preserves_return_comment_test.go +24 -0
  977. package/linthost/format_reflow_preserves_ternary_paren_comment_test.go +26 -0
  978. package/linthost/format_semi_fires_for_every_asi_statement_kind_test.go +103 -0
  979. package/linthost/format_semi_honors_prefer_never_option_test.go +28 -0
  980. package/linthost/format_semi_idempotent_on_stripped_interface_test.go +28 -0
  981. package/linthost/format_semi_idempotent_on_terminated_members_test.go +38 -0
  982. package/linthost/format_semi_inserts_after_missing_terminator_test.go +28 -0
  983. package/linthost/format_semi_inserts_member_terminator_before_trailing_comment_test.go +29 -0
  984. package/linthost/format_semi_keeps_a_flat_mapped_type_bare_test.go +31 -0
  985. package/linthost/format_semi_keeps_a_flat_object_types_last_member_bare_test.go +36 -0
  986. package/linthost/format_semi_keeps_braced_and_object_literal_accessors_bare_test.go +40 -0
  987. package/linthost/format_semi_keeps_class_field_semi_before_computed_member_test.go +32 -0
  988. package/linthost/format_semi_keeps_object_literal_accessor_separators_untouched_test.go +49 -0
  989. package/linthost/format_semi_keeps_one_line_interface_body_bare_test.go +29 -0
  990. package/linthost/format_semi_keeps_same_line_type_member_separator_test.go +31 -0
  991. package/linthost/format_semi_keeps_type_member_semi_before_call_signature_test.go +32 -0
  992. package/linthost/format_semi_normalizes_a_comma_member_separator_test.go +39 -0
  993. package/linthost/format_semi_prefer_never_block_comment_is_not_hazard_test.go +49 -0
  994. package/linthost/format_semi_prefer_never_keeps_a_flat_object_types_separator_test.go +38 -0
  995. package/linthost/format_semi_prefer_never_keeps_do_while_separator_test.go +32 -0
  996. package/linthost/format_semi_prefer_never_keeps_same_line_else_separator_test.go +31 -0
  997. package/linthost/format_semi_prefer_never_keeps_same_line_statement_separator_test.go +29 -0
  998. package/linthost/format_semi_prefer_never_keeps_semi_before_asi_hazard_test.go +58 -0
  999. package/linthost/format_semi_prefer_never_keeps_semi_before_regex_hazard_test.go +51 -0
  1000. package/linthost/format_semi_prefer_never_keeps_semi_before_same_line_comment_gap_test.go +30 -0
  1001. package/linthost/format_semi_prefer_never_line_comment_is_not_hazard_test.go +49 -0
  1002. package/linthost/format_semi_prefer_never_normalizes_a_comma_it_must_keep_test.go +37 -0
  1003. package/linthost/format_semi_prefer_never_strips_a_comma_member_separator_test.go +32 -0
  1004. package/linthost/format_semi_prefer_never_strips_a_flat_object_types_trailing_separator_test.go +33 -0
  1005. package/linthost/format_semi_prefer_never_strips_a_mapped_type_terminator_test.go +35 -0
  1006. package/linthost/format_semi_prefer_never_strips_across_crlf_test.go +33 -0
  1007. package/linthost/format_semi_prefer_never_strips_across_multiline_comment_gap_test.go +32 -0
  1008. package/linthost/format_semi_prefer_never_strips_before_same_line_close_brace_test.go +31 -0
  1009. package/linthost/format_semi_prefer_never_strips_member_with_space_test.go +52 -0
  1010. package/linthost/format_semi_reads_a_mapped_types_wrap_at_its_opening_brace_test.go +34 -0
  1011. package/linthost/format_semi_skips_already_terminated_statements_test.go +31 -0
  1012. package/linthost/format_semi_strips_class_field_semicolons_test.go +29 -0
  1013. package/linthost/format_semi_strips_interface_member_semicolons_test.go +29 -0
  1014. package/linthost/format_semi_strips_type_alias_semicolon_test.go +29 -0
  1015. package/linthost/format_semi_terminates_a_broken_mapped_type_test.go +40 -0
  1016. package/linthost/format_semi_terminates_a_mapped_type_across_crlf_test.go +32 -0
  1017. package/linthost/format_semi_terminates_a_mapped_type_around_its_trailing_comment_test.go +37 -0
  1018. package/linthost/format_semi_terminates_a_mapped_type_without_a_type_annotation_test.go +37 -0
  1019. package/linthost/format_semi_terminates_a_member_across_crlf_test.go +31 -0
  1020. package/linthost/format_semi_terminates_a_member_whose_type_ends_in_a_brace_test.go +31 -0
  1021. package/linthost/format_semi_terminates_broken_interface_members_test.go +45 -0
  1022. package/linthost/format_semi_terminates_broken_type_literal_member_test.go +31 -0
  1023. package/linthost/format_semi_terminates_class_index_signature_and_ambient_accessor_test.go +29 -0
  1024. package/linthost/format_sort_imports_alphabetizes_named_specifiers_test.go +31 -0
  1025. package/linthost/format_sort_imports_combine_requires_unsafe_runtime_opt_in_test.go +30 -0
  1026. package/linthost/format_sort_imports_combines_type_and_value_test.go +27 -0
  1027. package/linthost/format_sort_imports_dedupes_repeated_specifier_test.go +28 -0
  1028. package/linthost/format_sort_imports_group_separator_honors_crlf_end_of_line_test.go +40 -0
  1029. package/linthost/format_sort_imports_groups_builtins_first_test.go +29 -0
  1030. package/linthost/format_sort_imports_groups_external_before_relative_test.go +35 -0
  1031. package/linthost/format_sort_imports_groups_type_only_imports_test.go +27 -0
  1032. package/linthost/format_sort_imports_honors_crlf_end_of_line_test.go +40 -0
  1033. package/linthost/format_sort_imports_honors_custom_import_order_test.go +88 -0
  1034. package/linthost/format_sort_imports_keeps_attribute_bearing_imports_unmerged_test.go +24 -0
  1035. package/linthost/format_sort_imports_keeps_commented_list_unmerged_test.go +26 -0
  1036. package/linthost/format_sort_imports_keeps_conflicting_defaults_separate_test.go +34 -0
  1037. package/linthost/format_sort_imports_keeps_default_gap_comment_unmerged_test.go +24 -0
  1038. package/linthost/format_sort_imports_keeps_default_only_gap_comment_unmerged_test.go +24 -0
  1039. package/linthost/format_sort_imports_keeps_empty_named_imports_test.go +31 -0
  1040. package/linthost/format_sort_imports_keeps_identical_commented_imports_unmerged_test.go +35 -0
  1041. package/linthost/format_sort_imports_keeps_identical_namespace_imports_unmerged_test.go +35 -0
  1042. package/linthost/format_sort_imports_keeps_namespace_imports_separate_test.go +34 -0
  1043. package/linthost/format_sort_imports_keeps_trailing_specifier_comment_unmerged_test.go +24 -0
  1044. package/linthost/format_sort_imports_keeps_type_and_value_separate_test.go +31 -0
  1045. package/linthost/format_sort_imports_keeps_type_default_and_type_named_separate_test.go +34 -0
  1046. package/linthost/format_sort_imports_keeps_type_default_and_type_named_separate_when_combining_test.go +34 -0
  1047. package/linthost/format_sort_imports_keeps_type_default_separate_when_combining_test.go +31 -0
  1048. package/linthost/format_sort_imports_merges_default_and_named_test.go +27 -0
  1049. package/linthost/format_sort_imports_merges_duplicate_modules_test.go +28 -0
  1050. package/linthost/format_sort_imports_merges_duplicate_type_only_imports_test.go +24 -0
  1051. package/linthost/format_sort_imports_merges_type_default_with_empty_named_test.go +28 -0
  1052. package/linthost/format_sort_imports_merges_type_named_binding_test.go +33 -0
  1053. package/linthost/format_sort_imports_orders_case_insensitively_by_default_test.go +29 -0
  1054. package/linthost/format_sort_imports_orders_case_sensitively_when_enabled_test.go +29 -0
  1055. package/linthost/format_sort_imports_preserves_comments_between_imports_test.go +43 -0
  1056. package/linthost/format_sort_imports_preserves_comments_between_specifiers_test.go +38 -0
  1057. package/linthost/format_sort_imports_preserves_side_effect_imports_test.go +55 -0
  1058. package/linthost/format_sort_imports_recognizes_exact_builtin_specifiers_test.go +56 -0
  1059. package/linthost/format_sort_imports_scopes_type_group_by_regex_test.go +32 -0
  1060. package/linthost/format_sort_imports_separator_spans_empty_group_test.go +31 -0
  1061. package/linthost/format_sort_imports_skips_already_sorted_files_test.go +40 -0
  1062. package/linthost/format_sort_imports_skips_invalid_regex_group_test.go +30 -0
  1063. package/linthost/format_sort_imports_skips_invalid_types_regex_group_test.go +28 -0
  1064. package/linthost/format_sort_imports_skips_single_import_files_test.go +38 -0
  1065. package/linthost/format_sort_imports_sorts_erased_type_only_block_test.go +26 -0
  1066. package/linthost/format_sort_imports_sorts_named_specifiers_without_reordering_runtime_imports_test.go +28 -0
  1067. package/linthost/format_sort_imports_treats_inline_type_bindings_as_runtime_import_test.go +24 -0
  1068. package/linthost/format_sort_imports_unsafe_option_reorders_runtime_imports_test.go +34 -0
  1069. package/linthost/format_statement_split_abstains_on_empty_statements_test.go +26 -0
  1070. package/linthost/format_statement_split_abstains_when_block_comment_in_gap_test.go +28 -0
  1071. package/linthost/format_statement_split_breaks_statements_sharing_a_line_test.go +28 -0
  1072. package/linthost/format_statement_split_breaks_three_statements_on_one_line_test.go +27 -0
  1073. package/linthost/format_statement_split_honors_crlf_end_of_line_test.go +29 -0
  1074. package/linthost/format_statement_split_indents_split_statement_inside_block_test.go +30 -0
  1075. package/linthost/format_statement_split_keeps_block_on_case_label_line_test.go +28 -0
  1076. package/linthost/format_statement_split_keeps_leading_semi_guard_test.go +31 -0
  1077. package/linthost/format_statement_split_skips_already_one_per_line_test.go +26 -0
  1078. package/linthost/format_ternary_nullish_parens_leaves_logical_and_parenthesized_test.go +30 -0
  1079. package/linthost/format_ternary_nullish_parens_wraps_all_positions_test.go +29 -0
  1080. package/linthost/format_trailing_comma_honors_mode_es5_for_enum_members_test.go +26 -0
  1081. package/linthost/format_trailing_comma_honors_mode_es5_includes_type_level_lists_test.go +26 -0
  1082. package/linthost/format_trailing_comma_honors_mode_es5_option_test.go +28 -0
  1083. package/linthost/format_trailing_comma_honors_mode_es5_skips_arrow_parameter_test.go +29 -0
  1084. package/linthost/format_trailing_comma_honors_mode_es5_skips_call_argument_test.go +28 -0
  1085. package/linthost/format_trailing_comma_honors_mode_es5_skips_constructor_parameter_test.go +29 -0
  1086. package/linthost/format_trailing_comma_honors_mode_es5_skips_function_expression_parameter_test.go +29 -0
  1087. package/linthost/format_trailing_comma_honors_mode_es5_skips_method_parameter_test.go +29 -0
  1088. package/linthost/format_trailing_comma_honors_mode_es5_skips_new_argument_test.go +28 -0
  1089. package/linthost/format_trailing_comma_honors_mode_es5_skips_set_accessor_parameter_test.go +29 -0
  1090. package/linthost/format_trailing_comma_inserts_after_array_spread_in_value_literal_test.go +26 -0
  1091. package/linthost/format_trailing_comma_inserts_after_decorated_parameter_test.go +27 -0
  1092. package/linthost/format_trailing_comma_inserts_after_last_array_element_test.go +25 -0
  1093. package/linthost/format_trailing_comma_inserts_after_last_arrow_parameter_test.go +25 -0
  1094. package/linthost/format_trailing_comma_inserts_after_last_call_argument_test.go +25 -0
  1095. package/linthost/format_trailing_comma_inserts_after_last_call_signature_parameter_test.go +28 -0
  1096. package/linthost/format_trailing_comma_inserts_after_last_construct_signature_parameter_test.go +28 -0
  1097. package/linthost/format_trailing_comma_inserts_after_last_constructor_parameter_test.go +26 -0
  1098. package/linthost/format_trailing_comma_inserts_after_last_constructor_type_parameter_test.go +28 -0
  1099. package/linthost/format_trailing_comma_inserts_after_last_element_in_multiple_lists_test.go +27 -0
  1100. package/linthost/format_trailing_comma_inserts_after_last_function_expression_parameter_test.go +25 -0
  1101. package/linthost/format_trailing_comma_inserts_after_last_function_parameter_test.go +25 -0
  1102. package/linthost/format_trailing_comma_inserts_after_last_function_type_parameter_test.go +28 -0
  1103. package/linthost/format_trailing_comma_inserts_after_last_method_parameter_test.go +26 -0
  1104. package/linthost/format_trailing_comma_inserts_after_last_method_signature_parameter_test.go +28 -0
  1105. package/linthost/format_trailing_comma_inserts_after_last_named_export_test.go +25 -0
  1106. package/linthost/format_trailing_comma_inserts_after_last_named_import_test.go +25 -0
  1107. package/linthost/format_trailing_comma_inserts_after_last_new_argument_test.go +27 -0
  1108. package/linthost/format_trailing_comma_inserts_after_last_object_property_test.go +25 -0
  1109. package/linthost/format_trailing_comma_inserts_after_last_set_accessor_parameter_test.go +26 -0
  1110. package/linthost/format_trailing_comma_inserts_after_last_tuple_element_test.go +25 -0
  1111. package/linthost/format_trailing_comma_inserts_after_last_type_parameter_test.go +28 -0
  1112. package/linthost/format_trailing_comma_inserts_after_non_rest_array_assignment_target_test.go +27 -0
  1113. package/linthost/format_trailing_comma_inserts_after_non_rest_object_assignment_target_test.go +27 -0
  1114. package/linthost/format_trailing_comma_inserts_after_object_spread_in_value_literal_test.go +26 -0
  1115. package/linthost/format_trailing_comma_inserts_after_parameter_property_in_constructor_test.go +28 -0
  1116. package/linthost/format_trailing_comma_mode_none_removes_trailing_comma_test.go +28 -0
  1117. package/linthost/format_trailing_comma_places_comma_before_trailing_line_comment_test.go +31 -0
  1118. package/linthost/format_trailing_comma_removes_call_comma_under_es5_test.go +27 -0
  1119. package/linthost/format_trailing_comma_skips_already_terminated_lists_test.go +31 -0
  1120. package/linthost/format_trailing_comma_skips_array_rest_assignment_target_test.go +28 -0
  1121. package/linthost/format_trailing_comma_skips_call_when_close_paren_shares_line_with_last_argument_test.go +30 -0
  1122. package/linthost/format_trailing_comma_skips_dynamic_import_argument_test.go +28 -0
  1123. package/linthost/format_trailing_comma_skips_empty_lists_test.go +32 -0
  1124. package/linthost/format_trailing_comma_skips_inline_block_comment_before_close_bracket_test.go +31 -0
  1125. package/linthost/format_trailing_comma_skips_object_rest_assignment_target_test.go +28 -0
  1126. package/linthost/format_trailing_comma_skips_rest_parameter_test.go +39 -0
  1127. package/linthost/format_trailing_comma_skips_single_line_lists_test.go +34 -0
  1128. package/linthost/format_trailing_comma_skips_unparenthesized_arrow_with_multiline_body_test.go +28 -0
  1129. package/linthost/format_whitespace_collapses_all_blank_file_to_single_eol_test.go +30 -0
  1130. package/linthost/format_whitespace_collapses_consecutive_blank_lines_test.go +27 -0
  1131. package/linthost/format_whitespace_fixes_missing_final_newline_with_trailing_space_test.go +29 -0
  1132. package/linthost/format_whitespace_inserts_missing_final_newline_test.go +28 -0
  1133. package/linthost/format_whitespace_keeps_blank_line_inside_template_test.go +27 -0
  1134. package/linthost/format_whitespace_normalizes_crlf_to_lf_by_default_test.go +28 -0
  1135. package/linthost/format_whitespace_preserves_crlf_under_crlf_end_of_line_test.go +28 -0
  1136. package/linthost/format_whitespace_preserves_nested_template_content_test.go +28 -0
  1137. package/linthost/format_whitespace_preserves_trailing_space_across_template_substitution_test.go +29 -0
  1138. package/linthost/format_whitespace_preserves_trailing_spaces_inside_template_literal_test.go +35 -0
  1139. package/linthost/format_whitespace_skips_empty_file_test.go +26 -0
  1140. package/linthost/format_whitespace_skips_single_blank_line_test.go +26 -0
  1141. package/linthost/format_whitespace_strips_leading_blank_lines_test.go +27 -0
  1142. package/linthost/format_whitespace_strips_trailing_blank_lines_test.go +27 -0
  1143. package/linthost/format_whitespace_trims_trailing_spaces_test.go +28 -0
  1144. package/linthost/functional_helpers_test.go +88 -0
  1145. package/linthost/functional_immutable_data_ignores_code_pattern_test.go +28 -0
  1146. package/linthost/functional_immutable_data_rejects_property_assignment_test.go +25 -0
  1147. package/linthost/functional_no_class_inheritance_rejects_extends_test.go +24 -0
  1148. package/linthost/functional_no_classes_rejects_class_declaration_test.go +24 -0
  1149. package/linthost/functional_no_conditional_statements_rejects_if_test.go +23 -0
  1150. package/linthost/functional_no_expression_statements_rejects_call_test.go +23 -0
  1151. package/linthost/functional_no_let_ignores_identifier_pattern_test.go +28 -0
  1152. package/linthost/functional_no_let_rejects_let_declaration_test.go +24 -0
  1153. package/linthost/functional_no_loop_statements_rejects_for_test.go +23 -0
  1154. package/linthost/functional_no_mixed_types_check_interfaces_false_skips_interface_test.go +28 -0
  1155. package/linthost/functional_no_mixed_types_check_interfaces_false_still_checks_type_literal_test.go +28 -0
  1156. package/linthost/functional_no_mixed_types_check_type_literals_false_skips_type_literal_test.go +28 -0
  1157. package/linthost/functional_no_mixed_types_check_type_literals_false_still_checks_interface_test.go +28 -0
  1158. package/linthost/functional_no_mixed_types_rejects_method_and_property_test.go +23 -0
  1159. package/linthost/functional_no_promise_reject_rejects_static_call_test.go +23 -0
  1160. package/linthost/functional_no_return_void_allow_null_false_rejects_null_return_type_test.go +27 -0
  1161. package/linthost/functional_no_return_void_allow_undefined_false_rejects_undefined_return_type_test.go +28 -0
  1162. package/linthost/functional_no_return_void_allows_null_return_type_by_default_test.go +23 -0
  1163. package/linthost/functional_no_return_void_allows_undefined_return_type_by_default_test.go +23 -0
  1164. package/linthost/functional_no_return_void_ignore_inferred_types_keeps_annotated_bare_return_test.go +28 -0
  1165. package/linthost/functional_no_return_void_ignore_inferred_types_reads_a_get_accessor_annotation_test.go +30 -0
  1166. package/linthost/functional_no_return_void_ignore_inferred_types_skips_unannotated_bare_return_test.go +28 -0
  1167. package/linthost/functional_no_return_void_ignore_inferred_types_stops_at_the_nearest_function_test.go +29 -0
  1168. package/linthost/functional_no_return_void_rejects_void_annotation_test.go +23 -0
  1169. package/linthost/functional_no_this_expressions_rejects_this_test.go +23 -0
  1170. package/linthost/functional_no_throw_statements_rejects_throw_test.go +23 -0
  1171. package/linthost/functional_no_try_statements_rejects_try_test.go +23 -0
  1172. package/linthost/functional_parameters_ignores_identifier_pattern_test.go +27 -0
  1173. package/linthost/functional_parameters_rejects_rest_parameter_test.go +25 -0
  1174. package/linthost/functional_prefer_immutable_types_ignores_identifier_pattern_test.go +28 -0
  1175. package/linthost/functional_prefer_immutable_types_rejects_array_type_test.go +23 -0
  1176. package/linthost/functional_prefer_immutable_types_rejects_mutable_parameter_array_test.go +24 -0
  1177. package/linthost/functional_prefer_property_signatures_rejects_method_signature_test.go +23 -0
  1178. package/linthost/functional_prefer_readonly_type_allow_mutable_return_type_covers_call_signature_test.go +29 -0
  1179. package/linthost/functional_prefer_readonly_type_allow_mutable_return_type_keeps_parameter_annotation_test.go +28 -0
  1180. package/linthost/functional_prefer_readonly_type_allow_mutable_return_type_skips_return_annotation_test.go +28 -0
  1181. package/linthost/functional_prefer_readonly_type_ignore_class_fields_only_keeps_method_parameter_test.go +34 -0
  1182. package/linthost/functional_prefer_readonly_type_ignore_class_keeps_module_scope_checked_test.go +29 -0
  1183. package/linthost/functional_prefer_readonly_type_ignore_class_skips_class_body_test.go +29 -0
  1184. package/linthost/functional_prefer_readonly_type_ignore_collections_keeps_property_signature_test.go +28 -0
  1185. package/linthost/functional_prefer_readonly_type_ignore_collections_skips_array_type_test.go +28 -0
  1186. package/linthost/functional_prefer_readonly_type_ignore_interface_keeps_type_alias_member_test.go +28 -0
  1187. package/linthost/functional_prefer_readonly_type_ignore_interface_skips_interface_member_test.go +28 -0
  1188. package/linthost/functional_prefer_readonly_type_ignores_code_pattern_test.go +27 -0
  1189. package/linthost/functional_prefer_readonly_type_rejects_array_type_test.go +23 -0
  1190. package/linthost/functional_prefer_tacit_check_member_expressions_false_keeps_identifier_callee_test.go +27 -0
  1191. package/linthost/functional_prefer_tacit_check_member_expressions_false_skips_member_callee_test.go +28 -0
  1192. package/linthost/functional_prefer_tacit_rejects_single_argument_wrapper_test.go +24 -0
  1193. package/linthost/functional_readonly_type_rejects_readonly_array_generic_test.go +23 -0
  1194. package/linthost/functional_type_declaration_immutability_ignores_identifier_pattern_test.go +27 -0
  1195. package/linthost/functional_type_declaration_immutability_rejects_mutable_interface_test.go +23 -0
  1196. package/linthost/getter_return_follows_every_path_through_switch_try_and_loops_test.go +64 -0
  1197. package/linthost/global_ignores_remove_an_imported_source_from_the_read_scope_test.go +60 -0
  1198. package/linthost/graph_nodes.go +12 -2
  1199. package/linthost/graph_nodes_drops_what_a_consumer_cannot_index_test.go +98 -0
  1200. package/linthost/graph_nodes_publishes_nothing_without_a_publisher_test.go +51 -0
  1201. package/linthost/grapheme_break_unicode_16_conformance_test.go +99 -0
  1202. package/linthost/grouped_accessor_pairs_object_literal_message_test.go +75 -0
  1203. package/linthost/guard_for_in_structural_matrix_test.go +74 -0
  1204. package/linthost/has_nil_entry_distinguishes_malformed_and_valid_lists_test.go +35 -0
  1205. package/linthost/has_nil_entry_returns_false_for_nil_list_test.go +26 -0
  1206. package/linthost/helpers_test.go +910 -0
  1207. package/linthost/hints.go +11 -1
  1208. package/linthost/host.go +126 -43
  1209. package/linthost/imported_tsx_source_joins_the_read_scope_test.go +67 -0
  1210. package/linthost/indent_unit_uses_tab_width_when_positive_test.go +49 -0
  1211. package/linthost/inline_resolver_carries_options_in_resolved_config_test.go +36 -0
  1212. package/linthost/input_observation.go +571 -0
  1213. package/linthost/invalid_contributor_range_cannot_panic_inline_directive_filtering_test.go +46 -0
  1214. package/linthost/is_format_rule_detects_marker_interface_test.go +62 -0
  1215. package/linthost/jsdoc_helpers_test.go +30 -0
  1216. package/linthost/jsx_a11y_alt_text_allows_img_spread_props_test.go +21 -0
  1217. package/linthost/jsx_a11y_alt_text_requires_img_alt_test.go +22 -0
  1218. package/linthost/jsx_a11y_anchor_ambiguous_text_test.go +24 -0
  1219. package/linthost/jsx_a11y_anchor_has_content_rejects_empty_anchor_test.go +25 -0
  1220. package/linthost/jsx_a11y_anchor_is_valid_allows_spread_props_test.go +21 -0
  1221. package/linthost/jsx_a11y_anchor_is_valid_rejects_hash_href_despite_spread_test.go +22 -0
  1222. package/linthost/jsx_a11y_anchor_is_valid_rejects_hash_href_test.go +22 -0
  1223. package/linthost/jsx_a11y_aria_activedescendant_has_tabindex_requires_focus_target_test.go +23 -0
  1224. package/linthost/jsx_a11y_aria_props_rejects_unknown_prop_test.go +22 -0
  1225. package/linthost/jsx_a11y_aria_proptypes_rejects_bad_boolean_test.go +23 -0
  1226. package/linthost/jsx_a11y_aria_role_rejects_unknown_role_test.go +22 -0
  1227. package/linthost/jsx_a11y_aria_unsupported_elements_rejects_meta_aria_test.go +23 -0
  1228. package/linthost/jsx_a11y_aria_unsupported_elements_rejects_role_despite_spread_test.go +24 -0
  1229. package/linthost/jsx_a11y_autocomplete_valid_allows_appropriate_input_type_test.go +29 -0
  1230. package/linthost/jsx_a11y_autocomplete_valid_rejects_inappropriate_input_type_test.go +21 -0
  1231. package/linthost/jsx_a11y_autocomplete_valid_rejects_invalid_token_sequence_test.go +26 -0
  1232. package/linthost/jsx_a11y_autocomplete_valid_rejects_unknown_token_test.go +22 -0
  1233. package/linthost/jsx_a11y_click_events_have_key_events_requires_keyboard_handler_test.go +21 -0
  1234. package/linthost/jsx_a11y_control_has_associated_label_requires_button_label_test.go +21 -0
  1235. package/linthost/jsx_a11y_heading_has_content_rejects_empty_heading_test.go +22 -0
  1236. package/linthost/jsx_a11y_helpers_test.go +33 -0
  1237. package/linthost/jsx_a11y_html_has_lang_allows_non_empty_lang_test.go +21 -0
  1238. package/linthost/jsx_a11y_html_has_lang_allows_spread_props_test.go +24 -0
  1239. package/linthost/jsx_a11y_html_has_lang_rejects_empty_lang_test.go +27 -0
  1240. package/linthost/jsx_a11y_html_has_lang_requires_lang_test.go +21 -0
  1241. package/linthost/jsx_a11y_iframe_has_title_allows_spread_props_test.go +23 -0
  1242. package/linthost/jsx_a11y_iframe_has_title_requires_title_test.go +21 -0
  1243. package/linthost/jsx_a11y_img_redundant_alt_rejects_image_word_despite_spread_test.go +25 -0
  1244. package/linthost/jsx_a11y_img_redundant_alt_rejects_image_word_test.go +21 -0
  1245. package/linthost/jsx_a11y_interactive_supports_focus_requires_tabindex_test.go +21 -0
  1246. package/linthost/jsx_a11y_label_has_associated_control_requires_for_or_child_test.go +21 -0
  1247. package/linthost/jsx_a11y_label_has_for_alias_matches_associated_control_test.go +21 -0
  1248. package/linthost/jsx_a11y_lang_allows_valid_bcp47_tag_test.go +22 -0
  1249. package/linthost/jsx_a11y_lang_rejects_empty_lang_test.go +20 -0
  1250. package/linthost/jsx_a11y_lang_rejects_invalid_bcp47_tag_test.go +25 -0
  1251. package/linthost/jsx_a11y_media_has_caption_requires_track_test.go +22 -0
  1252. package/linthost/jsx_a11y_mouse_events_have_key_events_requires_focus_test.go +21 -0
  1253. package/linthost/jsx_a11y_no_access_key_rejects_access_key_test.go +21 -0
  1254. package/linthost/jsx_a11y_no_aria_hidden_on_focusable_rejects_hidden_button_test.go +21 -0
  1255. package/linthost/jsx_a11y_no_autofocus_rejects_autofocus_test.go +21 -0
  1256. package/linthost/jsx_a11y_no_distracting_elements_rejects_marquee_test.go +21 -0
  1257. package/linthost/jsx_a11y_no_interactive_element_to_noninteractive_role_rejects_button_presentation_test.go +21 -0
  1258. package/linthost/jsx_a11y_no_noninteractive_element_interactions_rejects_li_click_test.go +21 -0
  1259. package/linthost/jsx_a11y_no_noninteractive_element_to_interactive_role_rejects_ul_button_test.go +21 -0
  1260. package/linthost/jsx_a11y_no_noninteractive_tabindex_rejects_section_tabindex_test.go +21 -0
  1261. package/linthost/jsx_a11y_no_redundant_roles_rejects_button_role_button_test.go +21 -0
  1262. package/linthost/jsx_a11y_no_static_element_interactions_requires_role_test.go +21 -0
  1263. package/linthost/jsx_a11y_prefer_tag_over_role_rejects_div_button_test.go +21 -0
  1264. package/linthost/jsx_a11y_role_has_required_aria_props_allows_native_checkbox_test.go +21 -0
  1265. package/linthost/jsx_a11y_role_has_required_aria_props_allows_spread_props_test.go +23 -0
  1266. package/linthost/jsx_a11y_role_has_required_aria_props_requires_checkbox_checked_test.go +21 -0
  1267. package/linthost/jsx_a11y_role_supports_aria_props_allows_explicit_button_pressed_test.go +21 -0
  1268. package/linthost/jsx_a11y_role_supports_aria_props_allows_native_button_pressed_test.go +21 -0
  1269. package/linthost/jsx_a11y_role_supports_aria_props_rejects_button_checked_test.go +21 -0
  1270. package/linthost/jsx_a11y_rules_survive_spread_attributes_test.go +60 -0
  1271. package/linthost/jsx_a11y_scope_rejects_scope_on_td_test.go +21 -0
  1272. package/linthost/jsx_a11y_tabindex_no_positive_rejects_positive_tabindex_test.go +21 -0
  1273. package/linthost/known_symbol_property_name_finds_iteration_and_disposal_protocol_members_test.go +112 -0
  1274. package/linthost/legacy_custom_resolver_keeps_rule_options_fallback_test.go +45 -0
  1275. package/linthost/lint_corpus_companions_belong_to_their_own_case_test.go +53 -0
  1276. package/linthost/lint_corpus_diagnostics_are_attributed_to_the_main_source_test.go +51 -0
  1277. package/linthost/lint_corpus_directives_reject_malformed_or_duplicate_markers_test.go +89 -0
  1278. package/linthost/lint_corpus_discovery_classifies_every_typescript_suffix_test.go +56 -0
  1279. package/linthost/lint_corpus_discovery_rejects_invalid_companion_contracts_test.go +50 -0
  1280. package/linthost/lint_corpus_discovery_rejects_unclassified_sources_test.go +39 -0
  1281. package/linthost/lint_corpus_expectation_parser_rejects_malformed_or_targetless_markers_test.go +46 -0
  1282. package/linthost/lint_corpus_expectation_parser_resolves_line_and_jsx_block_markers_test.go +53 -0
  1283. package/linthost/lint_corpus_filename_separators_share_materialized_source_identity_test.go +85 -0
  1284. package/linthost/lint_corpus_loader_helpers_test.go +704 -0
  1285. package/linthost/lint_corpus_project_selects_jsx_mode_for_included_tsx_sources_test.go +118 -0
  1286. package/linthost/lint_corpus_skips_name_one_rule_and_one_harness_test.go +63 -0
  1287. package/linthost/lint_fixture_corpus_test.go +166 -0
  1288. package/linthost/lint_trace.go +202 -0
  1289. package/linthost/lint_trace_preserves_raw_invocation_and_integrity_test.go +139 -0
  1290. package/linthost/load_config_file_rejects_unsupported_extension_test.go +38 -0
  1291. package/linthost/load_config_resolver_compact_globs_preserve_entry_policy_test.go +97 -0
  1292. package/linthost/load_config_resolver_scopes_extends_options_in_engine_test.go +65 -0
  1293. package/linthost/load_json_config_file_rejects_invalid_json_test.go +38 -0
  1294. package/linthost/load_program_keeps_checker_pool_for_type_aware_rules_test.go +184 -0
  1295. package/linthost/load_program_skips_checker_for_ast_only_rules_test.go +59 -0
  1296. package/linthost/load_rule_config_configfile_overrides_discovery_test.go +51 -0
  1297. package/linthost/load_rule_config_discovers_cwd_config_for_out_of_tree_tsconfig_test.go +46 -0
  1298. package/linthost/load_rule_config_discovers_plain_lint_config_test.go +39 -0
  1299. package/linthost/load_rule_config_extends_with_ignores_and_rules_ignores_globally_test.go +141 -0
  1300. package/linthost/load_rule_config_honors_plugin_config_dir_env_test.go +53 -0
  1301. package/linthost/load_rule_config_loads_json_config_file_test.go +55 -0
  1302. package/linthost/load_rule_config_missing_config_error_names_search_origins_test.go +44 -0
  1303. package/linthost/load_rule_config_preserves_json_pattern_precedence_test.go +80 -0
  1304. package/linthost/load_rule_config_rejects_array_rules_test.go +34 -0
  1305. package/linthost/load_rule_config_rejects_empty_extends_test.go +34 -0
  1306. package/linthost/load_rule_config_rejects_extends_cycle_between_two_configs_test.go +71 -0
  1307. package/linthost/load_rule_config_rejects_missing_discovered_config_test.go +37 -0
  1308. package/linthost/load_rule_config_rejects_overly_deep_extends_chain_test.go +53 -0
  1309. package/linthost/load_rule_config_rejects_self_referential_extends_test.go +49 -0
  1310. package/linthost/load_rule_config_resolves_configfile_relative_to_plugin_config_dir_env_test.go +46 -0
  1311. package/linthost/load_rule_config_resolves_linear_extends_chain_test.go +81 -0
  1312. package/linthost/load_rules_ignores_non_lint_plugin_payload_test.go +33 -0
  1313. package/linthost/loader_module_option_follows_the_config_package_type_test.go +103 -0
  1314. package/linthost/loader_rootdir_contains_loader_and_config_test.go +59 -0
  1315. package/linthost/loader_temp_base_stays_on_config_volume_test.go +35 -0
  1316. package/linthost/logic_rules_cover_boolean_call_arguments_undefined_typeof_negative_zero_and_number_nan_test.go +43 -0
  1317. package/linthost/lookup_rule_returns_registered_implementation_or_nil_test.go +49 -0
  1318. package/linthost/lsp.go +185 -34
  1319. package/linthost/lsp_apply_suggestion_rejects_stale_source_test.go +49 -0
  1320. package/linthost/lsp_apply_suggestion_resolves_junction_project_link_test.go +33 -0
  1321. package/linthost/lsp_apply_suggestion_resolves_logical_project_link_test.go +35 -0
  1322. package/linthost/lsp_await_thenable_suggestion_executes_exact_token_test.go +52 -0
  1323. package/linthost/lsp_ban_ts_comment_suggestion_preserves_crlf_block_test.go +52 -0
  1324. package/linthost/lsp_code_action_helpers_test.go +55 -0
  1325. package/linthost/lsp_code_actions_fail_closed_for_invalid_quickfix_range_test.go +88 -0
  1326. package/linthost/lsp_code_actions_reject_more_specific_context_only_test.go +37 -0
  1327. package/linthost/lsp_code_actions_returns_empty_for_node_modules_target_test.go +44 -0
  1328. package/linthost/lsp_code_actions_returns_empty_for_outside_cwd_target_test.go +45 -0
  1329. package/linthost/lsp_code_actions_short_circuits_unowned_context_only_test.go +46 -0
  1330. package/linthost/lsp_code_actions_split_lint_and_format_commands_test.go +41 -0
  1331. package/linthost/lsp_command_discovery_reports_owned_commands_and_kinds_test.go +67 -0
  1332. package/linthost/lsp_command_helpers_test.go +113 -0
  1333. package/linthost/lsp_command_workspace_preserves_nested_dependency_scopes_test.go +77 -0
  1334. package/linthost/lsp_commands_accept_windows_short_cwd_test.go +62 -0
  1335. package/linthost/lsp_diagnostic_omits_code_description_for_contributor_rule_test.go +81 -0
  1336. package/linthost/lsp_diagnostic_tags_drop_unknown_values_test.go +41 -0
  1337. package/linthost/lsp_diagnostic_wire_drops_code_description_key_when_unmapped_test.go +65 -0
  1338. package/linthost/lsp_diagnostics_link_rule_codes_to_documentation_test.go +84 -0
  1339. package/linthost/lsp_document_write_scope_preserves_project_and_sibling_boundaries_test.go +68 -0
  1340. package/linthost/lsp_execute_command_applies_utf16_edit_after_non_bmp_prefix_test.go +48 -0
  1341. package/linthost/lsp_execute_command_cascades_format_fixes_without_mutating_disk_test.go +50 -0
  1342. package/linthost/lsp_execute_command_cascades_lint_fixes_without_mutating_disk_test.go +48 -0
  1343. package/linthost/lsp_execute_command_copies_read_only_file_as_writable_test.go +46 -0
  1344. package/linthost/lsp_execute_command_maps_absolute_config_file_into_temp_workspace_test.go +40 -0
  1345. package/linthost/lsp_execute_command_materializes_duplicate_symlinked_directories_test.go +57 -0
  1346. package/linthost/lsp_execute_command_materializes_junctioned_directory_without_mutating_original_test.go +61 -0
  1347. package/linthost/lsp_execute_command_materializes_symlink_target_without_mutating_original_test.go +55 -0
  1348. package/linthost/lsp_execute_command_materializes_symlinked_directory_without_mutating_original_test.go +56 -0
  1349. package/linthost/lsp_execute_command_rejects_target_outside_cwd_before_read_test.go +61 -0
  1350. package/linthost/lsp_execute_command_returns_null_for_node_modules_target_test.go +59 -0
  1351. package/linthost/lsp_execute_command_returns_null_when_no_edits_test.go +51 -0
  1352. package/linthost/lsp_execute_command_splits_lint_and_format_edits_test.go +43 -0
  1353. package/linthost/lsp_fix_all_leaves_suggestion_only_rewrites_unchanged_test.go +37 -0
  1354. package/linthost/lsp_format_buffer_formats_missing_disk_file_test.go +42 -0
  1355. package/linthost/lsp_format_buffer_helpers_test.go +68 -0
  1356. package/linthost/lsp_format_buffer_ignores_disk_content_test.go +52 -0
  1357. package/linthost/lsp_format_buffer_in_memory_test.go +47 -0
  1358. package/linthost/lsp_format_buffer_type_aware_contributor_test.go +142 -0
  1359. package/linthost/lsp_format_paths_honor_entry_ignores_test.go +45 -0
  1360. package/linthost/lsp_format_paths_use_canonical_defaults_test.go +72 -0
  1361. package/linthost/lsp_format_paths_use_defaults_without_format_block_test.go +28 -0
  1362. package/linthost/lsp_format_paths_use_editor_language_overrides_test.go +34 -0
  1363. package/linthost/lsp_hints_publishes_jsdoc_check_tag_names_corpus_test.go +56 -0
  1364. package/linthost/lsp_hints_skips_the_program_when_nothing_publishes_test.go +46 -0
  1365. package/linthost/lsp_hints_still_loads_the_program_for_a_declared_publisher_test.go +42 -0
  1366. package/linthost/lsp_logical_project_link_helpers_test.go +127 -0
  1367. package/linthost/lsp_position_columns_count_utf16_across_planes_test.go +107 -0
  1368. package/linthost/lsp_position_counts_non_bmp_as_two_utf16_units_test.go +26 -0
  1369. package/linthost/lsp_prefer_as_const_suggestion_executes_selected_range_test.go +51 -0
  1370. package/linthost/lsp_project_diagnostics_recomputes_external_state_without_document_test.go +187 -0
  1371. package/linthost/lsp_serve_answers_hints_from_the_resident_daemon_test.go +73 -0
  1372. package/linthost/lsp_switch_exhaustiveness_suggestions_preserve_default_anchors_test.go +206 -0
  1373. package/linthost/match_any_pattern_accepts_native_and_slash_separators_test.go +47 -0
  1374. package/linthost/match_any_pattern_handles_brace_expansion_test.go +43 -0
  1375. package/linthost/match_any_pattern_matches_dot_directory_globs_test.go +44 -0
  1376. package/linthost/max_nested_callbacks_counts_only_functions_passed_to_calls_test.go +46 -0
  1377. package/linthost/migrated_no_misused_promises_helpers_test.go +30 -0
  1378. package/linthost/migrated_no_unused_expressions_helpers_test.go +50 -0
  1379. package/linthost/migrated_typed_rule_helpers_test.go +46 -0
  1380. package/linthost/misc_testing_library_rules_test.go +63 -0
  1381. package/linthost/mixed_diagnostics_render_empty_is_silent_test.go +29 -0
  1382. package/linthost/mixed_diagnostics_render_interleaves_parser_and_lint_test.go +51 -0
  1383. package/linthost/mixed_diagnostics_render_orders_files_and_ties_test.go +58 -0
  1384. package/linthost/new_print_context_zero_print_width_applies_defaults_test.go +36 -0
  1385. package/linthost/no_array_delete_asks_the_type_not_the_subscript_test.go +70 -0
  1386. package/linthost/no_await_in_loop_complete_semantics_test.go +205 -0
  1387. package/linthost/no_base_to_string_test.go +48 -0
  1388. package/linthost/no_class_assign_test.go +217 -0
  1389. package/linthost/no_container_ignores_unrelated_container_binding_test.go +33 -0
  1390. package/linthost/no_deprecated_test.go +45 -0
  1391. package/linthost/no_dupe_class_members_allows_typescript_overload_signatures_test.go +41 -0
  1392. package/linthost/no_dupe_class_members_rejects_accessor_data_collisions_test.go +28 -0
  1393. package/linthost/no_dupe_else_if_logical_coverage_test.go +152 -0
  1394. package/linthost/no_dupe_keys_computed_key_static_resolution_test.go +72 -0
  1395. package/linthost/no_duplicate_imports_allow_separate_type_imports_allows_value_plus_type_import_test.go +30 -0
  1396. package/linthost/no_duplicate_imports_allow_separate_type_imports_still_reports_type_pairs_test.go +30 -0
  1397. package/linthost/no_duplicate_imports_allow_separate_type_imports_still_reports_value_pairs_test.go +29 -0
  1398. package/linthost/no_duplicate_imports_allows_inline_type_specifier_beside_type_import_test.go +29 -0
  1399. package/linthost/no_duplicate_imports_allows_named_and_namespace_value_imports_test.go +31 -0
  1400. package/linthost/no_duplicate_imports_allows_type_default_and_type_named_imports_test.go +31 -0
  1401. package/linthost/no_duplicate_imports_allows_type_namespace_and_type_named_imports_test.go +28 -0
  1402. package/linthost/no_duplicate_imports_classifies_inline_type_specifier_as_value_test.go +31 -0
  1403. package/linthost/no_duplicate_imports_helpers_test.go +78 -0
  1404. package/linthost/no_duplicate_imports_ignores_misspelled_option_keys_test.go +30 -0
  1405. package/linthost/no_duplicate_imports_ignores_reexports_by_default_test.go +32 -0
  1406. package/linthost/no_duplicate_imports_include_exports_allows_export_star_beside_named_import_test.go +31 -0
  1407. package/linthost/no_duplicate_imports_include_exports_allows_export_star_beside_namespace_reexport_test.go +29 -0
  1408. package/linthost/no_duplicate_imports_include_exports_allows_namespace_reexport_beside_named_import_test.go +29 -0
  1409. package/linthost/no_duplicate_imports_include_exports_reports_both_pairings_on_one_declaration_test.go +34 -0
  1410. package/linthost/no_duplicate_imports_include_exports_reports_export_star_beside_side_effect_import_test.go +35 -0
  1411. package/linthost/no_duplicate_imports_include_exports_reports_import_after_reexport_test.go +30 -0
  1412. package/linthost/no_duplicate_imports_include_exports_reports_reexport_after_import_test.go +30 -0
  1413. package/linthost/no_duplicate_imports_include_exports_reports_repeated_export_star_test.go +30 -0
  1414. package/linthost/no_duplicate_imports_include_exports_reports_second_reexport_test.go +29 -0
  1415. package/linthost/no_duplicate_imports_include_exports_reports_type_reexport_after_value_import_test.go +30 -0
  1416. package/linthost/no_duplicate_imports_include_exports_skips_local_export_without_module_test.go +31 -0
  1417. package/linthost/no_duplicate_imports_include_exports_treats_empty_reexport_clause_as_side_effect_test.go +31 -0
  1418. package/linthost/no_duplicate_imports_include_exports_with_allow_separate_allows_type_reexport_test.go +30 -0
  1419. package/linthost/no_duplicate_imports_preserves_migrated_json_tuple_options_test.go +47 -0
  1420. package/linthost/no_duplicate_imports_reports_default_then_named_value_imports_test.go +31 -0
  1421. package/linthost/no_duplicate_imports_reports_default_then_namespace_value_imports_test.go +30 -0
  1422. package/linthost/no_duplicate_imports_reports_each_later_duplicate_import_test.go +31 -0
  1423. package/linthost/no_duplicate_imports_reports_nonadjacent_duplicate_value_imports_test.go +30 -0
  1424. package/linthost/no_duplicate_imports_reports_repeated_side_effect_imports_test.go +29 -0
  1425. package/linthost/no_duplicate_imports_reports_side_effect_import_after_named_import_test.go +30 -0
  1426. package/linthost/no_duplicate_imports_reports_two_namespace_value_imports_test.go +29 -0
  1427. package/linthost/no_duplicate_imports_reports_two_type_default_imports_test.go +29 -0
  1428. package/linthost/no_duplicate_imports_reports_value_default_then_type_named_import_test.go +33 -0
  1429. package/linthost/no_duplicate_imports_reports_value_then_type_named_import_by_default_test.go +30 -0
  1430. package/linthost/no_duplicate_imports_skips_empty_module_specifiers_test.go +30 -0
  1431. package/linthost/no_duplicate_imports_treats_default_with_empty_named_clause_as_default_test.go +30 -0
  1432. package/linthost/no_duplicate_imports_treats_empty_named_import_clause_as_side_effect_test.go +32 -0
  1433. package/linthost/no_duplicate_imports_trims_module_specifier_whitespace_test.go +29 -0
  1434. package/linthost/no_else_return_allow_else_if_false_reports_else_if_test.go +60 -0
  1435. package/linthost/no_else_return_allows_break_before_else_test.go +34 -0
  1436. package/linthost/no_else_return_allows_continue_before_else_test.go +34 -0
  1437. package/linthost/no_else_return_allows_else_if_return_chain_test.go +34 -0
  1438. package/linthost/no_else_return_allows_throw_before_else_test.go +32 -0
  1439. package/linthost/no_else_return_reports_once_on_terminal_else_test.go +31 -0
  1440. package/linthost/no_else_return_reports_plain_else_after_return_test.go +27 -0
  1441. package/linthost/no_empty_character_class_semantics_test.go +62 -0
  1442. package/linthost/no_empty_complete_semantics_test.go +89 -0
  1443. package/linthost/no_empty_function_comments_preserve_every_kind_test.go +35 -0
  1444. package/linthost/no_empty_function_options_test.go +60 -0
  1445. package/linthost/no_empty_function_typescript_exceptions_and_category_boundaries_test.go +248 -0
  1446. package/linthost/no_empty_static_block_comment_boundaries_test.go +37 -0
  1447. package/linthost/no_extend_native_covers_assignment_and_static_callee_forms_test.go +52 -0
  1448. package/linthost/no_extend_native_covers_every_native_constructor_with_a_prototype_test.go +45 -0
  1449. package/linthost/no_extend_native_define_property_and_computed_test.go +71 -0
  1450. package/linthost/no_extend_native_respects_constructor_bindings_test.go +48 -0
  1451. package/linthost/no_extra_bind_function_body_test.go +72 -0
  1452. package/linthost/no_extra_bind_offers_withheld_removal_as_suggestion_test.go +43 -0
  1453. package/linthost/no_extra_bind_preserves_throwing_receiver_reads_test.go +32 -0
  1454. package/linthost/no_extra_boolean_cast_declines_fix_for_comment_between_bangs_test.go +28 -0
  1455. package/linthost/no_extra_boolean_cast_declines_fix_for_leading_comment_in_call_test.go +29 -0
  1456. package/linthost/no_extra_boolean_cast_declines_fix_for_trailing_comment_in_call_test.go +28 -0
  1457. package/linthost/no_extra_boolean_cast_fix_boolean_call_in_boolean_context_test.go +43 -0
  1458. package/linthost/no_extra_boolean_cast_fix_collapses_nested_boolean_call_test.go +30 -0
  1459. package/linthost/no_extra_boolean_cast_fix_double_bang_in_boolean_context_test.go +28 -0
  1460. package/linthost/no_extra_boolean_cast_fix_keeps_bare_identifier_under_bang_test.go +28 -0
  1461. package/linthost/no_extra_boolean_cast_fix_keeps_parenthesized_argument_without_double_wrap_test.go +28 -0
  1462. package/linthost/no_extra_boolean_cast_fix_parenthesizes_arrow_argument_in_ternary_condition_test.go +30 -0
  1463. package/linthost/no_extra_boolean_cast_fix_parenthesizes_assignment_in_ternary_condition_test.go +28 -0
  1464. package/linthost/no_extra_boolean_cast_fix_parenthesizes_await_argument_under_bang_test.go +28 -0
  1465. package/linthost/no_extra_boolean_cast_fix_parenthesizes_logical_operand_under_bang_test.go +28 -0
  1466. package/linthost/no_extra_boolean_cast_fix_parenthesizes_nested_ternary_condition_test.go +30 -0
  1467. package/linthost/no_extra_boolean_cast_fix_parenthesizes_yield_argument_under_bang_test.go +28 -0
  1468. package/linthost/no_extra_boolean_cast_fix_preserves_comment_inside_argument_test.go +29 -0
  1469. package/linthost/no_extra_boolean_cast_fix_skips_wrap_for_logical_ternary_condition_test.go +29 -0
  1470. package/linthost/no_extra_boolean_cast_fix_skips_wrap_inside_explicit_parens_under_bang_test.go +29 -0
  1471. package/linthost/no_extra_boolean_cast_keeps_meaningful_double_bang_outside_boolean_context_test.go +28 -0
  1472. package/linthost/no_extra_boolean_cast_offers_withheld_splice_as_suggestion_test.go +37 -0
  1473. package/linthost/no_extra_boolean_cast_preserves_shadowed_converters_test.go +76 -0
  1474. package/linthost/no_fallthrough_accepts_adjacent_empty_case_labels_test.go +28 -0
  1475. package/linthost/no_fallthrough_accepts_block_marker_with_trailing_unrelated_comment_test.go +32 -0
  1476. package/linthost/no_fallthrough_accepts_break_in_try_with_normal_finally_test.go +33 -0
  1477. package/linthost/no_fallthrough_accepts_breaking_catch_after_throwing_try_test.go +34 -0
  1478. package/linthost/no_fallthrough_accepts_continue_terminating_case_test.go +33 -0
  1479. package/linthost/no_fallthrough_accepts_do_while_with_always_throwing_body_test.go +33 -0
  1480. package/linthost/no_fallthrough_accepts_empty_case_with_same_line_comment_test.go +29 -0
  1481. package/linthost/no_fallthrough_accepts_if_else_terminating_every_path_test.go +38 -0
  1482. package/linthost/no_fallthrough_accepts_infinite_for_without_break_test.go +31 -0
  1483. package/linthost/no_fallthrough_accepts_infinite_loop_with_labeled_break_to_outer_test.go +35 -0
  1484. package/linthost/no_fallthrough_accepts_infinite_while_without_break_test.go +31 -0
  1485. package/linthost/no_fallthrough_accepts_labeled_break_to_outer_loop_test.go +34 -0
  1486. package/linthost/no_fallthrough_accepts_marked_empty_case_with_blank_gap_test.go +30 -0
  1487. package/linthost/no_fallthrough_accepts_marked_fallthrough_variants_test.go +43 -0
  1488. package/linthost/no_fallthrough_accepts_marker_in_sole_empty_block_test.go +30 -0
  1489. package/linthost/no_fallthrough_accepts_marker_inside_sole_block_statement_test.go +32 -0
  1490. package/linthost/no_fallthrough_accepts_nested_switch_terminating_on_every_path_test.go +38 -0
  1491. package/linthost/no_fallthrough_accepts_terminating_finally_test.go +34 -0
  1492. package/linthost/no_fallthrough_accepts_terminating_try_and_catch_with_normal_finally_test.go +41 -0
  1493. package/linthost/no_fallthrough_accepts_unreachable_labeled_break_in_while_false_test.go +39 -0
  1494. package/linthost/no_fallthrough_accepts_unreachable_labeled_break_in_while_zero_test.go +37 -0
  1495. package/linthost/no_fallthrough_accepts_while_bigint_one_literal_test.go +31 -0
  1496. package/linthost/no_fallthrough_accepts_while_nonempty_string_literal_test.go +31 -0
  1497. package/linthost/no_fallthrough_accepts_while_numeric_one_literal_test.go +31 -0
  1498. package/linthost/no_fallthrough_accepts_while_regex_literal_test.go +31 -0
  1499. package/linthost/no_fallthrough_accepts_with_statement_body_break_test.go +33 -0
  1500. package/linthost/no_fallthrough_allow_empty_case_permits_blank_line_gap_test.go +29 -0
  1501. package/linthost/no_fallthrough_command_composes_nested_try_finally_test.go +124 -0
  1502. package/linthost/no_fallthrough_command_composes_statement_and_loop_throw_edges_test.go +108 -0
  1503. package/linthost/no_fallthrough_command_helpers_test.go +68 -0
  1504. package/linthost/no_fallthrough_command_preserves_bigint_literal_truthiness_test.go +82 -0
  1505. package/linthost/no_fallthrough_command_preserves_catch_break_continue_test.go +66 -0
  1506. package/linthost/no_fallthrough_command_preserves_code_path_boundaries_test.go +136 -0
  1507. package/linthost/no_fallthrough_command_preserves_jsx_code_path_boundaries_test.go +68 -0
  1508. package/linthost/no_fallthrough_command_preserves_markers_across_catch_reachability_test.go +40 -0
  1509. package/linthost/no_fallthrough_command_tracks_binding_reference_edges_test.go +70 -0
  1510. package/linthost/no_fallthrough_command_tracks_return_exception_edges_test.go +79 -0
  1511. package/linthost/no_fallthrough_custom_pattern_replaces_default_marker_test.go +32 -0
  1512. package/linthost/no_fallthrough_directive_suppression_still_wins_test.go +32 -0
  1513. package/linthost/no_fallthrough_helpers_test.go +55 -0
  1514. package/linthost/no_fallthrough_honors_custom_comment_pattern_test.go +30 -0
  1515. package/linthost/no_fallthrough_ignores_switch_without_clauses_test.go +24 -0
  1516. package/linthost/no_fallthrough_ignores_trailing_unreachable_statements_test.go +33 -0
  1517. package/linthost/no_fallthrough_ignores_unreachable_break_in_infinite_loop_test.go +35 -0
  1518. package/linthost/no_fallthrough_invalid_comment_pattern_falls_back_to_default_test.go +31 -0
  1519. package/linthost/no_fallthrough_never_reports_last_open_case_test.go +27 -0
  1520. package/linthost/no_fallthrough_rejects_breakable_conditional_while_test.go +33 -0
  1521. package/linthost/no_fallthrough_rejects_directive_comment_as_marker_test.go +31 -0
  1522. package/linthost/no_fallthrough_rejects_do_while_exited_by_labeled_continue_test.go +34 -0
  1523. package/linthost/no_fallthrough_rejects_do_while_exited_by_unlabeled_continue_test.go +33 -0
  1524. package/linthost/no_fallthrough_rejects_do_while_with_break_test.go +32 -0
  1525. package/linthost/no_fallthrough_rejects_empty_case_followed_by_blank_line_test.go +30 -0
  1526. package/linthost/no_fallthrough_rejects_empty_case_with_comment_line_gap_test.go +31 -0
  1527. package/linthost/no_fallthrough_rejects_empty_statement_case_despite_allow_empty_case_test.go +29 -0
  1528. package/linthost/no_fallthrough_rejects_for_of_with_always_throwing_body_test.go +33 -0
  1529. package/linthost/no_fallthrough_rejects_if_else_with_one_open_branch_test.go +36 -0
  1530. package/linthost/no_fallthrough_rejects_if_without_else_test.go +33 -0
  1531. package/linthost/no_fallthrough_rejects_infinite_loop_broken_by_own_label_test.go +32 -0
  1532. package/linthost/no_fallthrough_rejects_infinite_while_containing_break_test.go +32 -0
  1533. package/linthost/no_fallthrough_rejects_labeled_block_broken_by_own_label_test.go +33 -0
  1534. package/linthost/no_fallthrough_rejects_lint_directive_comment_as_marker_test.go +31 -0
  1535. package/linthost/no_fallthrough_rejects_marker_before_last_statement_test.go +32 -0
  1536. package/linthost/no_fallthrough_rejects_marker_in_block_that_is_not_sole_statement_test.go +31 -0
  1537. package/linthost/no_fallthrough_rejects_marker_inside_nested_inner_block_test.go +31 -0
  1538. package/linthost/no_fallthrough_rejects_nested_switch_exited_by_inner_break_test.go +34 -0
  1539. package/linthost/no_fallthrough_rejects_nested_switch_without_default_test.go +36 -0
  1540. package/linthost/no_fallthrough_rejects_non_literal_constant_condition_test.go +33 -0
  1541. package/linthost/no_fallthrough_rejects_normally_completing_catch_test.go +34 -0
  1542. package/linthost/no_fallthrough_rejects_open_try_with_normal_finally_test.go +34 -0
  1543. package/linthost/no_fallthrough_rejects_return_inside_arrow_test.go +32 -0
  1544. package/linthost/no_fallthrough_rejects_return_inside_function_declaration_test.go +33 -0
  1545. package/linthost/no_fallthrough_rejects_return_inside_function_expression_test.go +33 -0
  1546. package/linthost/no_fallthrough_rejects_unrelated_comment_in_sole_empty_block_test.go +29 -0
  1547. package/linthost/no_fallthrough_rejects_unrelated_trailing_comment_test.go +30 -0
  1548. package/linthost/no_fallthrough_reports_case_message_after_leading_default_test.go +37 -0
  1549. package/linthost/no_fallthrough_reports_default_message_for_default_clause_test.go +35 -0
  1550. package/linthost/no_fallthrough_reports_each_unmarked_transition_once_test.go +32 -0
  1551. package/linthost/no_fallthrough_reports_inner_and_outer_switch_transitions_test.go +37 -0
  1552. package/linthost/no_fallthrough_reports_unused_comment_after_terminating_if_else_test.go +46 -0
  1553. package/linthost/no_fallthrough_reports_unused_comment_inside_sole_block_test.go +36 -0
  1554. package/linthost/no_fallthrough_reports_unused_fallthrough_comment_test.go +38 -0
  1555. package/linthost/no_fallthrough_reports_unused_marker_after_unreachable_catch_test.go +37 -0
  1556. package/linthost/no_fallthrough_requires_marker_to_be_last_comment_test.go +32 -0
  1557. package/linthost/no_fallthrough_unused_check_accepts_real_fallthrough_marker_test.go +30 -0
  1558. package/linthost/no_fallthrough_unused_check_ignores_non_marker_comment_test.go +31 -0
  1559. package/linthost/no_fallthrough_unused_check_skips_last_case_marker_test.go +28 -0
  1560. package/linthost/no_fallthrough_unused_check_skips_reachable_empty_case_test.go +30 -0
  1561. package/linthost/no_fallthrough_unused_comment_ignored_by_default_test.go +31 -0
  1562. package/linthost/no_floating_promises_credits_a_handler_through_an_optional_chain_test.go +55 -0
  1563. package/linthost/no_floating_promises_default_semantics_test.go +48 -0
  1564. package/linthost/no_floating_promises_detects_index_value_type_parameters_test.go +145 -0
  1565. package/linthost/no_floating_promises_handler_chains_test.go +53 -0
  1566. package/linthost/no_floating_promises_helpers_test.go +43 -0
  1567. package/linthost/no_floating_promises_iife_test.go +32 -0
  1568. package/linthost/no_floating_promises_javascript_generic_defaults_test.go +177 -0
  1569. package/linthost/no_floating_promises_mixed_receiver_results_test.go +222 -0
  1570. package/linthost/no_floating_promises_options_test.go +56 -0
  1571. package/linthost/no_floating_promises_preserves_call_resolution_test.go +291 -0
  1572. package/linthost/no_floating_promises_preserves_candidate_context_literals_test.go +289 -0
  1573. package/linthost/no_floating_promises_preserves_contextual_callback_returns_test.go +208 -0
  1574. package/linthost/no_floating_promises_preserves_migrated_default_contexts_test.go +20 -0
  1575. package/linthost/no_floating_promises_preserves_optional_callback_overloads_test.go +42 -0
  1576. package/linthost/no_floating_promises_preserves_subtype_overload_priority_test.go +40 -0
  1577. package/linthost/no_floating_promises_rejects_inapplicable_generic_receiver_branches_test.go +254 -0
  1578. package/linthost/no_floating_promises_rejects_opaque_mapped_type_parameters_test.go +159 -0
  1579. package/linthost/no_floating_promises_safe_calls_in_composites_specifiers_test.go +43 -0
  1580. package/linthost/no_floating_promises_safe_calls_in_composites_test.go +88 -0
  1581. package/linthost/no_floating_promises_specifiers_test.go +108 -0
  1582. package/linthost/no_floating_promises_test.go +46 -0
  1583. package/linthost/no_floating_promises_thenable_scope_follows_check_thenables_test.go +87 -0
  1584. package/linthost/no_floating_promises_type_shapes_test.go +100 -0
  1585. package/linthost/no_for_in_array_test.go +49 -0
  1586. package/linthost/no_func_assign_test.go +195 -0
  1587. package/linthost/no_import_assign_binding_identity_and_complete_writes_test.go +140 -0
  1588. package/linthost/no_import_assign_binding_identity_helpers_test.go +114 -0
  1589. package/linthost/no_import_assign_ignores_resolved_shadows_and_deeper_values_test.go +118 -0
  1590. package/linthost/no_import_assign_recognizes_every_assignment_operator_test.go +36 -0
  1591. package/linthost/no_import_assign_test.go +48 -0
  1592. package/linthost/no_inner_declarations_both_mode_test.go +73 -0
  1593. package/linthost/no_inner_declarations_default_allows_strict_script_block_functions_test.go +33 -0
  1594. package/linthost/no_inner_declarations_default_module_test.go +35 -0
  1595. package/linthost/no_inner_declarations_default_strict_context_test.go +93 -0
  1596. package/linthost/no_inner_declarations_disallow_block_functions_test.go +57 -0
  1597. package/linthost/no_inner_declarations_helpers_test.go +32 -0
  1598. package/linthost/no_invalid_this_accepts_class_field_initializers_test.go +32 -0
  1599. package/linthost/no_irregular_whitespace_allows_string_literals_and_reports_code_test.go +44 -0
  1600. package/linthost/no_loop_func_allows_safe_bindings_and_excluded_headers_test.go +67 -0
  1601. package/linthost/no_loop_func_allows_using_bindings_test.go +52 -0
  1602. package/linthost/no_loop_func_checks_all_runtime_function_forms_test.go +52 -0
  1603. package/linthost/no_loop_func_helpers_test.go +55 -0
  1604. package/linthost/no_loop_func_iife_boundaries_test.go +41 -0
  1605. package/linthost/no_loop_func_reports_only_unsafe_references_test.go +83 -0
  1606. package/linthost/no_loop_func_test.go +68 -0
  1607. package/linthost/no_loop_func_tracks_write_forms_and_symbol_identity_test.go +49 -0
  1608. package/linthost/no_loop_func_treats_class_field_initializers_as_variable_scopes_test.go +46 -0
  1609. package/linthost/no_loss_of_precision_accepts_exact_unsafe_integer_test.go +36 -0
  1610. package/linthost/no_loss_of_precision_handles_every_number_syntax_test.go +93 -0
  1611. package/linthost/no_loss_of_precision_rejects_huge_decimal_integer_test.go +28 -0
  1612. package/linthost/no_meaningless_void_operator_test.go +48 -0
  1613. package/linthost/no_misused_promises_arguments_test.go +82 -0
  1614. package/linthost/no_misused_promises_defaults_test.go +89 -0
  1615. package/linthost/no_misused_promises_helpers_test.go +135 -0
  1616. package/linthost/no_misused_promises_native_array_predicates_test.go +91 -0
  1617. package/linthost/no_misused_promises_options_test.go +103 -0
  1618. package/linthost/no_misused_promises_preserves_migrated_default_contexts_test.go +23 -0
  1619. package/linthost/no_misused_promises_test.go +53 -0
  1620. package/linthost/no_mixed_operators_allow_same_precedence_false_flags_additive_test.go +42 -0
  1621. package/linthost/no_mixed_operators_allows_bitwise_beside_comparison_test.go +26 -0
  1622. package/linthost/no_mixed_operators_allows_bitwise_beside_logical_test.go +25 -0
  1623. package/linthost/no_mixed_operators_allows_parenthesized_inner_test.go +27 -0
  1624. package/linthost/no_mixed_operators_allows_relational_same_precedence_test.go +27 -0
  1625. package/linthost/no_mixed_operators_allows_same_operator_chain_test.go +26 -0
  1626. package/linthost/no_mixed_operators_allows_same_precedence_multiplicative_test.go +26 -0
  1627. package/linthost/no_mixed_operators_allows_ternary_beside_logical_by_default_test.go +27 -0
  1628. package/linthost/no_mixed_operators_custom_groups_omitting_arithmetic_allow_test.go +28 -0
  1629. package/linthost/no_mixed_operators_custom_groups_ternary_flags_logical_test.go +43 -0
  1630. package/linthost/no_mixed_operators_flags_logical_and_left_of_or_test.go +27 -0
  1631. package/linthost/no_mixed_operators_flags_logical_and_right_of_or_test.go +27 -0
  1632. package/linthost/no_mixed_operators_flags_multiplicative_within_additive_test.go +26 -0
  1633. package/linthost/no_mixed_operators_flags_relational_within_equality_test.go +28 -0
  1634. package/linthost/no_mixed_operators_flags_shift_within_bitwise_test.go +28 -0
  1635. package/linthost/no_mixed_operators_reports_both_operator_tokens_test.go +60 -0
  1636. package/linthost/no_namespace_exempts_global_augmentation_test.go +52 -0
  1637. package/linthost/no_param_reassign_complete_semantics_test.go +75 -0
  1638. package/linthost/no_param_reassign_default_props_leaves_property_writes_alone_test.go +38 -0
  1639. package/linthost/no_param_reassign_helpers_test.go +63 -0
  1640. package/linthost/no_param_reassign_options_validation_helpers_test.go +12 -0
  1641. package/linthost/no_param_reassign_options_validation_test.go +58 -0
  1642. package/linthost/no_param_reassign_options_validator_rejects_every_invalid_schema_boundary_test.go +109 -0
  1643. package/linthost/no_param_reassign_props_follows_official_mutation_boundaries_and_ignores_test.go +89 -0
  1644. package/linthost/no_param_reassign_test.go +52 -0
  1645. package/linthost/no_param_reassign_uses_checker_identity_across_nested_scopes_test.go +73 -0
  1646. package/linthost/no_promise_executor_return_allow_void_test.go +80 -0
  1647. package/linthost/no_promise_executor_return_complete_semantics_test.go +145 -0
  1648. package/linthost/no_promise_executor_return_test.go +35 -0
  1649. package/linthost/no_promise_in_fire_event_test.go +36 -0
  1650. package/linthost/no_redeclare_relates_first_definition_test.go +55 -0
  1651. package/linthost/no_render_in_lifecycle_test.go +35 -0
  1652. package/linthost/no_restricted_imports_allow_type_imports_handles_whole_and_inline_type_syntax_test.go +57 -0
  1653. package/linthost/no_restricted_imports_allowed_name_pattern_covers_imports_and_reexports_test.go +32 -0
  1654. package/linthost/no_restricted_imports_allowed_names_reject_only_the_complement_test.go +43 -0
  1655. package/linthost/no_restricted_imports_exact_paths_cover_every_static_module_form_test.go +77 -0
  1656. package/linthost/no_restricted_imports_exact_paths_preserve_module_specifier_whitespace_test.go +31 -0
  1657. package/linthost/no_restricted_imports_groups_keep_gitignore_anchors_globstars_and_unicode_test.go +78 -0
  1658. package/linthost/no_restricted_imports_matches_source_names_and_reports_exact_specifier_ranges_test.go +71 -0
  1659. package/linthost/no_restricted_imports_missing_and_empty_restrictions_are_no_op_test.go +42 -0
  1660. package/linthost/no_restricted_imports_options_helpers_test.go +76 -0
  1661. package/linthost/no_restricted_imports_patterns_honor_negation_case_regex_and_name_patterns_test.go +46 -0
  1662. package/linthost/no_restricted_imports_positional_paths_do_not_reach_dynamic_imports_test.go +32 -0
  1663. package/linthost/no_restricted_imports_string_patterns_keep_gitignore_parent_negation_semantics_test.go +30 -0
  1664. package/linthost/no_restricted_imports_test.go +14 -0
  1665. package/linthost/no_restricted_imports_validator_accepts_every_official_option_branch_test.go +48 -0
  1666. package/linthost/no_restricted_imports_validator_rejects_malformed_configuration_at_the_boundary_test.go +64 -0
  1667. package/linthost/no_restricted_syntax_applies_every_configured_entry_and_custom_message_test.go +45 -0
  1668. package/linthost/no_restricted_syntax_checks_structured_option_uniqueness_by_fields_test.go +40 -0
  1669. package/linthost/no_restricted_syntax_coerces_empty_node_lists_for_numeric_comparisons_test.go +34 -0
  1670. package/linthost/no_restricted_syntax_compares_strings_as_utf16_test.go +37 -0
  1671. package/linthost/no_restricted_syntax_distinguishes_assignment_patterns_from_literals_test.go +81 -0
  1672. package/linthost/no_restricted_syntax_distinguishes_object_binding_properties_from_rest_test.go +44 -0
  1673. package/linthost/no_restricted_syntax_distinguishes_rest_and_spread_aliases_test.go +54 -0
  1674. package/linthost/no_restricted_syntax_exposes_computed_keys_and_property_value_paths_test.go +34 -0
  1675. package/linthost/no_restricted_syntax_exposes_scalar_statement_bodies_test.go +43 -0
  1676. package/linthost/no_restricted_syntax_exposes_switch_case_test_and_consequent_test.go +36 -0
  1677. package/linthost/no_restricted_syntax_helpers_test.go +56 -0
  1678. package/linthost/no_restricted_syntax_inherits_declare_from_variable_statements_test.go +42 -0
  1679. package/linthost/no_restricted_syntax_keeps_template_and_literal_aliases_distinct_test.go +32 -0
  1680. package/linthost/no_restricted_syntax_limits_boolean_properties_and_es_tree_aliases_test.go +51 -0
  1681. package/linthost/no_restricted_syntax_matches_attributes_nested_paths_regex_types_and_lengths_test.go +47 -0
  1682. package/linthost/no_restricted_syntax_matches_classes_alternatives_and_type_script_nodes_test.go +61 -0
  1683. package/linthost/no_restricted_syntax_matches_combinators_fields_pseudos_and_subjects_test.go +111 -0
  1684. package/linthost/no_restricted_syntax_matches_indexed_paths_literal_types_and_prefix_test.go +169 -0
  1685. package/linthost/no_restricted_syntax_preserves_null_across_nested_paths_test.go +35 -0
  1686. package/linthost/no_restricted_syntax_rejects_invalid_configuration_before_dispatch_test.go +58 -0
  1687. package/linthost/no_restricted_syntax_reports_matches_in_source_order_test.go +36 -0
  1688. package/linthost/no_restricted_syntax_stringifies_regular_expression_values_test.go +38 -0
  1689. package/linthost/no_restricted_syntax_test.go +29 -0
  1690. package/linthost/no_restricted_syntax_uses_the_last_message_for_a_repeated_selector_test.go +37 -0
  1691. package/linthost/no_restricted_types_external_config_validates_at_engine_binding_test.go +39 -0
  1692. package/linthost/no_restricted_types_fixes_whole_qualified_generic_and_empty_type_surfaces_test.go +56 -0
  1693. package/linthost/no_restricted_types_has_no_implicit_defaults_test.go +51 -0
  1694. package/linthost/no_restricted_types_helpers_test.go +63 -0
  1695. package/linthost/no_restricted_types_later_whitespace_equivalent_key_wins_test.go +40 -0
  1696. package/linthost/no_restricted_types_matches_every_official_type_surface_exactly_test.go +144 -0
  1697. package/linthost/no_restricted_types_options_accept_complete_runtime_schema_test.go +54 -0
  1698. package/linthost/no_restricted_types_options_reject_malformed_schema_boundaries_test.go +60 -0
  1699. package/linthost/no_restricted_types_rejects_only_exact_type_syntax_test.go +56 -0
  1700. package/linthost/no_restricted_types_runs_on_declaration_files_test.go +36 -0
  1701. package/linthost/no_restricted_types_structured_policy_provides_fix_and_every_suggestion_test.go +172 -0
  1702. package/linthost/no_restricted_types_uses_configured_surface_spelling_across_symbols_test.go +74 -0
  1703. package/linthost/no_restricted_types_validation_helpers_test.go +12 -0
  1704. package/linthost/no_return_assign_allows_parenthesized_assignment_test.go +91 -0
  1705. package/linthost/no_types_test.go +29 -0
  1706. package/linthost/no_undef_init_ignores_const_declarations_test.go +33 -0
  1707. package/linthost/no_uninstalled_addons_test.go +45 -0
  1708. package/linthost/no_unnecessary_act_test.go +38 -0
  1709. package/linthost/no_unnecessary_boolean_literal_compare_test.go +50 -0
  1710. package/linthost/no_unnecessary_condition_test.go +50 -0
  1711. package/linthost/no_unnecessary_qualifier_test.go +121 -0
  1712. package/linthost/no_unnecessary_template_expression_test.go +48 -0
  1713. package/linthost/no_unnecessary_type_arguments_leaves_unresolved_aliases_alone_test.go +42 -0
  1714. package/linthost/no_unnecessary_type_arguments_preserves_callable_semantics_test.go +98 -0
  1715. package/linthost/no_unnecessary_type_arguments_preserves_heritage_defaults_test.go +38 -0
  1716. package/linthost/no_unnecessary_type_arguments_resolves_imported_aliases_test.go +58 -0
  1717. package/linthost/no_unnecessary_type_arguments_test.go +49 -0
  1718. package/linthost/no_unnecessary_type_assertion_test.go +48 -0
  1719. package/linthost/no_unneeded_ternary_fix_false_true_branches_test.go +34 -0
  1720. package/linthost/no_unneeded_ternary_fix_false_true_with_low_precedence_cond_test.go +29 -0
  1721. package/linthost/no_unneeded_ternary_fix_true_false_branches_test.go +28 -0
  1722. package/linthost/no_unneeded_ternary_uses_intrinsic_boolean_coercion_test.go +28 -0
  1723. package/linthost/no_unreachable_reports_one_region_and_exempts_hoisted_declarations_test.go +50 -0
  1724. package/linthost/no_unsafe_argument_test.go +50 -0
  1725. package/linthost/no_unsafe_assignment_aliases_test.go +28 -0
  1726. package/linthost/no_unsafe_assignment_array_destructuring_test.go +33 -0
  1727. package/linthost/no_unsafe_assignment_array_spreads_test.go +29 -0
  1728. package/linthost/no_unsafe_assignment_binding_defaults_test.go +39 -0
  1729. package/linthost/no_unsafe_assignment_class_initializers_test.go +30 -0
  1730. package/linthost/no_unsafe_assignment_destructuring_reassignment_test.go +33 -0
  1731. package/linthost/no_unsafe_assignment_direct_declarations_test.go +28 -0
  1732. package/linthost/no_unsafe_assignment_empty_map_test.go +26 -0
  1733. package/linthost/no_unsafe_assignment_generic_constraints_test.go +33 -0
  1734. package/linthost/no_unsafe_assignment_helpers_test.go +114 -0
  1735. package/linthost/no_unsafe_assignment_jsx_attributes_test.go +31 -0
  1736. package/linthost/no_unsafe_assignment_mapped_types_test.go +29 -0
  1737. package/linthost/no_unsafe_assignment_object_destructuring_test.go +43 -0
  1738. package/linthost/no_unsafe_assignment_object_literals_test.go +31 -0
  1739. package/linthost/no_unsafe_assignment_parameter_defaults_test.go +37 -0
  1740. package/linthost/no_unsafe_assignment_preserves_migrated_assignment_sites_test.go +42 -0
  1741. package/linthost/no_unsafe_assignment_readonly_arrays_test.go +27 -0
  1742. package/linthost/no_unsafe_assignment_reassignment_test.go +29 -0
  1743. package/linthost/no_unsafe_assignment_recursive_generics_test.go +26 -0
  1744. package/linthost/no_unsafe_assignment_recursive_types_test.go +30 -0
  1745. package/linthost/no_unsafe_assignment_tuples_test.go +26 -0
  1746. package/linthost/no_unsafe_assignment_unions_intersections_test.go +40 -0
  1747. package/linthost/no_unsafe_call_test.go +49 -0
  1748. package/linthost/no_unsafe_enum_comparison_test.go +51 -0
  1749. package/linthost/no_unsafe_finally_resolves_jump_targets_inside_and_outside_the_finally_test.go +40 -0
  1750. package/linthost/no_unsafe_member_access_test.go +50 -0
  1751. package/linthost/no_unsafe_optional_chaining_preserves_contiguous_chain_test.go +28 -0
  1752. package/linthost/no_unsafe_return_test.go +52 -0
  1753. package/linthost/no_unsafe_unary_minus_test.go +47 -0
  1754. package/linthost/no_unused_expressions_allows_jsx_by_default_test.go +38 -0
  1755. package/linthost/no_unused_expressions_allows_productive_kinds_test.go +61 -0
  1756. package/linthost/no_unused_expressions_composes_short_circuit_and_ternary_test.go +60 -0
  1757. package/linthost/no_unused_expressions_directive_prologue_positions_test.go +63 -0
  1758. package/linthost/no_unused_expressions_honors_allow_short_circuit_test.go +59 -0
  1759. package/linthost/no_unused_expressions_honors_allow_tagged_templates_test.go +52 -0
  1760. package/linthost/no_unused_expressions_honors_allow_ternary_test.go +58 -0
  1761. package/linthost/no_unused_expressions_honors_enforce_for_jsx_test.go +56 -0
  1762. package/linthost/no_unused_expressions_honors_ignore_directives_test.go +62 -0
  1763. package/linthost/no_unused_expressions_preserves_migrated_default_controls_test.go +29 -0
  1764. package/linthost/no_unused_expressions_ts_wrappers_inherit_classification_test.go +61 -0
  1765. package/linthost/no_useless_catch_reports_a_rethrowing_catch_with_and_without_finally_test.go +42 -0
  1766. package/linthost/no_useless_constructor_preserves_argument_filtering_test.go +44 -0
  1767. package/linthost/no_useless_empty_export_allows_module_marker_test.go +36 -0
  1768. package/linthost/no_useless_escape_flags_regex_character_class_test.go +53 -0
  1769. package/linthost/no_useless_escape_invalid_utf8_names_replacement_character_test.go +63 -0
  1770. package/linthost/no_useless_escape_judges_quotes_and_template_escapes_by_enclosing_delimiter_test.go +58 -0
  1771. package/linthost/no_useless_escape_message_names_decoded_rune_test.go +74 -0
  1772. package/linthost/no_useless_escape_multibyte_range_covers_backslash_only_test.go +71 -0
  1773. package/linthost/no_useless_escape_nested_untagged_template_in_tagged_substitution_test.go +67 -0
  1774. package/linthost/no_useless_escape_v_flag_class_preserves_syntax_char_escapes_test.go +60 -0
  1775. package/linthost/no_useless_rename_declines_fix_when_comment_between_names_test.go +38 -0
  1776. package/linthost/no_useless_rename_offers_withheld_tail_deletion_as_suggestion_test.go +37 -0
  1777. package/linthost/no_var_preserves_loop_body_retained_values_test.go +33 -0
  1778. package/linthost/no_var_skips_ambient_declare_var_test.go +55 -0
  1779. package/linthost/no_var_skips_declaration_file_vars_test.go +41 -0
  1780. package/linthost/no_var_skips_using_declarations_test.go +44 -0
  1781. package/linthost/node_config_loader_env_prepends_nearest_node_modules_test.go +51 -0
  1782. package/linthost/node_package_manifest_from_resolves_a_relative_anchor_test.go +56 -0
  1783. package/linthost/node_package_manifest_from_skips_a_node_modules_directory_test.go +51 -0
  1784. package/linthost/node_platform_pair_matches_the_npm_platform_vocabulary_test.go +62 -0
  1785. package/linthost/node_report_bounds_before_skipping_trivia_test.go +44 -0
  1786. package/linthost/node_spans_multiple_lines_returns_false_for_nil_node_test.go +41 -0
  1787. package/linthost/node_suggestions_preserve_owned_edit_channels_test.go +86 -0
  1788. package/linthost/non_nullable_type_assertion_style_test.go +49 -0
  1789. package/linthost/object_shorthand_declines_fix_when_comment_in_value_span_test.go +38 -0
  1790. package/linthost/object_shorthand_offers_withheld_collapse_as_suggestion_test.go +37 -0
  1791. package/linthost/only_throw_error_test.go +44 -0
  1792. package/linthost/override_glob_matches_a_file_named_through_a_miscased_import_test.go +49 -0
  1793. package/linthost/override_glob_stored_case_preserves_character_class_test.go +41 -0
  1794. package/linthost/parse_config_store_accepts_severity_tuples_test.go +49 -0
  1795. package/linthost/parse_config_store_keeps_ignores_entry_scoped_when_files_present_test.go +56 -0
  1796. package/linthost/parse_config_store_promotes_global_ignores_alongside_rules_test.go +56 -0
  1797. package/linthost/parse_config_store_promotes_global_ignores_with_format_block_test.go +53 -0
  1798. package/linthost/parse_config_store_resolves_files_and_ignores_test.go +70 -0
  1799. package/linthost/parse_external_rule_entry_preserves_three_slot_tuple_test.go +54 -0
  1800. package/linthost/parse_external_rule_entry_treats_null_second_slot_as_no_options_test.go +35 -0
  1801. package/linthost/parse_plugins_blank_payload_returns_nil_test.go +29 -0
  1802. package/linthost/parse_plugins_rejects_bad_json_test.go +31 -0
  1803. package/linthost/parse_plugins_round_trip_test.go +51 -0
  1804. package/linthost/parse_rules_accepts_eslint_tuples_in_standard_inline_config_test.go +64 -0
  1805. package/linthost/parse_rules_accepts_legacy_numeric_severities_test.go +44 -0
  1806. package/linthost/parse_rules_accepts_string_severities_test.go +60 -0
  1807. package/linthost/parse_rules_nil_treated_as_empty_test.go +35 -0
  1808. package/linthost/parse_rules_preserves_positional_options_test.go +75 -0
  1809. package/linthost/parse_subcommand_flags_accepts_common_flag_combinations_test.go +57 -0
  1810. package/linthost/playwright_no_force_option_ignores_non_playwright_options_test.go +35 -0
  1811. package/linthost/playwright_no_networkidle_ignores_non_playwright_wait_until_test.go +35 -0
  1812. package/linthost/prefer_as_const_preserves_migrated_all_family_contexts_test.go +20 -0
  1813. package/linthost/prefer_as_const_property_annotation_offers_exact_suggestion_test.go +41 -0
  1814. package/linthost/prefer_as_const_variable_annotation_offers_exact_suggestion_test.go +41 -0
  1815. package/linthost/prefer_const_allows_reads_in_destructuring_pattern_test.go +43 -0
  1816. package/linthost/prefer_const_counts_non_null_assignment_target_by_symbol_test.go +24 -0
  1817. package/linthost/prefer_const_counts_parenthesized_update_target_by_symbol_test.go +26 -0
  1818. package/linthost/prefer_const_counts_write_forms_by_symbol_test.go +57 -0
  1819. package/linthost/prefer_const_honors_destructuring_option_test.go +77 -0
  1820. package/linthost/prefer_const_honors_ignore_read_before_assign_for_shorthand_read_test.go +30 -0
  1821. package/linthost/prefer_const_honors_ignore_read_before_assign_test.go +58 -0
  1822. package/linthost/prefer_const_preserves_migrated_lexical_fixture_test.go +112 -0
  1823. package/linthost/prefer_const_test.go +57 -0
  1824. package/linthost/prefer_const_tracks_lexical_binding_identity_test.go +60 -0
  1825. package/linthost/prefer_explicit_assert_test.go +36 -0
  1826. package/linthost/prefer_find_test.go +48 -0
  1827. package/linthost/prefer_implicit_assert_test.go +36 -0
  1828. package/linthost/prefer_includes_test.go +49 -0
  1829. package/linthost/prefer_presence_queries_test.go +37 -0
  1830. package/linthost/prefer_promise_reject_errors_test.go +45 -0
  1831. package/linthost/prefer_query_by_disappearance_test.go +35 -0
  1832. package/linthost/prefer_query_matchers_test.go +37 -0
  1833. package/linthost/prefer_readonly_preserves_mutated_private_fields_test.go +57 -0
  1834. package/linthost/prefer_reduce_type_parameter_test.go +56 -0
  1835. package/linthost/prefer_regexp_exec_test.go +48 -0
  1836. package/linthost/prefer_return_this_type_requires_all_completion_paths_test.go +43 -0
  1837. package/linthost/prefer_return_this_type_test.go +55 -0
  1838. package/linthost/prefer_screen_queries_test.go +39 -0
  1839. package/linthost/prefer_string_starts_ends_with_test.go +52 -0
  1840. package/linthost/prefer_template_declines_fix_when_comment_in_concat_span_test.go +50 -0
  1841. package/linthost/prefer_template_fix_embeds_numeric_subchain_as_single_slot_test.go +33 -0
  1842. package/linthost/prefer_template_fix_escapes_backtick_in_literal_test.go +32 -0
  1843. package/linthost/prefer_template_fix_escapes_dollar_brace_seam_test.go +33 -0
  1844. package/linthost/prefer_template_fix_flattens_operands_after_leading_string_test.go +34 -0
  1845. package/linthost/prefer_template_fix_ignores_string_under_other_operator_test.go +32 -0
  1846. package/linthost/prefer_template_fix_keeps_parenthesized_subchain_single_slot_test.go +32 -0
  1847. package/linthost/prefer_template_fix_leading_identifier_chain_test.go +30 -0
  1848. package/linthost/prefer_template_fix_preserves_carriage_return_test.go +33 -0
  1849. package/linthost/prefer_template_fix_preserves_newline_test.go +30 -0
  1850. package/linthost/prefer_template_fix_preserves_template_operand_group_test.go +27 -0
  1851. package/linthost/prefer_template_fix_renders_empty_string_operand_with_default_coercion_test.go +31 -0
  1852. package/linthost/prefer_template_fix_sees_string_through_parens_when_flattening_test.go +34 -0
  1853. package/linthost/prefer_template_fix_three_part_concat_test.go +31 -0
  1854. package/linthost/prefer_template_offers_withheld_template_as_suggestion_test.go +37 -0
  1855. package/linthost/prefer_template_preserves_default_coercion_hint_test.go +30 -0
  1856. package/linthost/prefer_template_skips_all_literal_chain_test.go +27 -0
  1857. package/linthost/prefer_template_skips_numeric_only_chain_test.go +28 -0
  1858. package/linthost/prefer_user_event_setup_ignores_setup_call_test.go +35 -0
  1859. package/linthost/print_arg_list_emits_trailing_comma_when_mode_all_test.go +38 -0
  1860. package/linthost/print_arg_list_omits_trailing_comma_when_mode_es5_test.go +39 -0
  1861. package/linthost/print_arg_list_omits_trailing_comma_when_mode_none_test.go +39 -0
  1862. package/linthost/print_arg_list_returns_parens_for_nil_list_test.go +30 -0
  1863. package/linthost/print_call_expression_falls_back_verbatim_when_args_contain_nil_test.go +43 -0
  1864. package/linthost/print_call_expression_includes_question_dot_token_test.go +36 -0
  1865. package/linthost/print_call_expression_includes_type_arguments_test.go +34 -0
  1866. package/linthost/print_call_expression_returns_empty_for_nil_node_test.go +29 -0
  1867. package/linthost/print_dispatch.go +50 -15
  1868. package/linthost/print_doc.go +206 -41
  1869. package/linthost/print_engine.go +78 -51
  1870. package/linthost/print_new_expression_falls_back_verbatim_when_args_contain_nil_test.go +42 -0
  1871. package/linthost/print_new_expression_includes_type_arguments_test.go +36 -0
  1872. package/linthost/print_new_expression_omits_argument_list_when_absent_test.go +36 -0
  1873. package/linthost/print_new_expression_returns_empty_for_nil_node_test.go +28 -0
  1874. package/linthost/print_node_returns_empty_for_nil_node_test.go +31 -0
  1875. package/linthost/print_nodes_control_flow.go +4 -4
  1876. package/linthost/print_nodes_function.go +9 -11
  1877. package/linthost/print_nodes_imports.go +8 -11
  1878. package/linthost/print_nodes_object.go +3 -6
  1879. package/linthost/printer_test_helpers_test.go +46 -0
  1880. package/linthost/project_companion_preserves_file_scoped_rule_config_test.go +45 -0
  1881. package/linthost/project_contributor_ast_only_marker_keeps_parallel_walk_test.go +54 -0
  1882. package/linthost/project_contributor_generic_accepts_options_method_keeps_legacy_payload_test.go +81 -0
  1883. package/linthost/project_contributor_optionless_marker_rejects_payload_test.go +62 -0
  1884. package/linthost/project_contributor_without_marker_keeps_options_compatibility_test.go +70 -0
  1885. package/linthost/project_contributor_without_marker_keeps_type_checker_test.go +53 -0
  1886. package/linthost/project_engine.go +8 -0
  1887. package/linthost/project_hint_collection_requires_passed_published_state_test.go +105 -0
  1888. package/linthost/project_hint_publication_filters_malformed_and_recovers_panic_test.go +66 -0
  1889. package/linthost/project_identity_mints_distinct_program_lifecycles_test.go +51 -0
  1890. package/linthost/project_input_reader.go +358 -0
  1891. package/linthost/project_input_snapshot_normalizes_windows_case_and_separators_test.go +43 -0
  1892. package/linthost/project_input_snapshot_preserves_missing_files_zero_match_globs_and_config_provenance_test.go +130 -0
  1893. package/linthost/project_input_snapshot_reconciles_options_and_physical_paths_test.go +108 -0
  1894. package/linthost/project_input_snapshot_rejects_remote_urls_test.go +59 -0
  1895. package/linthost/project_inputs.go +31 -4
  1896. package/linthost/project_inputs_command_publishes_configured_snapshot_without_program_test.go +115 -0
  1897. package/linthost/project_rule_config_folds_global_extends_and_options_test.go +68 -0
  1898. package/linthost/project_rule_config_rejects_any_files_selector_test.go +46 -0
  1899. package/linthost/project_rule_live_reports_are_concurrent_and_deterministic_test.go +89 -0
  1900. package/linthost/project_rule_reports_per_finding_severity_test.go +74 -0
  1901. package/linthost/project_rule_results_reach_public_file_context_test.go +172 -0
  1902. package/linthost/project_rule_runs_for_empty_source_set_test.go +52 -0
  1903. package/linthost/project_rule_sources_apply_only_global_ignores_test.go +62 -0
  1904. package/linthost/project_rule_sources_include_imported_sibling_source_test.go +110 -0
  1905. package/linthost/project_rule_state_and_live_failure_reach_file_dispatch_test.go +89 -0
  1906. package/linthost/project_rule_state_and_reporter_are_isolated_between_cycles_test.go +87 -0
  1907. package/linthost/project_source_files_follow_tsconfig_selection_test.go +86 -0
  1908. package/linthost/project_source_selection_preserves_explicit_bundled_roots_test.go +73 -0
  1909. package/linthost/promise_function_async_test.go +49 -0
  1910. package/linthost/public_rule_context_accepts_legacy_reporter_test.go +50 -0
  1911. package/linthost/public_rule_context_legacy_reporter_drops_fix_edits_test.go +57 -0
  1912. package/linthost/public_rule_context_options_are_isolated_test.go +106 -0
  1913. package/linthost/public_rule_context_report_fix_falls_back_when_no_edits_test.go +39 -0
  1914. package/linthost/public_rule_context_report_fix_forwards_to_fixreporter_test.go +102 -0
  1915. package/linthost/public_rule_context_report_fix_off_severity_drops_silently_test.go +41 -0
  1916. package/linthost/public_rule_context_report_fix_skips_nil_node_test.go +34 -0
  1917. package/linthost/public_rule_context_report_range_fix_falls_back_when_no_edits_test.go +38 -0
  1918. package/linthost/public_rule_context_report_range_fix_forwards_to_fixreporter_test.go +49 -0
  1919. package/linthost/public_rule_context_report_related_falls_back_test.go +58 -0
  1920. package/linthost/public_rule_context_report_related_forwards_test.go +108 -0
  1921. package/linthost/public_rule_context_report_suggestion_falls_back_when_unsupported_test.go +41 -0
  1922. package/linthost/public_rule_context_report_suggestion_forwards_to_suggestionreporter_test.go +97 -0
  1923. package/linthost/public_rule_context_report_suggestion_with_no_choices_reports_test.go +33 -0
  1924. package/linthost/radix_accepts_every_integer_radix_from_two_through_thirty_six_test.go +33 -0
  1925. package/linthost/range_suggestion_finding_uses_canonical_bounds_test.go +47 -0
  1926. package/linthost/react_button_has_type_requires_explicit_type_test.go +22 -0
  1927. package/linthost/react_compiler_subset_reports_local_purity_violations_test.go +72 -0
  1928. package/linthost/react_display_name_reports_anonymous_memo_test.go +25 -0
  1929. package/linthost/react_exhaustive_deps_reports_missing_identifiers_test.go +58 -0
  1930. package/linthost/react_helpers_test.go +36 -0
  1931. package/linthost/react_iframe_missing_sandbox_reports_iframe_test.go +21 -0
  1932. package/linthost/react_jsx_key_reports_array_element_test.go +21 -0
  1933. package/linthost/react_jsx_key_reports_conditional_map_element_test.go +23 -0
  1934. package/linthost/react_jsx_key_reports_logical_map_element_test.go +23 -0
  1935. package/linthost/react_jsx_no_duplicate_props_reports_duplicate_test.go +21 -0
  1936. package/linthost/react_jsx_no_script_url_reports_javascript_href_test.go +20 -0
  1937. package/linthost/react_jsx_no_target_blank_reports_missing_rel_test.go +22 -0
  1938. package/linthost/react_jsx_no_undef_declarations_collected_once_per_file_test.go +63 -0
  1939. package/linthost/react_jsx_no_undef_reports_undeclared_component_test.go +25 -0
  1940. package/linthost/react_jsx_no_undef_skips_declared_components_test.go +46 -0
  1941. package/linthost/react_jsx_no_useless_fragment_test.go +29 -0
  1942. package/linthost/react_no_array_index_key_reports_index_key_test.go +21 -0
  1943. package/linthost/react_no_array_index_key_reports_renamed_index_key_test.go +23 -0
  1944. package/linthost/react_no_array_index_key_skips_nested_non_list_element_test.go +22 -0
  1945. package/linthost/react_no_array_index_key_skips_unrelated_index_identifier_test.go +21 -0
  1946. package/linthost/react_no_children_prop_reports_children_prop_test.go +21 -0
  1947. package/linthost/react_no_danger_reports_dangerously_set_inner_html_test.go +21 -0
  1948. package/linthost/react_no_danger_with_children_reports_mixed_content_test.go +22 -0
  1949. package/linthost/react_no_danger_with_children_survives_spread_props_test.go +23 -0
  1950. package/linthost/react_no_direct_mutation_state_reports_state_property_write_test.go +22 -0
  1951. package/linthost/react_no_find_dom_node_reports_call_test.go +20 -0
  1952. package/linthost/react_no_is_mounted_reports_call_test.go +20 -0
  1953. package/linthost/react_no_string_refs_reports_string_ref_test.go +20 -0
  1954. package/linthost/react_no_unescaped_entities_reports_quote_text_test.go +21 -0
  1955. package/linthost/react_only_export_components_honors_allow_options_test.go +41 -0
  1956. package/linthost/react_only_export_components_reports_non_component_export_test.go +41 -0
  1957. package/linthost/react_perf_helpers_test.go +58 -0
  1958. package/linthost/react_perf_jsx_no_jsx_as_prop_test.go +29 -0
  1959. package/linthost/react_perf_jsx_no_new_array_as_prop_test.go +30 -0
  1960. package/linthost/react_perf_jsx_no_new_function_as_prop_test.go +31 -0
  1961. package/linthost/react_perf_jsx_no_new_object_as_prop_test.go +31 -0
  1962. package/linthost/react_perf_native_allow_list_test.go +49 -0
  1963. package/linthost/react_perf_rules_skip_jsx_source_test.go +29 -0
  1964. package/linthost/react_rules_of_hooks_rejects_hook_after_conditional_return_test.go +54 -0
  1965. package/linthost/react_rules_of_hooks_rejects_invalid_call_sites_test.go +65 -0
  1966. package/linthost/react_source_file_rules_handle_tsx_descendants_test.go +77 -0
  1967. package/linthost/react_state_setters_reject_render_and_effect_calls_test.go +62 -0
  1968. package/linthost/react_style_prop_object_reports_string_style_test.go +22 -0
  1969. package/linthost/react_void_dom_elements_no_children_reports_img_child_test.go +22 -0
  1970. package/linthost/regex_optimizer_distinguishes_a_zero_upper_bound_from_an_open_range_test.go +44 -0
  1971. package/linthost/regex_optimizer_preserves_ranges_crossing_meta_sets_test.go +67 -0
  1972. package/linthost/regex_tree_optimizer.go +54 -10
  1973. package/linthost/regexp_alias_rules_test.go +53 -0
  1974. package/linthost/regexp_cache.go +63 -33
  1975. package/linthost/regexp_character_class_and_group_rules_test.go +64 -0
  1976. package/linthost/regexp_duplicate_class_uses_code_points_test.go +41 -0
  1977. package/linthost/regexp_quantifier_and_flag_rules_test.go +52 -0
  1978. package/linthost/regexp_useless_ignore_case_flag_test.go +111 -0
  1979. package/linthost/regexp_useless_multiline_flag_test.go +71 -0
  1980. package/linthost/register_rejects_duplicate_rule_name_test.go +74 -0
  1981. package/linthost/reject_any_type_test.go +50 -0
  1982. package/linthost/reject_function_type_test.go +48 -0
  1983. package/linthost/related_getter_setter_pairs_test.go +56 -0
  1984. package/linthost/render_result_dom_access_and_events_test.go +45 -0
  1985. package/linthost/require_array_sort_compare_test.go +47 -0
  1986. package/linthost/require_await_counts_for_await_and_promise_returns_test.go +76 -0
  1987. package/linthost/require_description_test.go +29 -0
  1988. package/linthost/require_param_description_allows_multiline_continuation_test.go +27 -0
  1989. package/linthost/require_param_description_test.go +29 -0
  1990. package/linthost/require_param_name_test.go +26 -0
  1991. package/linthost/require_property_description_allows_multiline_continuation_test.go +27 -0
  1992. package/linthost/require_property_description_test.go +30 -0
  1993. package/linthost/require_property_name_test.go +26 -0
  1994. package/linthost/require_returns_description_allows_multiline_continuation_test.go +27 -0
  1995. package/linthost/require_returns_description_test.go +29 -0
  1996. package/linthost/required_behavioral_witness_kinds_ignore_non_public_candidates_test.go +51 -0
  1997. package/linthost/resident_apply_change_matches_cold_load_test.go +106 -0
  1998. package/linthost/resident_cache_replaces_a_checker_free_program_when_a_checker_arrives_test.go +57 -0
  1999. package/linthost/resident_cache_retains_program_for_declared_external_change_test.go +61 -0
  2000. package/linthost/resident_cache_serves_a_checker_free_verb_from_the_checker_program_test.go +51 -0
  2001. package/linthost/resident_heritage_update_rebuilds_checker_test.go +70 -0
  2002. package/linthost/resident_regex_cache_retires_reloaded_configurations_test.go +123 -0
  2003. package/linthost/resident_rules_are_reused_only_while_their_config_is_unchanged_test.go +180 -0
  2004. package/linthost/resident_whole_corpus_matches_cold_load_test.go +167 -0
  2005. package/linthost/resolve_config_file_path_uses_tsconfig_directory_test.go +34 -0
  2006. package/linthost/resolve_config_tsgo_falls_back_to_the_project_root_anchor_test.go +36 -0
  2007. package/linthost/resolve_config_tsgo_keeps_an_explicitly_pinned_compiler_test.go +41 -0
  2008. package/linthost/resolve_config_tsgo_prefers_the_config_anchor_over_the_project_root_test.go +41 -0
  2009. package/linthost/resolve_config_tsgo_resolves_the_project_compiler_without_the_environment_test.go +33 -0
  2010. package/linthost/resolve_config_tsgo_resolves_through_a_linked_typescript_install_test.go +48 -0
  2011. package/linthost/resolve_config_tsgo_returns_nothing_without_a_project_typescript_test.go +32 -0
  2012. package/linthost/resolve_config_tsgo_returns_nothing_without_the_platform_package_test.go +40 -0
  2013. package/linthost/resolve_ttsx_launcher_falls_back_to_the_bare_command_test.go +36 -0
  2014. package/linthost/resolve_ttsx_launcher_keeps_an_explicitly_pinned_binary_test.go +40 -0
  2015. package/linthost/resolve_ttsx_launcher_resolves_the_project_launcher_without_the_environment_test.go +33 -0
  2016. package/linthost/restrict_plus_operands_test.go +47 -0
  2017. package/linthost/restrict_template_expressions_test.go +47 -0
  2018. package/linthost/return_await_test.go +54 -0
  2019. package/linthost/rule_codes.go +16 -2
  2020. package/linthost/rule_codes_are_unique_and_banded_across_live_registry_test.go +74 -0
  2021. package/linthost/rule_docs.go +1 -1
  2022. package/linthost/rule_documentation_urls_cover_the_builtin_corpus_test.go +86 -0
  2023. package/linthost/rule_snapshot_engine_requires_a_valid_active_rule_test.go +59 -0
  2024. package/linthost/rules_boundaries.go +19 -7
  2025. package/linthost/rules_consistent_return.go +323 -16
  2026. package/linthost/rules_core_extra.go +41 -82
  2027. package/linthost/rules_default_case.go +1 -1
  2028. package/linthost/rules_escape.go +18 -3
  2029. package/linthost/rules_finally.go +49 -15
  2030. package/linthost/rules_format_arrow_parens.go +8 -10
  2031. package/linthost/rules_format_bracket_spacing.go +14 -19
  2032. package/linthost/rules_format_print_width.go +28 -19
  2033. package/linthost/rules_format_quote_props.go +5 -11
  2034. package/linthost/rules_format_quotes.go +5 -6
  2035. package/linthost/rules_format_sort_imports.go +27 -15
  2036. package/linthost/rules_format_statement_split.go +3 -5
  2037. package/linthost/rules_functional.go +21 -14
  2038. package/linthost/rules_gap.go +9 -12
  2039. package/linthost/rules_jsdoc.go +2 -3
  2040. package/linthost/rules_jsx_a11y.go +2 -0
  2041. package/linthost/rules_logic.go +88 -11
  2042. package/linthost/rules_loops.go +16 -2
  2043. package/linthost/rules_max_nested_callbacks.go +28 -12
  2044. package/linthost/rules_misc.go +38 -8
  2045. package/linthost/rules_no_extend_native.go +52 -13
  2046. package/linthost/rules_no_fallthrough.go +1 -1
  2047. package/linthost/rules_no_invalid_this.go +6 -3
  2048. package/linthost/rules_no_mixed_operators.go +42 -10
  2049. package/linthost/rules_no_param_reassign.go +1 -1
  2050. package/linthost/rules_no_unreachable.go +61 -2
  2051. package/linthost/rules_no_useless_constructor.go +21 -27
  2052. package/linthost/rules_problems.go +26 -2
  2053. package/linthost/rules_regexp.go +76 -28
  2054. package/linthost/rules_security.go +4 -4
  2055. package/linthost/rules_self.go +42 -6
  2056. package/linthost/rules_solid.go +14 -26
  2057. package/linthost/rules_sort_keys.go +12 -14
  2058. package/linthost/rules_storybook.go +16 -26
  2059. package/linthost/rules_strings.go +9 -19
  2060. package/linthost/rules_suggestions.go +79 -45
  2061. package/linthost/rules_testing_library.go +18 -0
  2062. package/linthost/rules_ts_no_restricted_types.go +9 -1
  2063. package/linthost/rules_ts_no_unnecessary_type_arguments.go +44 -47
  2064. package/linthost/rules_ts_prefer_readonly.go +111 -42
  2065. package/linthost/rules_ts_prefer_return_this_type.go +21 -14
  2066. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +12 -17
  2067. package/linthost/rules_unicorn_no_unnecessary_await.go +39 -13
  2068. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +7 -10
  2069. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +29 -12
  2070. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +7 -25
  2071. package/linthost/rules_unicorn_no_useless_length_check.go +19 -19
  2072. package/linthost/rules_unicorn_prefer_array_some.go +1 -2
  2073. package/linthost/rules_unicorn_prefer_bigint_literals.go +21 -18
  2074. package/linthost/rules_unicorn_prefer_date_now.go +7 -17
  2075. package/linthost/rules_unicorn_prefer_default_parameters.go +7 -15
  2076. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +7 -13
  2077. package/linthost/rules_unicorn_prefer_negative_index.go +12 -13
  2078. package/linthost/rules_unicorn_prefer_node_protocol.go +5 -5
  2079. package/linthost/rules_unicorn_prefer_object_from_entries.go +7 -14
  2080. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +17 -19
  2081. package/linthost/rules_unicorn_prefer_single_call.go +12 -6
  2082. package/linthost/rules_unicorn_prefer_spread.go +7 -13
  2083. package/linthost/rules_unicorn_prefer_string_replace_all.go +4 -3
  2084. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +22 -3
  2085. package/linthost/rules_unicorn_prefer_top_level_await.go +4 -3
  2086. package/linthost/rules_unicorn_relative_url_style.go +33 -14
  2087. package/linthost/rules_var.go +73 -3
  2088. package/linthost/runtime_rule_codes_are_collision_free_and_order_independent_test.go +101 -0
  2089. package/linthost/security_assigned_names_unwrap_assertion_targets_test.go +54 -0
  2090. package/linthost/security_bindings_collected_once_per_file_test.go +63 -0
  2091. package/linthost/security_detect_bidi_characters_test.go +44 -0
  2092. package/linthost/security_name_based_node_api_findings_stay_untagged_test.go +87 -0
  2093. package/linthost/self_compare_and_self_assign_ignore_calls_and_empty_template_curly_is_not_a_placeholder_test.go +50 -0
  2094. package/linthost/semantic_finding_guard_rejects_recovered_execution_failures_test.go +75 -0
  2095. package/linthost/serve.go +42 -25
  2096. package/linthost/set_env_replaces_or_appends_test.go +39 -0
  2097. package/linthost/severity_string_formats_values_test.go +34 -0
  2098. package/linthost/signature_flags_expose_construct_signature_abstractness_test.go +136 -0
  2099. package/linthost/signature_introspection_reaches_runtime_endpoints_test.go +123 -0
  2100. package/linthost/solid_helpers_test.go +92 -0
  2101. package/linthost/solid_import_proxy_and_dependency_rules_test.go +48 -0
  2102. package/linthost/solid_imports_leaves_a_type_only_destination_alone_test.go +42 -0
  2103. package/linthost/solid_imports_relocates_a_misrouted_specifier_test.go +69 -0
  2104. package/linthost/solid_jsx_attribute_guards_test.go +69 -0
  2105. package/linthost/solid_no_react_deps_tags_dependency_array_unnecessary_test.go +106 -0
  2106. package/linthost/solid_reactivity_and_component_returns_test.go +49 -0
  2107. package/linthost/solid_rendering_style_preferences_test.go +59 -0
  2108. package/linthost/solid_self_closing_comp_keeps_text_children_test.go +32 -0
  2109. package/linthost/solid_source_file_rules_handle_jsx_initializers_test.go +47 -0
  2110. package/linthost/solid_style_prop_reports_non_zero_numeric_lengths_test.go +37 -0
  2111. package/linthost/solid_validate_jsx_nesting_test.go +53 -0
  2112. package/linthost/sort_keys_compares_across_a_computed_key_and_resets_at_a_spread_test.go +33 -0
  2113. package/linthost/source_extension_tables_separate_selection_from_widening_test.go +44 -0
  2114. package/linthost/source_has_statement_terminator_detects_semicolon_test.go +28 -0
  2115. package/linthost/source_has_statement_terminator_returns_false_for_empty_string_test.go +27 -0
  2116. package/linthost/source_has_statement_terminator_returns_false_for_unclosed_block_comment_test.go +31 -0
  2117. package/linthost/source_has_statement_terminator_returns_false_when_absent_test.go +29 -0
  2118. package/linthost/source_has_statement_terminator_skips_trailing_block_comment_test.go +30 -0
  2119. package/linthost/source_has_statement_terminator_skips_trailing_whitespace_test.go +31 -0
  2120. package/linthost/standalone_checker_resolves_cross_file_type_after_pooled_diagnostics_test.go +85 -0
  2121. package/linthost/storybook_deletion_findings_tag_unnecessary_test.go +127 -0
  2122. package/linthost/storybook_legacy_api_findings_tag_deprecated_test.go +110 -0
  2123. package/linthost/strict_boolean_expressions_test.go +49 -0
  2124. package/linthost/switch_exhaustiveness_check_advanced_type_shapes_test.go +83 -0
  2125. package/linthost/switch_exhaustiveness_check_finite_members_test.go +76 -0
  2126. package/linthost/switch_exhaustiveness_check_helpers_test.go +99 -0
  2127. package/linthost/switch_exhaustiveness_check_no_unchecked_indexed_access_test.go +56 -0
  2128. package/linthost/switch_exhaustiveness_check_options_test.go +118 -0
  2129. package/linthost/switch_exhaustiveness_check_parser_comment_ranges_test.go +64 -0
  2130. package/linthost/switch_exhaustiveness_check_preserves_migrated_defaults_and_options_test.go +139 -0
  2131. package/linthost/switch_exhaustiveness_check_test.go +73 -0
  2132. package/linthost/tail_is_clean_terminator_returns_false_for_invalid_inputs_test.go +64 -0
  2133. package/linthost/testing_library_helpers_test.go +71 -0
  2134. package/linthost/tsdoc_syntax_test.go +64 -0
  2135. package/linthost/ttsx_command_context_spawns_the_project_launcher_test.go +47 -0
  2136. package/linthost/type_alias_reference_node_uses_borrowed_builder_context_test.go +128 -0
  2137. package/linthost/type_args_start_and_end_guard_branches_test.go +58 -0
  2138. package/linthost/type_instantiation_mappers_reach_runtime_endpoints_test.go +213 -0
  2139. package/linthost/type_mapper_parallel_substitution_avoids_capture_test.go +106 -0
  2140. package/linthost/typed_rule_semantic_helpers_test.go +34 -0
  2141. package/linthost/unbound_method_test.go +53 -0
  2142. package/linthost/unicorn_array_some_requires_an_existence_comparison_test.go +29 -0
  2143. package/linthost/unicorn_await_literal_does_not_assume_an_object_has_no_then_test.go +33 -0
  2144. package/linthost/unicorn_better_regex_constructor_fix_escapes_cooked_pattern_test.go +146 -0
  2145. package/linthost/unicorn_better_regex_fix_is_idempotent_test.go +37 -0
  2146. package/linthost/unicorn_better_regex_leaves_optimal_literals_test.go +36 -0
  2147. package/linthost/unicorn_better_regex_reports_exact_range_and_message_test.go +52 -0
  2148. package/linthost/unicorn_better_regex_reports_without_fix_on_source_member_test.go +38 -0
  2149. package/linthost/unicorn_better_regex_rewrites_regexp_constructor_test.go +70 -0
  2150. package/linthost/unicorn_better_regex_skips_unicode_flag_literals_test.go +34 -0
  2151. package/linthost/unicorn_better_regex_sort_character_classes_option_test.go +39 -0
  2152. package/linthost/unicorn_better_regex_test.go +44 -0
  2153. package/linthost/unicorn_bigint_literal_requires_an_exact_integer_value_test.go +34 -0
  2154. package/linthost/unicorn_consistent_destructuring_jsx_tag_names_are_exempt_test.go +53 -0
  2155. package/linthost/unicorn_consistent_destructuring_skips_valid_forms_test.go +221 -0
  2156. package/linthost/unicorn_consistent_destructuring_suggestion_is_opt_in_and_idempotent_test.go +54 -0
  2157. package/linthost/unicorn_consistent_destructuring_test.go +306 -0
  2158. package/linthost/unicorn_consistent_existence_index_check_fix_is_idempotent_test.go +45 -0
  2159. package/linthost/unicorn_consistent_existence_index_check_fix_rewrites_magnitude_comparisons_test.go +96 -0
  2160. package/linthost/unicorn_consistent_existence_index_check_skips_upstream_valid_forms_test.go +143 -0
  2161. package/linthost/unicorn_consistent_existence_index_check_test.go +212 -0
  2162. package/linthost/unicorn_consistent_function_scoping_chains_blocks_inside_loop_bodies_test.go +53 -0
  2163. package/linthost/unicorn_consistent_function_scoping_checks_arrow_lexical_environment_test.go +48 -0
  2164. package/linthost/unicorn_consistent_function_scoping_checks_returned_arrow_chains_test.go +29 -0
  2165. package/linthost/unicorn_consistent_function_scoping_honors_check_arrow_functions_test.go +42 -0
  2166. package/linthost/unicorn_consistent_function_scoping_keeps_shared_outer_references_together_test.go +28 -0
  2167. package/linthost/unicorn_consistent_function_scoping_outer_reference_pins_recursive_function_test.go +31 -0
  2168. package/linthost/unicorn_consistent_function_scoping_preserves_upstream_factory_exceptions_test.go +59 -0
  2169. package/linthost/unicorn_consistent_function_scoping_protects_super_and_private_names_test.go +57 -0
  2170. package/linthost/unicorn_consistent_function_scoping_reads_class_head_positions_as_lexical_environment_test.go +42 -0
  2171. package/linthost/unicorn_consistent_function_scoping_reports_canonical_head_ranges_test.go +44 -0
  2172. package/linthost/unicorn_consistent_function_scoping_resolves_jsx_component_captures_test.go +44 -0
  2173. package/linthost/unicorn_consistent_function_scoping_test.go +45 -0
  2174. package/linthost/unicorn_consistent_function_scoping_treats_loop_scopes_as_one_boundary_test.go +36 -0
  2175. package/linthost/unicorn_consistent_function_scoping_uses_binding_identity_and_ignores_self_recursion_test.go +42 -0
  2176. package/linthost/unicorn_consistent_function_scoping_validates_the_public_option_shape_test.go +58 -0
  2177. package/linthost/unicorn_consistent_template_literal_escape_command_fix_idempotence_test.go +41 -0
  2178. package/linthost/unicorn_consistent_template_literal_escape_fires_on_declaration_files_test.go +35 -0
  2179. package/linthost/unicorn_consistent_template_literal_escape_fixes_template_literal_types_test.go +35 -0
  2180. package/linthost/unicorn_consistent_template_literal_escape_fixes_upstream_invalid_corpus_test.go +80 -0
  2181. package/linthost/unicorn_consistent_template_literal_escape_honors_backslash_parity_test.go +64 -0
  2182. package/linthost/unicorn_consistent_template_literal_escape_preserves_continuations_crlf_and_unicode_test.go +34 -0
  2183. package/linthost/unicorn_consistent_template_literal_escape_reports_exact_element_ranges_test.go +71 -0
  2184. package/linthost/unicorn_consistent_template_literal_escape_reports_untagged_inside_tagged_test.go +43 -0
  2185. package/linthost/unicorn_consistent_template_literal_escape_skips_tagged_templates_test.go +40 -0
  2186. package/linthost/unicorn_consistent_template_literal_escape_skips_upstream_valid_corpus_test.go +49 -0
  2187. package/linthost/unicorn_date_now_preserves_constructor_arguments_test.go +34 -0
  2188. package/linthost/unicorn_escape_case_bounds_escape_digit_runs_test.go +97 -0
  2189. package/linthost/unicorn_escape_case_honors_backslash_parity_test.go +67 -0
  2190. package/linthost/unicorn_escape_case_reports_interpolated_template_segments_test.go +97 -0
  2191. package/linthost/unicorn_escape_case_skips_tagged_templates_test.go +62 -0
  2192. package/linthost/unicorn_escape_family_survives_crlf_and_astral_literals_test.go +67 -0
  2193. package/linthost/unicorn_filename_case_cases_key_order_shapes_message_test.go +42 -0
  2194. package/linthost/unicorn_filename_case_default_ignored_index_basenames_test.go +40 -0
  2195. package/linthost/unicorn_filename_case_directory_handling_test.go +89 -0
  2196. package/linthost/unicorn_filename_case_extension_lowercase_test.go +72 -0
  2197. package/linthost/unicorn_filename_case_ignore_patterns_match_segments_test.go +78 -0
  2198. package/linthost/unicorn_filename_case_multiple_file_extensions_option_test.go +77 -0
  2199. package/linthost/unicorn_filename_case_option_validation_test.go +74 -0
  2200. package/linthost/unicorn_filename_case_real_project_paths_test.go +50 -0
  2201. package/linthost/unicorn_filename_case_report_anchors_and_no_fix_test.go +59 -0
  2202. package/linthost/unicorn_filename_case_split_name_line_terminator_edge_test.go +37 -0
  2203. package/linthost/unicorn_filename_case_test.go +131 -0
  2204. package/linthost/unicorn_filename_case_unicode_segments_test.go +33 -0
  2205. package/linthost/unicorn_filename_case_upstream_invalid_filenames_test.go +268 -0
  2206. package/linthost/unicorn_filename_case_upstream_valid_filenames_test.go +173 -0
  2207. package/linthost/unicorn_import_style_accepts_mixed_styles_when_all_allowed_test.go +29 -0
  2208. package/linthost/unicorn_import_style_banned_module_reports_dedicated_message_test.go +70 -0
  2209. package/linthost/unicorn_import_style_check_toggles_disable_each_syntax_family_test.go +61 -0
  2210. package/linthost/unicorn_import_style_default_module_policy_matrix_test.go +69 -0
  2211. package/linthost/unicorn_import_style_default_policies_at_exact_ranges_test.go +65 -0
  2212. package/linthost/unicorn_import_style_default_policies_skip_compliant_and_unknown_modules_test.go +37 -0
  2213. package/linthost/unicorn_import_style_disjunction_lists_allowed_styles_in_order_test.go +44 -0
  2214. package/linthost/unicorn_import_style_dynamic_import_expression_forms_test.go +69 -0
  2215. package/linthost/unicorn_import_style_evaluates_static_string_module_names_test.go +58 -0
  2216. package/linthost/unicorn_import_style_extend_default_styles_false_drops_builtin_policies_test.go +46 -0
  2217. package/linthost/unicorn_import_style_named_module_policy_matrix_test.go +81 -0
  2218. package/linthost/unicorn_import_style_namespace_module_policy_matrix_test.go +63 -0
  2219. package/linthost/unicorn_import_style_object_pattern_key_forms_test.go +46 -0
  2220. package/linthost/unicorn_import_style_optional_require_calls_are_never_classified_test.go +24 -0
  2221. package/linthost/unicorn_import_style_rejects_malformed_options_before_linting_test.go +56 -0
  2222. package/linthost/unicorn_import_style_reports_no_automatic_fixes_test.go +31 -0
  2223. package/linthost/unicorn_import_style_skips_non_matching_reference_shapes_test.go +47 -0
  2224. package/linthost/unicorn_import_style_style_overrides_replace_inherited_flags_test.go +69 -0
  2225. package/linthost/unicorn_import_style_test.go +87 -0
  2226. package/linthost/unicorn_import_style_type_only_imports_follow_value_semantics_test.go +53 -0
  2227. package/linthost/unicorn_import_style_unassigned_policy_accepts_unassigned_forms_test.go +31 -0
  2228. package/linthost/unicorn_import_style_unassigned_policy_reports_every_assigned_form_test.go +66 -0
  2229. package/linthost/unicorn_isolated_functions_arguments_test.go +48 -0
  2230. package/linthost/unicorn_isolated_functions_browser_and_page_callees_test.go +63 -0
  2231. package/linthost/unicorn_isolated_functions_comments_test.go +131 -0
  2232. package/linthost/unicorn_isolated_functions_execute_script_func_property_test.go +83 -0
  2233. package/linthost/unicorn_isolated_functions_function_name_callees_test.go +100 -0
  2234. package/linthost/unicorn_isolated_functions_helpers_test.go +76 -0
  2235. package/linthost/unicorn_isolated_functions_override_globals_test.go +92 -0
  2236. package/linthost/unicorn_isolated_functions_parameter_default_capture_test.go +47 -0
  2237. package/linthost/unicorn_isolated_functions_scope_internals_test.go +57 -0
  2238. package/linthost/unicorn_isolated_functions_selector_test.go +43 -0
  2239. package/linthost/unicorn_isolated_functions_test.go +75 -0
  2240. package/linthost/unicorn_isolated_functions_this_and_super_test.go +110 -0
  2241. package/linthost/unicorn_isolated_functions_typeof_this_test.go +45 -0
  2242. package/linthost/unicorn_isolated_functions_typescript_types_test.go +39 -0
  2243. package/linthost/unicorn_isolated_functions_unresolved_reference_test.go +41 -0
  2244. package/linthost/unicorn_known_boundary_observations_test.go +113 -0
  2245. package/linthost/unicorn_length_check_preserves_escaped_foreach_results_test.go +33 -0
  2246. package/linthost/unicorn_negative_index_requires_its_own_receiver_and_index_argument_test.go +32 -0
  2247. package/linthost/unicorn_no_hex_escape_honors_backslash_parity_test.go +63 -0
  2248. package/linthost/unicorn_no_hex_escape_ignores_non_hex_escapes_test.go +75 -0
  2249. package/linthost/unicorn_no_hex_escape_reports_interpolated_template_segments_test.go +86 -0
  2250. package/linthost/unicorn_no_hex_escape_skips_tagged_templates_test.go +57 -0
  2251. package/linthost/unicorn_no_typeof_undefined_check_global_variables_option_test.go +90 -0
  2252. package/linthost/unicorn_no_typeof_undefined_declines_unsafe_fix_test.go +50 -0
  2253. package/linthost/unicorn_no_typeof_undefined_fix_rewrites_comparisons_test.go +43 -0
  2254. package/linthost/unicorn_no_typeof_undefined_skips_upstream_valid_forms_test.go +57 -0
  2255. package/linthost/unicorn_no_typeof_undefined_test.go +88 -0
  2256. package/linthost/unicorn_no_unnecessary_polyfills_checks_only_static_string_specifiers_test.go +50 -0
  2257. package/linthost/unicorn_no_unnecessary_polyfills_config_discovery_test.go +109 -0
  2258. package/linthost/unicorn_no_unnecessary_polyfills_core_js_compat_oracle_test.go +74 -0
  2259. package/linthost/unicorn_no_unnecessary_polyfills_corpus_project_scenario_test.go +30 -0
  2260. package/linthost/unicorn_no_unnecessary_polyfills_custom_stats_discovery_test.go +45 -0
  2261. package/linthost/unicorn_no_unnecessary_polyfills_engine_oracle_test.go +101 -0
  2262. package/linthost/unicorn_no_unnecessary_polyfills_engines_discovery_test.go +29 -0
  2263. package/linthost/unicorn_no_unnecessary_polyfills_option_overrides_config_discovery_test.go +28 -0
  2264. package/linthost/unicorn_no_unnecessary_polyfills_options_test.go +38 -0
  2265. package/linthost/unicorn_no_unnecessary_polyfills_package_json_browserslist_section_test.go +25 -0
  2266. package/linthost/unicorn_no_unnecessary_polyfills_pattern_table_oracle_test.go +47 -0
  2267. package/linthost/unicorn_no_unnecessary_polyfills_rejects_malformed_options_test.go +48 -0
  2268. package/linthost/unicorn_no_unnecessary_polyfills_silent_without_resolvable_targets_test.go +26 -0
  2269. package/linthost/unicorn_no_unnecessary_polyfills_test.go +128 -0
  2270. package/linthost/unicorn_no_unnecessary_polyfills_upstream_invalid_targets_test.go +73 -0
  2271. package/linthost/unicorn_no_unused_properties_corpus_test.go +81 -0
  2272. package/linthost/unicorn_no_unused_properties_key_matching_test.go +83 -0
  2273. package/linthost/unicorn_no_unused_properties_object_literal_semantics_test.go +211 -0
  2274. package/linthost/unicorn_no_unused_properties_reference_identity_test.go +72 -0
  2275. package/linthost/unicorn_no_unused_properties_reporting_shape_test.go +89 -0
  2276. package/linthost/unicorn_no_unused_properties_script_global_scope_test.go +60 -0
  2277. package/linthost/unicorn_no_unused_properties_template_keys_test.go +35 -0
  2278. package/linthost/unicorn_no_unused_properties_type_literal_semantics_test.go +155 -0
  2279. package/linthost/unicorn_number_literal_case_fix_is_idempotent_test.go +54 -0
  2280. package/linthost/unicorn_number_literal_case_fixes_bigint_and_separated_literals_test.go +43 -0
  2281. package/linthost/unicorn_number_literal_case_fixes_every_literal_in_one_pass_test.go +37 -0
  2282. package/linthost/unicorn_number_literal_case_fixes_literals_in_every_syntactic_position_test.go +51 -0
  2283. package/linthost/unicorn_number_literal_case_fixes_radix_prefix_and_hex_digits_test.go +42 -0
  2284. package/linthost/unicorn_number_literal_case_fixes_uppercase_exponent_test.go +42 -0
  2285. package/linthost/unicorn_number_literal_case_reports_exact_range_and_message_test.go +53 -0
  2286. package/linthost/unicorn_number_literal_case_skips_canonical_literals_test.go +38 -0
  2287. package/linthost/unicorn_number_literal_case_uppercases_hex_exponent_digits_test.go +44 -0
  2288. package/linthost/unicorn_prefer_number_properties_autofixes_is_na_n_with_number_argument_test.go +24 -0
  2289. package/linthost/unicorn_prefer_number_properties_autofixes_safe_global_test.go +24 -0
  2290. package/linthost/unicorn_prefer_number_properties_checks_infinity_when_enabled_test.go +43 -0
  2291. package/linthost/unicorn_prefer_number_properties_checks_na_n_when_enabled_test.go +30 -0
  2292. package/linthost/unicorn_prefer_number_properties_expands_shorthand_fix_test.go +24 -0
  2293. package/linthost/unicorn_prefer_number_properties_fixes_negative_infinity_test.go +25 -0
  2294. package/linthost/unicorn_prefer_number_properties_interpolates_message_test.go +33 -0
  2295. package/linthost/unicorn_prefer_number_properties_leaves_infinity_and_na_n_under_defaults_test.go +24 -0
  2296. package/linthost/unicorn_prefer_number_properties_reports_object_value_positions_test.go +37 -0
  2297. package/linthost/unicorn_prefer_number_properties_skips_base10_and_missing_radix_test.go +35 -0
  2298. package/linthost/unicorn_prefer_number_properties_skips_shadowed_bindings_test.go +40 -0
  2299. package/linthost/unicorn_prefer_number_properties_suggests_unsafe_is_na_n_test.go +38 -0
  2300. package/linthost/unicorn_prefer_number_properties_test.go +81 -0
  2301. package/linthost/unicorn_prefer_number_properties_validates_options_test.go +64 -0
  2302. package/linthost/unicorn_prefer_optional_catch_binding_test.go +53 -0
  2303. package/linthost/unicorn_prefer_simple_condition_first_handles_or_chains_and_non_logical_type_wrappers_test.go +45 -0
  2304. package/linthost/unicorn_prefer_simple_condition_first_parser_aware_comments_do_not_mistake_literal_text_test.go +28 -0
  2305. package/linthost/unicorn_prefer_simple_condition_first_preserves_mixed_operators_and_parentheses_test.go +32 -0
  2306. package/linthost/unicorn_prefer_simple_condition_first_reports_exact_safe_finding_and_stable_fix_test.go +64 -0
  2307. package/linthost/unicorn_prefer_simple_condition_first_restricts_reports_to_boolean_contexts_test.go +68 -0
  2308. package/linthost/unicorn_prefer_simple_condition_first_reviews_each_homogeneous_mixed_operator_chain_test.go +55 -0
  2309. package/linthost/unicorn_prefer_simple_condition_first_uses_canonical_simple_expression_grammar_test.go +105 -0
  2310. package/linthost/unicorn_prefer_simple_condition_first_withholds_unsafe_and_syntax_owned_fixes_test.go +57 -0
  2311. package/linthost/unicorn_prefer_string_raw_survives_unterminated_literals_test.go +36 -0
  2312. package/linthost/unicorn_prevent_abbreviations_allows_generated_names_to_shadow_without_capture_test.go +23 -0
  2313. package/linthost/unicorn_prevent_abbreviations_allows_reserved_words_in_property_suggestions_test.go +43 -0
  2314. package/linthost/unicorn_prevent_abbreviations_applies_import_controls_to_static_require_bindings_test.go +29 -0
  2315. package/linthost/unicorn_prevent_abbreviations_applies_import_mode_to_external_import_equals_test.go +29 -0
  2316. package/linthost/unicorn_prevent_abbreviations_applies_internal_import_defaults_and_preserves_imported_names_test.go +40 -0
  2317. package/linthost/unicorn_prevent_abbreviations_avoids_catch_parameter_body_redeclarations_test.go +23 -0
  2318. package/linthost/unicorn_prevent_abbreviations_avoids_compiler_provided_global_bindings_test.go +23 -0
  2319. package/linthost/unicorn_prevent_abbreviations_avoids_var_lexical_early_error_collisions_test.go +23 -0
  2320. package/linthost/unicorn_prevent_abbreviations_checks_physical_filename_without_offering_edits_test.go +52 -0
  2321. package/linthost/unicorn_prevent_abbreviations_checks_shorthand_destructuring_only_when_enabled_test.go +25 -0
  2322. package/linthost/unicorn_prevent_abbreviations_does_not_apply_require_mode_to_qualified_import_equals_test.go +24 -0
  2323. package/linthost/unicorn_prevent_abbreviations_does_not_capture_outer_reads_with_unused_inner_bindings_test.go +23 -0
  2324. package/linthost/unicorn_prevent_abbreviations_does_not_capture_unresolved_names_test.go +23 -0
  2325. package/linthost/unicorn_prevent_abbreviations_does_not_report_destructuring_assignment_keys_as_properties_test.go +23 -0
  2326. package/linthost/unicorn_prevent_abbreviations_does_not_treat_destructuring_property_keys_as_collisions_test.go +23 -0
  2327. package/linthost/unicorn_prevent_abbreviations_expands_compound_and_cased_names_but_skips_constants_test.go +23 -0
  2328. package/linthost/unicorn_prevent_abbreviations_false_replacement_disables_compound_matches_test.go +23 -0
  2329. package/linthost/unicorn_prevent_abbreviations_false_replacement_stops_case_variant_fallback_test.go +22 -0
  2330. package/linthost/unicorn_prevent_abbreviations_honors_negative_replacement_and_allow_list_patches_test.go +40 -0
  2331. package/linthost/unicorn_prevent_abbreviations_honors_replacement_allow_and_ignore_options_test.go +42 -0
  2332. package/linthost/unicorn_prevent_abbreviations_ignores_detached_js_doc_when_deciding_fix_safety_test.go +47 -0
  2333. package/linthost/unicorn_prevent_abbreviations_ignores_non_lexical_jsx_and_tuple_names_for_collisions_test.go +24 -0
  2334. package/linthost/unicorn_prevent_abbreviations_keeps_exported_js_doc_and_jsx_bindings_diagnostic_only_test.go +107 -0
  2335. package/linthost/unicorn_prevent_abbreviations_keeps_independent_loop_and_switch_scopes_independent_test.go +23 -0
  2336. package/linthost/unicorn_prevent_abbreviations_keeps_mapped_and_conditional_type_scopes_independent_test.go +23 -0
  2337. package/linthost/unicorn_prevent_abbreviations_keeps_shadowed_bindings_independent_and_avoids_collisions_test.go +23 -0
  2338. package/linthost/unicorn_prevent_abbreviations_keeps_type_script_signature_scopes_independent_test.go +23 -0
  2339. package/linthost/unicorn_prevent_abbreviations_offers_whole_binding_suggestions_for_ambiguous_names_test.go +40 -0
  2340. package/linthost/unicorn_prevent_abbreviations_preserves_astral_first_rune_casing_test.go +27 -0
  2341. package/linthost/unicorn_prevent_abbreviations_preserves_canonical_upper_first_for_uncased_prefixes_test.go +23 -0
  2342. package/linthost/unicorn_prevent_abbreviations_preserves_explicit_imported_alias_names_test.go +22 -0
  2343. package/linthost/unicorn_prevent_abbreviations_preserves_exported_alias_names_test.go +35 -0
  2344. package/linthost/unicorn_prevent_abbreviations_property_checks_are_opt_in_and_suggestion_only_test.go +34 -0
  2345. package/linthost/unicorn_prevent_abbreviations_recognizes_only_canonical_static_require_calls_test.go +43 -0
  2346. package/linthost/unicorn_prevent_abbreviations_rejects_malformed_options_test.go +36 -0
  2347. package/linthost/unicorn_prevent_abbreviations_renames_class_inner_and_outer_references_together_test.go +23 -0
  2348. package/linthost/unicorn_prevent_abbreviations_renames_default_export_local_names_test.go +23 -0
  2349. package/linthost/unicorn_prevent_abbreviations_renames_merged_type_and_value_references_together_test.go +23 -0
  2350. package/linthost/unicorn_prevent_abbreviations_renames_type_predicate_references_test.go +23 -0
  2351. package/linthost/unicorn_prevent_abbreviations_reports_binding_once_and_fixes_every_reference_test.go +31 -0
  2352. package/linthost/unicorn_prevent_abbreviations_separates_generated_names_at_cross_scope_reads_test.go +23 -0
  2353. package/linthost/unicorn_prevent_abbreviations_separates_generated_names_in_one_scope_test.go +23 -0
  2354. package/linthost/unicorn_prevent_abbreviations_supports_canonical_empty_replacement_spelling_test.go +23 -0
  2355. package/linthost/unicorn_prevent_abbreviations_test.go +34 -0
  2356. package/linthost/unicorn_prevent_abbreviations_uses_default_import_control_for_named_default_syntax_test.go +25 -0
  2357. package/linthost/unicorn_prevent_abbreviations_uses_function_scope_for_destructured_var_collisions_test.go +23 -0
  2358. package/linthost/unicorn_prevent_abbreviations_uses_function_scope_for_var_collisions_test.go +23 -0
  2359. package/linthost/unicorn_prevent_abbreviations_uses_java_script_full_unicode_casing_test.go +29 -0
  2360. package/linthost/unicorn_prevent_abbreviations_uses_strict_binding_grammar_for_custom_replacements_test.go +51 -0
  2361. package/linthost/unicorn_regexp_test_requires_a_boolean_result_consumer_test.go +33 -0
  2362. package/linthost/unicorn_relative_url_style_preserves_leading_trimmed_characters_test.go +47 -0
  2363. package/linthost/unicorn_report_only_advice_exposes_semantic_preconditions_test.go +48 -0
  2364. package/linthost/unicorn_rule_finding_helpers_test.go +14 -0
  2365. package/linthost/unicorn_rule_names_helpers_test.go +11 -0
  2366. package/linthost/unicorn_single_call_excludes_event_listener_registration_test.go +30 -0
  2367. package/linthost/unicorn_slice_end_preserves_other_receiver_bounds_test.go +30 -0
  2368. package/linthost/unicorn_splice_count_preserves_bounds_and_insertions_test.go +33 -0
  2369. package/linthost/unicorn_spread_fallback_is_load_bearing_for_arrays_test.go +31 -0
  2370. package/linthost/unicorn_string_content_applies_first_matching_pattern_in_configured_order_test.go +55 -0
  2371. package/linthost/unicorn_string_content_escapes_backticks_and_dollars_in_template_fix_test.go +75 -0
  2372. package/linthost/unicorn_string_content_escapes_delimiter_quotes_in_literal_fix_test.go +60 -0
  2373. package/linthost/unicorn_string_content_escapes_line_separators_keeps_other_whitespace_raw_test.go +79 -0
  2374. package/linthost/unicorn_string_content_fix_false_reports_suggestion_only_test.go +73 -0
  2375. package/linthost/unicorn_string_content_honors_custom_message_and_placeholders_test.go +41 -0
  2376. package/linthost/unicorn_string_content_jsx_attribute_fix_uses_html_entities_test.go +103 -0
  2377. package/linthost/unicorn_string_content_matches_case_insensitively_when_configured_test.go +68 -0
  2378. package/linthost/unicorn_string_content_normalizes_template_line_endings_like_acorn_test.go +87 -0
  2379. package/linthost/unicorn_string_content_preserves_control_escapes_in_literal_fix_test.go +93 -0
  2380. package/linthost/unicorn_string_content_rejects_malformed_options_before_linting_test.go +79 -0
  2381. package/linthost/unicorn_string_content_reports_and_fixes_plain_string_literal_test.go +54 -0
  2382. package/linthost/unicorn_string_content_reports_each_template_quasi_at_exact_ranges_test.go +61 -0
  2383. package/linthost/unicorn_string_content_selector_matches_keep_ignored_tag_exemption_test.go +33 -0
  2384. package/linthost/unicorn_string_content_selectors_restrict_checked_nodes_test.go +68 -0
  2385. package/linthost/unicorn_string_content_skips_empty_and_non_string_literals_test.go +43 -0
  2386. package/linthost/unicorn_string_content_skips_ignored_template_tags_test.go +81 -0
  2387. package/linthost/unicorn_string_content_stays_silent_without_pattern_options_test.go +34 -0
  2388. package/linthost/unicorn_string_content_treats_pattern_as_regular_expression_test.go +77 -0
  2389. package/linthost/unicorn_switch_case_break_position_declines_unsafe_or_semantic_moves_test.go +111 -0
  2390. package/linthost/unicorn_switch_case_break_position_fix_preserves_statements_comments_and_eol_test.go +187 -0
  2391. package/linthost/unicorn_switch_case_break_position_reports_every_supported_terminator_at_exact_range_test.go +132 -0
  2392. package/linthost/unicorn_switch_case_break_position_requires_sole_non_empty_block_then_direct_terminator_test.go +112 -0
  2393. package/linthost/unicorn_template_indent_accepts_parenthesized_jest_inline_snapshot_test.go +26 -0
  2394. package/linthost/unicorn_template_indent_detects_tabs_outside_templates_test.go +31 -0
  2395. package/linthost/unicorn_template_indent_falls_back_to_two_spaces_without_any_indent_signal_test.go +23 -0
  2396. package/linthost/unicorn_template_indent_fix_preserves_quasis_substitutions_escapes_and_blank_lines_test.go +71 -0
  2397. package/linthost/unicorn_template_indent_fixes_empty_boundary_quasis_with_insertions_test.go +37 -0
  2398. package/linthost/unicorn_template_indent_fixes_nested_templates_without_touching_expressions_test.go +52 -0
  2399. package/linthost/unicorn_template_indent_honors_configured_tags_functions_comments_and_selectors_test.go +69 -0
  2400. package/linthost/unicorn_template_indent_honors_numeric_and_whitespace_indent_options_test.go +51 -0
  2401. package/linthost/unicorn_template_indent_pins_every_default_matcher_test.go +46 -0
  2402. package/linthost/unicorn_template_indent_preserves_content_trailing_spaces_test.go +31 -0
  2403. package/linthost/unicorn_template_indent_preserves_crlf_test.go +35 -0
  2404. package/linthost/unicorn_template_indent_preserves_every_interior_ecma_script_line_ending_test.go +39 -0
  2405. package/linthost/unicorn_template_indent_preserves_leading_byte_order_mark_test.go +27 -0
  2406. package/linthost/unicorn_template_indent_preserves_mixed_interior_line_endings_test.go +35 -0
  2407. package/linthost/unicorn_template_indent_recognizes_every_ecma_script_source_line_separator_test.go +48 -0
  2408. package/linthost/unicorn_template_indent_rejects_jest_inline_snapshot_near_misses_test.go +35 -0
  2409. package/linthost/unicorn_template_indent_rejects_malformed_options_before_linting_test.go +52 -0
  2410. package/linthost/unicorn_template_indent_selects_every_official_entry_point_at_exact_range_test.go +56 -0
  2411. package/linthost/unicorn_template_indent_skips_unselected_single_line_and_already_correct_templates_test.go +37 -0
  2412. package/linthost/unicorn_template_indent_test.go +20 -0
  2413. package/linthost/unicorn_text_encoding_identifier_case_enforces_dash_in_jsx_charset_attributes_test.go +69 -0
  2414. package/linthost/unicorn_text_encoding_identifier_case_enforces_dash_in_text_decoder_test.go +47 -0
  2415. package/linthost/unicorn_text_encoding_identifier_case_fixes_fs_read_file_encoding_test.go +44 -0
  2416. package/linthost/unicorn_text_encoding_identifier_case_handles_template_literals_test.go +46 -0
  2417. package/linthost/unicorn_text_encoding_identifier_case_reports_suggestion_range_and_message_test.go +78 -0
  2418. package/linthost/unicorn_text_encoding_identifier_case_skips_canonical_and_unknown_labels_test.go +35 -0
  2419. package/linthost/unicorn_text_encoding_identifier_case_suggests_without_fixing_off_read_file_positions_test.go +36 -0
  2420. package/linthost/unicorn_text_encoding_identifier_case_withdash_option_prefers_dash_test.go +52 -0
  2421. package/linthost/unicorn_throw_new_error_fix_parenthesizes_a_shielded_call_chain_test.go +69 -0
  2422. package/linthost/unicorn_throw_new_error_fix_spaces_an_abutting_throw_keyword_test.go +64 -0
  2423. package/linthost/unicorn_throw_new_error_fixes_every_throw_in_one_pass_test.go +42 -0
  2424. package/linthost/unicorn_throw_new_error_fixes_upstream_invalid_corpus_test.go +114 -0
  2425. package/linthost/unicorn_throw_new_error_reports_custom_and_member_callees_test.go +62 -0
  2426. package/linthost/unicorn_throw_new_error_skips_non_matching_callees_test.go +68 -0
  2427. package/linthost/unregistered_rule_code_lookup_preserves_registered_assignments_test.go +102 -0
  2428. package/linthost/use_unknown_in_catch_callback_variable_test.go +48 -0
  2429. package/linthost/user_pattern_cache_follows_resolver_ownership_test.go +87 -0
  2430. package/linthost/user_pattern_cache_parallel_reuses_results_test.go +67 -0
  2431. package/linthost/user_source_files_exclude_imported_declarations_and_javascript_test.go +82 -0
  2432. package/linthost/user_source_files_span_program_typescript_sources_test.go +72 -0
  2433. package/linthost/valid_typeof_equality_operator_scope_test.go +173 -0
  2434. package/linthost/verbatim_range_returns_empty_for_invalid_range_test.go +53 -0
  2435. package/linthost/verbatim_returns_empty_for_nil_node_test.go +30 -0
  2436. package/linthost/verbatim_returns_empty_for_out_of_range_node_test.go +52 -0
  2437. package/linthost/vitest_expect_expect_reports_empty_test_test.go +35 -0
  2438. package/linthost/vitest_finding_helpers_test.go +14 -0
  2439. package/linthost/vitest_no_conditional_expect_reports_expect_inside_if_test.go +37 -0
  2440. package/linthost/vitest_no_conditional_tests_reports_test_inside_if_test.go +35 -0
  2441. package/linthost/vitest_no_disabled_tests_reports_skip_test.go +34 -0
  2442. package/linthost/vitest_no_done_callback_reports_test_parameter_test.go +34 -0
  2443. package/linthost/vitest_no_focused_tests_reports_only_test.go +34 -0
  2444. package/linthost/vitest_no_identical_title_reports_duplicate_sibling_test.go +35 -0
  2445. package/linthost/vitest_no_standalone_expect_reports_top_level_expect_test.go +33 -0
  2446. package/linthost/vitest_no_test_return_statement_reports_return_test.go +35 -0
  2447. package/linthost/vitest_prefer_to_have_length_reports_length_matcher_test.go +34 -0
  2448. package/linthost/vitest_valid_describe_callback_reports_async_callback_test.go +34 -0
  2449. package/linthost/vitest_valid_expect_reports_missing_matcher_test.go +35 -0
  2450. package/linthost/vitest_valid_title_reports_empty_title_test.go +34 -0
  2451. package/linthost/wait_for_assertion_and_side_effect_guards_test.go +55 -0
  2452. package/linthost/windows_junction_dependency_entry_matches_node_fingerprint_test.go +55 -0
  2453. package/linthost/windows_loader_temp_base_stays_on_config_volume_test.go +98 -0
  2454. package/linthost/windows_project_source_selection_preserves_physical_aliases_test.go +69 -0
  2455. package/linthost/windows_real_project_path_expands_windows_short_ancestor_test.go +47 -0
  2456. package/linthost/windows_resolve_config_tsgo_through_linked_typescript_install_test.go +52 -0
  2457. package/linthost/windows_short_path_other_test.go +11 -0
  2458. package/linthost/windows_short_path_windows_test.go +39 -0
  2459. package/linthost/workspace_link_resolves_a_sibling_package_to_its_source_test.go +86 -0
  2460. package/package.json +5 -3
  2461. package/rule/astutil/astutil.go +165 -59
  2462. package/rule/context_decode_options_preserves_defaults_and_decoder_errors_test.go +87 -0
  2463. package/rule/graph.go +82 -16
  2464. package/rule/hint.go +95 -28
  2465. package/rule/new_project_context_preserves_snapshot_ownership_test.go +62 -0
  2466. package/rule/new_project_input_context_preserves_owned_options_test.go +59 -0
  2467. package/rule/new_project_rule_result_preserves_snapshot_ownership_test.go +63 -0
  2468. package/rule/project.go +382 -22
  2469. package/rule/project_input_reader.go +163 -0
  2470. package/rule/rule.go +540 -92
  2471. package/src/createTtscPlugin.ts +3010 -0
  2472. package/src/index.ts +1 -2974
  2473. package/src/internal/configEvaluatorFailure.ts +17 -9
  2474. package/src/internal/lintTrace.ts +106 -0
  2475. package/src/internal/normalizeContributors.ts +79 -0
  2476. package/src/structures/ITtscLintConfig.ts +27 -8
  2477. package/src/structures/ITtscLintPlugin.ts +13 -8
  2478. package/src/structures/ITtscLintPluginConfig.ts +18 -7
  2479. package/src/structures/ITtscLintPluginMeta.ts +10 -7
  2480. package/src/structures/TtscLintRuleSetting.ts +18 -13
  2481. package/src/structures/TtscLintSeverity.ts +5 -0
  2482. package/src/structures/format/ITtscLintFormat.ts +14 -8
  2483. package/src/structures/format/ITtscLintFormatJsDoc.ts +8 -1
  2484. package/src/structures/format/ITtscLintFormatSortImports.ts +14 -8
  2485. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +133 -25
  2486. package/src/structures/rules/ITtscLintBoundariesRules.ts +10 -5
  2487. package/src/structures/rules/ITtscLintContributorRules.ts +20 -13
  2488. package/src/structures/rules/ITtscLintCoreRuleOptions.ts +226 -24
  2489. package/src/structures/rules/ITtscLintCoreRules.ts +92 -72
  2490. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +8 -1
  2491. package/src/structures/rules/ITtscLintCypressRules.ts +24 -21
  2492. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +140 -24
  2493. package/src/structures/rules/ITtscLintFunctionalRules.ts +20 -12
  2494. package/src/structures/rules/ITtscLintJestRules.ts +22 -16
  2495. package/src/structures/rules/ITtscLintJsdocRules.ts +5 -0
  2496. package/src/structures/rules/ITtscLintJsxA11yRules.ts +24 -21
  2497. package/src/structures/rules/ITtscLintNextjsRules.ts +40 -42
  2498. package/src/structures/rules/ITtscLintPlaywrightRules.ts +24 -14
  2499. package/src/structures/rules/ITtscLintPromiseRules.ts +23 -14
  2500. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +8 -1
  2501. package/src/structures/rules/ITtscLintReactPerfRules.ts +18 -15
  2502. package/src/structures/rules/ITtscLintReactRuleOptions.ts +14 -4
  2503. package/src/structures/rules/ITtscLintReactRules.ts +33 -27
  2504. package/src/structures/rules/ITtscLintRegexpRules.ts +18 -4
  2505. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +150 -15
  2506. package/src/structures/rules/ITtscLintRules.ts +13 -9
  2507. package/src/structures/rules/ITtscLintSecurityRules.ts +33 -23
  2508. package/src/structures/rules/ITtscLintSolidRules.ts +57 -47
  2509. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +10 -2
  2510. package/src/structures/rules/ITtscLintStorybookRules.ts +52 -62
  2511. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +34 -30
  2512. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +12 -3
  2513. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +20 -15
  2514. package/src/structures/rules/ITtscLintTypeScriptRuleOptions.ts +116 -16
  2515. package/src/structures/rules/ITtscLintTypeScriptRules.ts +62 -51
  2516. package/src/structures/rules/ITtscLintUnicornRuleOptions.ts +241 -48
  2517. package/src/structures/rules/ITtscLintUnicornRules.ts +97 -44
  2518. package/src/structures/rules/ITtscLintVitestRules.ts +19 -11
  2519. package/src/structures/rules/TtscLintContributorOverlay.ts +40 -0
  2520. package/src/structures/rules/index.ts +1 -0
@@ -0,0 +1,31 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthAbstainsInsideTemplateSubstitution verifies the
6
+ // rule leaves a call expression nested in a template-literal `${…}`
7
+ // substitution byte-identical, never reflowing it across lines.
8
+ //
9
+ // Prettier renders template interpolations at printWidth:Infinity — it
10
+ // only keeps a line break the source already had — so breaking a call
11
+ // inside `${…}` would split the template and diverge from Prettier.
12
+ // hasTemplateSubstitutionAncestor makes the rule abstain even when the
13
+ // substitution's call would otherwise overflow the budget.
14
+ //
15
+ // 1. Configure printWidth=20 — the `${…}` call exceeds it.
16
+ // 2. Feed a template literal whose substitution holds a call.
17
+ // 3. Assert the rule reports nothing, leaving the template intact.
18
+ //
19
+ // @evidence contracts/testing.md#behavioral-verification The rule must leave the over-budget encodeURIComponent call inside the template substitution untouched, while the same call as an ordinary statement at width 20 must break and preserve the callee and value argument.
20
+ // @evidence contracts/testing.md#independent-expectations The supported template policy keeps an originally flat interpolation intact, while the supported width and trailing-comma policy supplies the authored ordinary-call lines. The template contents /x/ and interpolation value are fixed input meaning, not expectations derived from the ancestor helper.
21
+ // @evidence contracts/testing.md#distinguishing-cases The original template negative and ordinary-call positive differ by template ancestry, preventing an always-silent rule from satisfying this host. Existing multiline input behavior is owned by separate multiline and fixed-point tests; this host concerns an originally flat substitution.
22
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthAbstainsInsideTemplateSubstitution owns both literal cases through same-process registered-rule helpers and observes zero findings or complete rewritten source respectively. No installed consumer, native build or real host process is invoked.
23
+ func TestFormatPrintWidthAbstainsInsideTemplateSubstitution(t *testing.T) {
24
+ assertRuleSkipsSourceWithOptions(
25
+ t,
26
+ "format/print-width",
27
+ "const u = `/x/${encodeURIComponent(value)}`;\n",
28
+ `{"printWidth": 20}`,
29
+ )
30
+ assertFixSnapshotWithOptions(t, "format/print-width", "encodeURIComponent(value);\n", `{"printWidth": 20}`, "encodeURIComponent(\n value,\n);\n")
31
+ }
@@ -0,0 +1,37 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthAbstainsWhenCallbackBodyHoldsUncoveredStatement
6
+ // verifies formatPrintWidth emits no edit when a reflow target buries
7
+ // a multi-line node the dispatcher has no printer for.
8
+ //
9
+ // A statement the dispatcher has no printer for prints verbatim, and because it
10
+ // spans several source lines its interior columns are frozen at whatever the
11
+ // user wrote. Reflowing the enclosing call would re-indent everything around
12
+ // that frozen slice and produce inconsistently indented output. The coverage
13
+ // signal (`PrintNode`'s second return value) flips to false and the rule
14
+ // abstains, leaving the file byte-identical. Abstaining is always safe; a
15
+ // half-reflowed shape is corruption.
16
+ //
17
+ // The literal `do` statement has no structured dispatcher branch and spans
18
+ // multiple lines, so its verbatim body makes the enclosing target uncovered.
19
+ // This case asserts that current coverage boundary, not a historical printer
20
+ // transition or a complete formatter's output.
21
+ //
22
+ // 1. Feed a `new` expression whose callback body holds a multi-line `do`
23
+ // statement.
24
+ // 2. Run formatPrintWidth.
25
+ // 3. Assert the rule reports zero findings — no edit, no diagnostic.
26
+ //
27
+ // @evidence contracts/testing.md#behavioral-verification Runs format/print-width (default options) on a `new Singleton(...)` whose arrow callback body holds a multi-line `do { ... } while (ready);` statement indented eight columns, and requires zero findings.
28
+ // @evidence contracts/testing.md#independent-expectations The expected zero findings follows from the contract that the rule must abstain when a body holds a multi-line statement the printer would emit verbatim; it is an authored absence oracle, and the reflow of ordinary targets is verified by sibling tests.
29
+ // @evidence contracts/testing.md#distinguishing-cases One abstention case where the enclosing call would otherwise be re-indented around a frozen multi-line `do` statement; no counterpart with a printable statement body is included here.
30
+ // @evidence contracts/testing.md#execution-ownership In-process Go unit: calls assertRuleSkipsSource, which runs the engine with the single rule on a temp-dir file; no child process, built binary or installed consumer.
31
+ func TestFormatPrintWidthAbstainsWhenCallbackBodyHoldsUncoveredStatement(t *testing.T) {
32
+ assertRuleSkipsSource(
33
+ t,
34
+ "format/print-width",
35
+ "const x = new Singleton(\n () => {\n do {\n start();\n } while (ready);\n },\n);\n",
36
+ )
37
+ }
@@ -0,0 +1,32 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthAbstainsWhenInterMemberCommentPresent verifies
6
+ // the rule does NOT reflow a node that carries comments between its
7
+ // children.
8
+ //
9
+ // The v1 list printers join child docs with a freshly minted `,` and
10
+ // have no slot for inter-sibling trivia. Reflowing the literal would
11
+ // silently drop the comment — strictly worse than leaving the file
12
+ // alone. The rule's safety check `hasNonChildComments` detects the
13
+ // comment and abstains; the case feeds an object literal whose flat
14
+ // width is well over `printWidth` and asserts the rule emits zero
15
+ // findings.
16
+ //
17
+ // 1. Configure printWidth=10 (any non-trivial reflow would fire).
18
+ // 2. Feed `const x = { aa: 1, /* keep */ bb: 2 };`.
19
+ // 3. Assert the rule emits zero findings — the comment is preserved.
20
+ //
21
+ // @evidence contracts/testing.md#behavioral-verification Runs format/print-width at printWidth 10 on `const x = { aa: 1, /* keep */ bb: 2 };` and requires zero findings so the comment is not dropped by a reflow.
22
+ // @evidence contracts/testing.md#independent-expectations The expected zero findings follows from the contract that reflow must never delete a comment between members; the source is an authored literal wide enough that a reflow would otherwise fire.
23
+ // @evidence contracts/testing.md#distinguishing-cases One abstention case with a block comment between object members; a comment at the list edge is owned by the trailing-block-comment test and comment-free reflow by the reflow tests.
24
+ // @evidence contracts/testing.md#execution-ownership In-process Go unit: calls assertRuleSkipsSourceWithOptions, which runs the engine with the single rule on a temp-dir file; no child process, built binary or installed consumer.
25
+ func TestFormatPrintWidthAbstainsWhenInterMemberCommentPresent(t *testing.T) {
26
+ assertRuleSkipsSourceWithOptions(
27
+ t,
28
+ "format/print-width",
29
+ "const x = { aa: 1, /* keep */ bb: 2 };\n",
30
+ `{"printWidth": 10}`,
31
+ )
32
+ }
@@ -0,0 +1,35 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthAbstainsWhenTrailingBlockCommentBeforeCloseBracket
6
+ // verifies the rule abstains on a list whose last child carries a
7
+ // trailing `/* … */` comment before the closing bracket.
8
+ //
9
+ // Trailing block comments live in the inter-child gap between
10
+ // `lastChild.End()` and the closing token, which is exactly the
11
+ // surface `hasNonChildComments` scans. Reflowing the list would
12
+ // emit the close bracket immediately after the last child's render,
13
+ // dropping the comment. The safety check must catch it. The
14
+ // trailing-edge case is easy to miss because it does not look like
15
+ // a "between-members" comment to a casual reader — it sits at the
16
+ // edge of the list, not inside it.
17
+ //
18
+ // 1. Configure printWidth=10 so any reflow attempt would fire.
19
+ // 2. Feed `foo(a, b /* tail */);` — comment sits after `b` and
20
+ // before `)`.
21
+ // 3. Assert the rule emits zero findings — comment preserved by
22
+ // abstention.
23
+ //
24
+ // @evidence contracts/testing.md#behavioral-verification Runs format/print-width at printWidth 10 on `foo(a, b /* tail */);` and requires zero findings so the trailing comment before `)` is preserved.
25
+ // @evidence contracts/testing.md#independent-expectations The expected zero findings follows from the contract that reflow must not drop a comment; the authored input exceeds the width so a reflow would otherwise fire.
26
+ // @evidence contracts/testing.md#distinguishing-cases One abstention case with the comment after the last argument and before the closing bracket, the edge position that a between-members check could miss; a comment between members is owned by the inter-member test.
27
+ // @evidence contracts/testing.md#execution-ownership In-process Go unit: calls assertRuleSkipsSourceWithOptions, which runs the engine with the single rule on a temp-dir file; no child process, built binary or installed consumer.
28
+ func TestFormatPrintWidthAbstainsWhenTrailingBlockCommentBeforeCloseBracket(t *testing.T) {
29
+ assertRuleSkipsSourceWithOptions(
30
+ t,
31
+ "format/print-width",
32
+ "foo(a, b /* tail */);\n",
33
+ `{"printWidth": 10}`,
34
+ )
35
+ }
@@ -0,0 +1,31 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksArrayRestAssignmentTargetWithoutComma verifies
6
+ // the reflow breaks an overflowing array destructuring assignment target
7
+ // ending in a rest (`[a, ...rest] = arr`) WITHOUT appending a trailing comma.
8
+ //
9
+ // Arrays have no objectWrap:"preserve", so the suppression must be exercised
10
+ // through a genuine width-driven break: the flat form overflows printWidth,
11
+ // the reflow explodes it one element per line, and the printer's AddComma
12
+ // would otherwise put a comma after the AssignmentRestElement (a syntax
13
+ // error). The rest-target guard keeps the exploded shape valid.
14
+ //
15
+ // 1. Configure printWidth=20 and feed a single-line array rest target that overflows.
16
+ // 2. Run formatPrintWidth so the array breaks one element per line.
17
+ // 3. Assert the broken output has no trailing comma after the rest element.
18
+ //
19
+ // @evidence contracts/testing.md#behavioral-verification Applies format/print-width at printWidth 20 to `[alpha, ...restItems] = sourceArray;` and requires the exact output `[\n alpha,\n ...restItems\n] = sourceArray;\n` with no comma after the rest element.
20
+ // @evidence contracts/testing.md#independent-expectations The expected text is an authored literal; a trailing comma after a rest element in an assignment target is a syntax error, so omitting it is required rather than derived from the printer.
21
+ // @evidence contracts/testing.md#distinguishing-cases One changing case where a width-driven break would normally add a trailing comma; the rest-target guard distinguishes the valid output from `...restItems,`. Object-pattern rest targets are owned by a separate test.
22
+ // @evidence contracts/testing.md#execution-ownership In-process Go unit: calls assertFixSnapshotWithOptions, applying the rule's edits to a temp-dir file; no child process, built binary or installed consumer.
23
+ func TestFormatPrintWidthBreaksArrayRestAssignmentTargetWithoutComma(t *testing.T) {
24
+ assertFixSnapshotWithOptions(
25
+ t,
26
+ "format/print-width",
27
+ "[alpha, ...restItems] = sourceArray;\n",
28
+ `{"printWidth": 20}`,
29
+ "[\n alpha,\n ...restItems\n] = sourceArray;\n",
30
+ )
31
+ }
@@ -0,0 +1,26 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksCallWhenTrailingSemicolonOverflows charges the
6
+ // statement suffix against the call budget. The flat call ends at column 26
7
+ // and its semicolon lands at 27; ignoring the untouched suffix would miss
8
+ // the required break at width 26.
9
+ //
10
+ // 1. Reflow the statement at width 26 and compare the complete argument layout.
11
+ // 2. Preserve the same statement when width 27 admits its terminator.
12
+ //
13
+ // @evidence contracts/testing.md#behavioral-verification The owning rule must break run's arrow argument at width 26 while preserving v.ok, the declaration and semicolon. The same input at width 27 must remain silent.
14
+ // @evidence contracts/testing.md#independent-expectations The supported call-layout policy breaks the argument list when the complete statement exceeds the budget. The input's call/declaration prefix is 26 columns and semicolon makes 27, so adjacent budgets test suffix charging independently of the helper implementation.
15
+ // @evidence contracts/testing.md#distinguishing-cases Widths 26/27 with identical source distinguish suffix overflow from a fitting call. The trailing-line-comment host supplies an excluded comment suffix, while this host requires the real terminator to count.
16
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthBreaksCallWhenTrailingSemicolonOverflows owns both literal cases via same-process rule-engine helpers. This selected public Go unit starts no product process and builds or installs no artifact.
17
+ func TestFormatPrintWidthBreaksCallWhenTrailingSemicolonOverflows(t *testing.T) {
18
+ assertFixSnapshotWithOptions(
19
+ t,
20
+ "format/print-width",
21
+ "const x = run((v) => v.ok);\n",
22
+ `{"printWidth": 26}`,
23
+ "const x = run(\n (v) => v.ok,\n);\n",
24
+ )
25
+ assertRuleSkipsSourceWithOptions(t, "format/print-width", "const x = run((v) => v.ok);\n", `{"printWidth": 27}`)
26
+ }
@@ -0,0 +1,29 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksDefaultPlusNamedImportShape verifies a
6
+ // default-combined import now reflows. The whole declaration renders as one
7
+ // group (Prefix `import D, ` + Suffix ` from "x"`), so an overflowing
8
+ // `import D, { … } from "x"` breaks its named brace — the default binding
9
+ // stays on the `import D, {` line. This literal complete-output oracle
10
+ // protects that combined declaration layout without a historical result
11
+ // or an installed reference-formatter invocation.
12
+ //
13
+ // 1. Configure printWidth=10 (forces the reflow).
14
+ // 2. Feed `import D, { alpha, bravo, charlie } from "x";`.
15
+ // 3. Assert the broken Prettier shape.
16
+ //
17
+ // @evidence contracts/testing.md#behavioral-verification The overflowing combined import must retain D on the import opening line and break alpha/bravo/charlie into the named clause, preserving the module and semicolon. Losing the default binding or splitting declaration ownership fails the full snapshot.
18
+ // @evidence contracts/testing.md#independent-expectations The supported combined-import policy preserves the default binding prefix and module suffix around the broken named list. Print width is a layout preference rather than a hard guarantee for indivisible module/identifier text; the oracle preserves those tokens even when a line still exceeds ten.
19
+ // @evidence contracts/testing.md#distinguishing-cases This host owns the combined default-and-named positive at a narrow budget. The named-only import host distinguishes an absent default prefix; the namespace negative owns the indivisible clause that must not be split.
20
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthBreaksDefaultPlusNamedImportShape owns the options-bearing literal fixture and complete applied output through the in-process Go rule engine. No consumer import, native artifact production or product process is required.
21
+ func TestFormatPrintWidthBreaksDefaultPlusNamedImportShape(t *testing.T) {
22
+ assertFixSnapshotWithOptions(
23
+ t,
24
+ "format/print-width",
25
+ "import D, { alpha, bravo, charlie } from \"x\";\n",
26
+ `{"printWidth": 10}`,
27
+ "import D, {\n alpha,\n bravo,\n charlie,\n} from \"x\";\n",
28
+ )
29
+ }
@@ -0,0 +1,31 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksLongCallArguments verifies the rule reflows
6
+ // a long call expression by placing each argument on its own line.
7
+ //
8
+ // Call expressions exercise a different path through the dispatcher
9
+ // than object literals: the printer first emits the callee verbatim
10
+ // and then defers to the shared list printer for arguments. A
11
+ // regression in that glue would either lose the callee, duplicate it,
12
+ // or produce a malformed paren pair.
13
+ //
14
+ // 1. Configure printWidth=24.
15
+ // 2. Feed `process(aaaaaa, bbbbbb, cccccc);`.
16
+ // 3. Assert each argument occupies its own indented line with a
17
+ // trailing comma after the last.
18
+ //
19
+ // @evidence contracts/testing.md#behavioral-verification Applies format/print-width at printWidth 24 to `process(aaaaaa, bbbbbb, cccccc);` and requires the exact output with each argument on its own two-space-indented line and a trailing comma after the last.
20
+ // @evidence contracts/testing.md#independent-expectations The expected text is an authored literal for a width-24 break of three short arguments; the callee, arguments and punctuation are preserved and nothing is derived from the printer.
21
+ // @evidence contracts/testing.md#distinguishing-cases One changing case through the call-arguments path of the printer (a different path from object literals), where a lost callee, duplicated callee or malformed parentheses would change the output text; a fitting call is not included here.
22
+ // @evidence contracts/testing.md#execution-ownership In-process Go unit: calls assertFixSnapshotWithOptions, applying the rule's edits to a temp-dir file; no child process, built binary or installed consumer.
23
+ func TestFormatPrintWidthBreaksLongCallArguments(t *testing.T) {
24
+ assertFixSnapshotWithOptions(
25
+ t,
26
+ "format/print-width",
27
+ "process(aaaaaa, bbbbbb, cccccc);\n",
28
+ `{"printWidth": 24}`,
29
+ "process(\n aaaaaa,\n bbbbbb,\n cccccc,\n);\n",
30
+ )
31
+ }
@@ -0,0 +1,30 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksLongNamedExports verifies `export { … };`
6
+ // local exports reflow when the clause overflows the budget.
7
+ //
8
+ // NamedExports shares listShape with NamedImports, but the surrounding
9
+ // declaration is different (no `from` clause when exporting from
10
+ // the local scope). The case keeps NamedExports honest by exercising
11
+ // the standalone form, since a regression specific to NamedExports
12
+ // wouldn't surface through the import-side tests.
13
+ //
14
+ // 1. Configure printWidth=20.
15
+ // 2. Feed `export { alpha, bravo, charlie };`.
16
+ // 3. Assert the rewrite breaks the specifier clause across lines.
17
+ //
18
+ // @evidence contracts/testing.md#behavioral-verification The print-width rule must break a local named export at width 20 without losing any export name, its order or its terminator. The complete output also detects accidentally adding an import-like from clause.
19
+ // @evidence contracts/testing.md#independent-expectations The supported named-list layout breaks these local export specifiers when the complete declaration exceeds the budget. The literal retains the original local bindings and no module source, following the fixture syntax rather than the owning renderer.
20
+ // @evidence contracts/testing.md#distinguishing-cases This host owns the overflowing local named-export form, distinct from named imports that carry a module suffix. Short and already formatted targets are covered by the exact-fit and fixed-point hosts; this case is a required transformation.
21
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthBreaksLongNamedExports is a selected public Go unit invoking the owning registered rule and full applied-output helper in one process. Its local export need not resolve actual exported values for syntax-layout verification.
22
+ func TestFormatPrintWidthBreaksLongNamedExports(t *testing.T) {
23
+ assertFixSnapshotWithOptions(
24
+ t,
25
+ "format/print-width",
26
+ "export { alpha, bravo, charlie };\n",
27
+ `{"printWidth": 20}`,
28
+ "export {\n alpha,\n bravo,\n charlie,\n};\n",
29
+ )
30
+ }
@@ -0,0 +1,30 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksLongNamedImports verifies a wide
6
+ // `import { … } from "x";` declaration reflows to a multi-line clause.
7
+ //
8
+ // The ImportDeclaration printer owns the keyword, named-list brackets,
9
+ // `from`, module specifier and semicolon in one list group. The nested
10
+ // NamedImports target does not fire separately. Dropping either the
11
+ // module suffix or the named brackets would change the complete literal
12
+ // oracle, which preserves every binding and declaration token.
13
+ //
14
+ // 1. Configure printWidth=30.
15
+ // 2. Feed `import { alpha, bravo, charlie } from "x";`.
16
+ // 3. Assert the rewrite is the canonical broken clause.
17
+ //
18
+ // @evidence contracts/testing.md#behavioral-verification The rule must break the three named bindings at width 30 while preserving their order, the from clause, module string and semicolon. Complete output equality detects lost bindings or declaration punctuation.
19
+ // @evidence contracts/testing.md#independent-expectations The supported named-import layout breaks its specifier list while preserving the module suffix; the complete expected identifiers, punctuation and module are authored directly from the fixture, not reconstructed from the printer.
20
+ // @evidence contracts/testing.md#distinguishing-cases This host owns the named-only overflowing import. The default-plus-named host owns its additional binding prefix, and the namespace host supplies a long but indivisible no-reflow alternative.
21
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthBreaksLongNamedImports owns one complete source rewrite through the registered rule engine, fixture parser and fix applier in the Go test process. No installed consumer, native build or real host child participates.
22
+ func TestFormatPrintWidthBreaksLongNamedImports(t *testing.T) {
23
+ assertFixSnapshotWithOptions(
24
+ t,
25
+ "format/print-width",
26
+ "import { alpha, bravo, charlie } from \"x\";\n",
27
+ `{"printWidth": 30}`,
28
+ "import {\n alpha,\n bravo,\n charlie,\n} from \"x\";\n",
29
+ )
30
+ }
@@ -0,0 +1,31 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksLongNewExpressionArguments verifies the
6
+ // rule reflows `new Foo(a, b, c)` when the flat form overflows.
7
+ //
8
+ // NewExpression travels a sibling-but-distinct path through the
9
+ // dispatcher from CallExpression: it prepends `new ` and has an
10
+ // optional argument list. This present-arguments fixture protects the
11
+ // constructor prefix and the argument-list join; it does not exercise
12
+ // an absent argument list. The keyword must survive while arguments break.
13
+ //
14
+ // 1. Configure printWidth=20.
15
+ // 2. Feed `new Foo(aaaaaa, bbbbbb, cccccc);`.
16
+ // 3. Assert the rewrite keeps `new Foo(` on the head line and breaks
17
+ // the arguments onto indented lines with trailing comma.
18
+ //
19
+ // @evidence contracts/testing.md#behavioral-verification Applies format/print-width at printWidth 20 to `new Foo(aaaaaa, bbbbbb, cccccc);` and requires the exact output `new Foo(` followed by three indented arguments with a trailing comma and `);`.
20
+ // @evidence contracts/testing.md#independent-expectations The expected text is an authored literal; the `new` keyword, constructor name, arguments and punctuation are preserved and nothing is derived from the printer.
21
+ // @evidence contracts/testing.md#distinguishing-cases One changing case through the NewExpression path (keyword glue plus the argument list), the `new` counterpart of the call-arguments case; a fitting `new` call is not included here.
22
+ // @evidence contracts/testing.md#execution-ownership In-process Go unit: calls assertFixSnapshotWithOptions, applying the rule's edits to a temp-dir file; no child process, built binary or installed consumer.
23
+ func TestFormatPrintWidthBreaksLongNewExpressionArguments(t *testing.T) {
24
+ assertFixSnapshotWithOptions(
25
+ t,
26
+ "format/print-width",
27
+ "new Foo(aaaaaa, bbbbbb, cccccc);\n",
28
+ `{"printWidth": 20}`,
29
+ "new Foo(\n aaaaaa,\n bbbbbb,\n cccccc,\n);\n",
30
+ )
31
+ }
@@ -0,0 +1,27 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksLongObjectLiteral pins a complete object rewrite
6
+ // when its 34-column statement exceeds printWidth=20. Every key/value stays
7
+ // in order; indentation and the last-member comma distinguish a real layout
8
+ // correction from deletion or a skipped rewrite.
9
+ //
10
+ // 1. Reflow the three-property statement at width 20.
11
+ // 2. Compare the complete two-space vertical output.
12
+ // 3. Retain the same canonical statement at its exact width of 34.
13
+ //
14
+ // @evidence contracts/testing.md#behavioral-verification The rule must break the three-property object at width 20 without changing aa/bb/cc values or their order; the same source at width 34 must produce no finding.
15
+ // @evidence contracts/testing.md#independent-expectations The supported object-list layout breaks these three properties when their complete statement exceeds the budget. The authored statement has 34 columns including its semicolon; the silent boundary is counted from that input, not the rule's measurement.
16
+ // @evidence contracts/testing.md#distinguishing-cases Identical source at widths 20 and 34 distinguishes overflow from exact-fit behavior. The complete positive output pins indent, member separators and statement termination; the default-width host owns no-options 80/81 limits.
17
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthBreaksLongObjectLiteral owns its configured rewrite and exact-fit negative through the in-process rule engine and literal source fixtures. It is a selected public Go unit, with no install, native build or product-host child.
18
+ func TestFormatPrintWidthBreaksLongObjectLiteral(t *testing.T) {
19
+ assertFixSnapshotWithOptions(
20
+ t,
21
+ "format/print-width",
22
+ "const x = { aa: 1, bb: 2, cc: 3 };\n",
23
+ `{"printWidth": 20}`,
24
+ "const x = {\n aa: 1,\n bb: 2,\n cc: 3,\n};\n",
25
+ )
26
+ assertRuleSkipsSourceWithOptions(t, "format/print-width", "const x = { aa: 1, bb: 2, cc: 3 };\n", `{"printWidth": 34}`)
27
+ }
@@ -0,0 +1,29 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthBreaksOverflowingReactHookDepsArray verifies the negative
6
+ // twin of the first-argument deps-array hug: when the deps array overflows the close
7
+ // line, the supported hook layout keeps the callback hugged and the deps array
8
+ // one element per line. The short-deps changing companion owns the nearby
9
+ // flat-array layout; this command fixture pins only the broken fixed point.
10
+ //
11
+ // 1. Seed a `useEffect` call whose callback is hugged and whose deps array is
12
+ // already broken one element per line.
13
+ // 2. Run `ttsc format` with the default format block.
14
+ // 3. Require the file byte-identical.
15
+ //
16
+ // @evidence contracts/testing.md#behavioral-verification Runs the in-process `format` command on a `useEffect(() => {...}, [...])` call whose callback body is hugged and whose deps array is already broken one element per line (the flat array would overflow), and requires the file byte-identical.
17
+ // @evidence contracts/testing.md#independent-expectations The supported hook layout keeps the block callback attached and preserves an overflowing dependency array on separate lines. The complete authored source is its own expected output; this fixed point does not show a flat input changing or certify an installed formatter result.
18
+ // @evidence contracts/testing.md#distinguishing-cases This fixed-point case rejects exploding the call or flattening its overflowing array. Alone it cannot reject a formatter that does nothing; HugsFirstCallbackWithArrayArg separately requires a changed callback layout with a short array.
19
+ // @evidence contracts/testing.md#execution-ownership In-process Go unit: calls run with the format subcommand on a temp-dir project via assertFormatUnchanged; no child process, built binary or installed consumer.
20
+ func TestFormatPrintWidthBreaksOverflowingReactHookDepsArray(t *testing.T) {
21
+ assertFormatUnchanged(t, `useEffect(() => {
22
+ doSomethingWithTheValues();
23
+ }, [
24
+ firstDependencyValueHere,
25
+ secondDependencyValueHere,
26
+ thirdDependencyValueHere,
27
+ ]);
28
+ `)
29
+ }
@@ -0,0 +1,24 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthCheckAbstainsWhenCtxIsNil verifies the Check method
6
+ // returns immediately without panicking when ctx is nil.
7
+ //
8
+ // Locks the nil-guard at the top of Check. The rule is invoked by the engine
9
+ // dispatch loop which guarantees a non-nil context, but the guard exists as a
10
+ // safety net for callers that invoke Check directly (tests, future tooling).
11
+ // Without the guard a nil-pointer dereference would crash the process.
12
+ //
13
+ // 1. Call Check directly with a nil *Context.
14
+ // 2. Assert the call returns without panicking.
15
+ //
16
+ // @evidence contracts/testing.md#behavioral-verification formatPrintWidth.Check must safely return when its Context is absent rather than attempting AST or source access.
17
+ // @evidence contracts/testing.md#independent-expectations The direct-call safety contract admits a nil Context; normal return is the observable oracle because there is no context or collector to receive findings.
18
+ // @evidence contracts/testing.md#distinguishing-cases This missing-context guard complements real-context nil-node and invalid-source-range checks; only the nil/nil input executes here and no finding-count assertion is claimed.
19
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthCheckAbstainsWhenCtxIsNil is selected as a public Go unit by the lint semantic-unit Evidence claim; its local cases call the owning operation in the shared process without a consumer install, native artifact build or product host.
20
+ func TestFormatPrintWidthCheckAbstainsWhenCtxIsNil(t *testing.T) {
21
+ var rule formatPrintWidth
22
+ // Must not panic — the nil guard returns immediately.
23
+ rule.Check(nil, nil)
24
+ }
@@ -0,0 +1,48 @@
1
+ package linthost
2
+
3
+ import (
4
+ "path/filepath"
5
+ "testing"
6
+
7
+ shimast "github.com/microsoft/typescript-go/shim/ast"
8
+ )
9
+
10
+ // TestFormatPrintWidthCheckAbstainsWhenNodeIsNil verifies that passing a nil
11
+ // node to Check does not panic and emits no findings.
12
+ //
13
+ // The nil-guard `if ctx == nil || ctx.File == nil || node == nil` at the top of
14
+ // Check covers the nil-ctx, nil-File, and nil-node cases in a single condition.
15
+ // This host exercises nil node and nil File; a sibling exercises nil Context.
16
+ // Without those guards direct invocation could dereference absent state.
17
+ //
18
+ // 1. Parse a minimal source to obtain a real SourceFile.
19
+ // 2. Construct a Context with the parsed file.
20
+ // 3. Call Check with a nil *shimast.Node.
21
+ // 4. Assert no panic or finding occurs.
22
+ // 5. Call Check with a parsed node but absent File and assert the same result.
23
+ //
24
+ // @evidence contracts/testing.md#behavioral-verification formatPrintWidth.Check must return without panicking or collecting a finding for a nil node in a real source context and for a parsed node when Context.File is absent.
25
+ // @evidence contracts/testing.md#independent-expectations The absent-node safety contract requires an empty finding population; a collector observes any unexpected emission.
26
+ // @evidence contracts/testing.md#distinguishing-cases This host executes nil node and absent File arms; nil Context and out-of-range source guards have separate hosts.
27
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthCheckAbstainsWhenNodeIsNil is a public Go unit selected by the lint semantic-unit Evidence claim. It calls Check directly with isolated fixture source and a collector, without installing a consumer or starting a host.
28
+ func TestFormatPrintWidthCheckAbstainsWhenNodeIsNil(t *testing.T) {
29
+ root := t.TempDir()
30
+ filePath := filepath.Join(root, "src", "main.ts")
31
+ source := "const x = 1;\n"
32
+ writeFile(t, filePath, source)
33
+ file := parseTSFile(t, filePath, source)
34
+ var findings []*Finding
35
+ ctx := &Context{File: file, Severity: SeverityError, collect: func(f *Finding) { findings = append(findings, f) }}
36
+ var rule formatPrintWidth
37
+ var node *shimast.Node
38
+ // Must not panic — the nil-node arm of the guard fires and returns.
39
+ rule.Check(ctx, node)
40
+ if len(findings) != 0 {
41
+ t.Fatalf("nil node must emit no findings, got %d", len(findings))
42
+ }
43
+ missingFile := &Context{Severity: SeverityError, collect: func(f *Finding) { findings = append(findings, f) }}
44
+ rule.Check(missingFile, file.AsNode())
45
+ if len(findings) != 0 {
46
+ t.Fatalf("absent File must emit no findings, got %d", len(findings))
47
+ }
48
+ }
@@ -0,0 +1,71 @@
1
+ package linthost
2
+
3
+ import (
4
+ "path/filepath"
5
+ "testing"
6
+
7
+ shimast "github.com/microsoft/typescript-go/shim/ast"
8
+ )
9
+
10
+ // TestFormatPrintWidthCheckAbstainsWhenNodeRangeExceedsContextSource verifies
11
+ // Check returns without emitting a finding when the node's byte range falls
12
+ // outside the Context's source string.
13
+ //
14
+ // Locks the safety guard `if start < 0 || end <= start || end > len(src)` in
15
+ // Check. The guard defends against a mismatch between the context's source
16
+ // file and the visiting node: if the node's End offset exceeds the source
17
+ // length, slicing src[start:end] would panic. The guard makes the rule
18
+ // byte-safe even when caller invariants are violated.
19
+ //
20
+ // The scenario uses two parsed files: a short one (file1) and a longer one
21
+ // (file2). A node from file2 whose End offset exceeds len(file1.Text()) is
22
+ // passed to Check with a context wired to file1. The `end > len(src)` branch
23
+ // fires and Check returns without emitting a finding.
24
+ //
25
+ // 1. Parse a short file (file1, 13 bytes) as the context's source.
26
+ // 2. Parse a longer file (file2, 46 bytes) and locate an object literal
27
+ // whose End offset overflows file1's byte length.
28
+ // 3. Call Check directly with ctx.File=file1, node from file2.
29
+ // 4. Assert no findings are collected (the guard fires and returns early).
30
+ //
31
+ // @evidence contracts/testing.md#behavioral-verification formatPrintWidth.Check must abstain when a parsed object ends beyond the separate context source length.
32
+ // @evidence contracts/testing.md#independent-expectations The independently constructed short and long source literals establish the invalid range; zero findings is the safety contract.
33
+ // @evidence contracts/testing.md#distinguishing-cases The fixture range is required rather than skipped if construction changes; valid reflows and other missing-context guards live in sibling cases.
34
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthCheckAbstainsWhenNodeRangeExceedsContextSource is a public Go unit selected by the lint semantic-unit Evidence claim. It calls Check directly with isolated fixture source and a collector, without installing a consumer or starting a host.
35
+ func TestFormatPrintWidthCheckAbstainsWhenNodeRangeExceedsContextSource(t *testing.T) {
36
+ root := t.TempDir()
37
+
38
+ // file1 is short — 13 bytes total.
39
+ file1Path := filepath.Join(root, "short.ts")
40
+ file1Src := "const x = 1;\n"
41
+ writeFile(t, file1Path, file1Src)
42
+ file1 := parseTSFile(t, file1Path, file1Src)
43
+
44
+ // file2 is longer; its object literal's End offset exceeds len(file1Src).
45
+ file2Path := filepath.Join(root, "long.ts")
46
+ file2Src := "const y = { alpha: 1, bravo: 2, charlie: 3 };\n"
47
+ writeFile(t, file2Path, file2Src)
48
+ file2 := parseTSFile(t, file2Path, file2Src)
49
+
50
+ node := firstNodeOfKind(t, file2, shimast.KindObjectLiteralExpression)
51
+ if node.End() <= len(file1Src) {
52
+ t.Fatalf("fixture must exceed the context source: file2 node End=%d does not exceed len(file1)=%d", node.End(), len(file1Src))
53
+ }
54
+
55
+ // Build a context pointing at file1 but visiting a node from file2.
56
+ // The guard end > len(src) must fire — no findings expected.
57
+ var collected []*Finding
58
+ ctx := &Context{
59
+ File: file1,
60
+ Severity: SeverityError,
61
+ rule: formatPrintWidth{},
62
+ collect: func(f *Finding) { collected = append(collected, f) },
63
+ }
64
+
65
+ var rule formatPrintWidth
66
+ rule.Check(ctx, node)
67
+
68
+ if len(collected) != 0 {
69
+ t.Fatalf("expected zero findings when node range exceeds source; got %d", len(collected))
70
+ }
71
+ }
@@ -0,0 +1,29 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthDeclinesLastArgHugAfterArrowLead verifies last-argument
6
+ // hugging declines when a leading argument is an arrow with an expression
7
+ // body. The supported two-argument arrow-and-array layout explodes the
8
+ // arguments rather than hugging the trailing array. This expression-body
9
+ // arrow carries no hard break, so the hard-break guard alone does not select
10
+ // that decision; the dedicated arrow-and-array shape guard does.
11
+ //
12
+ // 1. Parse a useMemo call whose first arg is an expression-body arrow and
13
+ // last arg is an array, overflowing 80.
14
+ // 2. Apply format/print-width.
15
+ // 3. Assert both arguments explode onto their own lines.
16
+ //
17
+ // @evidence contracts/testing.md#behavioral-verification The registered format/print-width rule parses the declines last arg hug after arrow lead fixture and applies its edit; complete authored output equality rejects lost source content or punctuation alongside incorrect line layout. The owned result is: Assert both arguments explode onto their own lines.
18
+ // @evidence contracts/testing.md#independent-expectations The source operands and literal expected layout are authored independently of the rule printer. The fixture fixes printWidth and indentation, so expected line placement does not come from rendering the implementation under test.
19
+ // @evidence contracts/testing.md#distinguishing-cases One changing case where a leading expression-bodied arrow (which has no hard break) must still stop the trailing array from being hugged; the output explodes both arguments, whereas hugging would keep `[dependencyOneHere, ...]` on the call line.
20
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthDeclinesLastArgHugAfterArrowLead is one Go unit entry through the registered rule engine, parser and fix applier; it uses no installed consumer or child product host.
21
+ func TestFormatPrintWidthDeclinesLastArgHugAfterArrowLead(t *testing.T) {
22
+ assertFixSnapshotWithOptions(
23
+ t,
24
+ "format/print-width",
25
+ "useMemo(() => computeExpensiveValueHere(), [dependencyOneHere, dependencyTwoHere]);\n",
26
+ `{"printWidth":80,"tabWidth":2}`,
27
+ "useMemo(\n () => computeExpensiveValueHere(),\n [dependencyOneHere, dependencyTwoHere],\n);\n",
28
+ )
29
+ }
@@ -0,0 +1,28 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestFormatPrintWidthDeclinesLastArgHugAfterCallback verifies last-argument
6
+ // hugging declines when a leading argument is a block-bodied callback. The
7
+ // callback has a nonempty block body, so this supported plain-call layout
8
+ // places each argument on its own line instead of hugging the trailing
9
+ // object literal. The fixture owns this two-argument shape.
10
+ //
11
+ // 1. Parse a call whose first argument is a block callback and whose last
12
+ // is an object literal, overflowing 80.
13
+ // 2. Apply format/print-width.
14
+ // 3. Assert both arguments explode onto their own indented lines.
15
+ //
16
+ // @evidence contracts/testing.md#behavioral-verification The registered format/print-width rule parses the declines last arg hug after callback fixture and applies its edit; complete authored output equality rejects lost source content or punctuation alongside incorrect line layout. The owned result is: Assert both arguments explode onto their own indented lines.
17
+ // @evidence contracts/testing.md#independent-expectations The source operands and literal expected layout are authored independently of the rule printer. The fixture fixes printWidth and indentation, so expected line placement does not come from rendering the implementation under test.
18
+ // @evidence contracts/testing.md#distinguishing-cases One changing case where a leading block-bodied callback must stop the trailing object from being hugged; the output explodes both arguments with the object kept flat on its own line, whereas hugging would attach the object to the closing of the callback.
19
+ // @evidence contracts/testing.md#execution-ownership TestFormatPrintWidthDeclinesLastArgHugAfterCallback is one Go unit entry through the registered rule engine, parser and fix applier; it uses no installed consumer or child product host.
20
+ func TestFormatPrintWidthDeclinesLastArgHugAfterCallback(t *testing.T) {
21
+ assertFixSnapshotWithOptions(
22
+ t,
23
+ "format/print-width",
24
+ "registerHandlerForSomething(() => { doThing(); doMoreStuff(); }, { key: 1, other: 2 });\n",
25
+ `{"printWidth":80,"tabWidth":2}`,
26
+ "registerHandlerForSomething(\n () => {\n doThing();\n doMoreStuff();\n },\n { key: 1, other: 2 },\n);\n",
27
+ )
28
+ }