[yew-devel] [PATCH yew-widget-toolkit] tree-wide: use `?` instead of match statement where easily possible

Shannon Sterz s.sterz at proxmox.com
Mon Jan 13 12:15:05 CET 2025


this makes the code more concise and fixes the clippy lint
`question_mark` [1].

[1]:
https://rust-lang.github.io/rust-clippy/master/index.html#question_mark

Signed-off-by: Shannon Sterz <s.sterz at proxmox.com>
---
 src/dom/mod.rs                          |  5 +----
 src/state/store.rs                      |  5 +----
 src/state/tree_store/keyed_slab_tree.rs | 10 ++--------
 src/state/tree_store/mod.rs             | 12 +++---------
 src/widget/data_table/data_table.rs     |  5 +----
 src/widget/data_table/header_widget.rs  |  5 +----
 src/widget/menu/mod.rs                  |  5 +----
 src/widget/theme_loader.rs              | 10 ++--------
 8 files changed, 12 insertions(+), 45 deletions(-)

diff --git a/src/dom/mod.rs b/src/dom/mod.rs
index 327a59f2..f61dd213 100644
--- a/src/dom/mod.rs
+++ b/src/dom/mod.rs
@@ -56,10 +56,7 @@ impl IntoHtmlElement for web_sys::HtmlElement {
 /// Uses `getComputedStyle()` to get the inherited CSS value. Simply returns
 /// [None] on error.
 pub fn element_direction_rtl<T: IntoHtmlElement>(node: T) -> Option<bool> {
-    let el = match node.into_html_element() {
-        Some(el) => el,
-        None => return None,
-    };
+    let el = node.into_html_element()?;
 
     let window = web_sys::window().unwrap();
     if let Ok(Some(style)) = window.get_computed_style(&el) {
diff --git a/src/state/store.rs b/src/state/store.rs
index e0ac683d..b068255a 100644
--- a/src/state/store.rs
+++ b/src/state/store.rs
@@ -497,10 +497,7 @@ impl<T: 'static> StoreState<T> {
             None => return None,
         };
 
-        let record = match self.data.get(n) {
-            Some(record) => record,
-            None => return None,
-        };
+        let record = self.data.get(n)?;
 
         Some(self.extract_key(record))
     }
diff --git a/src/state/tree_store/keyed_slab_tree.rs b/src/state/tree_store/keyed_slab_tree.rs
index 219a5362..b910beca 100644
--- a/src/state/tree_store/keyed_slab_tree.rs
+++ b/src/state/tree_store/keyed_slab_tree.rs
@@ -354,10 +354,7 @@ impl<T> KeyedSlabTree<T> {
             None => return None,
         };
 
-        let entry = match self.get(node_id) {
-            Some(entry) => entry,
-            None => return None,
-        };
+        let entry = self.get(node_id)?;
 
         Some(self.extract_key(&entry.record))
     }
@@ -469,10 +466,7 @@ impl<T> KeyedSlabTree<T> {
     }
 
     fn find_subnode_by_key(&self, node_id: usize, key: &Key) -> Option<usize> {
-        let entry = match self.get(node_id) {
-            Some(entry) => entry,
-            None => return None,
-        };
+        let entry = self.get(node_id)?;
 
         if key == &self.extract_key(&entry.record) {
             return Some(node_id);
diff --git a/src/state/tree_store/mod.rs b/src/state/tree_store/mod.rs
index 43264b0d..f583fd5b 100644
--- a/src/state/tree_store/mod.rs
+++ b/src/state/tree_store/mod.rs
@@ -374,15 +374,9 @@ impl<T> DataNode<T> for KeyedSlabTreeBorrowRef<'_, T> {
         self.tree.tree.root_id == Some(self.node_id)
     }
     fn parent(&self) -> Option<Box<dyn DataNode<T> + '_>> {
-        let entry = match self.tree.get(self.node_id) {
-            Some(entry) => entry,
-            None => return None,
-        };
-
-        let parent_id = match entry.parent_id {
-            Some(parent_id) => parent_id,
-            None => return None,
-        };
+        let entry = self.tree.get(self.node_id)?;
+
+        let parent_id = entry.parent_id?;
 
         let parent = Box::new(KeyedSlabTreeBorrowRef {
             node_id: parent_id,
diff --git a/src/widget/data_table/data_table.rs b/src/widget/data_table/data_table.rs
index aeca8bb9..8f664af7 100644
--- a/src/widget/data_table/data_table.rs
+++ b/src/widget/data_table/data_table.rs
@@ -858,10 +858,7 @@ impl<S: DataStore> PwtDataTable<S> {
     fn find_focused_cell(&self) -> Option<(Key, Option<usize>)> {
         let window = web_sys::window().unwrap();
         let document = window.document().unwrap();
-        let active_el = match document.active_element() {
-            Some(el) => el,
-            None => return None,
-        };
+        let active_el = document.active_element()?;
         dom_find_focus_pos(active_el, &self.unique_id)
     }
 
diff --git a/src/widget/data_table/header_widget.rs b/src/widget/data_table/header_widget.rs
index 2cf81acf..70bdf8b5 100644
--- a/src/widget/data_table/header_widget.rs
+++ b/src/widget/data_table/header_widget.rs
@@ -432,10 +432,7 @@ impl<T: 'static> PwtHeaderWidget<T> {
 
         let get_cell_el = |cell_idx| -> Option<web_sys::HtmlElement> {
             let id = self.unique_cell_id(cell_idx);
-            let el = match document.get_element_by_id(&id) {
-                Some(el) => el,
-                None => return None,
-            };
+            let el = document.get_element_by_id(&id)?;
             match el.dyn_into::<web_sys::HtmlElement>() {
                 Ok(el) => Some(el),
                 Err(_) => None,
diff --git a/src/widget/menu/mod.rs b/src/widget/menu/mod.rs
index 0c747134..0231430c 100644
--- a/src/widget/menu/mod.rs
+++ b/src/widget/menu/mod.rs
@@ -216,10 +216,7 @@ impl PwtMenu {
 
     // find the first focusable element inside an menu item
     fn get_focus_el(&self, cursor: usize) -> Option<web_sys::HtmlElement> {
-        let menu_el = match self.inner_ref.cast::<web_sys::Element>() {
-            Some(el) => el,
-            None => return None,
-        };
+        let menu_el = self.inner_ref.cast::<web_sys::Element>()?;
 
         let selector = format!(":scope > li[data-index='{}']", cursor);
         let item_el = match menu_el.query_selector(&selector) {
diff --git a/src/widget/theme_loader.rs b/src/widget/theme_loader.rs
index da9a8aad..f8a0d402 100644
--- a/src/widget/theme_loader.rs
+++ b/src/widget/theme_loader.rs
@@ -38,15 +38,9 @@ pub struct PwtThemeLoader {
 }
 
 fn get_document_root() -> Option<web_sys::Element> {
-    let window = match web_sys::window() {
-        Some(window) => window,
-        None => return None,
-    };
+    let window = web_sys::window()?;
 
-    let document = match window.document() {
-        Some(document) => document,
-        None => return None,
-    };
+    let document = window.document()?;
 
     document.document_element()
 }
-- 
2.39.5





More information about the yew-devel mailing list