ttsc 0.33.0 → 0.34.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 (398) hide show
  1. package/README.md +2 -0
  2. package/cmd/ttsc/api_compile.go +3 -2
  3. package/cmd/ttsc/api_transform.go +1 -1
  4. package/cmd/ttsc/build.go +5 -4
  5. package/cmd/ttsc-cache/account.go +16 -0
  6. package/cmd/ttsc-cache/account_test.go +91 -0
  7. package/cmd/ttsc-cache/main.go +1 -1
  8. package/cmd/ttsc-cache/protocol_test.go +2 -2
  9. package/cmd/ttsc-cache/publisher_seal_test.go +1 -1
  10. package/cmd/ttsc-cache/stock_go_failure_test.go +1 -1
  11. package/cmd/ttsc-cache/stock_go_test.go +2 -2
  12. package/cmd/ttsc-cache/store.go +5 -0
  13. package/cmd/ttsc-cache/tuple.go +6 -2
  14. package/cmd/ttsc-cache/tuple_test.go +1 -1
  15. package/cmd/ttscgraph/main.go +6 -1
  16. package/cmd/ttscgraph/run_help_version_and_bad_flags_exit_codes_test.go +6 -1
  17. package/cmd/ttscgraph/serve.go +22 -20
  18. package/cmd/ttscgraph/serve_alternative_members_and_reads_refresh_test.go +95 -0
  19. package/cmd/ttscgraph/serve_shards.go +26 -15
  20. package/cmd/ttscgraph/serve_shards_abandoned_generation_converges_on_retry_test.go +2 -2
  21. package/cmd/ttscgraph/serve_shards_delete_removed_source_test.go +3 -3
  22. package/cmd/ttscgraph/serve_shards_prune_unreferenced_external_endpoints_test.go +1 -1
  23. package/cmd/ttscgraph/serve_shards_publish_created_source_test.go +3 -3
  24. package/cmd/ttscgraph/serve_shards_refresh_cross_file_implementation_test.go +2 -2
  25. package/cmd/ttscgraph/serve_shards_refresh_dependent_diagnostics_test.go +3 -3
  26. package/cmd/ttscgraph/serve_shards_rename_moves_source_identity_test.go +5 -5
  27. package/cmd/ttscgraph/serve_shards_reuse_unaffected_sources_test.go +8 -8
  28. package/cmd/ttscgraph/serve_source_encoding_test.go +2 -2
  29. package/driver/build_information_uses_selected_output_identity_test.go +5 -4
  30. package/driver/check_observations.go +1 -1
  31. package/driver/config_discovery.go +5 -1
  32. package/driver/declaration_shape.go +15 -21
  33. package/driver/diagnostics_preamble.go +2 -2
  34. package/driver/emit_containment.go +11 -14
  35. package/driver/emit_plugin.go +51 -43
  36. package/driver/emit_plugin_output.go +6 -5
  37. package/driver/emit_provenance.go +12 -15
  38. package/driver/graph.go +8 -8
  39. package/driver/host.go +15 -5
  40. package/driver/input_observation.go +22 -21
  41. package/driver/input_observation_test.go +11 -10
  42. package/driver/overlay.go +11 -11
  43. package/driver/program.go +102 -51
  44. package/driver/resolution_candidates.go +50 -32
  45. package/driver/resolution_candidates_test.go +18 -5
  46. package/driver/rewrite.go +11 -13
  47. package/driver/session.go +13 -7
  48. package/driver/target_ts70.go +85 -0
  49. package/driver/target_ts71.go +97 -0
  50. package/driver/transform_dependencies.go +1 -1
  51. package/driver/transform_source_map.go +21 -20
  52. package/go.mod +3 -3
  53. package/go.sum +4 -4
  54. package/internal/graph/alternative_member_declarations_resolve_uses_test.go +145 -0
  55. package/internal/graph/assigned_implementations_of_declaration_file_symbols_leave_no_edge_source_test.go +2 -2
  56. package/internal/graph/assigned_implementations_of_node_modules_symbols_leave_no_edge_source_test.go +2 -2
  57. package/internal/graph/build.go +75 -33
  58. package/internal/graph/build_files_reuses_committed_cross_file_endpoints_test.go +4 -4
  59. package/internal/graph/build_records_a_node_per_top_level_declaration_test.go +1 -1
  60. package/internal/graph/declaration_members.go +143 -0
  61. package/internal/graph/decorators_capture_name_and_literal_arguments_test.go +3 -3
  62. package/internal/graph/doc_tags.go +2 -2
  63. package/internal/graph/dump_paths.go +6 -5
  64. package/internal/graph/duplicate_variable_object_members_keep_first_declaration_test.go +1 -1
  65. package/internal/graph/edges.go +151 -68
  66. package/internal/graph/edges_cover_class_level_references_test.go +5 -5
  67. package/internal/graph/enum_initializer_calls_are_edges_test.go +2 -2
  68. package/internal/graph/enum_members_carry_their_names_on_the_enum_node_test.go +6 -6
  69. package/internal/graph/exports.go +6 -6
  70. package/internal/graph/file_diagnostics_match_tsgo_code_and_location_test.go +2 -2
  71. package/internal/graph/file_diagnostics_report_code_column_and_message_test.go +1 -1
  72. package/internal/graph/function_locals_do_not_collide_test.go +3 -3
  73. package/internal/graph/heritage_edges_cover_implements_and_interface_extends_test.go +5 -5
  74. package/internal/graph/heritage_edges_keep_extends_and_implements_to_same_base_test.go +2 -2
  75. package/internal/graph/heritage_edges_record_extends_versus_implements_origin_test.go +3 -3
  76. package/internal/graph/heritage_edges_traverse_barrels_and_stop_at_external_leaves_test.go +3 -3
  77. package/internal/graph/literals.go +3 -3
  78. package/internal/graph/literals_are_absent_when_the_type_admits_more_than_it_can_name_test.go +2 -2
  79. package/internal/graph/literals_cover_enum_members_the_graph_has_no_nodes_for_test.go +4 -4
  80. package/internal/graph/literals_do_not_depend_on_declaration_line_wrapping_test.go +2 -2
  81. package/internal/graph/literals_render_every_value_in_typescript_source_form_test.go +1 -1
  82. package/internal/graph/literals_resolve_through_alias_indirection_test.go +3 -3
  83. package/internal/graph/member_relation_edges_follow_checker_validity_test.go +7 -7
  84. package/internal/graph/member_relation_edges_preserve_checker_boundaries_test.go +19 -19
  85. package/internal/graph/member_relation_edges_reject_checker_invalid_pairs_test.go +11 -11
  86. package/internal/graph/namespace_dotted_form_qualifies_deeply_test.go +2 -2
  87. package/internal/graph/namespace_members_become_qualified_nodes_and_edges_test.go +7 -7
  88. package/internal/graph/namespace_private_declarations_keep_lexical_identity_test.go +85 -0
  89. package/internal/graph/nodes_are_marked_exported_through_the_export_table_test.go +2 -2
  90. package/internal/graph/object_literal_declarations_resolve_calls_test.go +9 -9
  91. package/internal/graph/object_literal_members_ride_on_the_snapshot_test.go +1 -1
  92. package/internal/graph/overload_implementation_replaces_signature_test.go +2 -2
  93. package/internal/graph/property_member_edges_remain_owner_visible_test.go +6 -6
  94. package/internal/graph/resolve.go +37 -12
  95. package/internal/graph/resolve_unwraps_barrel_reexport_to_real_declaration_test.go +6 -6
  96. package/internal/graph/source.go +1 -1
  97. package/internal/graph/type_ref_edges_cover_typeof_as_satisfies_test.go +7 -7
  98. package/internal/graph/type_ref_edges_resolve_named_types_across_files_test.go +2 -2
  99. package/internal/graph/value_access_edges_cover_properties_test.go +5 -5
  100. package/internal/graph/value_call_edges_attribute_function_assignments_to_members_test.go +3 -3
  101. package/internal/graph/value_call_edges_cover_jsx_components_test.go +2 -2
  102. package/internal/graph/value_call_edges_cover_methods_and_constructors_test.go +3 -3
  103. package/internal/graph/value_call_edges_cover_variable_bound_callables_test.go +2 -2
  104. package/internal/graph/value_call_edges_do_not_double_record_invoked_member_access_test.go +4 -4
  105. package/internal/graph/value_call_edges_record_construct_versus_call_origin_test.go +3 -3
  106. package/internal/graph/value_call_edges_resolve_across_files_and_dedupe_test.go +2 -2
  107. package/internal/graph/value_call_edges_skip_self_and_unresolved_test.go +4 -4
  108. package/internal/graph/value_reads_cover_expression_positions_test.go +88 -0
  109. package/lib/compiler/internal/buildNativeCompiler.d.ts +5 -2
  110. package/lib/compiler/internal/buildNativeCompiler.js +12 -4
  111. package/lib/compiler/internal/buildNativeCompiler.js.map +1 -1
  112. package/lib/flags/COMPILER_ENUM_WHITESPACE.js +1 -1
  113. package/lib/flags/COMPILER_ENUM_WHITESPACE.js.map +1 -1
  114. package/lib/flags/COMPILER_OPTIONS.js +1079 -149
  115. package/lib/flags/COMPILER_OPTIONS.js.map +1 -1
  116. package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.js +1 -1
  117. package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.js.map +1 -1
  118. package/lib/flags/COMPILER_OPTION_KINDS.js +1 -1
  119. package/lib/flags/COMPILER_OPTION_KINDS.js.map +1 -1
  120. package/lib/flags/CompilerOptionSpec.d.ts +9 -2
  121. package/lib/internal/pluginSource.d.ts +1 -0
  122. package/lib/internal/pluginSource.js +1 -0
  123. package/lib/internal/pluginSource.js.map +1 -1
  124. package/lib/launcher/internal/TypeScriptSyncApi.d.ts +140 -0
  125. package/lib/launcher/internal/TypeScriptSyncApi.js +99 -0
  126. package/lib/launcher/internal/TypeScriptSyncApi.js.map +1 -0
  127. package/lib/launcher/internal/buildSingleRootInMemory.d.ts +80 -0
  128. package/lib/launcher/internal/buildSingleRootInMemory.js +253 -0
  129. package/lib/launcher/internal/buildSingleRootInMemory.js.map +1 -0
  130. package/lib/launcher/internal/buildSingleRootProject.d.ts +22 -18
  131. package/lib/launcher/internal/buildSingleRootProject.js +27 -18
  132. package/lib/launcher/internal/buildSingleRootProject.js.map +1 -1
  133. package/lib/launcher/internal/compilerArgsAsConfigOptions.d.ts +39 -0
  134. package/lib/launcher/internal/compilerArgsAsConfigOptions.js +115 -0
  135. package/lib/launcher/internal/compilerArgsAsConfigOptions.js.map +1 -0
  136. package/lib/plugin/CapabilityPluginResolver.js +3 -0
  137. package/lib/plugin/CapabilityPluginResolver.js.map +1 -1
  138. package/lib/plugin/internal/load/loadProjectPlugins.js +6 -2
  139. package/lib/plugin/internal/load/loadProjectPlugins.js.map +1 -1
  140. package/lib/plugin/internal/source/CompilerTarget.d.ts +127 -0
  141. package/lib/plugin/internal/source/CompilerTarget.js +231 -0
  142. package/lib/plugin/internal/source/CompilerTarget.js.map +1 -0
  143. package/lib/plugin/internal/source/NativeSourcePackages.js +6 -5
  144. package/lib/plugin/internal/source/NativeSourcePackages.js.map +1 -1
  145. package/lib/plugin/internal/source/SourcePluginAdmission.d.ts +18 -1
  146. package/lib/plugin/internal/source/SourcePluginAdmission.js +24 -2
  147. package/lib/plugin/internal/source/SourcePluginAdmission.js.map +1 -1
  148. package/lib/plugin/internal/source/SourcePluginWorkspace.d.ts +6 -3
  149. package/lib/plugin/internal/source/SourcePluginWorkspace.js +31 -13
  150. package/lib/plugin/internal/source/SourcePluginWorkspace.js.map +1 -1
  151. package/lib/plugin/internal/source/buildSourcePlugin.js +3 -1
  152. package/lib/plugin/internal/source/buildSourcePlugin.js.map +1 -1
  153. package/lib/plugin/internal/source/hashPluginBuildEnvironment.d.ts +1 -1
  154. package/lib/plugin/internal/source/hashPluginBuildEnvironment.js +9 -1
  155. package/lib/plugin/internal/source/hashPluginBuildEnvironment.js.map +1 -1
  156. package/package.json +14 -9
  157. package/shim/ast/enums_gen.go +1 -0
  158. package/shim/ast/go.mod +2 -2
  159. package/shim/ast/go.sum +4 -4
  160. package/shim/ast/neutral.go +141 -0
  161. package/shim/astnav/go.mod +2 -2
  162. package/shim/astnav/go.sum +4 -4
  163. package/shim/bundled/go.mod +2 -2
  164. package/shim/bundled/go.sum +4 -4
  165. package/shim/checker/go.mod +2 -2
  166. package/shim/checker/go.sum +4 -4
  167. package/shim/compiler/go.mod +2 -2
  168. package/shim/compiler/go.sum +4 -4
  169. package/shim/compiler/neutral.go +213 -0
  170. package/shim/core/go.mod +2 -2
  171. package/shim/core/go.sum +4 -4
  172. package/shim/diagnosticwriter/go.mod +2 -2
  173. package/shim/diagnosticwriter/go.sum +4 -4
  174. package/shim/lsp/go.mod +2 -2
  175. package/shim/lsp/go.sum +4 -4
  176. package/shim/parser/go.mod +2 -2
  177. package/shim/parser/go.sum +4 -4
  178. package/shim/printer/go.mod +2 -2
  179. package/shim/printer/go.sum +4 -4
  180. package/shim/scanner/go.mod +2 -2
  181. package/shim/scanner/go.sum +4 -4
  182. package/shim/stringutil/go.mod +1 -1
  183. package/shim/stringutil/go.sum +2 -2
  184. package/shim/stringutil/shim.go +15 -0
  185. package/shim/transformers/go.mod +2 -2
  186. package/shim/transformers/go.sum +4 -4
  187. package/shim/tsoptions/go.mod +2 -2
  188. package/shim/tsoptions/go.sum +4 -4
  189. package/shim/tsoptions/neutral.go +56 -0
  190. package/shim/tspath/go.mod +1 -1
  191. package/shim/tspath/go.sum +2 -2
  192. package/shim/tspath/neutral.go +150 -0
  193. package/shim/tspath/typed_paths.go +266 -0
  194. package/shim/vfs/cachedvfs/go.mod +2 -2
  195. package/shim/vfs/cachedvfs/go.sum +4 -4
  196. package/shim/vfs/go.mod +2 -2
  197. package/shim/vfs/go.sum +4 -4
  198. package/shim/vfs/neutral.go +20 -0
  199. package/shim/vfs/osvfs/go.mod +2 -2
  200. package/shim/vfs/osvfs/go.sum +4 -4
  201. package/src/compiler/internal/buildNativeCompiler.ts +13 -4
  202. package/src/flags/COMPILER_ENUM_WHITESPACE.ts +1 -1
  203. package/src/flags/COMPILER_OPTIONS.ts +1080 -150
  204. package/src/flags/COMPILER_OPTION_ASCII_FOLDS.ts +1 -1
  205. package/src/flags/COMPILER_OPTION_KINDS.ts +1 -1
  206. package/src/flags/CompilerOptionSpec.ts +11 -2
  207. package/src/internal/pluginSource.ts +1 -0
  208. package/src/launcher/internal/TypeScriptSyncApi.ts +186 -0
  209. package/src/launcher/internal/buildSingleRootInMemory.ts +319 -0
  210. package/src/launcher/internal/buildSingleRootProject.ts +26 -18
  211. package/src/launcher/internal/compilerArgsAsConfigOptions.ts +112 -0
  212. package/src/plugin/CapabilityPluginResolver.ts +4 -1
  213. package/src/plugin/internal/load/loadProjectPlugins.ts +12 -2
  214. package/src/plugin/internal/source/CompilerTarget.ts +249 -0
  215. package/src/plugin/internal/source/NativeSourcePackages.ts +10 -4
  216. package/src/plugin/internal/source/SourcePluginAdmission.ts +28 -2
  217. package/src/plugin/internal/source/SourcePluginWorkspace.ts +45 -19
  218. package/src/plugin/internal/source/buildSourcePlugin.ts +3 -1
  219. package/src/plugin/internal/source/hashPluginBuildEnvironment.ts +9 -1
  220. package/targets/7.1/bridge/ast/enums_gen.go +174 -0
  221. package/targets/7.1/bridge/ast/extra-shim.json +4 -0
  222. package/targets/7.1/bridge/ast/go.mod +14 -0
  223. package/targets/7.1/bridge/ast/go.sum +20 -0
  224. package/targets/7.1/bridge/ast/lint.go +1412 -0
  225. package/targets/7.1/bridge/ast/neutral.go +141 -0
  226. package/targets/7.1/bridge/ast/parent.go +60 -0
  227. package/targets/7.1/bridge/ast/safe_text.go +108 -0
  228. package/targets/7.1/bridge/ast/shim.go +1656 -0
  229. package/targets/7.1/bridge/ast/surface.go +686 -0
  230. package/targets/7.1/bridge/ast/test/next_jsdoc_comment_location_reaches_variable_statement_test.go +51 -0
  231. package/targets/7.1/bridge/ast/test/node_text_joins_multi_hop_qualified_name_test.go +47 -0
  232. package/targets/7.1/bridge/ast/test/node_text_joins_one_hop_qualified_name_test.go +35 -0
  233. package/targets/7.1/bridge/ast/test/node_text_returns_empty_for_nil_test.go +31 -0
  234. package/targets/7.1/bridge/ast/test/node_text_returns_identifier_text_test.go +34 -0
  235. package/targets/7.1/bridge/ast/test/node_text_skips_empty_qualified_left_test.go +60 -0
  236. package/targets/7.1/bridge/astnav/go.mod +14 -0
  237. package/targets/7.1/bridge/astnav/go.sum +22 -0
  238. package/targets/7.1/bridge/astnav/shim.go +24 -0
  239. package/targets/7.1/bridge/bundled/extra-shim.json +1 -0
  240. package/targets/7.1/bridge/bundled/go.mod +10 -0
  241. package/targets/7.1/bridge/bundled/go.sum +10 -0
  242. package/targets/7.1/bridge/bundled/shim.go +24 -0
  243. package/targets/7.1/bridge/checker/enums_gen.go +150 -0
  244. package/targets/7.1/bridge/checker/extra-shim.json +37 -0
  245. package/targets/7.1/bridge/checker/go.mod +15 -0
  246. package/targets/7.1/bridge/checker/go.sum +24 -0
  247. package/targets/7.1/bridge/checker/node_builder_fields_gen.go +19 -0
  248. package/targets/7.1/bridge/checker/shim.go +1390 -0
  249. package/targets/7.1/bridge/compiler/contentmapper_process.go +70 -0
  250. package/targets/7.1/bridge/compiler/emit_sourcemap.go +296 -0
  251. package/targets/7.1/bridge/compiler/emitassemble.go +81 -0
  252. package/targets/7.1/bridge/compiler/emithook.go +44 -0
  253. package/targets/7.1/bridge/compiler/extra-shim.json +4 -0
  254. package/targets/7.1/bridge/compiler/go.mod +15 -0
  255. package/targets/7.1/bridge/compiler/go.sum +24 -0
  256. package/targets/7.1/bridge/compiler/incremental.go +185 -0
  257. package/targets/7.1/bridge/compiler/neutral.go +256 -0
  258. package/targets/7.1/bridge/compiler/resolution.go +571 -0
  259. package/targets/7.1/bridge/compiler/shim.go +70 -0
  260. package/targets/7.1/bridge/core/enums_gen.go +15 -0
  261. package/targets/7.1/bridge/core/extra-shim.json +4 -0
  262. package/targets/7.1/bridge/core/go.mod +7 -0
  263. package/targets/7.1/bridge/core/go.sum +8 -0
  264. package/targets/7.1/bridge/core/modulekind.go +19 -0
  265. package/targets/7.1/bridge/core/shim.go +272 -0
  266. package/targets/7.1/bridge/diagnosticwriter/go.mod +14 -0
  267. package/targets/7.1/bridge/diagnosticwriter/go.sum +20 -0
  268. package/targets/7.1/bridge/diagnosticwriter/lint.go +411 -0
  269. package/targets/7.1/bridge/diagnosticwriter/shim.go +56 -0
  270. package/targets/7.1/bridge/lsp/extra-shim.json +4 -0
  271. package/targets/7.1/bridge/lsp/go.mod +16 -0
  272. package/targets/7.1/bridge/lsp/go.sum +26 -0
  273. package/targets/7.1/bridge/lsp/shim.go +112 -0
  274. package/targets/7.1/bridge/parser/extra-shim.json +4 -0
  275. package/targets/7.1/bridge/parser/go.mod +14 -0
  276. package/targets/7.1/bridge/parser/go.sum +24 -0
  277. package/targets/7.1/bridge/parser/shim.go +61 -0
  278. package/targets/7.1/bridge/printer/emithost.go +69 -0
  279. package/targets/7.1/bridge/printer/go.mod +15 -0
  280. package/targets/7.1/bridge/printer/go.sum +24 -0
  281. package/targets/7.1/bridge/printer/shim.go +168 -0
  282. package/targets/7.1/bridge/printer/sourcemap.go +49 -0
  283. package/targets/7.1/bridge/scanner/extra-shim.json +4 -0
  284. package/targets/7.1/bridge/scanner/go.mod +14 -0
  285. package/targets/7.1/bridge/scanner/go.sum +20 -0
  286. package/targets/7.1/bridge/scanner/regexp.go +42 -0
  287. package/targets/7.1/bridge/scanner/shim.go +137 -0
  288. package/targets/7.1/bridge/stringutil/extra-shim.json +1 -0
  289. package/targets/7.1/bridge/stringutil/go.mod +5 -0
  290. package/targets/7.1/bridge/stringutil/go.sum +2 -0
  291. package/targets/7.1/bridge/stringutil/shim.go +131 -0
  292. package/targets/7.1/bridge/transformers/go.mod +15 -0
  293. package/targets/7.1/bridge/transformers/go.sum +24 -0
  294. package/targets/7.1/bridge/transformers/shim.go +24 -0
  295. package/targets/7.1/bridge/tsoptions/command_line_raw.go +44 -0
  296. package/targets/7.1/bridge/tsoptions/extra-shim.json +4 -0
  297. package/targets/7.1/bridge/tsoptions/go.mod +15 -0
  298. package/targets/7.1/bridge/tsoptions/go.sum +24 -0
  299. package/targets/7.1/bridge/tsoptions/neutral.go +47 -0
  300. package/targets/7.1/bridge/tsoptions/shim.go +193 -0
  301. package/targets/7.1/bridge/tspath/extra-shim.json +4 -0
  302. package/targets/7.1/bridge/tspath/go.mod +5 -0
  303. package/targets/7.1/bridge/tspath/go.sum +6 -0
  304. package/targets/7.1/bridge/tspath/neutral.go +142 -0
  305. package/targets/7.1/bridge/tspath/shim.go +382 -0
  306. package/targets/7.1/bridge/vfs/cachedvfs/extra-shim.json +4 -0
  307. package/targets/7.1/bridge/vfs/cachedvfs/go.mod +5 -0
  308. package/targets/7.1/bridge/vfs/cachedvfs/go.sum +10 -0
  309. package/targets/7.1/bridge/vfs/cachedvfs/shim.go +12 -0
  310. package/targets/7.1/bridge/vfs/decode.go +26 -0
  311. package/targets/7.1/bridge/vfs/decode_test.go +42 -0
  312. package/targets/7.1/bridge/vfs/extra-shim.json +4 -0
  313. package/targets/7.1/bridge/vfs/go.mod +10 -0
  314. package/targets/7.1/bridge/vfs/go.sum +10 -0
  315. package/targets/7.1/bridge/vfs/neutral.go +23 -0
  316. package/targets/7.1/bridge/vfs/osvfs/extra-shim.json +4 -0
  317. package/targets/7.1/bridge/vfs/osvfs/go.mod +10 -0
  318. package/targets/7.1/bridge/vfs/osvfs/go.sum +10 -0
  319. package/targets/7.1/bridge/vfs/osvfs/shim.go +14 -0
  320. package/targets/7.1/bridge/vfs/shim.go +27 -0
  321. package/targets/7.1/facade/ast/facade_gen.go +2691 -0
  322. package/targets/7.1/facade/ast/go.mod +20 -0
  323. package/targets/7.1/facade/ast/go.sum +20 -0
  324. package/targets/7.1/facade/astnav/facade_gen.go +15 -0
  325. package/targets/7.1/facade/astnav/go.mod +22 -0
  326. package/targets/7.1/facade/astnav/go.sum +22 -0
  327. package/targets/7.1/facade/bundled/facade_gen.go +32 -0
  328. package/targets/7.1/facade/bundled/go.mod +21 -0
  329. package/targets/7.1/facade/bundled/go.sum +10 -0
  330. package/targets/7.1/facade/checker/facade_gen.go +563 -0
  331. package/targets/7.1/facade/checker/go.mod +26 -0
  332. package/targets/7.1/facade/checker/go.sum +24 -0
  333. package/targets/7.1/facade/compiler/facade_gen.go +198 -0
  334. package/targets/7.1/facade/compiler/go.mod +41 -0
  335. package/targets/7.1/facade/compiler/go.sum +24 -0
  336. package/targets/7.1/facade/core/facade_gen.go +130 -0
  337. package/targets/7.1/facade/core/go.mod +12 -0
  338. package/targets/7.1/facade/core/go.sum +8 -0
  339. package/targets/7.1/facade/diagnosticwriter/facade_gen.go +36 -0
  340. package/targets/7.1/facade/diagnosticwriter/go.mod +22 -0
  341. package/targets/7.1/facade/diagnosticwriter/go.sum +20 -0
  342. package/targets/7.1/facade/lsp/facade_gen.go +31 -0
  343. package/targets/7.1/facade/lsp/go.mod +19 -0
  344. package/targets/7.1/facade/lsp/go.sum +26 -0
  345. package/targets/7.1/facade/parser/facade_gen.go +102 -0
  346. package/targets/7.1/facade/parser/go.mod +25 -0
  347. package/targets/7.1/facade/parser/go.sum +24 -0
  348. package/targets/7.1/facade/printer/facade_gen.go +74 -0
  349. package/targets/7.1/facade/printer/go.mod +26 -0
  350. package/targets/7.1/facade/printer/go.sum +24 -0
  351. package/targets/7.1/facade/scanner/facade_gen.go +191 -0
  352. package/targets/7.1/facade/scanner/go.mod +25 -0
  353. package/targets/7.1/facade/scanner/go.sum +20 -0
  354. package/targets/7.1/facade/stringutil/facade_gen.go +176 -0
  355. package/targets/7.1/facade/stringutil/go.mod +9 -0
  356. package/targets/7.1/facade/stringutil/go.sum +2 -0
  357. package/targets/7.1/facade/transformers/facade_gen.go +12 -0
  358. package/targets/7.1/facade/transformers/go.mod +18 -0
  359. package/targets/7.1/facade/transformers/go.sum +24 -0
  360. package/targets/7.1/facade/tsoptions/facade_gen.go +274 -0
  361. package/targets/7.1/facade/tsoptions/go.mod +32 -0
  362. package/targets/7.1/facade/tsoptions/go.sum +24 -0
  363. package/targets/7.1/facade/tspath/facade_gen.go +550 -0
  364. package/targets/7.1/facade/tspath/go.mod +9 -0
  365. package/targets/7.1/facade/tspath/go.sum +6 -0
  366. package/targets/7.1/facade/vfs/cachedvfs/facade_gen.go +17 -0
  367. package/targets/7.1/facade/vfs/cachedvfs/go.mod +18 -0
  368. package/targets/7.1/facade/vfs/cachedvfs/go.sum +10 -0
  369. package/targets/7.1/facade/vfs/facade_gen.go +47 -0
  370. package/targets/7.1/facade/vfs/go.mod +18 -0
  371. package/targets/7.1/facade/vfs/go.sum +10 -0
  372. package/targets/7.1/facade/vfs/osvfs/facade_gen.go +20 -0
  373. package/targets/7.1/facade/vfs/osvfs/go.mod +21 -0
  374. package/targets/7.1/facade/vfs/osvfs/go.sum +10 -0
  375. package/tools/gen_facade/committed_facades_match_their_bridges_test.go +57 -0
  376. package/tools/gen_facade/facade_manifest_points_into_the_bridge_root_test.go +75 -0
  377. package/tools/gen_facade/facade_spells_internal_types_through_bridge_aliases_test.go +75 -0
  378. package/tools/gen_facade/facade_types_are_their_bridge_types_test.go +99 -0
  379. package/tools/gen_facade/go.mod +10 -0
  380. package/tools/gen_facade/go.sum +8 -0
  381. package/tools/gen_facade/main.go +734 -0
  382. package/tools/gen_shims/go.mod +4 -4
  383. package/tools/gen_shims/go.sum +6 -6
  384. package/tools/gen_shims/main.go +124 -66
  385. package/tools/gen_shims/mirror_structs_terminate_on_unexported_cycles_test.go +101 -0
  386. package/tools/shim_audit/baseline-7.1.json +720 -0
  387. package/tools/shim_audit/baseline.json +5 -4
  388. package/tools/shim_audit/go.mod +4 -4
  389. package/tools/shim_audit/go.sum +6 -6
  390. package/tools/shim_audit/linkname_signatures.go +178 -0
  391. package/tools/shim_audit/linkname_signatures_match_their_targets_test.go +64 -0
  392. package/tools/shim_audit/linkname_targets_follow_the_audited_compiler_test.go +38 -0
  393. package/tools/shim_audit/main.go +29 -4
  394. package/tools/shim_audit/neutral_api.go +160 -0
  395. package/tools/shim_audit/neutral_api_must_match_across_targets_test.go +74 -0
  396. package/utility/host.go +5 -4
  397. package/utility/preamble_output.go +15 -15
  398. package/utility/serve.go +1 -1
@@ -0,0 +1,1412 @@
1
+ // Lint-oriented additions to the AST shim.
2
+ //
3
+ // This file groups the helpers and node-flag constants the `@ttsc/lint`
4
+ // plugin needs to navigate the tree.
5
+ //
6
+ // Types and constants retain the identity of `internal/ast` symbols. Thin
7
+ // wrappers delegate upstream classification, while the declaration-keyword
8
+ // predicates below inspect combined flags locally. These helpers require the
9
+ // compiler's bound declaration tree where their parent traversal applies.
10
+ package ast
11
+
12
+ import (
13
+ innerast "github.com/microsoft/TypeScript/tsc/internal/ast"
14
+ )
15
+
16
+ // ---- Node-list / visitor primitives ----
17
+
18
+ // Visitor is the compiler's node callback. Its boolean follows the traversal
19
+ // stop protocol of the operation receiving it.
20
+ //
21
+ // @evidence contracts/common.md#principled-implementation The alias preserves upstream's func(*Node) bool callback identity and traversal protocol without converting node pointers.
22
+ // @evidence contracts/common.md#clear-and-simple-design One alias exposes the callback directly rather than a wrapper closure or parallel visitor interface.
23
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Traversal callbacks use the supported upstream type without replacing compiler traversal methods.
24
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies callback ownership and boolean interpretation, with separated prose and tags under the documentation guidance.
25
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
26
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
27
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
28
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
29
+ type Visitor = innerast.Visitor
30
+
31
+ // NodeFlags is the compiler's bitmask of node and declaration context. Use the
32
+ // named upstream bits; declaration flags may live on enclosing list nodes.
33
+ //
34
+ // @evidence contracts/common.md#principled-implementation Type identity preserves the upstream uint32 flag representation used by nodes and combined-flag queries.
35
+ // @evidence contracts/common.md#clear-and-simple-design The alias exposes one canonical bitmask instead of a duplicate flag schema.
36
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Flag values come from upstream definitions rather than guessed numbers or fixture-specific masks.
37
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains named bits and enclosing declaration flags, with paragraph and tag separation following the documentation guidance.
38
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
39
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
40
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
41
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
42
+ type NodeFlags = innerast.NodeFlags
43
+
44
+ // ModifierFlags is the compiler's modifier bitmask. It represents computed
45
+ // modifier facts, not a replacement list of modifier syntax nodes.
46
+ //
47
+ // @evidence contracts/common.md#principled-implementation The alias retains the upstream uint32 modifier mask expected by compiler modifier queries.
48
+ // @evidence contracts/common.md#clear-and-simple-design One canonical mask avoids a second modifier enum or conversion layer.
49
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Modifier bits retain upstream identity rather than consumer-specific access or modifier guesses.
50
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes modifier facts from syntax lists, using separated prose and tags under the documentation guidance.
51
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
52
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
53
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
54
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
55
+ type ModifierFlags = innerast.ModifierFlags
56
+
57
+ // ---- Statement-shaped node types ----
58
+
59
+ // Block exposes the compiler-owned statement sequence inside braces. Aliasing
60
+ // retains its node identity and methods; it does not copy its statements.
61
+ //
62
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves block payloads and compiler traversal methods.
63
+ // @evidence contracts/common.md#clear-and-simple-design The alias leaves statement-list representation with upstream rather than another block container.
64
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Block structure is the actual compiler type, without synthetic fixture statements or foreign mutation.
65
+ // @evidence contracts/common.md#meaningful-documentation Native prose states the braced-sequence role and no-copy ownership, with separated tags following the documentation guidance.
66
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
67
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
68
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
69
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
70
+ type Block = innerast.Block
71
+
72
+ // BreakStatement exposes a break node, including its optional target label.
73
+ // A syntax node does not establish that its target is a valid enclosing
74
+ // break destination, which can also be a switch or labeled statement.
75
+ //
76
+ // @evidence contracts/common.md#principled-implementation The alias retains upstream break-node identity and optional-label representation.
77
+ // @evidence contracts/common.md#clear-and-simple-design Label and node state remain upstream-owned without another jump model.
78
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Break targets remain compiler syntax rather than guessed control-flow destinations.
79
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains label optionality and the semantic-validation boundary, following the documentation guidance's paragraph separation.
80
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
81
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
82
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
83
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
84
+ type BreakStatement = innerast.BreakStatement
85
+
86
+ // CaseBlock exposes the ordered case/default clauses of a switch body.
87
+ // The alias shares the compiler's clause list and node state.
88
+ //
89
+ // @evidence contracts/common.md#principled-implementation The upstream alias preserves ordered clause payloads and traversal identity.
90
+ // @evidence contracts/common.md#clear-and-simple-design Clause-list ownership stays in the compiler case-block type without a duplicate switch index.
91
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Clauses remain real syntax rather than precomputed matching-case results.
92
+ // @evidence contracts/common.md#meaningful-documentation Native prose states ordering and shared node ownership, with separated tags under the documentation guidance.
93
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
94
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
95
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
96
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
97
+ type CaseBlock = innerast.CaseBlock
98
+
99
+ // CaseOrDefaultClause is the compiler's shared switch-clause payload. Inspect
100
+ // the node kind to distinguish a case expression from the default clause.
101
+ //
102
+ // @evidence contracts/common.md#principled-implementation Aliasing retains the shared upstream representation whose node kind distinguishes case and default forms.
103
+ // @evidence contracts/common.md#clear-and-simple-design One shared clause type avoids parallel local case and default payloads.
104
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The actual node kind determines clause form rather than a guessed expression-presence rule.
105
+ // @evidence contracts/common.md#meaningful-documentation Native prose names the required kind distinction, with separated prose and tags following the documentation guidance.
106
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
107
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
108
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
109
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
110
+ type CaseOrDefaultClause = innerast.CaseOrDefaultClause
111
+
112
+ // CatchClause exposes a catch body and its optional exception binding.
113
+ // An absent binding represents an optional-binding catch, not a missing body.
114
+ //
115
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves the catch body's required role and optional binding.
116
+ // @evidence contracts/common.md#clear-and-simple-design The compiler catch payload owns binding and body without a second exception-handler structure.
117
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Exception bindings remain compiler syntax rather than injected error values or foreign handler changes.
118
+ // @evidence contracts/common.md#meaningful-documentation Native prose clarifies binding absence and body meaning, with paragraph separation under the documentation guidance.
119
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
120
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
121
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
122
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
123
+ type CatchClause = innerast.CatchClause
124
+
125
+ // ContinueStatement exposes a continue node and optional label. The alias does
126
+ // not resolve whether its target denotes a valid iteration statement.
127
+ //
128
+ // @evidence contracts/common.md#principled-implementation Upstream type identity preserves continue syntax and optional-label data.
129
+ // @evidence contracts/common.md#clear-and-simple-design Target syntax stays with the compiler node without a separate local jump resolver.
130
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Labels are supplied syntax rather than expected loop destinations or patched flow analysis.
131
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes syntax exposure from target validation, with separated tags following the documentation guidance.
132
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
133
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
134
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
135
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
136
+ type ContinueStatement = innerast.ContinueStatement
137
+
138
+ // DebuggerStatement exposes the payload-free debugger statement form. Compiler
139
+ // node metadata remains upstream-owned even though the syntax has no operands.
140
+ //
141
+ // @evidence contracts/common.md#principled-implementation The alias preserves debugger-node identity and metadata without inventing an operand.
142
+ // @evidence contracts/common.md#clear-and-simple-design Upstream's marker node is exposed directly with no redundant local flag.
143
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Debugger syntax is an existing compiler kind rather than a debugging-only production branch.
144
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains operand absence and retained metadata, with separated tags under the documentation guidance.
145
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
146
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
147
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
148
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
149
+ type DebuggerStatement = innerast.DebuggerStatement
150
+
151
+ // DoStatement exposes the do/while body and condition. Its syntax order differs
152
+ // from WhileStatement; the alias preserves the compiler's dedicated node form.
153
+ //
154
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains the do/while node's body and condition roles.
155
+ // @evidence contracts/common.md#clear-and-simple-design The compiler owns this loop form without a generalized local loop adapter.
156
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Loop syntax remains the dedicated upstream type rather than a guessed while-loop rewrite.
157
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies body-before-condition syntax and the loop distinction, following the documentation guidance's paragraph separation.
158
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
159
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
160
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
161
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
162
+ type DoStatement = innerast.DoStatement
163
+
164
+ // EmptyStatement exposes a standalone semicolon statement, which is distinct
165
+ // from an absent statement or an empty braced block.
166
+ //
167
+ // @evidence contracts/common.md#principled-implementation The alias retains the upstream empty-statement identity instead of conflating it with nil or Block.
168
+ // @evidence contracts/common.md#clear-and-simple-design One marker type expresses semicolon syntax without another emptiness flag.
169
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The semicolon form is actual syntax rather than a manufactured no-op for known fixtures.
170
+ // @evidence contracts/common.md#meaningful-documentation Native prose states the absent-node and block distinctions, with separated tags under the documentation guidance.
171
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
172
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
173
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
174
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
175
+ type EmptyStatement = innerast.EmptyStatement
176
+
177
+ // ExpressionStatement exposes an expression in statement position. The wrapper
178
+ // preserves its statement identity rather than aliasing the expression alone.
179
+ //
180
+ // @evidence contracts/common.md#principled-implementation Upstream type identity preserves the expression/statement boundary used by traversal and emission.
181
+ // @evidence contracts/common.md#clear-and-simple-design The compiler wrapper owns statement metadata without another local expression container.
182
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Statement position comes from real AST structure rather than a text-based fixture classification.
183
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains the statement wrapper's purpose, with paragraph and tag separation following the documentation guidance.
184
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
185
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
186
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
187
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
188
+ type ExpressionStatement = innerast.ExpressionStatement
189
+
190
+ // ForInOrOfStatement exposes the shared for-in/for-of payload. The node kind
191
+ // determines the iteration form; the same shape does not equate their semantics.
192
+ //
193
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves upstream's shared loop payload and its kind-based in/of distinction.
194
+ // @evidence contracts/common.md#clear-and-simple-design The existing shared shape avoids duplicate local iteration-loop structures.
195
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Iteration form uses the actual node kind rather than guessing from operand text.
196
+ // @evidence contracts/common.md#meaningful-documentation Native prose names the kind distinction and semantic boundary, following the documentation guidance's paragraph separation.
197
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
198
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
199
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
200
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
201
+ type ForInOrOfStatement = innerast.ForInOrOfStatement
202
+
203
+ // ForStatement exposes the classic for-loop initializer, condition, incrementor
204
+ // and body. Omitted header operands remain absent in the upstream representation.
205
+ //
206
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains optional loop-header operands and their distinct roles.
207
+ // @evidence contracts/common.md#clear-and-simple-design The compiler loop node owns header/body structure without another local iteration abstraction.
208
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Absent operands remain syntax facts rather than inserted fixture-specific conditions.
209
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains optional header roles and retained absence, with separated tags under the documentation guidance.
210
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
211
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
212
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
213
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
214
+ type ForStatement = innerast.ForStatement
215
+
216
+ // FunctionDeclaration exposes a declaration-form function with the compiler's
217
+ // signature and optional body; declarations without bodies remain representable.
218
+ //
219
+ // @evidence contracts/common.md#principled-implementation The alias retains declaration identity and upstream signature/body representation without converting to FunctionExpression.
220
+ // @evidence contracts/common.md#clear-and-simple-design Signature state remains compiler-owned instead of duplicated in a local callable schema.
221
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Function syntax is the actual upstream declaration rather than a consumer-specific callable stub.
222
+ // @evidence contracts/common.md#meaningful-documentation Native prose states declaration form and optional bodies, with separated tags following the documentation guidance.
223
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
224
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
225
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
226
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
227
+ type FunctionDeclaration = innerast.FunctionDeclaration
228
+
229
+ // IfStatement exposes condition and branch statements. The optional else
230
+ // statement distinguishes a missing alternative from an explicitly empty one.
231
+ //
232
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains condition, then branch and optional else representation.
233
+ // @evidence contracts/common.md#clear-and-simple-design Branch ownership remains in the compiler node without a duplicate local decision tree.
234
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Branches remain syntax inputs rather than precomputed outcomes for known conditions.
235
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains optional else versus empty syntax, following the documentation guidance's prose/tag separation.
236
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
237
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
238
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
239
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
240
+ type IfStatement = innerast.IfStatement
241
+
242
+ // LabeledStatement exposes a label attached to a statement. This syntax payload
243
+ // does not resolve break or continue references to that label.
244
+ //
245
+ // @evidence contracts/common.md#principled-implementation The alias preserves upstream label and statement identity without inferring jump targets.
246
+ // @evidence contracts/common.md#clear-and-simple-design A single compiler node owns the label attachment rather than a separate local label registry.
247
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Label attachment is AST structure rather than guessed textual jump resolution.
248
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies attachment and its resolution boundary, with separated tags under the documentation guidance.
249
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
250
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
251
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
252
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
253
+ type LabeledStatement = innerast.LabeledStatement
254
+
255
+ // ModuleDeclaration exposes namespace or module declaration syntax. Its name,
256
+ // body form and flags remain compiler-owned; it does not resolve a module path.
257
+ //
258
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains module declarations and their namespace/module distinctions.
259
+ // @evidence contracts/common.md#clear-and-simple-design The compiler owns name, body and flags without another local module model.
260
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Module names remain syntax rather than hardcoded package-resolution answers.
261
+ // @evidence contracts/common.md#meaningful-documentation Native prose states the declaration role and lack of path resolution, following the documentation guidance's paragraph separation.
262
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
263
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
264
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
265
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
266
+ type ModuleDeclaration = innerast.ModuleDeclaration
267
+
268
+ // ModuleBlock exposes the statements inside a module body. It remains distinct
269
+ // from Block because the compiler gives module bodies their own node identity.
270
+ //
271
+ // @evidence contracts/common.md#principled-implementation The alias preserves module-body identity and statement storage from upstream.
272
+ // @evidence contracts/common.md#clear-and-simple-design The existing module-body node avoids a parallel local namespace statement container.
273
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Module-body classification uses the compiler type rather than special package-name logic.
274
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains the Block distinction, with separated prose and tags under the documentation guidance.
275
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
276
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
277
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
278
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
279
+ type ModuleBlock = innerast.ModuleBlock
280
+
281
+ // ReturnStatement exposes an optional return expression. A nil expression is a
282
+ // bare return, not an explicit undefined expression inserted by the shim.
283
+ //
284
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves optional return-value syntax and statement metadata.
285
+ // @evidence contracts/common.md#clear-and-simple-design The compiler return node owns expression absence without a redundant local return-value flag.
286
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Bare returns remain absent operands rather than invented expected values.
287
+ // @evidence contracts/common.md#meaningful-documentation Native prose clarifies bare-return meaning, with separated tags following the documentation guidance.
288
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
289
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
290
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
291
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
292
+ type ReturnStatement = innerast.ReturnStatement
293
+
294
+ // SwitchStatement exposes the tested expression and its case block. Syntax
295
+ // exposure does not decide which branch will match or fall through.
296
+ //
297
+ // @evidence contracts/common.md#principled-implementation Aliasing retains upstream switch expression and case-block identity without evaluating them.
298
+ // @evidence contracts/common.md#clear-and-simple-design Case storage remains in CaseBlock rather than a duplicate local dispatch table.
299
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Branch outcomes are not hardcoded from known switch examples.
300
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains the structural roles and evaluation boundary, following the documentation guidance's paragraph separation.
301
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
302
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
303
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
304
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
305
+ type SwitchStatement = innerast.SwitchStatement
306
+
307
+ // ThrowStatement exposes the expression to be thrown. The alias neither raises
308
+ // that value nor determines its runtime exception type.
309
+ //
310
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves the throw operand as syntax without evaluating it.
311
+ // @evidence contracts/common.md#clear-and-simple-design The compiler node owns failure syntax without another local exception representation.
312
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Thrown values remain real operands rather than injected fixture errors.
313
+ // @evidence contracts/common.md#meaningful-documentation Native prose separates syntax exposure from runtime throwing, with separated tags under the documentation guidance.
314
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
315
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
316
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
317
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
318
+ type ThrowStatement = innerast.ThrowStatement
319
+
320
+ // TryStatement exposes the protected body and optional catch/finally parts.
321
+ // This syntax record does not execute cleanup or establish exception coverage.
322
+ //
323
+ // @evidence contracts/common.md#principled-implementation The alias retains upstream try/catch/finally structure and node identity.
324
+ // @evidence contracts/common.md#clear-and-simple-design Optional handlers stay with the compiler try node without another recovery-policy layer.
325
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Handler structure is not replaced with compensating retries or expected exception paths.
326
+ // @evidence contracts/common.md#meaningful-documentation Native prose names optional handlers and the execution boundary, following the documentation guidance's paragraph separation.
327
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
328
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
329
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
330
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
331
+ type TryStatement = innerast.TryStatement
332
+
333
+ // VariableDeclaration exposes one binding and its optional type/initializer.
334
+ // Keyword flags can live on its enclosing declaration list, so classification
335
+ // should use combined flags rather than this node's flags alone.
336
+ //
337
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains binding, annotation and initializer roles and their compiler parent relationships.
338
+ // @evidence contracts/common.md#clear-and-simple-design The alias exposes one declaration while list-level keyword policy stays with the compiler tree.
339
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Keyword classification uses actual enclosing flags rather than guessed binding text.
340
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains optional operands and parent-owned keyword flags, with separated tags under the documentation guidance.
341
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
342
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
343
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
344
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
345
+ type VariableDeclaration = innerast.VariableDeclaration
346
+
347
+ // VariableDeclarationList exposes ordered bindings and declaration-keyword
348
+ // flags. The list is shared with the compiler rather than copied by the alias.
349
+ //
350
+ // @evidence contracts/common.md#principled-implementation The alias preserves upstream ordered declaration storage and list-level node flags.
351
+ // @evidence contracts/common.md#clear-and-simple-design One compiler list owns shared keyword state instead of repeating it on every local binding.
352
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Keyword flags retain upstream values rather than fixture-specific declaration categories.
353
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains list ordering, keyword ownership and no-copy semantics, following the documentation guidance's paragraph separation.
354
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
355
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
356
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
357
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
358
+ type VariableDeclarationList = innerast.VariableDeclarationList
359
+
360
+ // VariableStatement exposes a declaration list in statement position, including
361
+ // statement-level modifiers. Loop header declarations use the list directly.
362
+ //
363
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves the distinction between a variable statement and its reusable declaration list.
364
+ // @evidence contracts/common.md#clear-and-simple-design The compiler wrapper owns statement modifiers while the list owns bindings and keyword state.
365
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Statement context follows AST structure rather than a special-case source-text match.
366
+ // @evidence contracts/common.md#meaningful-documentation Native prose contrasts statement and loop-header usage, with separated tags under the documentation guidance.
367
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
368
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
369
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
370
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
371
+ type VariableStatement = innerast.VariableStatement
372
+
373
+ // WhileStatement exposes a condition followed by a loop body. The alias keeps
374
+ // this form distinct from the body-first DoStatement.
375
+ //
376
+ // @evidence contracts/common.md#principled-implementation The upstream alias preserves condition/body roles and while-node identity.
377
+ // @evidence contracts/common.md#clear-and-simple-design The dedicated compiler form avoids a local generalized loop representation.
378
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Loop classification uses real syntax rather than a compensating do/while conversion.
379
+ // @evidence contracts/common.md#meaningful-documentation Native prose states condition-first meaning and the do/while distinction, following the documentation guidance's paragraph separation.
380
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
381
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
382
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
383
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
384
+ type WhileStatement = innerast.WhileStatement
385
+
386
+ // WithStatement exposes an object expression and its nested statement. This
387
+ // AST representation does not endorse the construct's use or change lookup.
388
+ //
389
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves with-statement syntax without emulating its runtime scope behavior.
390
+ // @evidence contracts/common.md#clear-and-simple-design Object and body remain compiler payloads rather than another local scope adapter.
391
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No foreign scope or property lookup is patched to simulate the construct.
392
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes syntax representation from runtime lookup, with separated tags under the documentation guidance.
393
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
394
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
395
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
396
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
397
+ type WithStatement = innerast.WithStatement
398
+
399
+ // ---- Class / module / enum shapes ----
400
+
401
+ // ClassDeclaration exposes declaration-form class syntax and compiler-owned
402
+ // members. It retains declaration identity rather than converting to an expression.
403
+ //
404
+ // @evidence contracts/common.md#principled-implementation Upstream alias identity preserves class declaration metadata and member structure.
405
+ // @evidence contracts/common.md#clear-and-simple-design Class members remain in the compiler representation without a duplicate local class schema.
406
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The shim exposes real class nodes rather than consumer-specific class substitutes.
407
+ // @evidence contracts/common.md#meaningful-documentation Native prose states declaration form and member ownership, with separated tags under the documentation guidance.
408
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
409
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
410
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
411
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
412
+ type ClassDeclaration = innerast.ClassDeclaration
413
+
414
+ // ClassExpression exposes a class used as an expression, including an optional
415
+ // name. Its identity remains distinct from declaration-form classes.
416
+ //
417
+ // @evidence contracts/common.md#principled-implementation The alias preserves upstream class-expression shape and optional naming.
418
+ // @evidence contracts/common.md#clear-and-simple-design Expression identity stays in the compiler type without a second class-form switch.
419
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Class form follows actual AST identity rather than guessed naming conventions.
420
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains expression form and optional naming, with separated tags following the documentation guidance.
421
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
422
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
423
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
424
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
425
+ type ClassExpression = innerast.ClassExpression
426
+
427
+ // ClassStaticBlockDeclaration exposes a class's static initialization block.
428
+ // Its body is syntax; exposing the alias does not execute initialization.
429
+ //
430
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves the static-block declaration and its body.
431
+ // @evidence contracts/common.md#clear-and-simple-design The dedicated compiler member owns initialization syntax without a local lifecycle abstraction.
432
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Static bodies remain real AST data rather than injected initialization hooks.
433
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies static initialization and the execution boundary, using separated tags under the documentation guidance.
434
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
435
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
436
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
437
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
438
+ type ClassStaticBlockDeclaration = innerast.ClassStaticBlockDeclaration
439
+
440
+ // ConstructorDeclaration exposes constructor parameters and optional body.
441
+ // Compiler ownership preserves overload declarations that have no implementation.
442
+ //
443
+ // @evidence contracts/common.md#principled-implementation The alias retains constructor identity and upstream signature/body distinctions.
444
+ // @evidence contracts/common.md#clear-and-simple-design Constructor state remains with the compiler declaration without a local callable wrapper.
445
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No known-class constructor or synthetic implementation substitutes for the upstream node.
446
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains parameters and body absence, with paragraph separation following the documentation guidance.
447
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
448
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
449
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
450
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
451
+ type ConstructorDeclaration = innerast.ConstructorDeclaration
452
+
453
+ // EnumDeclaration exposes named enum syntax and its member sequence. The alias
454
+ // does not evaluate member values or manufacture the emitted runtime object.
455
+ //
456
+ // @evidence contracts/common.md#principled-implementation Upstream type identity preserves enum name, modifiers and members without evaluation.
457
+ // @evidence contracts/common.md#clear-and-simple-design Members stay in the canonical compiler declaration rather than a duplicate value table.
458
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Enum values are not replaced with precomputed fixture answers.
459
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes syntax from value evaluation and emission, with separated tags under the documentation guidance.
460
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
461
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
462
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
463
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
464
+ type EnumDeclaration = innerast.EnumDeclaration
465
+
466
+ // EnumMember exposes an enum member name and optional initializer. An absent
467
+ // initializer remains syntax absence; its computed value belongs to the checker.
468
+ //
469
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves member naming and initializer optionality.
470
+ // @evidence contracts/common.md#clear-and-simple-design The member node owns syntax without a second inferred-value representation.
471
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Missing initializers are not filled with guessed enum values.
472
+ // @evidence contracts/common.md#meaningful-documentation Native prose names the computed-value boundary, with separated tags following the documentation guidance.
473
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
474
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
475
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
476
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
477
+ type EnumMember = innerast.EnumMember
478
+
479
+ // GetAccessorDeclaration exposes getter syntax with the compiler's signature
480
+ // and body representation. It does not execute a property read.
481
+ //
482
+ // @evidence contracts/common.md#principled-implementation The alias retains upstream getter declaration identity and methods.
483
+ // @evidence contracts/common.md#clear-and-simple-design Getter structure stays compiler-owned rather than a generic local property adapter.
484
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No foreign getter is replaced to expose this syntax type.
485
+ // @evidence contracts/common.md#meaningful-documentation Native prose states the getter role and execution boundary, with separated tags under the documentation guidance.
486
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
487
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
488
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
489
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
490
+ type GetAccessorDeclaration = innerast.GetAccessorDeclaration
491
+
492
+ // SetAccessorDeclaration exposes setter syntax and its parameter/body data.
493
+ // Aliasing the node does not perform a property write or alter a setter.
494
+ //
495
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains setter declaration payload and compiler methods.
496
+ // @evidence contracts/common.md#clear-and-simple-design Setter syntax remains in its canonical type without a duplicate assignment mechanism.
497
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No foreign setter replacement is used to expose setter nodes.
498
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes declaration access from property writes, following the documentation guidance's paragraph separation.
499
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
500
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
501
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
502
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
503
+ type SetAccessorDeclaration = innerast.SetAccessorDeclaration
504
+
505
+ // HeritageClause exposes an extends or implements clause. Inspect its token to
506
+ // distinguish those forms; exposing syntax does not establish assignability.
507
+ //
508
+ // @evidence contracts/common.md#principled-implementation Upstream identity preserves heritage token and target-type sequence.
509
+ // @evidence contracts/common.md#clear-and-simple-design One compiler clause owns both forms without parallel local inheritance records.
510
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Clause meaning follows its actual token rather than a guessed target-name rule.
511
+ // @evidence contracts/common.md#meaningful-documentation Native prose states the token distinction and semantic boundary, with separated tags under the documentation guidance.
512
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
513
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
514
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
515
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
516
+ type HeritageClause = innerast.HeritageClause
517
+
518
+ // PropertyDeclaration exposes class property syntax, including optional type
519
+ // and initializer. It remains distinct from object-literal PropertyAssignment.
520
+ //
521
+ // @evidence contracts/common.md#principled-implementation The alias preserves upstream property declaration identity and optional operands.
522
+ // @evidence contracts/common.md#clear-and-simple-design Class-member syntax remains in the compiler declaration without a duplicate property schema.
523
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Properties are real declaration nodes rather than known-object fixture fields.
524
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains class-member role and the assignment distinction, following the documentation guidance's paragraph separation.
525
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
526
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
527
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
528
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
529
+ type PropertyDeclaration = innerast.PropertyDeclaration
530
+
531
+ // ---- Module syntax ----
532
+
533
+ // ImportDeclaration exposes an import statement's bindings and module syntax.
534
+ // The alias preserves optional side-effect-only bindings without resolving modules.
535
+ //
536
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains import-clause optionality and module operands.
537
+ // @evidence contracts/common.md#clear-and-simple-design Import syntax remains compiler-owned without another local loader model.
538
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Module operands are real AST inputs rather than hardcoded resolution answers.
539
+ // @evidence contracts/common.md#meaningful-documentation Native prose names side-effect-only imports and the resolution boundary, following the documentation guidance's paragraph separation.
540
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
541
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
542
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
543
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
544
+ type ImportDeclaration = innerast.ImportDeclaration
545
+
546
+ // ImportSpecifier exposes one named import and any original/local name
547
+ // distinction. The node's type-only marker remains the compiler's representation.
548
+ //
549
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves upstream import-name and type-only distinctions without renaming bindings.
550
+ // @evidence contracts/common.md#clear-and-simple-design One specifier owns binding syntax without a duplicate local import map.
551
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Binding names are actual syntax rather than consumer-specific alias rewrites.
552
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains original/local naming and type-only state, with separated tags under the documentation guidance.
553
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
554
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
555
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
556
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
557
+ type ImportSpecifier = innerast.ImportSpecifier
558
+
559
+ // ImportEqualsDeclaration exposes an import-equals binding and its module
560
+ // reference. Internal entity references and external module forms remain distinct.
561
+ //
562
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves import-equals naming and reference forms.
563
+ // @evidence contracts/common.md#clear-and-simple-design The compiler declaration owns reference syntax without a separate local require adapter.
564
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No module-name special case converts the upstream reference payload.
565
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies reference-form distinctions, with separated tags following the documentation guidance.
566
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
567
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
568
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
569
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
570
+ type ImportEqualsDeclaration = innerast.ImportEqualsDeclaration
571
+
572
+ // ExternalModuleReference exposes the require-style reference operand used by
573
+ // import-equals syntax. The alias neither loads nor resolves that module.
574
+ //
575
+ // @evidence contracts/common.md#principled-implementation Upstream type identity retains the external-reference wrapper and its operand.
576
+ // @evidence contracts/common.md#clear-and-simple-design The compiler owns the reference boundary without another local module loader.
577
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts External references are not guessed paths or patched require handlers.
578
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes syntax from loading and resolution, with separated tags under the documentation guidance.
579
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
580
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
581
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
582
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
583
+ type ExternalModuleReference = innerast.ExternalModuleReference
584
+
585
+ // NamedImports exposes the ordered named-binding list of an import clause.
586
+ // The alias shares compiler storage rather than copying or sorting specifiers.
587
+ //
588
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves named-import ordering and child nodes.
589
+ // @evidence contracts/common.md#clear-and-simple-design One canonical list avoids a duplicate binding collection or name index.
590
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Specifier order is retained rather than normalized for known fixtures.
591
+ // @evidence contracts/common.md#meaningful-documentation Native prose states ordering and no-copy semantics, following the documentation guidance's paragraph separation.
592
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
593
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
594
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
595
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
596
+ type NamedImports = innerast.NamedImports
597
+
598
+ // NamespaceImport exposes the local name of an import namespace binding.
599
+ // The syntax node does not construct a runtime namespace object.
600
+ //
601
+ // @evidence contracts/common.md#principled-implementation The alias retains the upstream namespace-binding name and node identity.
602
+ // @evidence contracts/common.md#clear-and-simple-design Namespace binding syntax remains in one compiler node without a local module-object wrapper.
603
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Namespace names are supplied syntax rather than fabricated module objects.
604
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies local binding and runtime boundary, with separated tags under the documentation guidance.
605
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
606
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
607
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
608
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
609
+ type NamespaceImport = innerast.NamespaceImport
610
+
611
+ // ExportDeclaration exposes export-clause and optional module syntax. Star and
612
+ // named exports retain the compiler's clause distinctions without target resolution.
613
+ //
614
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves export forms and optional module references.
615
+ // @evidence contracts/common.md#clear-and-simple-design The compiler clause owns export structure without another local export registry.
616
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Export targets are not replaced by consumer-specific public-name guesses.
617
+ // @evidence contracts/common.md#meaningful-documentation Native prose states form distinctions and unresolved targets, following the documentation guidance's paragraph separation.
618
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
619
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
620
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
621
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
622
+ type ExportDeclaration = innerast.ExportDeclaration
623
+
624
+ // ExportSpecifier exposes one named export and any local/exported-name
625
+ // distinction. Type-only state remains the compiler node's own marker.
626
+ //
627
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves upstream exported-name and type-only representation.
628
+ // @evidence contracts/common.md#clear-and-simple-design One specifier owns its names without a duplicate local export mapping.
629
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Public names remain actual syntax rather than hardcoded downstream exports.
630
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains naming and type-only state, with separated tags following the documentation guidance.
631
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
632
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
633
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
634
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
635
+ type ExportSpecifier = innerast.ExportSpecifier
636
+
637
+ // ExportAssignment exposes an export-equals or default-export expression.
638
+ // The upstream node's form marker distinguishes those two assignments.
639
+ //
640
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains export form and assigned expression syntax.
641
+ // @evidence contracts/common.md#clear-and-simple-design The shared compiler node owns both forms without another local export switch.
642
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Assignment form uses upstream state rather than consumer-specific module conventions.
643
+ // @evidence contracts/common.md#meaningful-documentation Native prose names export-equals/default distinctions, with separated tags under the documentation guidance.
644
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
645
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
646
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
647
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
648
+ type ExportAssignment = innerast.ExportAssignment
649
+
650
+ // ImportTypeNode exposes import-based type syntax, including qualifier and
651
+ // generic arguments. It remains a type node rather than an executable module load.
652
+ //
653
+ // @evidence contracts/common.md#principled-implementation The alias preserves upstream import-type operands and type-query distinctions.
654
+ // @evidence contracts/common.md#clear-and-simple-design Type-import structure stays in the compiler type rather than a parallel module-resolution model.
655
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Import types are actual syntax, not precomputed module types or patched loaders.
656
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains type syntax versus execution, with separated tags following the documentation guidance.
657
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
658
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
659
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
660
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
661
+ type ImportTypeNode = innerast.ImportTypeNode
662
+
663
+ // ---- Binding patterns ----
664
+
665
+ // BindingElement exposes one destructuring binding, including optional source
666
+ // property, rest marker and initializer. Its parent pattern remains compiler-owned.
667
+ //
668
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains destructuring operand and parent relationships.
669
+ // @evidence contracts/common.md#clear-and-simple-design One element owns binding syntax without a second flattened local binding map.
670
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Destructuring is actual AST structure rather than guessed property-name substitution.
671
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies optional operands and pattern ownership, with separated tags under the documentation guidance.
672
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
673
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
674
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
675
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
676
+ type BindingElement = innerast.BindingElement
677
+
678
+ // BindingPattern exposes the shared array/object destructuring shape. Inspect
679
+ // the node kind to distinguish those patterns rather than inferring from names.
680
+ //
681
+ // @evidence contracts/common.md#principled-implementation The alias preserves upstream's kind-discriminated pattern and element representation.
682
+ // @evidence contracts/common.md#clear-and-simple-design The compiler shared shape avoids separate local array/object binding containers.
683
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Pattern form comes from the actual kind rather than fixture-specific naming rules.
684
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains the required array/object kind distinction, following the documentation guidance's paragraph separation.
685
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
686
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
687
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
688
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
689
+ type BindingPattern = innerast.BindingPattern
690
+
691
+ // ---- Expressions ----
692
+
693
+ // ArrayLiteralExpression exposes ordered array elements, including spread and
694
+ // omitted-element nodes. The alias does not evaluate or copy their values.
695
+ //
696
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains element ordering and compiler literal metadata.
697
+ // @evidence contracts/common.md#clear-and-simple-design The canonical element list avoids a duplicate local array-value model.
698
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Array elements remain syntax rather than precomputed fixture arrays.
699
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains ordering, holes and evaluation boundaries, with separated tags under the documentation guidance.
700
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
701
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
702
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
703
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
704
+ type ArrayLiteralExpression = innerast.ArrayLiteralExpression
705
+
706
+ // ArrowFunction exposes arrow syntax with its parameters and expression or
707
+ // block body. The body form remains explicit in the compiler AST.
708
+ //
709
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves arrow identity and expression/block-body distinctions.
710
+ // @evidence contracts/common.md#clear-and-simple-design The compiler callable node owns body and signature without a local function conversion.
711
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Arrow bodies are real syntax rather than rewritten known callbacks.
712
+ // @evidence contracts/common.md#meaningful-documentation Native prose names both body forms, with separated tags following the documentation guidance.
713
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
714
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
715
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
716
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
717
+ type ArrowFunction = innerast.ArrowFunction
718
+
719
+ // AsExpression exposes the operand and type of an `as` assertion. This syntax
720
+ // alias does not cast a Go value or establish TypeScript assignability.
721
+ //
722
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains assertion expression/type roles without semantic conversion.
723
+ // @evidence contracts/common.md#clear-and-simple-design The existing assertion node avoids another local cast representation.
724
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No guessed type result or foreign checker override implements the alias.
725
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes assertion syntax from conversion and checking, following the documentation guidance's paragraph separation.
726
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
727
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
728
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
729
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
730
+ type AsExpression = innerast.AsExpression
731
+
732
+ // AwaitExpression exposes an awaited operand. Its presence records syntax,
733
+ // not suspension or validation of the enclosing async context.
734
+ //
735
+ // @evidence contracts/common.md#principled-implementation Upstream type identity preserves the await operand and node metadata.
736
+ // @evidence contracts/common.md#clear-and-simple-design Await syntax stays in the compiler expression without another coroutine wrapper.
737
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The alias introduces no retry or patched scheduling behavior.
738
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies the syntax and async-validation boundary, with separated tags under the documentation guidance.
739
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
740
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
741
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
742
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
743
+ type AwaitExpression = innerast.AwaitExpression
744
+
745
+ // BinaryExpression exposes left/right operands and the operator token. The
746
+ // token determines the operation; the alias does not evaluate either operand.
747
+ //
748
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains operand order and operator-token distinctions.
749
+ // @evidence contracts/common.md#clear-and-simple-design One compiler binary node owns syntax without a local operation dispatch table.
750
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Operators are actual AST tokens rather than fixture-specific computed answers.
751
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains operator ownership and evaluation boundaries, following the documentation guidance's paragraph separation.
752
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
753
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
754
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
755
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
756
+ type BinaryExpression = innerast.BinaryExpression
757
+
758
+ // ConditionalExpression exposes condition, true operand and false operand.
759
+ // It retains expression identity rather than an if statement or chosen result.
760
+ //
761
+ // @evidence contracts/common.md#principled-implementation The alias preserves upstream ternary operand roles and expression metadata.
762
+ // @evidence contracts/common.md#clear-and-simple-design Three expression roles stay in the compiler node without a parallel local decision structure.
763
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Conditional results are not substituted for known conditions.
764
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies expression/statement/result distinctions, with separated tags under the documentation guidance.
765
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
766
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
767
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
768
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
769
+ type ConditionalExpression = innerast.ConditionalExpression
770
+
771
+ // DeleteExpression exposes deletion syntax and its operand. Aliasing this node
772
+ // does not remove a property or determine whether deletion is permitted.
773
+ //
774
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains the delete operand without executing it.
775
+ // @evidence contracts/common.md#clear-and-simple-design The compiler unary node owns syntax without another property-mutation layer.
776
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No foreign property or deletion method is changed by the alias.
777
+ // @evidence contracts/common.md#meaningful-documentation Native prose states execution and permission boundaries, with separated tags following the documentation guidance.
778
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
779
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
780
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
781
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
782
+ type DeleteExpression = innerast.DeleteExpression
783
+
784
+ // ElementAccessExpression exposes a receiver and bracketed index expression.
785
+ // Optional-chain state remains the compiler's node data rather than evaluated access.
786
+ //
787
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves receiver/index ordering and upstream optional-access representation.
788
+ // @evidence contracts/common.md#clear-and-simple-design Bracket access remains a dedicated compiler expression without a local lookup wrapper.
789
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Indices are actual syntax rather than hardcoded property results.
790
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies bracket operands and optional-chain ownership, following the documentation guidance's paragraph separation.
791
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
792
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
793
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
794
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
795
+ type ElementAccessExpression = innerast.ElementAccessExpression
796
+
797
+ // FunctionExpression exposes expression-form functions and optional naming.
798
+ // Signature and body nodes remain shared with the compiler, not compiled callables.
799
+ //
800
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves function-expression form and signature/body state.
801
+ // @evidence contracts/common.md#clear-and-simple-design The canonical compiler callable avoids a second local function container.
802
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No expected callback implementation substitutes for the compiler expression.
803
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains expression form and compiler ownership, with separated tags under the documentation guidance.
804
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
805
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
806
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
807
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
808
+ type FunctionExpression = innerast.FunctionExpression
809
+
810
+ // NewExpression exposes a constructor operand, generic arguments and optional
811
+ // argument list. An absent argument list retains the form without parentheses.
812
+ //
813
+ // @evidence contracts/common.md#principled-implementation Upstream identity preserves constructor and argument-list distinctions without instantiating a value.
814
+ // @evidence contracts/common.md#clear-and-simple-design The compiler new-expression type owns constructor syntax without a local object factory.
815
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Constructor operands remain syntax rather than known-class object substitutes.
816
+ // @evidence contracts/common.md#meaningful-documentation Native prose clarifies argument-list absence, with separated tags following the documentation guidance.
817
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
818
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
819
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
820
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
821
+ type NewExpression = innerast.NewExpression
822
+
823
+ // NonNullExpression exposes the postfix non-null assertion operand. The alias
824
+ // records annotation syntax without establishing that a runtime value is non-null.
825
+ //
826
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains the assertion wrapper and operand.
827
+ // @evidence contracts/common.md#clear-and-simple-design The dedicated compiler assertion avoids another local nullability flag.
828
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No guessed successful null check replaces the actual operand.
829
+ // @evidence contracts/common.md#meaningful-documentation Native prose separates syntax from runtime null guarantees, following the documentation guidance's paragraph separation.
830
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
831
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
832
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
833
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
834
+ type NonNullExpression = innerast.NonNullExpression
835
+
836
+ // ObjectLiteralExpression exposes ordered property/method members. The alias
837
+ // shares syntax nodes and does not materialize a runtime object or property map.
838
+ //
839
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves the upstream member sequence and object-literal identity.
840
+ // @evidence contracts/common.md#clear-and-simple-design The canonical syntax collection avoids a duplicate local object representation.
841
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Members remain real AST inputs rather than known-fixture object shapes.
842
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains ordering and runtime boundaries, with separated tags under the documentation guidance.
843
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
844
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
845
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
846
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
847
+ type ObjectLiteralExpression = innerast.ObjectLiteralExpression
848
+
849
+ // ParenthesizedExpression exposes an explicit grouping wrapper. Keeping the
850
+ // wrapper preserves syntax even when its child could be printed without it.
851
+ //
852
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves explicit parenthesis nodes and their child.
853
+ // @evidence contracts/common.md#clear-and-simple-design Grouping stays in the compiler wrapper without a duplicate precedence model.
854
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Parentheses are actual syntax rather than fixture-specific formatting compensation.
855
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains why explicit grouping remains represented, following the documentation guidance's paragraph separation.
856
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
857
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
858
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
859
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
860
+ type ParenthesizedExpression = innerast.ParenthesizedExpression
861
+
862
+ // PostfixUnaryExpression exposes a postfix increment/decrement operand and
863
+ // operator. It remains distinct from prefix syntax and does not mutate a value.
864
+ //
865
+ // @evidence contracts/common.md#principled-implementation Upstream identity retains postfix operator and operand roles.
866
+ // @evidence contracts/common.md#clear-and-simple-design The compiler postfix form avoids a local placement switch or mutation adapter.
867
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Operators are syntax tokens rather than injected known-value updates.
868
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes postfix form from execution, with separated tags under the documentation guidance.
869
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
870
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
871
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
872
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
873
+ type PostfixUnaryExpression = innerast.PostfixUnaryExpression
874
+
875
+ // PropertyAccessExpression exposes a receiver and dotted member name. Optional
876
+ // chaining remains upstream syntax state, without resolving the member's value.
877
+ //
878
+ // @evidence contracts/common.md#principled-implementation The alias preserves receiver/name identity and optional-chain representation.
879
+ // @evidence contracts/common.md#clear-and-simple-design The compiler access node owns member syntax without another local property lookup.
880
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Member names are real operands rather than hardcoded foreign property values.
881
+ // @evidence contracts/common.md#meaningful-documentation Native prose states dotted access and unresolved-value meaning, following the documentation guidance's paragraph separation.
882
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
883
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
884
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
885
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
886
+ type PropertyAccessExpression = innerast.PropertyAccessExpression
887
+
888
+ // PropertyAssignment exposes a named object-literal member and initializer.
889
+ // It is distinct from a class property declaration and a shorthand member.
890
+ //
891
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves object-member name and initializer roles.
892
+ // @evidence contracts/common.md#clear-and-simple-design The compiler assignment form avoids a duplicate generic property container.
893
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Object members remain actual syntax rather than known-shape substitutions.
894
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies declaration and shorthand distinctions, with separated tags under the documentation guidance.
895
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
896
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
897
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
898
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
899
+ type PropertyAssignment = innerast.PropertyAssignment
900
+
901
+ // ShorthandPropertyAssignment exposes a binding-name shorthand in an object
902
+ // literal and its optional assignment initializer. The value is not resolved here.
903
+ //
904
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves shorthand identity and optional initializer data without inventing a separate key/value pair.
905
+ // @evidence contracts/common.md#clear-and-simple-design The dedicated compiler shorthand type avoids flattening syntax into another member model.
906
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Binding values are not guessed from known variable names.
907
+ // @evidence contracts/common.md#meaningful-documentation Native prose states shorthand and initializer roles, following the documentation guidance's paragraph separation.
908
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
909
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
910
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
911
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
912
+ type ShorthandPropertyAssignment = innerast.ShorthandPropertyAssignment
913
+
914
+ // SpreadAssignment exposes an object-literal spread operand. It is distinct
915
+ // from SpreadElement used in array or argument positions.
916
+ //
917
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves object-spread node kind and operand.
918
+ // @evidence contracts/common.md#clear-and-simple-design Object-member context stays in the compiler type without another spread-context option.
919
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No known-object property expansion replaces the supplied syntax.
920
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains the SpreadElement context distinction, with separated tags under the documentation guidance.
921
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
922
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
923
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
924
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
925
+ type SpreadAssignment = innerast.SpreadAssignment
926
+
927
+ // SpreadElement exposes a spread operand in arrays or argument lists. The alias
928
+ // does not expand an iterable or infer its resulting elements.
929
+ //
930
+ // @evidence contracts/common.md#principled-implementation Upstream identity retains spread-element syntax and its operand.
931
+ // @evidence contracts/common.md#clear-and-simple-design The canonical element wrapper avoids a local iterable-expansion layer.
932
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Spread results are not precomputed for known iterable fixtures.
933
+ // @evidence contracts/common.md#meaningful-documentation Native prose names element contexts and the evaluation boundary, following the documentation guidance's paragraph separation.
934
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
935
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
936
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
937
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
938
+ type SpreadElement = innerast.SpreadElement
939
+
940
+ // TaggedTemplateExpression exposes a tag expression and its template operand.
941
+ // The alias does not invoke the tag or evaluate template substitutions.
942
+ //
943
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves tag/template operand relationships.
944
+ // @evidence contracts/common.md#clear-and-simple-design The compiler template-call form avoids another local interpolation adapter.
945
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No known-tag result or patched template function replaces the AST.
946
+ // @evidence contracts/common.md#meaningful-documentation Native prose states tag ownership and evaluation boundaries, with separated tags under the documentation guidance.
947
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
948
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
949
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
950
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
951
+ type TaggedTemplateExpression = innerast.TaggedTemplateExpression
952
+
953
+ // TemplateExpression exposes a template head and ordered substitution spans.
954
+ // Literal text and expressions remain separate compiler nodes without interpolation.
955
+ //
956
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves upstream head/span ordering and syntax distinctions.
957
+ // @evidence contracts/common.md#clear-and-simple-design The compiler sequence owns template structure rather than a duplicate flattened string.
958
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Interpolated values are not replaced by fixture-specific completed text.
959
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains separated literals and substitutions, following the documentation guidance's paragraph separation.
960
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
961
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
962
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
963
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
964
+ type TemplateExpression = innerast.TemplateExpression
965
+
966
+ // TemplateSpan exposes a substitution expression and the literal segment that
967
+ // follows it. Spans preserve ordering through their containing template.
968
+ //
969
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity retains expression/following-literal pair semantics.
970
+ // @evidence contracts/common.md#clear-and-simple-design One compiler span owns the pair without another interpolation-state object.
971
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Literal segments remain actual syntax rather than guessed rendered substitutions.
972
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains which literal follows each expression, with separated tags under the documentation guidance.
973
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
974
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
975
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
976
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
977
+ type TemplateSpan = innerast.TemplateSpan
978
+
979
+ // TypeAssertion exposes angle-bracket assertion syntax and its type/operand.
980
+ // It remains distinct from AsExpression and does not convert a runtime value.
981
+ //
982
+ // @evidence contracts/common.md#principled-implementation Upstream identity retains assertion form and type/expression roles.
983
+ // @evidence contracts/common.md#clear-and-simple-design The dedicated compiler form avoids another local cast representation.
984
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No guessed cast result or foreign checker patch supplies assertion semantics.
985
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies form and runtime-conversion boundaries, following the documentation guidance's paragraph separation.
986
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
987
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
988
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
989
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
990
+ type TypeAssertion = innerast.TypeAssertion
991
+
992
+ // TypeOperatorNode exposes a type operator and its operand. Inspect the operator
993
+ // token to distinguish forms such as keyof, readonly and unique.
994
+ //
995
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves operator-token and type-operand distinctions.
996
+ // @evidence contracts/common.md#clear-and-simple-design The shared compiler type operator avoids parallel local per-operator schemas.
997
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Operator meaning comes from actual tokens rather than name-based type guesses.
998
+ // @evidence contracts/common.md#meaningful-documentation Native prose names token-dependent distinctions, with separated tags under the documentation guidance.
999
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1000
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1001
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1002
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1003
+ type TypeOperatorNode = innerast.TypeOperatorNode
1004
+
1005
+ // TypeOfExpression exposes the runtime typeof operator's operand. It is distinct
1006
+ // from a type-position query and does not evaluate the operand in the shim.
1007
+ //
1008
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves runtime-expression identity rather than conflating it with TypeQuery syntax.
1009
+ // @evidence contracts/common.md#clear-and-simple-design The compiler unary node owns runtime syntax without another local type-inference layer.
1010
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No expected typeof result substitutes for the compiler operand.
1011
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains runtime/type-query distinctions, following the documentation guidance's paragraph separation.
1012
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1013
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1014
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1015
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1016
+ type TypeOfExpression = innerast.TypeOfExpression
1017
+
1018
+ // VoidExpression exposes the void operator and its operand. The alias records
1019
+ // syntax without evaluating side effects or returning a JavaScript value.
1020
+ //
1021
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves the void expression and operand metadata.
1022
+ // @evidence contracts/common.md#clear-and-simple-design The compiler unary type avoids another local discard-operation abstraction.
1023
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No fabricated undefined value replaces the actual syntax operand.
1024
+ // @evidence contracts/common.md#meaningful-documentation Native prose states evaluation and value boundaries, with separated tags under the documentation guidance.
1025
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1026
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1027
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1028
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1029
+ type VoidExpression = innerast.VoidExpression
1030
+
1031
+ // YieldExpression exposes an optional yielded operand and delegation marker.
1032
+ // Bare yield and yield-star remain distinct compiler syntax states.
1033
+ //
1034
+ // @evidence contracts/common.md#principled-implementation Upstream identity retains optional operand and delegation distinctions without running a generator.
1035
+ // @evidence contracts/common.md#clear-and-simple-design The canonical yield node owns both forms without another local generator protocol.
1036
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Generator results are not substituted for known yielded fixtures.
1037
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies bare and delegated yield forms, following the documentation guidance's paragraph separation.
1038
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1039
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1040
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1041
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1042
+ type YieldExpression = innerast.YieldExpression
1043
+
1044
+ // RegularExpressionLiteral exposes regexp literal syntax as held by the
1045
+ // compiler. The alias does not compile a Go regexp or match input text.
1046
+ //
1047
+ // @evidence contracts/common.md#principled-implementation Exact upstream identity preserves regexp-literal text and node metadata.
1048
+ // @evidence contracts/common.md#clear-and-simple-design Literal storage stays compiler-owned instead of another local regexp engine.
1049
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No known-input match result or foreign regexp override supplies this syntax type.
1050
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes syntax exposure from regexp compilation, with separated tags under the documentation guidance.
1051
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1052
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1053
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1054
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1055
+ type RegularExpressionLiteral = innerast.RegularExpressionLiteral
1056
+
1057
+ // SatisfiesExpression exposes an expression and its satisfaction target type.
1058
+ // This syntax alias does not perform the check or coerce the expression's value.
1059
+ //
1060
+ // @evidence contracts/common.md#principled-implementation Aliasing preserves upstream expression/type roles and satisfies-node identity.
1061
+ // @evidence contracts/common.md#clear-and-simple-design The compiler expression owns the annotation boundary without a duplicate assignability result.
1062
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts No fabricated successful check replaces the actual expression and target nodes.
1063
+ // @evidence contracts/common.md#meaningful-documentation Native prose states checking and coercion boundaries, following the documentation guidance's paragraph separation.
1064
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1065
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1066
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1067
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1068
+ type SatisfiesExpression = innerast.SatisfiesExpression
1069
+
1070
+ // ---- Comment directives (banTsComment) ----
1071
+
1072
+ // CommentDirective records a compiler-recognized suppression comment's source
1073
+ // range and directive kind. It describes the comment, not whether suppression
1074
+ // succeeds for a diagnostic.
1075
+ //
1076
+ // @evidence contracts/common.md#principled-implementation The exact upstream alias preserves the source range and directive discriminant used by compiler diagnostics.
1077
+ // @evidence contracts/common.md#clear-and-simple-design One compiler record associates directive classification with its location without a second suppression model.
1078
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Directive metadata is exposed unchanged rather than translated into rule-specific expected diagnostics.
1079
+ // @evidence contracts/common.md#meaningful-documentation Native prose distinguishes recognized metadata from successful suppression, with acknowledgment tags separated as the documentation skill requires.
1080
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1081
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1082
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1083
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1084
+ type CommentDirective = innerast.CommentDirective
1085
+
1086
+ // CommentDirectiveKind identifies the compiler's suppression directive
1087
+ // category. Re-exported constants retain upstream values; consumers must not
1088
+ // infer them from directive spelling or declaration order.
1089
+ //
1090
+ // @evidence contracts/common.md#principled-implementation Upstream enum identity preserves the discriminator carried by CommentDirective records.
1091
+ // @evidence contracts/common.md#clear-and-simple-design The compiler category is shared directly instead of maintained as a separate shim enum.
1092
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Directive constants derive from the pinned compiler rather than guessed numeric encodings.
1093
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains the category's association and constant provenance; a blank comment line separates the tags under the documentation guidance.
1094
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1095
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1096
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1097
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1098
+ type CommentDirectiveKind = innerast.CommentDirectiveKind
1099
+
1100
+ // ---- Source file parse options ----
1101
+
1102
+ // SourceFileParseOptions supplies file identity and external-module detection
1103
+ // options to compiler parsing. FileName and Path retain their upstream roles;
1104
+ // this alias does not normalize or reconcile caller-provided paths.
1105
+ //
1106
+ // @evidence contracts/common.md#principled-implementation Exact compiler identity retains both filename and canonical path fields alongside module-detection options.
1107
+ // @evidence contracts/common.md#clear-and-simple-design Parsing configuration stays in the compiler's single options record without a shim-specific conversion layer.
1108
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The alias adds no platform-specific path rewrite or filename-based fixture exception.
1109
+ // @evidence contracts/common.md#meaningful-documentation Native prose describes configuration purpose and the path-normalization boundary, with the documentation skill's separated acknowledgment block.
1110
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1111
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1112
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1113
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1114
+ type SourceFileParseOptions = innerast.SourceFileParseOptions
1115
+
1116
+ // ExternalModuleIndicatorOptions configures additional external-module
1117
+ // detection for source files. JSX enables JSX-based detection and Force marks
1118
+ // eligible non-declaration source files as modules; explicit module syntax is
1119
+ // still recognized by the compiler independently of these options.
1120
+ //
1121
+ // @evidence contracts/common.md#principled-implementation The upstream options distinguish JSX-based detection from forced module treatment while preserving compiler eligibility rules.
1122
+ // @evidence contracts/common.md#clear-and-simple-design Two independent detection choices remain the compiler's two fields rather than a shim policy engine.
1123
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Module detection is configured through upstream options without replacing foreign classification or singling out consumers.
1124
+ // @evidence contracts/common.md#meaningful-documentation Native prose explains each option and declaration-file eligibility, followed by a separate tag block using the documentation guidance.
1125
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources A type declaration acquires and holds no runtime resource.
1126
+ // @evidenceExclude contracts/performance.md#efficient-algorithms A type declaration chooses no processing strategy.
1127
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work A type declaration computes nothing, so there is no work to share.
1128
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation This type declaration describes a data shape only; it opens no file, builds no path and branches on no platform.
1129
+ type ExternalModuleIndicatorOptions = innerast.ExternalModuleIndicatorOptions
1130
+
1131
+ // ---- Node-flag constants ----
1132
+
1133
+ const (
1134
+ NodeFlagsNone = innerast.NodeFlagsNone
1135
+ NodeFlagsSynthesized = innerast.NodeFlagsSynthesized
1136
+ NodeFlagsLet = innerast.NodeFlagsLet
1137
+ NodeFlagsConst = innerast.NodeFlagsConst
1138
+ NodeFlagsBlockScoped = innerast.NodeFlagsBlockScoped
1139
+ NodeFlagsAwaitContext = innerast.NodeFlagsAwaitContext
1140
+ )
1141
+
1142
+ // ---- Modifier-flag constants ----
1143
+
1144
+ const (
1145
+ ModifierFlagsAmbient = innerast.ModifierFlagsAmbient
1146
+ )
1147
+
1148
+ // ---- Statement / declaration / expression kinds ----
1149
+
1150
+ const (
1151
+ KindSourceFile = innerast.KindSourceFile
1152
+
1153
+ // Statements
1154
+ KindBlock = innerast.KindBlock
1155
+ KindBreakStatement = innerast.KindBreakStatement
1156
+ KindCaseBlock = innerast.KindCaseBlock
1157
+ KindCaseClause = innerast.KindCaseClause
1158
+ KindCatchClause = innerast.KindCatchClause
1159
+ KindContinueStatement = innerast.KindContinueStatement
1160
+ KindDebuggerStatement = innerast.KindDebuggerStatement
1161
+ KindDefaultClause = innerast.KindDefaultClause
1162
+ KindDoStatement = innerast.KindDoStatement
1163
+ KindEmptyStatement = innerast.KindEmptyStatement
1164
+ KindExpressionStatement = innerast.KindExpressionStatement
1165
+ KindForInStatement = innerast.KindForInStatement
1166
+ KindForOfStatement = innerast.KindForOfStatement
1167
+ KindForStatement = innerast.KindForStatement
1168
+ KindIfStatement = innerast.KindIfStatement
1169
+ KindLabeledStatement = innerast.KindLabeledStatement
1170
+ KindReturnStatement = innerast.KindReturnStatement
1171
+ KindSwitchStatement = innerast.KindSwitchStatement
1172
+ KindThrowStatement = innerast.KindThrowStatement
1173
+ KindTryStatement = innerast.KindTryStatement
1174
+ KindVariableDeclaration = innerast.KindVariableDeclaration
1175
+ KindVariableDeclarationList = innerast.KindVariableDeclarationList
1176
+ KindVariableStatement = innerast.KindVariableStatement
1177
+ KindWhileStatement = innerast.KindWhileStatement
1178
+ KindWithStatement = innerast.KindWithStatement
1179
+
1180
+ // Class / enum / module
1181
+ KindClassDeclaration = innerast.KindClassDeclaration
1182
+ KindClassExpression = innerast.KindClassExpression
1183
+ KindConstructor = innerast.KindConstructor
1184
+ KindEnumDeclaration = innerast.KindEnumDeclaration
1185
+ KindEnumMember = innerast.KindEnumMember
1186
+ KindGetAccessor = innerast.KindGetAccessor
1187
+ KindSetAccessor = innerast.KindSetAccessor
1188
+ KindHeritageClause = innerast.KindHeritageClause
1189
+ KindPropertyDeclaration = innerast.KindPropertyDeclaration
1190
+
1191
+ // Module syntax
1192
+ KindExportAssignment = innerast.KindExportAssignment
1193
+ KindExportDeclaration = innerast.KindExportDeclaration
1194
+ KindImportEqualsDeclaration = innerast.KindImportEqualsDeclaration
1195
+ KindExternalModuleReference = innerast.KindExternalModuleReference
1196
+ KindImportType = innerast.KindImportType
1197
+ KindImportKeyword = innerast.KindImportKeyword
1198
+
1199
+ // Binding
1200
+ KindBindingElement = innerast.KindBindingElement
1201
+ KindObjectBindingPattern = innerast.KindObjectBindingPattern
1202
+ KindArrayBindingPattern = innerast.KindArrayBindingPattern
1203
+ KindOmittedExpression = innerast.KindOmittedExpression
1204
+
1205
+ // Expressions
1206
+ KindArrayLiteralExpression = innerast.KindArrayLiteralExpression
1207
+ KindArrowFunction = innerast.KindArrowFunction
1208
+ KindAsExpression = innerast.KindAsExpression
1209
+ KindAwaitExpression = innerast.KindAwaitExpression
1210
+ KindBinaryExpression = innerast.KindBinaryExpression
1211
+ KindConditionalExpression = innerast.KindConditionalExpression
1212
+ KindDeleteExpression = innerast.KindDeleteExpression
1213
+ KindElementAccessExpression = innerast.KindElementAccessExpression
1214
+ KindFunctionExpression = innerast.KindFunctionExpression
1215
+ KindNewExpression = innerast.KindNewExpression
1216
+ KindNonNullExpression = innerast.KindNonNullExpression
1217
+ KindObjectLiteralExpression = innerast.KindObjectLiteralExpression
1218
+ KindParenthesizedExpression = innerast.KindParenthesizedExpression
1219
+ KindPostfixUnaryExpression = innerast.KindPostfixUnaryExpression
1220
+ KindPropertyAssignment = innerast.KindPropertyAssignment
1221
+ KindShorthandPropertyAssignment = innerast.KindShorthandPropertyAssignment
1222
+ KindSpreadAssignment = innerast.KindSpreadAssignment
1223
+ KindSpreadElement = innerast.KindSpreadElement
1224
+ KindTaggedTemplateExpression = innerast.KindTaggedTemplateExpression
1225
+ KindTemplateExpression = innerast.KindTemplateExpression
1226
+ KindTemplateSpan = innerast.KindTemplateSpan
1227
+ KindTypeAssertionExpression = innerast.KindTypeAssertionExpression
1228
+ KindTypeOfExpression = innerast.KindTypeOfExpression
1229
+ KindVoidExpression = innerast.KindVoidExpression
1230
+ KindYieldExpression = innerast.KindYieldExpression
1231
+ KindRegularExpressionLiteral = innerast.KindRegularExpressionLiteral
1232
+ KindSatisfiesExpression = innerast.KindSatisfiesExpression
1233
+
1234
+ // Keywords / tokens used by rules
1235
+ KindThisKeyword = innerast.KindThisKeyword
1236
+ KindSuperKeyword = innerast.KindSuperKeyword
1237
+ KindEqualsToken = innerast.KindEqualsToken
1238
+ KindEqualsEqualsToken = innerast.KindEqualsEqualsToken
1239
+ KindEqualsEqualsEqualsToken = innerast.KindEqualsEqualsEqualsToken
1240
+ KindExclamationEqualsToken = innerast.KindExclamationEqualsToken
1241
+ KindExclamationEqualsEqualsToken = innerast.KindExclamationEqualsEqualsToken
1242
+ KindLessThanToken = innerast.KindLessThanToken
1243
+ KindGreaterThanToken = innerast.KindGreaterThanToken
1244
+ KindLessThanEqualsToken = innerast.KindLessThanEqualsToken
1245
+ KindGreaterThanEqualsToken = innerast.KindGreaterThanEqualsToken
1246
+ KindPlusToken = innerast.KindPlusToken
1247
+ KindPlusEqualsToken = innerast.KindPlusEqualsToken
1248
+ KindMinusEqualsToken = innerast.KindMinusEqualsToken
1249
+ KindAsteriskToken = innerast.KindAsteriskToken
1250
+ KindSlashToken = innerast.KindSlashToken
1251
+ KindAmpersandAmpersandToken = innerast.KindAmpersandAmpersandToken
1252
+ KindBarBarToken = innerast.KindBarBarToken
1253
+ KindQuestionQuestionToken = innerast.KindQuestionQuestionToken
1254
+ KindExclamationToken = innerast.KindExclamationToken
1255
+ KindTildeToken = innerast.KindTildeToken
1256
+ KindInKeyword = innerast.KindInKeyword
1257
+ KindInstanceOfKeyword = innerast.KindInstanceOfKeyword
1258
+ KindAsKeyword = innerast.KindAsKeyword
1259
+ KindPlusPlusToken = innerast.KindPlusPlusToken
1260
+ KindMinusMinusToken = innerast.KindMinusMinusToken
1261
+ KindDotToken = innerast.KindDotToken
1262
+
1263
+ // Bitwise / shift / exponent operator tokens — needed by
1264
+ // no-bitwise, prefer-exponentiation-operator, etc.
1265
+ KindAmpersandToken = innerast.KindAmpersandToken
1266
+ KindBarToken = innerast.KindBarToken
1267
+ KindCaretToken = innerast.KindCaretToken
1268
+ KindLessThanLessThanToken = innerast.KindLessThanLessThanToken
1269
+ KindGreaterThanGreaterThanToken = innerast.KindGreaterThanGreaterThanToken
1270
+ KindGreaterThanGreaterThanGreaterThanToken = innerast.KindGreaterThanGreaterThanGreaterThanToken
1271
+ KindAsteriskAsteriskToken = innerast.KindAsteriskAsteriskToken
1272
+ KindAmpersandAmpersandEqualsToken = innerast.KindAmpersandAmpersandEqualsToken
1273
+ KindBarBarEqualsToken = innerast.KindBarBarEqualsToken
1274
+ KindQuestionQuestionEqualsToken = innerast.KindQuestionQuestionEqualsToken
1275
+ KindAsteriskEqualsToken = innerast.KindAsteriskEqualsToken
1276
+ KindSlashEqualsToken = innerast.KindSlashEqualsToken
1277
+ KindPercentEqualsToken = innerast.KindPercentEqualsToken
1278
+ KindAsteriskAsteriskEqualsToken = innerast.KindAsteriskAsteriskEqualsToken
1279
+ KindAmpersandEqualsToken = innerast.KindAmpersandEqualsToken
1280
+ KindBarEqualsToken = innerast.KindBarEqualsToken
1281
+ KindCaretEqualsToken = innerast.KindCaretEqualsToken
1282
+ KindLessThanLessThanEqualsToken = innerast.KindLessThanLessThanEqualsToken
1283
+ KindGreaterThanGreaterThanEqualsToken = innerast.KindGreaterThanGreaterThanEqualsToken
1284
+ KindGreaterThanGreaterThanGreaterThanEqualsToken = innerast.KindGreaterThanGreaterThanGreaterThanEqualsToken
1285
+ KindCommaToken = innerast.KindCommaToken
1286
+ KindQuestionToken = innerast.KindQuestionToken
1287
+
1288
+ // Metaprogramming / privacy / async syntax
1289
+ KindMetaProperty = innerast.KindMetaProperty
1290
+ KindPrivateIdentifier = innerast.KindPrivateIdentifier
1291
+ KindClassStaticBlockDeclaration = innerast.KindClassStaticBlockDeclaration
1292
+
1293
+ // Misc syntax used by suggestion rules
1294
+ KindSymbolKeyword = innerast.KindSymbolKeyword
1295
+ KindObjectKeyword = innerast.KindObjectKeyword
1296
+
1297
+ // Modifier-style keywords
1298
+ KindAsyncKeyword = innerast.KindAsyncKeyword
1299
+ KindAwaitKeyword = innerast.KindAwaitKeyword
1300
+ KindReadonlyKeyword = innerast.KindReadonlyKeyword
1301
+ KindStaticKeyword = innerast.KindStaticKeyword
1302
+ KindAbstractKeyword = innerast.KindAbstractKeyword
1303
+ KindExportKeyword = innerast.KindExportKeyword
1304
+ KindDeclareKeyword = innerast.KindDeclareKeyword
1305
+ KindModuleKeyword = innerast.KindModuleKeyword
1306
+ KindTypeKeyword = innerast.KindTypeKeyword
1307
+
1308
+ // TypeScript-specific kinds used by ts rules
1309
+ KindCallSignature = innerast.KindCallSignature
1310
+ KindConstructSignature = innerast.KindConstructSignature
1311
+ KindTypeQuery = innerast.KindTypeQuery
1312
+ KindTypeOperator = innerast.KindTypeOperator
1313
+ )
1314
+
1315
+ // ---- Comment-directive kind constants ----
1316
+
1317
+ const (
1318
+ CommentDirectiveKindIgnore = innerast.CommentDirectiveKindIgnore
1319
+ CommentDirectiveKindExpectError = innerast.CommentDirectiveKindExpectError
1320
+ )
1321
+
1322
+ // ---- Helpers ----
1323
+
1324
+ // GetCombinedNodeFlags gathers declaration flags using the compiler's root
1325
+ // declaration and parent-list traversal. Pass a non-nil declaration from a
1326
+ // parent-linked compiler tree so enclosing variable flags can be included.
1327
+ //
1328
+ // @evidence contracts/common.md#principled-implementation Delegation preserves upstream root-declaration traversal and flag combination instead of classifying a variable by its own flags alone.
1329
+ // @evidence contracts/common.md#clear-and-simple-design One forwarding call exposes the compiler's combined flags without duplicating declaration traversal in lint consumers.
1330
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The helper uses the pinned compiler implementation without synthetic parent repair or consumer-specific flag overrides.
1331
+ // @evidence contracts/common.md#meaningful-documentation Native prose states non-nil input and parent-link requirements; the tag block follows a blank comment line under the documentation guidance.
1332
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources GetCombinedNodeFlags acquires no handle, buffer or cache and retains nothing after it returns.
1333
+ // @evidenceExclude contracts/performance.md#efficient-algorithms The shim selects no independent traversal strategy. Upstream walks H enclosing binding elements, then combines at most three declaration/list/statement flag values; the call costs O(H) and creates no traversal collection.
1334
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work This forwarding call coordinates no cache or in-flight work; compiler-tree owners determine when node flags and parent links may be reused.
1335
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation GetCombinedNodeFlags computes from its arguments only; it opens no file, builds no path and calls no platform or process API.
1336
+ func GetCombinedNodeFlags(node *Node) NodeFlags {
1337
+ return innerast.GetCombinedNodeFlags(node)
1338
+ }
1339
+
1340
+ // IsConstAssertion recognizes an `as const` or `<const>` assertion by its
1341
+ // syntax. Pass a nonnil node with valid compiler kind/payload data, including a
1342
+ // type for assertion nodes. Recognition does not validate whether the asserted
1343
+ // expression is permitted in a const assertion.
1344
+ //
1345
+ // @evidence contracts/common.md#principled-implementation Upstream classification requires an assertion expression whose type is a const reference without type arguments, preserving syntactic recognition rather than asserting semantic validity.
1346
+ // @evidence contracts/common.md#clear-and-simple-design A single forwarding predicate keeps const-assertion syntax classification with the compiler that owns it.
1347
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts Compiler node classification replaces textual matching and supplies no fixture-specific or semantic-validation bypass.
1348
+ // @evidence contracts/common.md#meaningful-documentation Native prose states syntax-only recognition and the non-nil input condition, with prose and tags separated following the documentation skill.
1349
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources IsConstAssertion acquires no handle, buffer or cache and retains nothing after it returns.
1350
+ // @evidenceExclude contracts/performance.md#efficient-algorithms The shim chooses no independent assertion classifier. Upstream checks fixed kinds, type-argument count and an identifier against the fixed four-byte text const, costing O(1) time and space without traversing the asserted expression.
1351
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work This syntax forwarding predicate owns no cache or in-flight coordination; compiler-tree owners establish whether the inspected payload remains valid.
1352
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation IsConstAssertion computes from its arguments only; it opens no file, builds no path and calls no platform or process API.
1353
+ func IsConstAssertion(node *Node) bool { return innerast.IsConstAssertion(node) }
1354
+
1355
+ // IsPartOfTypeNode applies the compiler's context-sensitive type-node
1356
+ // classifier. Pass a non-nil node with compiler parent links. Type-query
1357
+ // operands and class extends expressions are distinguished from ordinary
1358
+ // type positions; this is not a recursive test for any type-related ancestor.
1359
+ //
1360
+ // @evidence contracts/common.md#principled-implementation Upstream kind and parent-position checks preserve distinctions between type positions, type-query operands and value-bearing class heritage expressions.
1361
+ // @evidence contracts/common.md#clear-and-simple-design A forwarding predicate centralizes context classification without a separate recursive shim ancestry rule.
1362
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The wrapper retains compiler position semantics rather than broadening recognition to silence rule reports.
1363
+ // @evidence contracts/common.md#meaningful-documentation Native prose identifies parent-link requirements and important classification boundaries, using a separated tag block as the documentation skill requires.
1364
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources IsPartOfTypeNode acquires no handle, buffer or cache and retains nothing after it returns.
1365
+ // @evidenceExclude contracts/performance.md#efficient-algorithms The shim chooses no independent type-context classifier. Upstream uses fixed nearby kind/payload checks, except call/new/tagged-template parents can scan A type arguments for pointer membership in O(A) time and O(1) temporary space; no recursive ancestor search is performed.
1366
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work This forwarding predicate owns no cache or in-flight coordination; compiler-tree owners establish validity of parent positions and type-argument membership.
1367
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation IsPartOfTypeNode computes from its arguments only; it opens no file, builds no path and calls no platform or process API.
1368
+ func IsPartOfTypeNode(node *Node) bool { return innerast.IsPartOfTypeNode(node) }
1369
+
1370
+ // IsLet reports whether a declaration's combined flags contain the let bit.
1371
+ // Pass a non-nil declaration from a parent-linked compiler tree. A plain
1372
+ // using declaration carries a different bit and does not satisfy this test.
1373
+ //
1374
+ // @evidence contracts/common.md#principled-implementation Testing the compiler's Let bit after combined declaration traversal recognizes let declarations without equating resource declarations with let.
1375
+ // @evidence contracts/common.md#clear-and-simple-design The helper expresses one declaration-keyword predicate through the shared flag combiner and one mask.
1376
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The mask is the upstream Let constant, with no name-based declaration exception or compensating flag mutation.
1377
+ // @evidence contracts/common.md#meaningful-documentation Native prose states input provenance and the using distinction, followed by separated tags under the documentation guidance.
1378
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources IsLet acquires no handle, buffer or cache and retains nothing after it returns.
1379
+ // @evidence contracts/performance.md#efficient-algorithms One Let-bit test follows the shared combined-flags helper. Its upstream root search follows H binding parents and then reads at most three declaration/list/statement flag values, costing O(H) time and O(1) temporary space without collecting ancestors.
1380
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work This mask query owns no completed-result cache or in-flight coordination; compiler-tree owners determine whether declaration flags and parent links remain valid across calls.
1381
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation IsLet computes from its arguments only; it opens no file, builds no path and calls no platform or process API.
1382
+ func IsLet(node *Node) bool { return GetCombinedNodeFlags(node)&NodeFlagsLet != 0 }
1383
+
1384
+ // IsConst reports whether a declaration's combined flags contain the const
1385
+ // bit. Pass a non-nil declaration from a parent-linked compiler tree. The
1386
+ // pinned compiler also sets this bit for await using, but not plain using;
1387
+ // this predicate therefore does not mean every immutable declaration.
1388
+ //
1389
+ // @evidence contracts/common.md#principled-implementation The combined-flags Const mask preserves the pinned compiler encoding, including await using while excluding plain using.
1390
+ // @evidence contracts/common.md#clear-and-simple-design One mask answers the existing const-bit question without introducing a competing resource-declaration classifier.
1391
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The helper reads the upstream Const bit without widening its result through consumer-specific exceptions or altered foreign flags.
1392
+ // @evidence contracts/common.md#meaningful-documentation Native prose makes the const-bit versus immutable-declaration distinction explicit and states tree requirements, with a separate tag block following documentation guidance.
1393
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources IsConst acquires no handle, buffer or cache and retains nothing after it returns.
1394
+ // @evidence contracts/performance.md#efficient-algorithms One Const-bit test follows the shared combined-flags helper. Its upstream root search follows H binding parents and then reads at most three declaration/list/statement flag values, costing O(H) time and O(1) temporary space without collecting ancestors.
1395
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work This mask query owns no completed-result cache or in-flight coordination; compiler-tree owners determine whether declaration flags and parent links remain valid across calls.
1396
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation IsConst computes from its arguments only; it opens no file, builds no path and calls no platform or process API.
1397
+ func IsConst(node *Node) bool { return GetCombinedNodeFlags(node)&NodeFlagsConst != 0 }
1398
+
1399
+ // IsVar recognizes a var declaration by absence of combined block-scoped
1400
+ // bits, including let, const and using bits. Pass a non-nil variable
1401
+ // declaration from a parent-linked compiler tree; an arbitrary unflagged
1402
+ // syntax node is not a valid declaration input to this predicate.
1403
+ //
1404
+ // @evidence contracts/common.md#principled-implementation For variable declarations, the upstream BlockScoped mask distinguishes var from all compiler block-scoped declaration encodings after parent flags are combined.
1405
+ // @evidence contracts/common.md#clear-and-simple-design A single complement-mask test shares parent traversal with the other declaration predicates.
1406
+ // @evidence contracts/common.md#prohibited-implementation-shortcuts The compiler BlockScoped mask covers resource declarations without invented keyword strings or fixture-specific fallback classification.
1407
+ // @evidence contracts/common.md#meaningful-documentation Native prose states the variable-declaration precondition and why unrelated unflagged nodes are unsuitable, followed by tags separated under the documentation skill.
1408
+ // @evidenceExclude contracts/performance.md#bound-retention-and-release-resources IsVar acquires no handle, buffer or cache and retains nothing after it returns.
1409
+ // @evidence contracts/performance.md#efficient-algorithms One BlockScoped-mask test follows the shared combined-flags helper. Its upstream root search follows H binding parents and then reads at most three declaration/list/statement flag values, costing O(H) time and O(1) temporary space without collecting ancestors.
1410
+ // @evidenceExclude contracts/performance.md#reuse-equivalent-work This mask query owns no completed-result cache or in-flight coordination; compiler-tree owners establish whether variable flags and parent links remain valid across calls.
1411
+ // @evidenceExclude contracts/portability.md#os-neutral-implementation IsVar computes from its arguments only; it opens no file, builds no path and calls no platform or process API.
1412
+ func IsVar(node *Node) bool { return GetCombinedNodeFlags(node)&NodeFlagsBlockScoped == 0 }