Skip to content

Commit

Permalink
Merge pull request #1544 from ealmloff/must-use-hooks
Browse files Browse the repository at this point in the history
Add must use to several hooks
  • Loading branch information
jkelleyrtp committed Oct 17, 2023
2 parents 025a321 + 9f729dd commit 509dca9
Show file tree
Hide file tree
Showing 22 changed files with 25 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/cli/src/builder.rs
Expand Up @@ -312,7 +312,7 @@ pub fn build_desktop(config: &CrateConfig, _is_serve: bool) -> Result<BuildResul
if !config.out_dir.is_dir() {
create_dir_all(&config.out_dir)?;
}
copy(res_path, &config.out_dir.join(target_file))?;
copy(res_path, config.out_dir.join(target_file))?;

// this code will copy all public file to the output dir
if config.asset_dir.is_dir() {
Expand Down
1 change: 1 addition & 0 deletions packages/fermi/src/callback.rs
Expand Up @@ -28,6 +28,7 @@ impl CallbackApi {
}
}

#[must_use]
pub fn use_atom_context(cx: &ScopeState) -> &CallbackApi {
todo!()
}
Expand Down
1 change: 1 addition & 0 deletions packages/fermi/src/hooks/atom_ref.rs
Expand Up @@ -13,6 +13,7 @@ use std::{
///
///
///
#[must_use]
pub fn use_atom_ref<'a, T: 'static>(
cx: &'a ScopeState,
atom: &'static AtomRef<T>,
Expand Down
2 changes: 2 additions & 0 deletions packages/fermi/src/hooks/read.rs
Expand Up @@ -2,10 +2,12 @@ use crate::{use_atom_root, AtomId, AtomRoot, Readable};
use dioxus_core::{ScopeId, ScopeState};
use std::rc::Rc;

#[must_use]
pub fn use_read<V: 'static>(cx: &ScopeState, f: impl Readable<V>) -> &V {
use_read_rc(cx, f).as_ref()
}

#[must_use]
pub fn use_read_rc<V: 'static>(cx: &ScopeState, f: impl Readable<V>) -> &Rc<V> {
let root = use_atom_root(cx);

Expand Down
1 change: 1 addition & 0 deletions packages/fermi/src/hooks/set.rs
Expand Up @@ -2,6 +2,7 @@ use crate::{use_atom_root, Writable};
use dioxus_core::ScopeState;
use std::rc::Rc;

#[must_use]
pub fn use_set<T: 'static>(cx: &ScopeState, f: impl Writable<T>) -> &Rc<dyn Fn(T)> {
let root = use_atom_root(cx);
cx.use_hook(|| {
Expand Down
1 change: 1 addition & 0 deletions packages/fermi/src/hooks/state.rs
Expand Up @@ -30,6 +30,7 @@ use std::{
/// ))
/// }
/// ```
#[must_use]
pub fn use_atom_state<T: 'static>(cx: &ScopeState, f: impl Writable<T>) -> &AtomState<T> {
let root = crate::use_atom_root(cx);

Expand Down
1 change: 1 addition & 0 deletions packages/fullstack/src/hooks/server_future.rs
Expand Up @@ -22,6 +22,7 @@ use std::sync::Arc;
/// will be allowed to continue
///
/// - dependencies: a tuple of references to values that are PartialEq + Clone
#[must_use = "Consider using `cx.spawn` to run a future without reading its value"]
pub fn use_server_future<T, F, D>(
cx: &ScopeState,
dependencies: D,
Expand Down
2 changes: 2 additions & 0 deletions packages/hooks/src/computed.rs
Expand Up @@ -37,6 +37,7 @@ use std::{
/// }
/// }
/// ```
#[must_use]
pub fn use_tracked_state<T: 'static>(cx: &ScopeState, init: impl FnOnce() -> T) -> &Tracked<T> {
cx.use_hook(|| {
let init = init();
Expand Down Expand Up @@ -160,6 +161,7 @@ impl<I> Drop for Tracker<I> {
}
}

#[must_use = "Consider using the `use_effect` hook to rerun an effect whenever the tracked state changes if you don't need the result of the computation"]
pub fn use_selector<I: 'static, O: Clone + PartialEq + 'static>(
cx: &ScopeState,
tracked: &Tracked<I>,
Expand Down
1 change: 1 addition & 0 deletions packages/hooks/src/use_callback.rs
Expand Up @@ -24,6 +24,7 @@ macro_rules! use_callback {
)
};
}

pub fn use_callback<T, R, F>(cx: &ScopeState, make: impl FnOnce() -> R) -> impl FnMut(T) + '_
where
R: FnMut(T) -> F + 'static,
Expand Down
1 change: 1 addition & 0 deletions packages/hooks/src/use_context.rs
Expand Up @@ -3,6 +3,7 @@ use dioxus_core::ScopeState;
/// Consume some context in the tree, providing a sharable handle to the value
///
/// Does not regenerate the value if the value is changed at the parent.
#[must_use]
pub fn use_context<T: 'static + Clone>(cx: &ScopeState) -> Option<&T> {
cx.use_hook(|| cx.consume_context::<T>()).as_ref()
}
Expand Down
1 change: 1 addition & 0 deletions packages/hooks/src/use_coroutine.rs
Expand Up @@ -79,6 +79,7 @@ where
/// Get a handle to a coroutine higher in the tree
///
/// See the docs for [`use_coroutine`] for more details.
#[must_use]
pub fn use_coroutine_handle<M: 'static>(cx: &ScopeState) -> Option<&Coroutine<M>> {
cx.use_hook(|| cx.consume_context::<Coroutine<M>>())
.as_ref()
Expand Down
1 change: 1 addition & 0 deletions packages/hooks/src/use_memo.rs
Expand Up @@ -28,6 +28,7 @@ use crate::UseFutureDep;
/// render!(Calculator { number: 0 })
/// }
/// ```
#[must_use = "Consider using `use_effect` to run rerun a callback when dependencies change"]
pub fn use_memo<T, D>(cx: &ScopeState, dependencies: D, callback: impl FnOnce(D::Out) -> T) -> &T
where
T: 'static,
Expand Down
1 change: 1 addition & 0 deletions packages/hooks/src/use_ref.rs
Expand Up @@ -110,6 +110,7 @@ use std::{
/// }
/// })
/// ```
#[must_use]
pub fn use_ref<T: 'static>(cx: &ScopeState, initialize_refcell: impl FnOnce() -> T) -> &UseRef<T> {
let hook = cx.use_hook(|| UseRef {
update: cx.schedule_update(),
Expand Down
1 change: 1 addition & 0 deletions packages/hooks/src/use_shared_state.rs
Expand Up @@ -158,6 +158,7 @@ impl<T> ProvidedStateInner<T> {
/// Any time a component calls `write`, every consumer of the state will be notified - excluding the provider.
///
/// Right now, there is not a distinction between read-only and write-only, so every consumer will be notified.
#[must_use]
pub fn use_shared_state<T: 'static>(cx: &ScopeState) -> Option<&UseSharedState<T>> {
let state_owner: &mut Option<UseSharedStateOwner<T>> = &mut *cx.use_hook(move || {
let scope_id = cx.scope_id();
Expand Down
1 change: 1 addition & 0 deletions packages/hooks/src/use_state.rs
Expand Up @@ -30,6 +30,7 @@ use std::{
/// ))
/// }
/// ```
#[must_use]
pub fn use_state<T: 'static>(
cx: &ScopeState,
initial_state_fn: impl FnOnce() -> T,
Expand Down
1 change: 1 addition & 0 deletions packages/html/src/eval.rs
Expand Up @@ -33,6 +33,7 @@ type EvalCreator = Rc<dyn Fn(&str) -> Result<UseEval, EvalError>>;
/// parts is practically asking for a hacker to find an XSS vulnerability in
/// it. **This applies especially to web targets, where the JavaScript context
/// has access to most, if not all of your application data.**
#[must_use]
pub fn use_eval(cx: &ScopeState) -> &EvalCreator {
&*cx.use_hook(|| {
let eval_provider = cx
Expand Down
1 change: 1 addition & 0 deletions packages/router/src/hooks/use_navigator.rs
Expand Up @@ -48,6 +48,7 @@ use crate::prelude::{Navigator, RouterContext};
/// # let mut vdom = VirtualDom::new(App);
/// # let _ = vdom.rebuild();
/// ```
#[must_use]
pub fn use_navigator(cx: &ScopeState) -> &Navigator {
&*cx.use_hook(|| {
let router = cx
Expand Down
1 change: 1 addition & 0 deletions packages/router/src/hooks/use_route.rs
Expand Up @@ -46,6 +46,7 @@ use crate::utils::use_router_internal::use_router_internal;
/// # let _ = vdom.rebuild();
/// # assert_eq!(dioxus_ssr::render(&vdom), "<h1>App</h1><h2>Current Path</h2><p>/</p>")
/// ```
#[must_use]
pub fn use_route<R: Routable + Clone>(cx: &ScopeState) -> Option<R> {
match use_router_internal(cx) {
Some(r) => Some(r.current()),
Expand Down
1 change: 1 addition & 0 deletions packages/router/src/hooks/use_router.rs
Expand Up @@ -3,6 +3,7 @@ use dioxus::prelude::ScopeState;
use crate::{prelude::RouterContext, utils::use_router_internal::use_router_internal};

#[deprecated = "prefer the use_navigator or use_route functions"]
#[must_use]
/// A hook that provides access to information about the router.
pub fn use_router(cx: &ScopeState) -> &RouterContext {
use_router_internal(cx)
Expand Down
2 changes: 1 addition & 1 deletion packages/server-macro/src/lib.rs
Expand Up @@ -109,7 +109,7 @@ pub fn server(args: proc_macro::TokenStream, s: TokenStream) -> TokenStream {
let upper_cammel_case_name = Converter::new()
.from_case(Case::Snake)
.to_case(Case::UpperCamel)
.convert(&sig.ident.to_string());
.convert(sig.ident.to_string());
args.struct_name = Some(Ident::new(&upper_cammel_case_name, sig.ident.span()));
}
let struct_name = args.struct_name.as_ref().unwrap();
Expand Down
2 changes: 2 additions & 0 deletions packages/signals/src/selector.rs
Expand Up @@ -21,6 +21,7 @@ use crate::{get_effect_stack, signal::SignalData, CopyValue, Effect, ReadOnlySig
/// render! { "{double}" }
/// }
/// ```
#[must_use = "Consider using `use_effect` to rerun a callback when dependencies change"]
pub fn use_selector<R: PartialEq>(
cx: &ScopeState,
f: impl FnMut() -> R + 'static,
Expand All @@ -44,6 +45,7 @@ pub fn use_selector<R: PartialEq>(
/// render! { "{double}" }
/// }
/// ```
#[must_use = "Consider using `use_effect` to rerun a callback when dependencies change"]
pub fn use_selector_with_dependencies<R: PartialEq, D: Dependency>(
cx: &ScopeState,
dependencies: D,
Expand Down
1 change: 1 addition & 0 deletions packages/signals/src/signal.rs
Expand Up @@ -44,6 +44,7 @@ use crate::{CopyValue, Effect};
/// }
/// }
/// ```
#[must_use]
pub fn use_signal<T: 'static>(cx: &ScopeState, f: impl FnOnce() -> T) -> Signal<T> {
*cx.use_hook(|| Signal::new(f()))
}
Expand Down

0 comments on commit 509dca9

Please sign in to comment.