@ttsc/wasm 0.30.3 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.md +3 -3
  2. package/build/build-wasm.cjs +5 -4
  3. package/build/go-build-cache.cjs +347 -0
  4. package/build/pack-prepare.cjs +3 -2
  5. package/cmd/ttsc-wasm/main.go +22 -10
  6. package/cmd/ttsc-wasm/main_wasm.go +2 -2
  7. package/dist/.ttsc-wasm-build.json +138 -58
  8. package/dist/go.mod +7 -5
  9. package/dist/ttsc.wasm +2 -2
  10. package/go.mod +7 -5
  11. package/go.sum +10 -10
  12. package/host/api.go +34 -41
  13. package/host/doc.go +7 -6
  14. package/host/expose.go +42 -0
  15. package/host/fountain.go +192 -22
  16. package/host/host.go +10 -25
  17. package/host/host_native.go +3 -5
  18. package/host/invoke.go +133 -0
  19. package/host/plugin.go +37 -72
  20. package/host/result.go +108 -0
  21. package/lib/src/BootTtscWorkerTerminationError.d.ts +20 -0
  22. package/lib/src/BootTtscWorkerTerminationError.js +20 -0
  23. package/lib/src/BootTtscWorkerTerminationError.js.map +1 -1
  24. package/lib/src/MemFSError.d.ts +21 -2
  25. package/lib/src/MemFSError.js +25 -2
  26. package/lib/src/MemFSError.js.map +1 -1
  27. package/lib/src/bootTtsc.d.ts +49 -2
  28. package/lib/src/bootTtsc.js +89 -23
  29. package/lib/src/bootTtsc.js.map +1 -1
  30. package/lib/src/createMemFS.d.ts +45 -0
  31. package/lib/src/createMemFS.js +269 -66
  32. package/lib/src/createMemFS.js.map +1 -1
  33. package/lib/src/parseResult.d.ts +19 -0
  34. package/lib/src/parseResult.js +19 -0
  35. package/lib/src/parseResult.js.map +1 -1
  36. package/lib/src/structures/IBootResult.d.ts +20 -2
  37. package/lib/src/structures/IBootTtscOptions.d.ts +28 -6
  38. package/lib/src/structures/IFileStats.d.ts +51 -0
  39. package/lib/src/structures/IMemFSHost.d.ts +89 -0
  40. package/lib/src/structures/ITtscApi.d.ts +154 -9
  41. package/lib/src/structures/ITtscBuildOpts.d.ts +18 -1
  42. package/lib/src/structures/ITtscCompileResult.d.ts +20 -2
  43. package/lib/src/structures/ITtscDiagnostic.d.ts +25 -1
  44. package/lib/src/structures/ITtscFileQuery.d.ts +19 -1
  45. package/lib/src/structures/ITtscFountainDiagnosticsResult.d.ts +20 -1
  46. package/lib/src/structures/ITtscNodeAtPositionResult.d.ts +18 -1
  47. package/lib/src/structures/ITtscNodeInfo.d.ts +23 -2
  48. package/lib/src/structures/ITtscPluginOpts.d.ts +24 -3
  49. package/lib/src/structures/ITtscPositionQuery.d.ts +21 -4
  50. package/lib/src/structures/ITtscReleaseSnapshotResult.d.ts +22 -2
  51. package/lib/src/structures/ITtscResult.d.ts +31 -5
  52. package/lib/src/structures/ITtscSnapshotHandle.d.ts +19 -1
  53. package/lib/src/structures/ITtscSnapshotResult.d.ts +22 -1
  54. package/lib/src/structures/ITtscSnapshotsResult.d.ts +19 -1
  55. package/lib/src/structures/ITtscSourceFileTextResult.d.ts +19 -1
  56. package/lib/src/structures/ITtscSourceFilesResult.d.ts +23 -2
  57. package/lib/src/structures/ITtscSymbolAtPositionResult.d.ts +18 -1
  58. package/lib/src/structures/ITtscSymbolDeclaration.d.ts +25 -2
  59. package/lib/src/structures/ITtscSymbolInfo.d.ts +19 -1
  60. package/lib/src/structures/ITtscTransformResult.d.ts +21 -3
  61. package/lib/src/structures/ITtscTypeAtPositionResult.d.ts +18 -1
  62. package/lib/src/structures/ITtscTypeInfo.d.ts +19 -1
  63. package/lib/src/structures/ITtscVersion.d.ts +28 -1
  64. package/lib/src/structures/IWasmExecFS.d.ts +310 -0
  65. package/package.json +4 -2
  66. package/shim-vendor/shim/ast/enums_gen.go +4 -2
  67. package/shim-vendor/shim/ast/go.mod +5 -5
  68. package/shim-vendor/shim/ast/go.sum +10 -10
  69. package/shim-vendor/shim/ast/lint.go +1088 -20
  70. package/shim-vendor/shim/ast/parent.go +38 -22
  71. package/shim-vendor/shim/ast/safe_text.go +48 -26
  72. package/shim-vendor/shim/ast/shim.go +1307 -20
  73. package/shim-vendor/shim/ast/test/next_jsdoc_comment_location_reaches_variable_statement_test.go +51 -0
  74. package/shim-vendor/shim/ast/test/node_text_joins_multi_hop_qualified_name_test.go +24 -9
  75. package/shim-vendor/shim/ast/test/node_text_joins_one_hop_qualified_name_test.go +9 -5
  76. package/shim-vendor/shim/ast/test/node_text_returns_empty_for_nil_test.go +13 -5
  77. package/shim-vendor/shim/ast/test/node_text_returns_identifier_text_test.go +12 -5
  78. package/shim-vendor/shim/ast/test/node_text_skips_empty_qualified_left_test.go +35 -5
  79. package/shim-vendor/shim/astnav/go.mod +5 -5
  80. package/shim-vendor/shim/astnav/go.sum +12 -10
  81. package/shim-vendor/shim/astnav/shim.go +9 -0
  82. package/shim-vendor/shim/bundled/go.mod +7 -1
  83. package/shim-vendor/shim/bundled/go.sum +12 -0
  84. package/shim-vendor/shim/checker/enums_gen.go +4 -2
  85. package/shim-vendor/shim/checker/extra-shim.json +6 -0
  86. package/shim-vendor/shim/checker/go.mod +5 -5
  87. package/shim-vendor/shim/checker/go.sum +10 -10
  88. package/shim-vendor/shim/checker/node_builder_fields_gen.go +19 -0
  89. package/shim-vendor/shim/checker/shim.go +827 -114
  90. package/shim-vendor/shim/compiler/emit_sourcemap.go +68 -29
  91. package/shim-vendor/shim/compiler/emitassemble.go +36 -2
  92. package/shim-vendor/shim/compiler/emithook.go +13 -3
  93. package/shim-vendor/shim/compiler/go.mod +5 -5
  94. package/shim-vendor/shim/compiler/go.sum +10 -10
  95. package/shim-vendor/shim/compiler/incremental.go +56 -20
  96. package/shim-vendor/shim/compiler/resolution.go +92 -9
  97. package/shim-vendor/shim/core/enums_gen.go +2 -2
  98. package/shim-vendor/shim/core/go.mod +6 -1
  99. package/shim-vendor/shim/core/go.sum +10 -0
  100. package/shim-vendor/shim/core/modulekind.go +9 -0
  101. package/shim-vendor/shim/core/shim.go +157 -6
  102. package/shim-vendor/shim/diagnosticwriter/go.mod +10 -1
  103. package/shim-vendor/shim/diagnosticwriter/go.sum +20 -0
  104. package/shim-vendor/shim/diagnosticwriter/lint.go +188 -10
  105. package/shim-vendor/shim/diagnosticwriter/shim.go +14 -0
  106. package/shim-vendor/shim/lsp/go.mod +5 -5
  107. package/shim-vendor/shim/lsp/go.sum +10 -10
  108. package/shim-vendor/shim/lsp/shim.go +78 -2
  109. package/shim-vendor/shim/parser/go.mod +10 -1
  110. package/shim-vendor/shim/parser/go.sum +22 -0
  111. package/shim-vendor/shim/printer/emithost.go +46 -1
  112. package/shim-vendor/shim/printer/go.mod +5 -5
  113. package/shim-vendor/shim/printer/go.sum +10 -10
  114. package/shim-vendor/shim/printer/shim.go +114 -7
  115. package/shim-vendor/shim/printer/sourcemap.go +55 -0
  116. package/shim-vendor/shim/scanner/go.mod +10 -1
  117. package/shim-vendor/shim/scanner/go.sum +20 -0
  118. package/shim-vendor/shim/scanner/regexp.go +19 -4
  119. package/shim-vendor/shim/scanner/shim.go +3 -0
  120. package/shim-vendor/shim/stringutil/extra-shim.json +1 -0
  121. package/shim-vendor/shim/stringutil/go.mod +5 -0
  122. package/shim-vendor/shim/stringutil/go.sum +2 -0
  123. package/shim-vendor/shim/stringutil/shim.go +119 -0
  124. package/shim-vendor/shim/transformers/go.mod +5 -5
  125. package/shim-vendor/shim/transformers/go.sum +12 -10
  126. package/shim-vendor/shim/transformers/shim.go +12 -3
  127. package/shim-vendor/shim/tsoptions/command_line_raw.go +44 -0
  128. package/shim-vendor/shim/tsoptions/go.mod +10 -1
  129. package/shim-vendor/shim/tsoptions/go.sum +22 -0
  130. package/shim-vendor/shim/tsoptions/shim.go +1 -1
  131. package/shim-vendor/shim/tspath/go.mod +1 -1
  132. package/shim-vendor/shim/tspath/go.sum +6 -0
  133. package/shim-vendor/shim/vfs/cachedvfs/go.mod +3 -1
  134. package/shim-vendor/shim/vfs/cachedvfs/go.sum +12 -0
  135. package/shim-vendor/shim/vfs/decode.go +26 -0
  136. package/shim-vendor/shim/vfs/decode_test.go +42 -0
  137. package/shim-vendor/shim/vfs/go.mod +7 -1
  138. package/shim-vendor/shim/vfs/go.sum +12 -0
  139. package/shim-vendor/shim/vfs/osvfs/go.mod +7 -1
  140. package/shim-vendor/shim/vfs/osvfs/go.sum +12 -0
  141. package/src/BootTtscWorkerTerminationError.ts +22 -0
  142. package/src/MemFSError.ts +29 -2
  143. package/src/bootTtsc.ts +104 -28
  144. package/src/createMemFS.ts +291 -64
  145. package/src/parseResult.ts +19 -0
  146. package/src/structures/IBootResult.ts +21 -2
  147. package/src/structures/IBootTtscOptions.ts +32 -6
  148. package/src/structures/IFileStats.ts +65 -0
  149. package/src/structures/IMemFSHost.ts +97 -0
  150. package/src/structures/ITtscApi.ts +154 -9
  151. package/src/structures/ITtscBuildOpts.ts +19 -1
  152. package/src/structures/ITtscCompileResult.ts +21 -2
  153. package/src/structures/ITtscDiagnostic.ts +32 -1
  154. package/src/structures/ITtscFileQuery.ts +19 -1
  155. package/src/structures/ITtscFountainDiagnosticsResult.ts +20 -1
  156. package/src/structures/ITtscNodeAtPositionResult.ts +18 -1
  157. package/src/structures/ITtscNodeInfo.ts +27 -2
  158. package/src/structures/ITtscPluginOpts.ts +28 -3
  159. package/src/structures/ITtscPositionQuery.ts +21 -4
  160. package/src/structures/ITtscReleaseSnapshotResult.ts +22 -2
  161. package/src/structures/ITtscResult.ts +34 -5
  162. package/src/structures/ITtscSnapshotHandle.ts +19 -1
  163. package/src/structures/ITtscSnapshotResult.ts +22 -1
  164. package/src/structures/ITtscSnapshotsResult.ts +19 -1
  165. package/src/structures/ITtscSourceFileTextResult.ts +19 -1
  166. package/src/structures/ITtscSourceFilesResult.ts +23 -2
  167. package/src/structures/ITtscSymbolAtPositionResult.ts +18 -1
  168. package/src/structures/ITtscSymbolDeclaration.ts +27 -2
  169. package/src/structures/ITtscSymbolInfo.ts +23 -1
  170. package/src/structures/ITtscTransformResult.ts +22 -3
  171. package/src/structures/ITtscTypeAtPositionResult.ts +18 -1
  172. package/src/structures/ITtscTypeInfo.ts +20 -1
  173. package/src/structures/ITtscVersion.ts +33 -1
  174. package/src/structures/IWasmExecFS.ts +336 -0
@@ -3,10 +3,10 @@
3
3
  // This file groups the helpers and node-flag constants the `@ttsc/lint`
4
4
  // plugin needs to navigate the tree.
5
5
  //
6
- // Everything here is a pure re-export of `internal/ast` symbols — there is
7
- // no behavior, no copy of upstream logic. Adding a new node type is
8
- // mechanical: add a `type X = innerast.X` line and the matching
9
- // `KindX = innerast.KindX` entry.
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
10
  package ast
11
11
 
12
12
  import (
@@ -15,110 +15,1117 @@ import (
15
15
 
16
16
  // ---- Node-list / visitor primitives ----
17
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.
18
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.
19
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.
20
55
  type ModifierFlags = innerast.ModifierFlags
21
56
 
22
57
  // ---- Statement-shaped node types ----
23
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.
24
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.
25
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.
26
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.
27
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.
28
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.
29
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.
30
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.
31
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.
32
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.
33
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.
34
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.
35
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.
36
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.
37
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.
38
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.
39
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.
40
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.
41
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.
42
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.
43
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.
44
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.
45
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.
46
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.
47
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.
48
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.
49
397
  type WithStatement = innerast.WithStatement
50
398
 
51
399
  // ---- Class / module / enum shapes ----
52
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.
53
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.
54
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.
55
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.
56
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.
57
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.
58
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.
59
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.
60
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.
61
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.
62
529
  type PropertyDeclaration = innerast.PropertyDeclaration
63
530
 
64
531
  // ---- Module syntax ----
65
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.
66
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.
67
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.
68
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.
69
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.
70
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.
71
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.
72
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.
73
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.
74
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.
75
661
  type ImportTypeNode = innerast.ImportTypeNode
76
662
 
77
663
  // ---- Binding patterns ----
78
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.
79
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.
80
689
  type BindingPattern = innerast.BindingPattern
81
690
 
82
691
  // ---- Expressions ----
83
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.
84
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.
85
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.
86
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.
87
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.
88
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.
89
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.
90
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.
91
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.
92
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.
93
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.
94
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.
95
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.
96
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.
97
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.
98
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.
99
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.
100
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.
101
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.
102
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.
103
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.
104
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.
105
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.
106
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.
107
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.
108
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.
109
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.
110
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.
111
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.
112
1068
  type SatisfiesExpression = innerast.SatisfiesExpression
113
1069
 
114
1070
  // ---- Comment directives (banTsComment) ----
115
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.
116
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.
117
1098
  type CommentDirectiveKind = innerast.CommentDirectiveKind
118
1099
 
119
- // ---- Source file parse options (test harness) ----
1100
+ // ---- Source file parse options ----
120
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.
121
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.
122
1129
  type ExternalModuleIndicatorOptions = innerast.ExternalModuleIndicatorOptions
123
1130
 
124
1131
  // ---- Node-flag constants ----
@@ -314,31 +1321,92 @@ const (
314
1321
 
315
1322
  // ---- Helpers ----
316
1323
 
317
- // GetCombinedNodeFlags returns the combined node flags for a declaration,
318
- // consulting parents where applicable. This is what `IsLet` / `IsConst` use
319
- // internally; lint rules need it to detect `var` declarations whose flag
320
- // lives on the VariableDeclarationList rather than the declaration itself.
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.
321
1336
  func GetCombinedNodeFlags(node *Node) NodeFlags {
322
1337
  return innerast.GetCombinedNodeFlags(node)
323
1338
  }
324
1339
 
325
- // IsConstAssertion reports whether node is an `as const` or `<const>`
326
- // assertion. Unlike ordinary type assertions, a const assertion propagates
327
- // its own contextual type to the asserted expression.
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.
328
1353
  func IsConstAssertion(node *Node) bool { return innerast.IsConstAssertion(node) }
329
1354
 
330
- // IsPartOfTypeNode reports whether node belongs to syntax that is evaluated
331
- // only by the type system. Lint rules use the upstream classifier so runtime
332
- // reference analysis stays aligned with TypeScript's AST semantics.
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.
333
1368
  func IsPartOfTypeNode(node *Node) bool { return innerast.IsPartOfTypeNode(node) }
334
1369
 
335
- // IsLet reports whether the declaration was introduced by `let` / `using`.
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.
336
1382
  func IsLet(node *Node) bool { return GetCombinedNodeFlags(node)&NodeFlagsLet != 0 }
337
1383
 
338
- // IsConst reports whether the declaration was introduced by `const` /
339
- // `await using` / `using`.
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.
340
1397
  func IsConst(node *Node) bool { return GetCombinedNodeFlags(node)&NodeFlagsConst != 0 }
341
1398
 
342
- // IsVar reports whether the declaration was introduced by `var`. The block
343
- // scoped flag bits are clear when the keyword is plain `var`.
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.
344
1412
  func IsVar(node *Node) bool { return GetCombinedNodeFlags(node)&NodeFlagsBlockScoped == 0 }