style: format precise property binding integration
Verify Tessera GUI / verify (push) Successful in 1m48s

This commit is contained in:
2026-10-24 02:19:57 +08:00
parent 918cdbfa27
commit 1cf07a75f7
3 changed files with 43 additions and 15 deletions
+10 -6
View File
@@ -144,11 +144,13 @@ pub fn refresh(
.map_err(|_| anyhow::anyhow!("binding cache poisoned"))?
.clone();
if cached.as_ref().is_some_and(|cached| {
cached.reads.iter().all(|read| {
vm.object_store().read_dependency_valid(read)
}) && vm
.get_attr(target, &binding.field)
.is_ok_and(|value| value == cached.output)
cached
.reads
.iter()
.all(|read| vm.object_store().read_dependency_valid(read))
&& vm
.get_attr(target, &binding.field)
.is_ok_and(|value| value == cached.output)
}) {
continue;
}
@@ -168,7 +170,9 @@ pub fn refresh(
)
.map_err(|error| crate::endor_host::runtime_error(vm, error))?;
let applied: Result<()> = (|| {
let reads = reads.dependencies.into_iter()
let reads = reads
.dependencies
.into_iter()
.filter(|read| !host_desktops.contains(&read.object()))
.collect();
let (_, data) = block::resolve(vm.object_store(), target)?;
+27 -7
View File
@@ -6187,22 +6187,42 @@ rect.bind("width",readWidth)
hidden.bind("width",readWidth)
page = Page()
page.render(rect)
"#, "app.main", 903, 1,
).unwrap();
"#,
"app.main",
903,
1,
)
.unwrap();
let count = |session: &mut ReplSession| {
session.execute("ui.stats().bindingEvaluations", "app.main").unwrap().value
.parse::<usize>().unwrap()
session
.execute("ui.stats().bindingEvaluations", "app.main")
.unwrap()
.value
.parse::<usize>()
.unwrap()
};
let baseline = count(&mut session);
assert_eq!(baseline, 2);
assert!(session.execute("42", "app.main").unwrap().document.is_none());
assert!(
session
.execute("42", "app.main")
.unwrap()
.document
.is_none()
);
assert_eq!(count(&mut session), baseline);
session.execute("size = 120", "app.main").unwrap();
assert_eq!(count(&mut session), baseline + 2);
assert_eq!(session.execute("hidden.width", "app.main").unwrap().value, "120");
assert_eq!(
session.execute("hidden.width", "app.main").unwrap().value,
"120"
);
session.execute("rect.width = 200", "app.main").unwrap();
assert_eq!(count(&mut session), baseline + 3);
assert_eq!(session.execute("rect.width", "app.main").unwrap().value, "120");
assert_eq!(
session.execute("rect.width", "app.main").unwrap().value,
"120"
);
assert_eq!(count(&mut session), baseline + 3);
}
+6 -2
View File
@@ -2474,12 +2474,16 @@ impl UiBridge {
}
pub fn refresh_bindings(&self, vm: &mut Vm) -> Result<()> {
let (nodes, desktops) = {
let state = self.session.lock()
let state = self
.session
.lock()
.map_err(|_| anyhow::anyhow!("UI session poisoned"))?;
(state.nodes.clone(), state.host_desktops())
};
let evaluated = crate::binding::refresh(vm, &nodes, &desktops)?;
let mut state = self.session.lock()
let mut state = self
.session
.lock()
.map_err(|_| anyhow::anyhow!("UI session poisoned"))?;
state.binding_evaluations = state.binding_evaluations.saturating_add(evaluated);
Ok(())