Skip to content

Commit 550f4bf

Browse files
committed
fix: number/vec/container cst building
1 parent 3f599c9 commit 550f4bf

File tree

1 file changed

+38
-18
lines changed

1 file changed

+38
-18
lines changed

crates/ltk_ritobin/src/cst/builder.rs

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ pub fn token(kind: Tok) -> Child {
3030

3131
impl Builder {
3232
pub fn number(&mut self, v: impl AsRef<str>) -> Child {
33-
self.buf.write_str(v.as_ref()).unwrap();
34-
token(Tok::Number)
33+
tree(Kind::Literal, vec![self.spanned_token(Tok::Number, v)])
3534
}
3635

3736
pub fn spanned_token(&mut self, kind: Tok, str: impl AsRef<str>) -> Child {
@@ -72,25 +71,46 @@ impl Builder {
7271
PropertyValueEnum::None(_) => {
7372
tree(Kind::Literal, vec![token(Tok::LCurly), token(Tok::RCurly)])
7473
}
75-
PropertyValueEnum::U8(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
76-
PropertyValueEnum::U16(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
77-
PropertyValueEnum::U32(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
78-
PropertyValueEnum::U64(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
79-
PropertyValueEnum::I8(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
80-
PropertyValueEnum::I16(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
81-
PropertyValueEnum::I32(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
82-
PropertyValueEnum::I64(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
83-
PropertyValueEnum::F32(n) => tree(Kind::Literal, vec![token(Tok::Number)]),
84-
PropertyValueEnum::Vector2(v) => tree(Kind::Literal, vec![token(Tok::Number)]),
85-
PropertyValueEnum::Vector3(v) => tree(Kind::Literal, vec![token(Tok::Number)]),
86-
PropertyValueEnum::Vector4(v) => tree(Kind::Literal, vec![token(Tok::Number)]),
74+
PropertyValueEnum::U8(n) => self.number(n.to_string()),
75+
PropertyValueEnum::U16(n) => self.number(n.to_string()),
76+
PropertyValueEnum::U32(n) => self.number(n.to_string()),
77+
PropertyValueEnum::U64(n) => self.number(n.to_string()),
78+
PropertyValueEnum::I8(n) => self.number(n.to_string()),
79+
PropertyValueEnum::I16(n) => self.number(n.to_string()),
80+
PropertyValueEnum::I32(n) => self.number(n.to_string()),
81+
PropertyValueEnum::I64(n) => self.number(n.to_string()),
82+
PropertyValueEnum::F32(n) => self.number(n.to_string()),
83+
PropertyValueEnum::Vector2(v) => {
84+
let items = v
85+
.to_array()
86+
.iter()
87+
.flat_map(|v| [self.number(v.to_string()), token(Tok::Comma)])
88+
.collect();
89+
self.block(items)
90+
}
91+
PropertyValueEnum::Vector3(v) => {
92+
let items = v
93+
.to_array()
94+
.iter()
95+
.map(|v| self.number(v.to_string()))
96+
.collect();
97+
self.block(items)
98+
}
99+
PropertyValueEnum::Vector4(v) => {
100+
let items = v
101+
.to_array()
102+
.iter()
103+
.map(|v| self.number(v.to_string()))
104+
.collect();
105+
self.block(items)
106+
}
87107
PropertyValueEnum::String(s) => tree(
88108
Kind::Literal,
89109
vec![token(Tok::Quote), self.string(&**s), token(Tok::Quote)],
90110
),
91111
PropertyValueEnum::Container(container)
92112
| PropertyValueEnum::UnorderedContainer(values::UnorderedContainer(container)) => {
93-
let mut children = vec![token(Tok::LBrack)];
113+
let mut children = vec![token(Tok::LCurly)];
94114

95115
for (i, item) in container.clone().into_items().enumerate() {
96116
if i > 0 {
@@ -99,7 +119,7 @@ impl Builder {
99119
children.push(self.value_to_cst(&item));
100120
}
101121

102-
children.push(token(Tok::RBrack));
122+
children.push(token(Tok::RCurly));
103123
tree(Kind::TypeArgList, children)
104124
}
105125
PropertyValueEnum::Matrix44(matrix44) => todo!(),
@@ -156,7 +176,6 @@ impl Builder {
156176
),
157177
];
158178
if let Some(sub) = rito_type.subtypes[1] {
159-
args.push(token(Tok::Comma));
160179
args.push(tree(
161180
Kind::TypeArg,
162181
vec![self.spanned_token(Tok::Name, kind_to_type_name(sub))],
@@ -293,7 +312,8 @@ mod test {
293312
Bin::builder()
294313
.object(
295314
BinObject::builder(0xDEADBEEF, 0x12344321)
296-
.property(0x44444444, values::String::from("hello"))
315+
.property(0x1, values::String::from("hello"))
316+
.property(0x2, values::U64::new(9))
297317
.property(
298318
0x9191919,
299319
values::Container::new(vec![

0 commit comments

Comments
 (0)