From 587d4803fe18df51e9fb626bd5cb8609773146ed Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 4 Oct 2026 12:58:51 -0400 Subject: [PATCH] Never crash: project crate without expect() Layer::motion_trackers_mut expect()ed the group it had just inserted; it returns an Option now and track.motion reports an error if the group is somehow missing. Denies the panic lints in the crate (the project model behind .ecproj files). Co-Authored-By: Claude Opus 5.5 --- clippy.toml | 4 ++++ crates/engine/src/commands/track.rs | 2 +- crates/project/src/lib.rs | 2 ++ crates/project/src/tracking.rs | 4 ++-- 4 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 clippy.toml diff --git a/clippy.toml b/clippy.toml new file mode 100644 index 00000000..4b6c79f5 --- /dev/null +++ b/clippy.toml @@ -0,0 +1,4 @@ +allow-unwrap-in-tests = true +allow-expect-in-tests = true +allow-panic-in-tests = true +allow-indexing-slicing-in-tests = true diff --git a/crates/engine/src/commands/track.rs b/crates/engine/src/commands/track.rs index 928bf63b..77cb7494 100644 --- a/crates/engine/src/commands/track.rs +++ b/crates/engine/src/commands/track.rs @@ -214,7 +214,7 @@ fn create(s: &mut Session, p: &V, cmd: &str) -> Result { let mut ids = Ids(&mut next); let g = tracking::tracker(&mut ids, &name, st, &pts); let uid = g.uid; - l.motion_trackers_mut(&mut ids).children.push(g.into()); + l.motion_trackers_mut(&mut ids).ok_or_else(|| bad(cmd, "the layer has no Motion Trackers group"))?.children.push(g.into()); proj.next_id = next; state.current_track = Some((lid, uid)); state.selected_layers = vec![lid]; diff --git a/crates/project/src/lib.rs b/crates/project/src/lib.rs index 5e32c7a4..429ba7ef 100644 --- a/crates/project/src/lib.rs +++ b/crates/project/src/lib.rs @@ -4,6 +4,8 @@ //! ([`props`]). Compositions sit behind `Arc` so undo snapshots share everything that did not //! change. +#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)] + pub mod build; pub mod essential; pub mod props; diff --git a/crates/project/src/tracking.rs b/crates/project/src/tracking.rs index 5e7f8f1d..cc344793 100644 --- a/crates/project/src/tracking.rs +++ b/crates/project/src/tracking.rs @@ -235,11 +235,11 @@ impl Layer { self.trackers().find(|(g, _)| g.uid == uid) } /// The Motion Trackers group, created (first in the layer's tree, like AE) when missing. - pub fn motion_trackers_mut(&mut self, ids: &mut Ids) -> &mut PropGroup { + pub fn motion_trackers_mut(&mut self, ids: &mut Ids) -> Option<&mut PropGroup> { if self.props.sub(MOTION_TRACKERS).is_none() { self.props.children.insert(0, motion_trackers(ids).into()); } - self.props.sub_mut(MOTION_TRACKERS).expect("motion trackers group") + self.props.sub_mut(MOTION_TRACKERS) } }