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:
@@ -54,6 +54,13 @@ pub struct WalkContext<'a> {
|
||||
/// Cleared on successful inner match alongside
|
||||
/// `pending_value_type`.
|
||||
pub pending_value_column: Option<String>,
|
||||
/// The hint-panel `HintMode` declared by the grammar node
|
||||
/// the walker is currently inside (ADR-0024
|
||||
/// §HintMode-per-node). Set on entry to a `Node::Hinted`
|
||||
/// wrapper, cleared on successful inner match. The hint
|
||||
/// resolver reads this directly instead of inferring the
|
||||
/// slot kind from the shape of the expected set.
|
||||
pub pending_hint_mode: Option<crate::dsl::grammar::HintMode>,
|
||||
/// The columns the user explicitly listed in
|
||||
/// `insert into <T> (col1, col2, …) values (…)` (Form A),
|
||||
/// in declaration order.
|
||||
@@ -91,6 +98,7 @@ impl<'a> WalkContext<'a> {
|
||||
current_column: None,
|
||||
pending_value_type: None,
|
||||
pending_value_column: None,
|
||||
pending_hint_mode: None,
|
||||
user_listed_columns: None,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user