diff --git a/xilem/src/driver.rs b/xilem/src/driver.rs index 9f5becf1..ee2c42bc 100644 --- a/xilem/src/driver.rs +++ b/xilem/src/driver.rs @@ -33,12 +33,10 @@ type MessagePackage = (Arc<[ViewId]>, DynMessage); impl RawProxy for MasonryProxy { fn send_message(&self, path: Arc<[ViewId]>, message: DynMessage) -> Result<(), ProxyError> { - match self - .0 - .send_event(event_loop_runner::MasonryUserEvent::Action( - async_action(path, message), - ASYNC_MARKER_WIDGET, - )) { + match self.0.send_event(MasonryUserEvent::Action( + async_action(path, message), + ASYNC_MARKER_WIDGET, + )) { Ok(()) => Ok(()), Err(err) => { let MasonryUserEvent::Action(masonry::Action::Other(res), _) = err.0 else { @@ -74,7 +72,7 @@ where fn on_action( &mut self, masonry_ctx: &mut masonry::DriverCtx<'_>, - widget_id: masonry::WidgetId, + widget_id: WidgetId, action: masonry::Action, ) { let message_result = if widget_id == ASYNC_MARKER_WIDGET { diff --git a/xilem/src/lib.rs b/xilem/src/lib.rs index e055e068..bc8f619f 100644 --- a/xilem/src/lib.rs +++ b/xilem/src/lib.rs @@ -18,12 +18,13 @@ )] // TODO: Remove any items listed as "Deferred" #![cfg_attr(not(debug_assertions), allow(unused))] -#![expect(missing_debug_implementations, reason = "Deferred: Noisy")] -#![expect(unused_qualifications, reason = "Deferred: Noisy")] +#![expect( + missing_debug_implementations, + reason = "Deferred: Noisy. Requires same lint to be addressed in Masonry" +)] #![expect(clippy::exhaustive_enums, reason = "Deferred: Noisy")] #![expect(clippy::match_same_arms, reason = "Deferred: Noisy")] #![expect(clippy::missing_assert_message, reason = "Deferred: Noisy")] -#![expect(clippy::return_self_not_must_use, reason = "Deferred: Noisy")] #![expect(elided_lifetimes_in_paths, reason = "Deferred: Noisy")] #![expect(clippy::use_self, reason = "Deferred: Noisy")] // https://github.com/rust-lang/rust/pull/130025 @@ -65,6 +66,7 @@ pub mod view; pub use any_view::AnyWidgetView; pub use driver::{async_action, MasonryDriver, MasonryProxy, ASYNC_MARKER_WIDGET}; +#[must_use = "A Xilem app does nothing unless ran."] pub struct Xilem { state: State, logic: Logic, diff --git a/xilem/src/view/button.rs b/xilem/src/view/button.rs index 118d33f5..e44895f1 100644 --- a/xilem/src/view/button.rs +++ b/xilem/src/view/button.rs @@ -35,6 +35,7 @@ pub fn button_any_pointer( } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Button { label: ArcStr, callback: F, diff --git a/xilem/src/view/checkbox.rs b/xilem/src/view/checkbox.rs index 230579a2..2cc1e9fc 100644 --- a/xilem/src/view/checkbox.rs +++ b/xilem/src/view/checkbox.rs @@ -22,6 +22,7 @@ where } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Checkbox { label: ArcStr, checked: bool, @@ -38,10 +39,7 @@ where fn build(&self, ctx: &mut ViewCtx) -> (Self::Element, Self::ViewState) { ctx.with_leaf_action_widget(|ctx| { - ctx.new_pod(masonry::widget::Checkbox::new( - self.checked, - self.label.clone(), - )) + ctx.new_pod(widget::Checkbox::new(self.checked, self.label.clone())) }) } diff --git a/xilem/src/view/flex.rs b/xilem/src/view/flex.rs index 42f0d688..e009fe8b 100644 --- a/xilem/src/view/flex.rs +++ b/xilem/src/view/flex.rs @@ -27,6 +27,7 @@ pub fn flex>( } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Flex { sequence: Seq, axis: Axis, diff --git a/xilem/src/view/grid.rs b/xilem/src/view/grid.rs index f55676d7..c68bff56 100644 --- a/xilem/src/view/grid.rs +++ b/xilem/src/view/grid.rs @@ -26,6 +26,7 @@ pub fn grid>( } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Grid { sequence: Seq, spacing: f64, diff --git a/xilem/src/view/image.rs b/xilem/src/view/image.rs index a0101e5c..1961def0 100644 --- a/xilem/src/view/image.rs +++ b/xilem/src/view/image.rs @@ -31,6 +31,7 @@ pub fn image(image: &vello::peniko::Image) -> Image { /// The [`View`] created by [`image`]. /// /// See `image`'s docs for more details. +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Image { image: vello::peniko::Image, object_fit: ObjectFit, diff --git a/xilem/src/view/label.rs b/xilem/src/view/label.rs index 6ffba8a1..922b97d1 100644 --- a/xilem/src/view/label.rs +++ b/xilem/src/view/label.rs @@ -17,6 +17,7 @@ pub fn label(label: impl Into) -> Label { } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Label { label: ArcStr, @@ -99,7 +100,7 @@ impl View for Label { _id_path: &[ViewId], message: DynMessage, _app_state: &mut State, - ) -> crate::MessageResult { + ) -> MessageResult { tracing::error!("Message arrived in Label::message, but Label doesn't consume any messages, this is a bug"); MessageResult::Stale(message) } diff --git a/xilem/src/view/portal.rs b/xilem/src/view/portal.rs index 3a5caa3a..5f906296 100644 --- a/xilem/src/view/portal.rs +++ b/xilem/src/view/portal.rs @@ -21,6 +21,7 @@ where } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Portal { child: V, phantom: PhantomData<(State, Action)>, diff --git a/xilem/src/view/progress_bar.rs b/xilem/src/view/progress_bar.rs index dd031e63..7917788b 100644 --- a/xilem/src/view/progress_bar.rs +++ b/xilem/src/view/progress_bar.rs @@ -20,9 +20,7 @@ impl View for ProgressBar { type ViewState = (); fn build(&self, ctx: &mut ViewCtx) -> (Self::Element, Self::ViewState) { - ctx.with_leaf_action_widget(|ctx| { - ctx.new_pod(masonry::widget::ProgressBar::new(self.progress)) - }) + ctx.with_leaf_action_widget(|ctx| ctx.new_pod(widget::ProgressBar::new(self.progress))) } fn rebuild( diff --git a/xilem/src/view/prose.rs b/xilem/src/view/prose.rs index 26ab8aca..5bddf1a6 100644 --- a/xilem/src/view/prose.rs +++ b/xilem/src/view/prose.rs @@ -27,6 +27,7 @@ pub fn inline_prose(content: impl Into) -> Prose { prose(content).line_break_mode(LineBreaking::Overflow) } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Prose { content: ArcStr, @@ -109,7 +110,7 @@ impl View for Prose { _id_path: &[ViewId], message: DynMessage, _app_state: &mut State, - ) -> crate::MessageResult { + ) -> MessageResult { tracing::error!("Message arrived in Prose::message, but Prose doesn't consume any messages, this is a bug"); MessageResult::Stale(message) } diff --git a/xilem/src/view/sized_box.rs b/xilem/src/view/sized_box.rs index df31a6d7..d872d7cd 100644 --- a/xilem/src/view/sized_box.rs +++ b/xilem/src/view/sized_box.rs @@ -30,6 +30,7 @@ where } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct SizedBox { inner: V, width: Option, diff --git a/xilem/src/view/spinner.rs b/xilem/src/view/spinner.rs index fa108b08..7a920b40 100644 --- a/xilem/src/view/spinner.rs +++ b/xilem/src/view/spinner.rs @@ -38,6 +38,7 @@ pub fn spinner() -> Spinner { /// The [`View`] created by [`spinner`]. /// /// See `spinner`'s docs for more details. +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Spinner { color: Option, } diff --git a/xilem/src/view/task.rs b/xilem/src/view/task.rs index a9988171..97b09a22 100644 --- a/xilem/src/view/task.rs +++ b/xilem/src/view/task.rs @@ -33,7 +33,7 @@ where { const { assert!( - core::mem::size_of::() == 0, + size_of::() == 0, "`task` will not be ran again when its captured variables are updated.\n\ To ignore this warning, use `task_raw`." ); diff --git a/xilem/src/view/textbox.rs b/xilem/src/view/textbox.rs index 2d25b194..91bf0686 100644 --- a/xilem/src/view/textbox.rs +++ b/xilem/src/view/textbox.rs @@ -28,6 +28,7 @@ where } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Textbox { contents: String, on_changed: Callback, @@ -72,7 +73,7 @@ impl View for Textbox (Self::Element, Self::ViewState) { ctx.with_leaf_action_widget(|ctx| { ctx.new_pod( - masonry::widget::Textbox::new(self.contents.clone()) + widget::Textbox::new(self.contents.clone()) .with_text_brush(self.text_brush.clone()) .with_text_alignment(self.alignment), ) diff --git a/xilem/src/view/variable_label.rs b/xilem/src/view/variable_label.rs index 8ab8e004..fcddae41 100644 --- a/xilem/src/view/variable_label.rs +++ b/xilem/src/view/variable_label.rs @@ -22,6 +22,7 @@ pub fn variable_label(label: impl Into) -> VariableLabel { } } +#[must_use = "View values do nothing unless provided to Xilem."] pub struct VariableLabel { label: ArcStr, @@ -149,7 +150,7 @@ impl View for VariableLabel { _id_path: &[ViewId], message: DynMessage, _app_state: &mut State, - ) -> crate::MessageResult { + ) -> MessageResult { tracing::error!("Message arrived in Label::message, but Label doesn't consume any messages, this is a bug"); MessageResult::Stale(message) } diff --git a/xilem/src/view/worker.rs b/xilem/src/view/worker.rs index ae824013..1902dc34 100644 --- a/xilem/src/view/worker.rs +++ b/xilem/src/view/worker.rs @@ -39,7 +39,7 @@ where { const { assert!( - core::mem::size_of::() == 0, + size_of::() == 0, "`worker` will not be ran again when its captured variables are updated.\n\ To ignore this warning, use `worker_raw`. To provide an updating value to this task, use the " diff --git a/xilem_core/src/views/adapt.rs b/xilem_core/src/views/adapt.rs index f775e58f..4bb65525 100644 --- a/xilem_core/src/views/adapt.rs +++ b/xilem_core/src/views/adapt.rs @@ -7,6 +7,7 @@ use crate::{MessageResult, Mut, View, ViewId, ViewMarker, ViewPathTracker}; /// A view that wraps a child view and modifies the state that callbacks have access to. #[derive(Debug)] +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Adapt< ParentState, ParentAction, diff --git a/xilem_core/src/views/fork.rs b/xilem_core/src/views/fork.rs index d42415b4..c7831cc3 100644 --- a/xilem_core/src/views/fork.rs +++ b/xilem_core/src/views/fork.rs @@ -21,6 +21,7 @@ pub fn fork( /// The view for [`fork`]. #[derive(Debug)] +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Fork { active_view: Active, alongside_view: Alongside, diff --git a/xilem_core/src/views/map_action.rs b/xilem_core/src/views/map_action.rs index b74a9504..534e5819 100644 --- a/xilem_core/src/views/map_action.rs +++ b/xilem_core/src/views/map_action.rs @@ -8,6 +8,7 @@ use crate::{Mut, View, ViewId, ViewMarker, ViewPathTracker}; /// A view that maps a child [`View`] to [`View`] while providing mutable access to `State` in the map function. /// /// This is very similar to the Elm architecture, where the parent view can update state based on the action message from the child view +#[must_use = "View values do nothing unless provided to Xilem."] pub struct MapAction< V, State, diff --git a/xilem_core/src/views/map_state.rs b/xilem_core/src/views/map_state.rs index b0dee66a..05c0c067 100644 --- a/xilem_core/src/views/map_state.rs +++ b/xilem_core/src/views/map_state.rs @@ -8,6 +8,7 @@ use crate::{MessageResult, Mut, View, ViewId, ViewMarker, ViewPathTracker}; /// The View for [`map_state`] and [`lens`]. /// /// See their documentation for more context. +#[must_use = "View values do nothing unless provided to Xilem."] pub struct MapState { map_state: F, child: V, diff --git a/xilem_core/src/views/memoize.rs b/xilem_core/src/views/memoize.rs index d047055e..56fdb928 100644 --- a/xilem_core/src/views/memoize.rs +++ b/xilem_core/src/views/memoize.rs @@ -10,6 +10,7 @@ use crate::{MessageResult, Mut, View, ViewId, ViewMarker, ViewPathTracker}; /// /// The story of Memoization in Xilem is still being worked out, /// so the details of this view might change. +#[must_use = "View values do nothing unless provided to Xilem."] pub struct Memoize { data: Data, init_view: InitView, diff --git a/xilem_core/src/views/one_of.rs b/xilem_core/src/views/one_of.rs index 5e738bc2..9b8e7812 100644 --- a/xilem_core/src/views/one_of.rs +++ b/xilem_core/src/views/one_of.rs @@ -23,6 +23,7 @@ pub trait PhantomElementCtx: ViewPathTracker { /// A [`View`] which can be one of nine inner view types. #[allow(missing_docs)] // On variants #[derive(Debug)] +#[must_use = "View values do nothing unless provided to Xilem."] pub enum OneOf { A(A), B(B), diff --git a/xilem_core/src/views/run_once.rs b/xilem_core/src/views/run_once.rs index 76217f2f..ff53f4ea 100644 --- a/xilem_core/src/views/run_once.rs +++ b/xilem_core/src/views/run_once.rs @@ -71,6 +71,7 @@ where /// The view type for [`run_once`]. /// /// This is a [`NoElement`] view. +#[must_use = "View values do nothing unless provided to Xilem."] pub struct RunOnce { once: F, }