Skip to content

Commit 0baa126

Browse files
committed
Add ability to prepend fields in Yeast
1 parent d11b428 commit 0baa126

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

shared/yeast/src/build.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,13 @@ impl<'a> BuildCtx<'a> {
8888
self.ast
8989
.create_named_token_with_range(kind, generated, self.source_range)
9090
}
91+
92+
/// Prepend a value to a field of an existing node.
93+
pub fn prepend_field(&mut self, node_id: Id, field_name: &str, value_id: Id) {
94+
let field_id = self
95+
.ast
96+
.field_id_for_name(field_name)
97+
.unwrap_or_else(|| panic!("build: field '{field_name}' not found"));
98+
self.ast.prepend_field_child(node_id, field_id, value_id);
99+
}
91100
}

shared/yeast/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,12 @@ impl Ast {
387387
self.create_named_token_with_range(kind, content, None)
388388
}
389389

390+
/// Prepend a child id to the given field of the given node.
391+
pub fn prepend_field_child(&mut self, node_id: Id, field_id: FieldId, value_id: Id) {
392+
let node = self.nodes.get_mut(node_id).expect("prepend_field_child: invalid node id");
393+
node.fields.entry(field_id).or_default().insert(0, value_id);
394+
}
395+
390396
pub fn create_named_token_with_range(
391397
&mut self,
392398
kind: &'static str,

0 commit comments

Comments
 (0)