Walker: node-attached HintMode via Node::Hinted (ADR-0024 §HintMode-per-node)
Replaces the hint resolver's signature-matching (does the expected set
contain all five literal forms? an Ident{NewName}?) with a grammar-
declared annotation. New Node::Hinted { mode, inner } wrapper; the
walker records the mode in WalkContext::pending_hint_mode on entry and
clears it on any successful match (cursor moved past the slot — this
also undoes the leak where a failed Hinted branch of a Choice would
otherwise strand a stale mode). The resolver reads pending_hint_mode
directly.
Value-literal fallback slots carry ProseOnly; NewName ident slots carry
ForceProse. hint_mode_at_input_inner now delegates to
hint_resolution_at_input — one resolution path, no duplicated logic.
No behaviour change; the typing-surface matrix guards it.
This commit is contained in:
@@ -308,6 +308,24 @@ pub enum Node {
|
||||
column_name: Option<&'static str>,
|
||||
inner: &'static Self,
|
||||
},
|
||||
/// Annotates `inner` with a hint-panel `HintMode` (ADR-0024
|
||||
/// §HintMode-per-node). On entry the walker records `mode`
|
||||
/// in `WalkContext::pending_hint_mode`; on a successful
|
||||
/// inner match the record clears (so positions past the
|
||||
/// slot don't carry stale hint state). Transparent to
|
||||
/// matching, highlighting and the expected-set otherwise —
|
||||
/// it walks `inner` and returns its result verbatim.
|
||||
///
|
||||
/// This is the node-attached replacement for the hint
|
||||
/// resolver's earlier signature-matching: the grammar tree
|
||||
/// declares the hint mode at the slot, the walker
|
||||
/// propagates it, the resolver reads it. Used by the
|
||||
/// value-literal fallback slot (`ProseOnly`) and `NewName`
|
||||
/// ident slots (`ForceProse`).
|
||||
Hinted {
|
||||
mode: HintMode,
|
||||
inner: &'static Self,
|
||||
},
|
||||
}
|
||||
|
||||
/// Top-level entry record. One per command. The `entry` keyword
|
||||
|
||||
Reference in New Issue
Block a user