Browse Source

allow disabling logging

Evan Almloff 2 years ago
parent
commit
9be1df1451
2 changed files with 32 additions and 18 deletions
  1. 4 8
      docs/guide/src/en/getting_started/hot_reload.md
  2. 28 10
      packages/hot-reload/src/lib.rs

+ 4 - 8
docs/guide/src/en/getting_started/hot_reload.md

@@ -2,7 +2,7 @@
 
 1. Hot reloading allows much faster iteration times inside of rsx calls by interpreting them and streaming the edits.
 2. It is useful when changing the styling/layout of a program, but will not help with changing the logic of a program.
-3. Currently the cli only implements hot reloading for the web renderer. For TUI, desktop, and liveview you can use the hot reload macro.
+3. Currently the cli only implements hot reloading for the web renderer. For TUI, desktop, and LiveView you can use the hot reload macro instead.
 
 # Web
 
@@ -25,7 +25,7 @@ dioxus serve --hot-reload
 
 # Desktop/Liveview/TUI
 
-For desktop, LiveView, and tui, you can place the hot reload macro before your app runs to enable hot reloading.
+For desktop, LiveView, and tui, you can place the hot reload macro at the top of your main function to enable hot reloading.
 
 ## Setup
 
@@ -33,7 +33,7 @@ Add the following to your main function:
 
 ```rust
 fn main() {
-    dioxus::hot_reload_init!();
+    hot_reload_init!();
     // launch your application
 }
 ```
@@ -46,10 +46,6 @@ cargo run
 2. Change some code within a rsx or render macro
 3. Save and watch the style change without recompiling
 
-## Custom renders
-
-For custom renderers
-
 # Limitations
 1. The interpreter can only use expressions that existed on the last full recompile. If you introduce a new variable or expression to the rsx call, it will trigger a full recompile to capture the expression.
-2. Components and Iterators can contain arbitrary rust code and will trigger a full recompile when changed.
+2. Components and Iterators can contain arbitrary rust code and will trigger a full recompile when changed.

+ 28 - 10
packages/hot-reload/src/lib.rs

@@ -12,7 +12,7 @@ use interprocess::local_socket::{LocalSocketListener, LocalSocketStream};
 use notify::{RecommendedWatcher, RecursiveMode, Watcher};
 
 /// Initialize the hot reloading listener on the given path
-pub fn init(root_path: &'static str, listening_paths: &'static [&'static str]) {
+pub fn init(root_path: &'static str, listening_paths: &'static [&'static str], log: bool) {
     if let Ok(crate_dir) = PathBuf::from_str(root_path) {
         let temp_file = std::env::temp_dir().join("@dioxusin");
         let channels = Arc::new(Mutex::new(Vec::new()));
@@ -41,7 +41,9 @@ pub fn init(root_path: &'static str, listening_paths: &'static [&'static str]) {
                                 }
                             }
                             channels.lock().unwrap().push(connection);
-                            println!("Connected to hot reloading 🚀");
+                            if log {
+                                println!("Connected to hot reloading 🚀");
+                            }
                         }
                     }
                 }
@@ -94,7 +96,11 @@ pub fn init(root_path: &'static str, listening_paths: &'static [&'static str]) {
                                         }
                                     }
                                     UpdateResult::NeedsRebuild => {
-                                        println!("Rebuild needed... shutting down hot reloading");
+                                        if log {
+                                            println!(
+                                                "Rebuild needed... shutting down hot reloading"
+                                            );
+                                        }
                                         return;
                                     }
                                 }
@@ -152,14 +158,26 @@ pub fn connect(mut f: impl FnMut(Template<'static>) + Send + 'static) {
 /// Pass any number of paths to listen for changes on relative to the crate root as strings.
 /// If no paths are passed, it will listen on the src and examples folders.
 #[macro_export]
-macro_rules! hot_reload_init_inner {
-    () => {
-        dioxus_hot_reload::init(core::env!("CARGO_MANIFEST_DIR"), &["src", "examples"])
+macro_rules! hot_reload_init {
+    ($($t: ident)*) => {
+        #[cfg(debug_assertions)]
+        dioxus_hot_reload::init(core::env!("CARGO_MANIFEST_DIR"), &["src", "examples"], hot_reload_init!(log: $($t)*))
     };
 
-    ($($paths: literal),*) => {
-        dioxus_hot_reload::init(core::env!("CARGO_MANIFEST_DIR"), &[$($paths),*])
+    ($($paths: literal),* $(,)? $($t: ident)*) => {
+        #[cfg(debug_assertions)]
+        dioxus_hot_reload::init(core::env!("CARGO_MANIFEST_DIR"), &[$($paths),*], hot_reload_init!(log: $($t)*))
+    };
+
+    (log:) => {
+        false
     };
-}
 
-pub use hot_reload_init_inner as hot_reload_init;
+    (log: enable logging) => {
+        true
+    };
+
+    (log: disable logging) => {
+        false
+    };
+}