@ttsc/lint 0.30.3 → 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,30 @@
1
+ package linthost
2
+
3
+ import (
4
+ "testing"
5
+
6
+ shimast "github.com/microsoft/typescript-go/shim/ast"
7
+ )
8
+
9
+ func assertJSDocRuleLines(t *testing.T, ruleName, source string, lines ...int) {
10
+ t.Helper()
11
+ file := parseTSFile(t, "/virtual/jsdoc.ts", source)
12
+ findings := NewEngine(RuleConfig{ruleName: SeverityError}).Run([]*shimast.SourceFile{file}, nil)
13
+ for _, finding := range findings {
14
+ if finding.engineFailure {
15
+ t.Fatalf("%s: expected ordinary rule findings, got engine failure: %+v", ruleName, finding)
16
+ }
17
+ }
18
+ actual := normalizeRuleFindings(file, findings)
19
+ if len(actual) != len(lines) {
20
+ t.Fatalf("%s: want lines %v, got %+v", ruleName, lines, actual)
21
+ }
22
+ for i, line := range lines {
23
+ if actual[i].Rule != ruleName || actual[i].Severity != SeverityError || actual[i].Line != line {
24
+ t.Fatalf("%s[%d]: want line %d, got %+v; all findings=%+v", ruleName, i, line, actual[i], actual)
25
+ }
26
+ }
27
+ if len(lines) != 0 {
28
+ recordBehavioralWitness(t, ruleName, behavioralWitnessEngine)
29
+ }
30
+ }
@@ -0,0 +1,21 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAltTextAllowsImgSpreadProps verifies jsx-a11y/alt-text stays quiet
6
+ // for an img whose only attribute is a spread.
7
+ //
8
+ // A `{...props}` spread makes the attribute set unknown at lint time, and the
9
+ // alt text may be inside it, so the rule must not guess. This case also guards
10
+ // the former crash of the attribute walk on spread members.
11
+ //
12
+ // 1. Run only `jsx-a11y/alt-text` over `<img {...props} />` in a TSX file.
13
+ // 2. Require no finding, which also fails on a recovered rule panic.
14
+ //
15
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleSkips parses the TSX source with parseTSXFile and runs NewEngine.Run with only jsx-a11y/alt-text enabled at error severity. The Test requires zero findings for the spread-only img, so a missing-alt report and an engine-failure finding produced by a recovered panic would both fail it.
16
+ // @evidence contracts/testing.md#independent-expectations Because the missing-attribute check is conservative, alt may arrive through an unknown spread. The authored source and the zero expectation follow from that policy rather than from sampling rule output.
17
+ // @evidence contracts/testing.md#distinguishing-cases The Test is the spread-accepted case. TestJsxA11yAltTextRequiresImgAlt reports an img with a known set of attributes that lacks alt and accepts one with alt.
18
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleSkips call, executing the rule engine on a parsed virtual TSX file in the test process with no browser, accessibility runtime or product host.
19
+ func TestJsxA11yAltTextAllowsImgSpreadProps(t *testing.T) {
20
+ assertJsxA11yRuleSkips(t, "jsx-a11y/alt-text", `declare const props: object; const Component = () => <img {...props} />;`)
21
+ }
@@ -0,0 +1,22 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAltTextRequiresImgAlt verifies jsx-a11y/alt-text reports an img
6
+ // without a text alternative and accepts one with alt.
7
+ //
8
+ // This is the intrinsic-element branch of the rule, which reads JSX attributes
9
+ // without any React component metadata.
10
+ //
11
+ // 1. Run only `jsx-a11y/alt-text` over `<img src="avatar.png" />` and expect
12
+ // one finding whose message contains "alt text".
13
+ // 2. Run it over the same img with `alt="Profile"` and expect none.
14
+ //
15
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/alt-text enabled. The img without alt yields exactly one ordinary SeverityError finding from that rule whose message contains "alt text"; assertJsxA11yRuleSkips requires zero findings for the img with alt="Profile".
16
+ // @evidence contracts/testing.md#independent-expectations An image needs a text alternative, and an explicit alt string provides one. The two literal sources and the "alt text" message fragment are authored from that accessibility policy.
17
+ // @evidence contracts/testing.md#distinguishing-cases The two sources are the same avatar img with and without the alt attribute. The alternatives alt can be replaced by (aria-label, aria-labelledby) and the spread case are not exercised here; the spread case belongs to TestJsxA11yAltTextAllowsImgSpreadProps.
18
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
19
+ func TestJsxA11yAltTextRequiresImgAlt(t *testing.T) {
20
+ assertJsxA11yRuleFinds(t, "jsx-a11y/alt-text", `const Component = () => <img src="avatar.png" />;`, "alt text")
21
+ assertJsxA11yRuleSkips(t, "jsx-a11y/alt-text", "declare const props: object; const Component = () => <img src=\"avatar.png\" alt=\"Profile\" />;")
22
+ }
@@ -0,0 +1,24 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAnchorAmbiguousTextRejectsClickHere verifies
6
+ // jsx-a11y/anchor-ambiguous-text reports an anchor whose text is the ambiguous
7
+ // phrase "click here" and accepts descriptive text.
8
+ //
9
+ // Screen-reader users navigate by listing links, where "click here" or "more"
10
+ // carry no information about the destination.
11
+ //
12
+ // 1. Run only `jsx-a11y/anchor-ambiguous-text` over
13
+ // `<a href="/docs">click here</a>` and expect one finding whose message
14
+ // contains "ambiguous".
15
+ // 2. Run it over `<a href="/docs">Documentation</a>` and expect none.
16
+ //
17
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/anchor-ambiguous-text enabled. The "click here" anchor yields exactly one ordinary SeverityError finding from that rule whose message contains "ambiguous"; assertJsxA11yRuleSkips requires zero findings for the Documentation anchor.
18
+ // @evidence contracts/testing.md#independent-expectations Descriptive link text identifies the destination for assistive navigation, while "click here" does not. The two literal sources and the "ambiguous" message fragment are authored from that policy.
19
+ // @evidence contracts/testing.md#distinguishing-cases The two anchors share the same /docs href and differ only in their text. The other phrases in the rule's list ("here", "link", "more", "read more", ...) and case or whitespace normalisation are not exercised by this Test.
20
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
21
+ func TestJsxA11yAnchorAmbiguousTextRejectsClickHere(t *testing.T) {
22
+ assertJsxA11yRuleFinds(t, "jsx-a11y/anchor-ambiguous-text", `const Component = () => <a href="/docs">click here</a>;`, "ambiguous")
23
+ assertJsxA11yRuleSkips(t, "jsx-a11y/anchor-ambiguous-text", "declare const props: object; const Component = () => <a href=\"/docs\">Documentation</a>;")
24
+ }
@@ -0,0 +1,25 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAnchorHasContentRejectsEmptyAnchor verifies
6
+ // jsx-a11y/anchor-has-content reports empty paired and self-closing anchors
7
+ // and accepts an anchor with text.
8
+ //
9
+ // These links have neither content nor an explicit accessible label.
10
+ // Both paired and self-closing JSX can omit those name sources.
11
+ //
12
+ // 1. Run only `jsx-a11y/anchor-has-content` over `<a href="/home"></a>` and
13
+ // over `<a href="/home" />`, expecting one finding each whose message
14
+ // contains "content".
15
+ // 2. Run it over `<a href="/home">Home</a>` and expect none.
16
+ //
17
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses each TSX source and runs NewEngine.Run with only jsx-a11y/anchor-has-content enabled. The paired empty anchor and the self-closing anchor each yield exactly one ordinary SeverityError finding from that rule whose message contains "content"; assertJsxA11yRuleSkips requires zero findings for the anchor containing Home.
18
+ // @evidence contracts/testing.md#independent-expectations Visible text gives a link its accessible name, so an anchor with neither text nor a label is a violation in both element syntaxes. The three literal sources and the "content" fragment are authored from that policy.
19
+ // @evidence contracts/testing.md#distinguishing-cases All three anchors share the /home href; the paired and self-closing forms report and the form with child text does not. Other accessible-name sources (aria-label and similar) are not exercised by this Test.
20
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with two assertJsxA11yRuleFinds calls and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
21
+ func TestJsxA11yAnchorHasContentRejectsEmptyAnchor(t *testing.T) {
22
+ assertJsxA11yRuleFinds(t, "jsx-a11y/anchor-has-content", `const Component = () => <a href="/home"></a>;`, "content")
23
+ assertJsxA11yRuleFinds(t, "jsx-a11y/anchor-has-content", `const Component = () => <a href="/home" />;`, "content")
24
+ assertJsxA11yRuleSkips(t, "jsx-a11y/anchor-has-content", "declare const props: object; const Component = () => <a href=\"/home\">Home</a>;")
25
+ }
@@ -0,0 +1,21 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAnchorIsValidAllowsSpreadProps verifies jsx-a11y/anchor-is-valid
6
+ // stays quiet for an anchor whose only attribute is a spread.
7
+ //
8
+ // The href may arrive through `{...props}`, so the missing-href report must not
9
+ // fire; this also guards the former crash of the attribute walk on spread
10
+ // members.
11
+ //
12
+ // 1. Run only `jsx-a11y/anchor-is-valid` over `<a {...props}>documentation</a>`.
13
+ // 2. Require no finding, which also fails on a recovered rule panic.
14
+ //
15
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleSkips parses the TSX source and runs NewEngine.Run with only jsx-a11y/anchor-is-valid enabled at error severity. The Test requires zero findings for the spread-only anchor, so a missing-href report and an engine-failure finding produced by a recovered panic would both fail it.
16
+ // @evidence contracts/testing.md#independent-expectations A spread may supply href, so its absence cannot be proven statically and must not be reported. The authored source and the zero expectation follow from that policy rather than from sampling rule output.
17
+ // @evidence contracts/testing.md#distinguishing-cases This is the spread-accepted case with no explicit href. TestJsxA11yAnchorIsValidRejectsHashHrefDespiteSpread covers an explicit invalid href beside a spread, and the hash-href Test covers it without a spread.
18
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleSkips call, executing the rule engine on a parsed virtual TSX file in the test process with no browser, accessibility runtime or product host.
19
+ func TestJsxA11yAnchorIsValidAllowsSpreadProps(t *testing.T) {
20
+ assertJsxA11yRuleSkips(t, "jsx-a11y/anchor-is-valid", `declare const props: object; const Component = () => <a {...props}>documentation</a>;`)
21
+ }
@@ -0,0 +1,22 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAnchorIsValidRejectsHashHrefDespiteSpread verifies a spread does
6
+ // not suppress an explicit invalid href in jsx-a11y/anchor-is-valid.
7
+ //
8
+ // The conservative spread handling applies only to reports about an absent
9
+ // attribute; an explicitly written `href="#"` is a violation on its own.
10
+ //
11
+ // 1. Run only `jsx-a11y/anchor-is-valid` over `<a href="#" {...props}>` and
12
+ // expect one finding whose message contains "valid navigation target".
13
+ // 2. Run it over `<a href="/docs" {...props}>` and expect none.
14
+ //
15
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/anchor-is-valid enabled. The anchor with href="#" and a spread yields exactly one ordinary SeverityError finding from that rule whose message contains "valid navigation target"; assertJsxA11yRuleSkips requires zero findings for href="/docs" with the same spread.
16
+ // @evidence contracts/testing.md#independent-expectations The lint policy reports an explicitly authored hash-only placeholder despite an unknown spread, and accepts the authored /docs path. Literal fixtures and the message fragment independently pin that static policy; the test does not certify browser navigation, destination existence or the final runtime spread value.
17
+ // @evidence contracts/testing.md#distinguishing-cases The two sources keep the same spread and differ only in the href value, so the spread cannot be what silences or triggers the report. The spread-only anchor is covered by TestJsxA11yAnchorIsValidAllowsSpreadProps.
18
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
19
+ func TestJsxA11yAnchorIsValidRejectsHashHrefDespiteSpread(t *testing.T) {
20
+ assertJsxA11yRuleFinds(t, "jsx-a11y/anchor-is-valid", `declare const props: object; const Component = () => <a href="#" {...props}>documentation</a>;`, "valid navigation target")
21
+ assertJsxA11yRuleSkips(t, "jsx-a11y/anchor-is-valid", "declare const props: object; const Component = () => <a href=\"/docs\" {...props}>documentation</a>;")
22
+ }
@@ -0,0 +1,22 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAnchorIsValidRejectsHashHref verifies jsx-a11y/anchor-is-valid
6
+ // reports a hash-only href and accepts a real relative path.
7
+ //
8
+ // The rule handles the high-confidence invalid targets that need no router
9
+ // settings: an empty href, a hash-only href and a javascript: URL.
10
+ //
11
+ // 1. Run only `jsx-a11y/anchor-is-valid` over `<a href="#">Home</a>` and
12
+ // expect one finding whose message contains "href".
13
+ // 2. Run it over `<a href="/home">Home</a>` and expect none.
14
+ //
15
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/anchor-is-valid enabled. The anchor with href="#" yields exactly one ordinary SeverityError finding from that rule whose message contains "href"; assertJsxA11yRuleSkips requires zero findings for href="/home".
16
+ // @evidence contracts/testing.md#independent-expectations The lint policy treats the literal hash-only href as a placeholder and accepts the authored /home path. The literal pair and message fragment are independent policy expectations; no browser navigation or destination existence is asserted.
17
+ // @evidence contracts/testing.md#distinguishing-cases The two anchors share the Home label and differ only in the href value. The empty href and javascript: URL branches, and spread handling, are not exercised by this Test.
18
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
19
+ func TestJsxA11yAnchorIsValidRejectsHashHref(t *testing.T) {
20
+ assertJsxA11yRuleFinds(t, "jsx-a11y/anchor-is-valid", `const Component = () => <a href="#">Home</a>;`, "href")
21
+ assertJsxA11yRuleSkips(t, "jsx-a11y/anchor-is-valid", "declare const props: object; const Component = () => <a href=\"/home\">Home</a>;")
22
+ }
@@ -0,0 +1,23 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAriaActivedescendantHasTabindexRequiresFocusTarget verifies
6
+ // jsx-a11y/aria-activedescendant-has-tabindex reports an element that sets
7
+ // aria-activedescendant without tabIndex and accepts one with tabIndex.
8
+ //
9
+ // aria-activedescendant only works from a focused container, so the rule ties
10
+ // the attribute to a sibling tabIndex on the same tag.
11
+ //
12
+ // 1. Run only the rule over `<div aria-activedescendant="item-1" />` and
13
+ // expect one finding whose message contains "tabIndex".
14
+ // 2. Run it over the same div with `tabIndex={0}` and expect none.
15
+ //
16
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/aria-activedescendant-has-tabindex enabled. The div without tabIndex yields exactly one ordinary SeverityError finding from that rule whose message contains "tabIndex"; assertJsxA11yRuleSkips requires zero findings for the div with tabIndex={0}.
17
+ // @evidence contracts/testing.md#independent-expectations A tabIndex of zero makes the controlling container focusable, which is what aria-activedescendant requires. The two literal sources and the "tabIndex" fragment are authored from that policy.
18
+ // @evidence contracts/testing.md#distinguishing-cases The two sources are the same div with and without tabIndex={0}. A negative tabIndex, a lowercase tabindex attribute and spread attributes are not exercised by this Test.
19
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
20
+ func TestJsxA11yAriaActivedescendantHasTabindexRequiresFocusTarget(t *testing.T) {
21
+ assertJsxA11yRuleFinds(t, "jsx-a11y/aria-activedescendant-has-tabindex", `const Component = () => <div aria-activedescendant="item-1" />;`, "tabIndex")
22
+ assertJsxA11yRuleSkips(t, "jsx-a11y/aria-activedescendant-has-tabindex", "declare const props: object; const Component = () => <div aria-activedescendant=\"item-1\" tabIndex={0} />;")
23
+ }
@@ -0,0 +1,22 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAriaPropsRejectsUnknownProp verifies jsx-a11y/aria-props reports a
6
+ // misspelled aria-* attribute and accepts the canonical spelling.
7
+ //
8
+ // The rule is attribute-local and checks the aria-* name against the ARIA
9
+ // vocabulary before any role compatibility rule applies.
10
+ //
11
+ // 1. Run only `jsx-a11y/aria-props` over `<div aria-labeledby="title" />` and
12
+ // expect one finding whose message contains "Unknown ARIA".
13
+ // 2. Run it over `<div aria-labelledby="title" />` and expect none.
14
+ //
15
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/aria-props enabled. The attribute aria-labeledby yields exactly one ordinary SeverityError finding from that rule whose message contains "Unknown ARIA"; assertJsxA11yRuleSkips requires zero findings for aria-labelledby.
16
+ // @evidence contracts/testing.md#independent-expectations The ARIA vocabulary spells the reference attribute aria-labelledby with two l characters, so the one-l spelling is unknown. The two literal sources and the "Unknown ARIA" fragment are authored from the ARIA specification.
17
+ // @evidence contracts/testing.md#distinguishing-cases The two divs share the title value and differ only in the attribute spelling. Other aria-* attributes are not exercised by this Test.
18
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
19
+ func TestJsxA11yAriaPropsRejectsUnknownProp(t *testing.T) {
20
+ assertJsxA11yRuleFinds(t, "jsx-a11y/aria-props", `const Component = () => <div aria-labeledby="title" />;`, "Unknown ARIA")
21
+ assertJsxA11yRuleSkips(t, "jsx-a11y/aria-props", "declare const props: object; const Component = () => <div aria-labelledby=\"title\" />;")
22
+ }
@@ -0,0 +1,23 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAriaProptypesRejectsBadBoolean verifies jsx-a11y/aria-proptypes
6
+ // reports a non-boolean string literal on a boolean ARIA attribute and accepts
7
+ // a boolean literal.
8
+ //
9
+ // The rule checks known string literals against the attribute's value shape and
10
+ // leaves dynamic expressions alone.
11
+ //
12
+ // 1. Run only `jsx-a11y/aria-proptypes` over `<div aria-hidden="maybe" />` and
13
+ // expect one finding whose message contains "true or false".
14
+ // 2. Run it over `<div aria-hidden="false" />` and expect none.
15
+ //
16
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/aria-proptypes enabled. aria-hidden="maybe" yields exactly one ordinary SeverityError finding from that rule whose message contains "true or false"; assertJsxA11yRuleSkips requires zero findings for aria-hidden="false".
17
+ // @evidence contracts/testing.md#independent-expectations The ARIA boolean attributes accept the tokens true and false, so "maybe" is invalid and "false" is valid. The two literal sources and the message fragment are authored from that vocabulary.
18
+ // @evidence contracts/testing.md#distinguishing-cases The two divs differ only in the aria-hidden literal. Dynamic expressions, the tristate and numeric attribute families are not exercised by this Test.
19
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
20
+ func TestJsxA11yAriaProptypesRejectsBadBoolean(t *testing.T) {
21
+ assertJsxA11yRuleFinds(t, "jsx-a11y/aria-proptypes", `const Component = () => <div aria-hidden="maybe" />;`, "true or false")
22
+ assertJsxA11yRuleSkips(t, "jsx-a11y/aria-proptypes", "declare const props: object; const Component = () => <div aria-hidden=\"false\" />;")
23
+ }
@@ -0,0 +1,22 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAriaRoleRejectsUnknownRole verifies jsx-a11y/aria-role reports an
6
+ // unknown role token and accepts a supported role.
7
+ //
8
+ // Role validation does not depend on the JSX tag, so the rule reads the role
9
+ // attribute and validates its token list directly.
10
+ //
11
+ // 1. Run only `jsx-a11y/aria-role` over `<div role="banana" />` and expect one
12
+ // finding whose message contains "valid ARIA role".
13
+ // 2. Run it over `<div role="button" />` and expect none.
14
+ //
15
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/aria-role enabled. role="banana" yields exactly one ordinary SeverityError finding from that rule whose message contains "valid ARIA role"; assertJsxA11yRuleSkips requires zero findings for role="button".
16
+ // @evidence contracts/testing.md#independent-expectations button is a defined ARIA role and banana is not. The two literal sources and the "valid ARIA role" fragment are authored from the ARIA role vocabulary.
17
+ // @evidence contracts/testing.md#distinguishing-cases The two divs differ only in the role token. Empty roles and multi-token role lists are not exercised by this Test.
18
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
19
+ func TestJsxA11yAriaRoleRejectsUnknownRole(t *testing.T) {
20
+ assertJsxA11yRuleFinds(t, "jsx-a11y/aria-role", `const Component = () => <div role="banana" />;`, "valid ARIA role")
21
+ assertJsxA11yRuleSkips(t, "jsx-a11y/aria-role", "declare const props: object; const Component = () => <div role=\"button\" />;")
22
+ }
@@ -0,0 +1,23 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAriaUnsupportedElementsRejectsMetaAria verifies
6
+ // jsx-a11y/aria-unsupported-elements reports an aria-* attribute on a meta
7
+ // element and accepts the same attribute on a div.
8
+ //
9
+ // Elements such as meta cannot expose ARIA semantics, so the rule guards the
10
+ // tag rather than the attribute.
11
+ //
12
+ // 1. Run only the rule over `<meta aria-label="description" />` and expect one
13
+ // finding whose message contains "ARIA".
14
+ // 2. Run it over `<div aria-label="description" />` and expect none.
15
+ //
16
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/aria-unsupported-elements enabled. The meta element with aria-label yields exactly one ordinary SeverityError finding from that rule whose message contains "ARIA"; assertJsxA11yRuleSkips requires zero findings for a div with the same attribute.
17
+ // @evidence contracts/testing.md#independent-expectations The metadata-tag restriction prohibits explicit ARIA on meta, while this rule does not classify div as an unsupported tag. The authored tag pair pins that rule boundary; accepting div here does not certify its accessible name or compliance with other ARIA rules.
18
+ // @evidence contracts/testing.md#distinguishing-cases The two elements carry the same aria-label and differ only in the tag. The html, script and style tags and the role attribute are not exercised by this Test.
19
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
20
+ func TestJsxA11yAriaUnsupportedElementsRejectsMetaAria(t *testing.T) {
21
+ assertJsxA11yRuleFinds(t, "jsx-a11y/aria-unsupported-elements", `const Component = () => <meta aria-label="description" />;`, "ARIA")
22
+ assertJsxA11yRuleSkips(t, "jsx-a11y/aria-unsupported-elements", "declare const props: object; const Component = () => <div aria-label=\"description\" />;")
23
+ }
@@ -0,0 +1,24 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAriaUnsupportedElementsRejectsRoleDespiteSpread verifies a spread
6
+ // does not suppress an explicit role on an unsupported element.
7
+ //
8
+ // The rule judges explicitly written role and aria-* attributes on meta, html,
9
+ // script and style, so a sibling spread changes nothing about the violation.
10
+ // This also guards the former crash of the attribute walk on spread members.
11
+ //
12
+ // 1. Run only `jsx-a11y/aria-unsupported-elements` over
13
+ // `<meta charSet="utf-8" role="none" {...props} />` and expect one finding
14
+ // whose message contains "ARIA roles".
15
+ // 2. Run it over `<meta charSet="utf-8" {...props} />` and expect none.
16
+ //
17
+ // @evidence contracts/testing.md#behavioral-verification assertJsxA11yRuleFinds parses the TSX source and runs NewEngine.Run with only jsx-a11y/aria-unsupported-elements enabled. The meta element with role="none" and a spread yields exactly one ordinary SeverityError finding from that rule whose message contains "ARIA roles"; assertJsxA11yRuleSkips requires zero findings for the same meta and spread without the role.
18
+ // @evidence contracts/testing.md#independent-expectations The static policy rejects an explicitly written role on meta despite an unknown spread; removing that explicit role leaves no known ARIA attribute for this rule to report. The literal pair and message fragment independently pin known-attribute handling, not the unknown runtime spread contents.
19
+ // @evidence contracts/testing.md#distinguishing-cases The two sources keep the meta tag, charSet and spread, and differ only in the role attribute, so the spread cannot be what silences or triggers the report.
20
+ // @evidence contracts/testing.md#execution-ownership The Test is one Go unit with one assertJsxA11yRuleFinds and one assertJsxA11yRuleSkips call, executing the rule engine on parsed virtual TSX files in the test process with no browser, accessibility runtime or product host.
21
+ func TestJsxA11yAriaUnsupportedElementsRejectsRoleDespiteSpread(t *testing.T) {
22
+ assertJsxA11yRuleFinds(t, "jsx-a11y/aria-unsupported-elements", `declare const props: object; const Component = () => <meta charSet="utf-8" role="none" {...props} />;`, "ARIA roles")
23
+ assertJsxA11yRuleSkips(t, "jsx-a11y/aria-unsupported-elements", "declare const props: object; const Component = () => <meta charSet=\"utf-8\" {...props} />;")
24
+ }
@@ -0,0 +1,29 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAutocompleteValidAllowsAppropriateInputType verifies compatible purposes remain valid.
6
+ //
7
+ // Specialized inputs should retain the autofill purpose designed for their
8
+ // value domain. Invalid types use HTML's text fallback; non-inputs are ignored.
9
+ //
10
+ // 1. Parse matching inputs and a non-input carrying an arbitrary value.
11
+ // 2. Enable only `jsx-a11y/autocomplete-valid`.
12
+ // 3. Assert each compatible pair reports no diagnostic.
13
+ //
14
+ // @evidence contracts/testing.md#behavioral-verification Actual TSX parsing and NewEngine.Run verify ten compatible, fallback, shorthand, non-string or out-of-scope values remain accepted; clean sources require zero findings, so recovered-panic and unrelated reports also fail.
15
+ // @evidence contracts/testing.md#independent-expectations The HTML autocomplete contract permits the matching purpose/type and ordered token forms; ttsc leaves unsupported non-string and non-input shapes alone. The source inputs and literal expected findings follow this supported accessibility policy without sampling implementation output.
16
+ // @evidence contracts/testing.md#distinguishing-cases Email/URL matching, invalid type text fallback, section/contact order, username webauthn, non-string attributes and div scope remain distinct controls.
17
+ // @evidence contracts/testing.md#execution-ownership TestJsxA11yAutocompleteValidAllowsAppropriateInputType owns these explicit AST variants as a named Go unit entry; the owning engine executes in the shared test process without a browser, accessibility runtime installation or product child host.
18
+ func TestJsxA11yAutocompleteValidAllowsAppropriateInputType(t *testing.T) {
19
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input type="email" autoComplete="email" />;`)
20
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input type="url" autoComplete="url" />;`)
21
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input type="potato" autoComplete="name" />;`)
22
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input type autoComplete="name" />;`)
23
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input type="email" autoComplete="section-blue shipping home email" />;`)
24
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete="username webauthn" />;`)
25
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete />;`)
26
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete={true} />;`)
27
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete={42} />;`)
28
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", `const Component = () => <div autoComplete="definitely" />;`)
29
+ }
@@ -0,0 +1,21 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAutocompleteValidRejectsInappropriateInputType verifies purpose/type compatibility.
6
+ //
7
+ // A registered autofill purpose can still be invalid for a specialized input.
8
+ // URL data must not be offered to an email control.
9
+ //
10
+ // 1. Parse an email input with the registered `url` autocomplete purpose.
11
+ // 2. Enable only `jsx-a11y/autocomplete-valid`.
12
+ // 3. Assert one compatibility diagnostic is reported.
13
+ //
14
+ // @evidence contracts/testing.md#behavioral-verification Actual TSX parsing and NewEngine.Run verify email input requests URL autofill; reported variants require one ordinary SeverityError finding from the named rule with the authored message fragment, and clean variants require zero findings.
15
+ // @evidence contracts/testing.md#independent-expectations email purpose matches the email value domain. The source inputs and literal expected findings follow this supported accessibility policy without sampling implementation output.
16
+ // @evidence contracts/testing.md#distinguishing-cases An email input with url autocomplete reports; replacing its purpose with email is clean.
17
+ // @evidence contracts/testing.md#execution-ownership TestJsxA11yAutocompleteValidRejectsInappropriateInputType owns these explicit AST variants as a named Go unit entry; the owning engine executes in the shared test process without a browser, accessibility runtime installation or product child host.
18
+ func TestJsxA11yAutocompleteValidRejectsInappropriateInputType(t *testing.T) {
19
+ assertJsxA11yRuleFinds(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input type="email" autoComplete="url" />;`, "input type")
20
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", "declare const props: object; const Component = () => <input type=\"email\" autoComplete=\"email\" />;")
21
+ }
@@ -0,0 +1,26 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAutocompleteValidRejectsInvalidTokenSequence verifies token grammar.
6
+ //
7
+ // Contact qualifiers apply only to contact purposes, and every detail list has
8
+ // exactly one purpose, optionally followed by webauthn. This case follows
9
+ // the upstream validator in requiring a suffix after section-; that check
10
+ // is stricter than the HTML specification's section-prefix wording.
11
+ //
12
+ // 1. Parse qualified, multiple-purpose, mixed-state, and empty-section lists.
13
+ // 2. Enable only `jsx-a11y/autocomplete-valid`.
14
+ // 3. Assert every invalid sequence reports a diagnostic.
15
+ //
16
+ // @evidence contracts/testing.md#behavioral-verification Actual TSX parsing and NewEngine.Run verify qualifier, multiple-purpose, mixed state and empty-section lists are invalid; reported variants require one ordinary SeverityError finding from the named rule with the authored message fragment, and clean variants require zero findings.
17
+ // @evidence contracts/testing.md#independent-expectations The authored ordered contact list follows HTML token order; upstream jsx-a11y's axe-core isValidAutocomplete additionally requires a section-name suffix and rejects section- name. That independently implemented compatibility policy supplies this stricter expectation; it is not claimed to follow the literal HTML section-prefix wording or sampled ttsc output.
18
+ // @evidence contracts/testing.md#distinguishing-cases home url, name email and on email reject incompatible or multiple purpose/state positions; section- name reports under the stricter upstream section-name policy. section-blue shipping home email is the ordered clean counterpart.
19
+ // @evidence contracts/testing.md#execution-ownership TestJsxA11yAutocompleteValidRejectsInvalidTokenSequence owns these explicit AST variants as a named Go unit entry; the owning engine executes in the shared test process without a browser, accessibility runtime installation or product child host.
20
+ func TestJsxA11yAutocompleteValidRejectsInvalidTokenSequence(t *testing.T) {
21
+ assertJsxA11yRuleFinds(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete="home url" />;`, "invalid token sequence")
22
+ assertJsxA11yRuleFinds(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete="name email" />;`, "invalid token sequence")
23
+ assertJsxA11yRuleFinds(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete="on email" />;`, "invalid token sequence")
24
+ assertJsxA11yRuleFinds(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete="section- name" />;`, "invalid token sequence")
25
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", "declare const props: object; const Component = () => <input type=\"email\" autoComplete=\"section-blue shipping home email\" />;")
26
+ }
@@ -0,0 +1,22 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yAutocompleteValidRejectsUnknownToken verifies autocomplete tokens are checked.
6
+ //
7
+ // Registered autofill purposes have a defined vocabulary. This case
8
+ // contrasts an unknown literal purpose with name, without certifying
9
+ // all autocomplete values or dynamic expressions.
10
+ //
11
+ // 1. Parse an input with an invalid autocomplete token.
12
+ // 2. Enable only `jsx-a11y/autocomplete-valid`.
13
+ // 3. Assert one diagnostic is reported.
14
+ //
15
+ // @evidence contracts/testing.md#behavioral-verification Actual TSX parsing and NewEngine.Run verify definitely is not an autocomplete token; reported variants require one ordinary SeverityError finding from the named rule with the authored message fragment, and clean variants require zero findings.
16
+ // @evidence contracts/testing.md#independent-expectations name is a registered purpose in the supported HTML token vocabulary. The source inputs and literal expected findings follow this supported accessibility policy without sampling implementation output.
17
+ // @evidence contracts/testing.md#distinguishing-cases Unknown autocomplete purpose definitely reports; the supported name token is clean.
18
+ // @evidence contracts/testing.md#execution-ownership TestJsxA11yAutocompleteValidRejectsUnknownToken owns these explicit AST variants as a named Go unit entry; the owning engine executes in the shared test process without a browser, accessibility runtime installation or product child host.
19
+ func TestJsxA11yAutocompleteValidRejectsUnknownToken(t *testing.T) {
20
+ assertJsxA11yRuleFinds(t, "jsx-a11y/autocomplete-valid", `const Component = () => <input autoComplete="definitely" />;`, "autocomplete")
21
+ assertJsxA11yRuleSkips(t, "jsx-a11y/autocomplete-valid", "declare const props: object; const Component = () => <input autoComplete=\"name\" />;")
22
+ }
@@ -0,0 +1,21 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yClickEventsHaveKeyEventsRequiresKeyboardHandler verifies click handlers need keyboard parity.
6
+ //
7
+ // The rule intentionally skips native interactive elements, so a plain div with
8
+ // only onClick exercises the static non-interactive branch.
9
+ //
10
+ // 1. Parse a div with onClick and no keyboard handler.
11
+ // 2. Enable only `jsx-a11y/click-events-have-key-events`.
12
+ // 3. Assert one diagnostic is reported.
13
+ //
14
+ // @evidence contracts/testing.md#behavioral-verification Actual TSX parsing and NewEngine.Run verify static div click has no keyboard handler; reported variants require one ordinary SeverityError finding from the named rule with the authored message fragment, and clean variants require zero findings.
15
+ // @evidence contracts/testing.md#independent-expectations onKeyDown is the supported static keyboard-handler counterpart for this click-handler policy; the test does not execute browser activation. The source inputs and literal expected findings follow this supported accessibility policy without sampling implementation output.
16
+ // @evidence contracts/testing.md#distinguishing-cases The div with only onClick reports; adding onKeyDown while retaining the click handler is clean.
17
+ // @evidence contracts/testing.md#execution-ownership TestJsxA11yClickEventsHaveKeyEventsRequiresKeyboardHandler owns these explicit AST variants as a named Go unit entry; the owning engine executes in the shared test process without a browser, accessibility runtime installation or product child host.
18
+ func TestJsxA11yClickEventsHaveKeyEventsRequiresKeyboardHandler(t *testing.T) {
19
+ assertJsxA11yRuleFinds(t, "jsx-a11y/click-events-have-key-events", `const Component = () => <div onClick={() => {}} />;`, "keyboard")
20
+ assertJsxA11yRuleSkips(t, "jsx-a11y/click-events-have-key-events", "declare const props: object; const Component = () => <div onClick={() => {}} onKeyDown={() => {}} />;")
21
+ }
@@ -0,0 +1,21 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yControlHasAssociatedLabelRequiresButtonLabel verifies controls need names.
6
+ //
7
+ // This catches native interactive controls that are otherwise focusable but do
8
+ // not expose text, aria-label, aria-labelledby, title, or children.
9
+ //
10
+ // 1. Parse an empty button.
11
+ // 2. Enable only `jsx-a11y/control-has-associated-label`.
12
+ // 3. Assert one diagnostic is reported.
13
+ //
14
+ // @evidence contracts/testing.md#behavioral-verification Actual TSX parsing and NewEngine.Run verify empty button has no accessible name; reported variants require one ordinary SeverityError finding from the named rule with the authored message fragment, and clean variants require zero findings.
15
+ // @evidence contracts/testing.md#independent-expectations Text content supplies the control label. The source inputs and literal expected findings follow this supported accessibility policy without sampling implementation output.
16
+ // @evidence contracts/testing.md#distinguishing-cases An empty button reports; adding its Save text label is clean.
17
+ // @evidence contracts/testing.md#execution-ownership TestJsxA11yControlHasAssociatedLabelRequiresButtonLabel owns these explicit AST variants as a named Go unit entry; the owning engine executes in the shared test process without a browser, accessibility runtime installation or product child host.
18
+ func TestJsxA11yControlHasAssociatedLabelRequiresButtonLabel(t *testing.T) {
19
+ assertJsxA11yRuleFinds(t, "jsx-a11y/control-has-associated-label", `const Component = () => <button />;`, "label")
20
+ assertJsxA11yRuleSkips(t, "jsx-a11y/control-has-associated-label", "declare const props: object; const Component = () => <button>Save</button>;")
21
+ }
@@ -0,0 +1,22 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yHeadingHasContentRejectsEmptyHeading verifies headings need content.
6
+ //
7
+ // Both normal empty headings and self-closing headings omit child text. The
8
+ // rule must visit both JSX node kinds for intrinsic heading tags.
9
+ //
10
+ // 1. Parse normal and self-closing empty h2 elements.
11
+ // 2. Enable only `jsx-a11y/heading-has-content`.
12
+ // 3. Assert each empty heading reports a diagnostic.
13
+ //
14
+ // @evidence contracts/testing.md#behavioral-verification Actual TSX parsing and NewEngine.Run verify normal and self-closing h2 have no content; reported variants require one ordinary SeverityError finding from the named rule with the authored message fragment, and clean variants require zero findings.
15
+ // @evidence contracts/testing.md#independent-expectations Text content gives the heading its accessible name. The source inputs and literal expected findings follow this supported accessibility policy without sampling implementation output.
16
+ // @evidence contracts/testing.md#distinguishing-cases Both empty paired and self-closing h2 shapes report; adding Title content is clean.
17
+ // @evidence contracts/testing.md#execution-ownership TestJsxA11yHeadingHasContentRejectsEmptyHeading owns these explicit AST variants as a named Go unit entry; the owning engine executes in the shared test process without a browser, accessibility runtime installation or product child host.
18
+ func TestJsxA11yHeadingHasContentRejectsEmptyHeading(t *testing.T) {
19
+ assertJsxA11yRuleFinds(t, "jsx-a11y/heading-has-content", `const Component = () => <h2></h2>;`, "Headings")
20
+ assertJsxA11yRuleFinds(t, "jsx-a11y/heading-has-content", `const Component = () => <h2 />;`, "Headings")
21
+ assertJsxA11yRuleSkips(t, "jsx-a11y/heading-has-content", "declare const props: object; const Component = () => <h2>Title</h2>;")
22
+ }
@@ -0,0 +1,33 @@
1
+ package linthost
2
+
3
+ import (
4
+ "strings"
5
+ "testing"
6
+
7
+ shimast "github.com/microsoft/typescript-go/shim/ast"
8
+ )
9
+
10
+ func assertJsxA11yRuleFinds(t *testing.T, ruleName, source, messagePart string) {
11
+ t.Helper()
12
+ file := parseTSXFile(t, "/virtual/component.tsx", source)
13
+ findings := NewEngine(RuleConfig{ruleName: SeverityError}).Run([]*shimast.SourceFile{file}, nil)
14
+ if len(findings) != 1 {
15
+ t.Fatalf("%s: expected one finding, got %d: %+v", ruleName, len(findings), findings)
16
+ }
17
+ if findings[0].engineFailure || findings[0].Severity != SeverityError || findings[0].Rule != ruleName {
18
+ t.Fatalf("%s: expected ordinary error finding, got %+v", ruleName, findings[0])
19
+ }
20
+ if messagePart != "" && !strings.Contains(findings[0].Message, messagePart) {
21
+ t.Fatalf("%s: message %q does not contain %q", ruleName, findings[0].Message, messagePart)
22
+ }
23
+ recordBehavioralWitness(t, ruleName, behavioralWitnessEngine)
24
+ }
25
+
26
+ func assertJsxA11yRuleSkips(t *testing.T, ruleName, source string) {
27
+ t.Helper()
28
+ file := parseTSXFile(t, "/virtual/component.tsx", source)
29
+ findings := NewEngine(RuleConfig{ruleName: SeverityError}).Run([]*shimast.SourceFile{file}, nil)
30
+ if len(findings) != 0 {
31
+ t.Fatalf("%s: expected zero findings, got %d: %+v", ruleName, len(findings), findings)
32
+ }
33
+ }
@@ -0,0 +1,21 @@
1
+ package linthost
2
+
3
+ import "testing"
4
+
5
+ // TestJsxA11yHtmlHasLangAllowsNonEmptyLang verifies valid content is preserved.
6
+ //
7
+ // The empty-value branch must not turn every explicit lang attribute into a
8
+ // diagnostic.
9
+ //
10
+ // 1. Parse html elements with a non-empty value and boolean shorthand.
11
+ // 2. Enable only `jsx-a11y/html-has-lang`.
12
+ // 3. Assert the valid attribute is not reported.
13
+ //
14
+ // @evidence contracts/testing.md#behavioral-verification Actual TSX parsing and NewEngine.Run verify en and boolean shorthand remain accepted by html-has-lang; clean sources require zero findings, so recovered-panic and unrelated reports also fail.
15
+ // @evidence contracts/testing.md#independent-expectations This presence/content rule accepts nonempty language content and shorthand; registry validity belongs to the distinct lang rule. The source inputs and literal expected findings follow this supported accessibility policy without sampling implementation output.
16
+ // @evidence contracts/testing.md#distinguishing-cases HtmlHasLangRejectsEmptyLang owns explicit falsy values, while LangRejectsInvalidBcp47Tag owns registry validity.
17
+ // @evidence contracts/testing.md#execution-ownership TestJsxA11yHtmlHasLangAllowsNonEmptyLang owns these explicit AST variants as a named Go unit entry; the owning engine executes in the shared test process without a browser, accessibility runtime installation or product child host.
18
+ func TestJsxA11yHtmlHasLangAllowsNonEmptyLang(t *testing.T) {
19
+ assertJsxA11yRuleSkips(t, "jsx-a11y/html-has-lang", `const Component = () => <html lang="en" />;`)
20
+ assertJsxA11yRuleSkips(t, "jsx-a11y/html-has-lang", `const Component = () => <html lang />;`)
21
+ }