Selaa lähdekoodia

Merge pull request #66 from Oyami-Srk/windows-fix

Fix problems on windows and jetbrains
YuKun Liu 2 vuotta sitten
vanhempi
commit
0c7d921853
1 muutettua tiedostoa jossa 17 lisäystä ja 15 poistoa
  1. 17 15
      src/server/mod.rs

+ 17 - 15
src/server/mod.rs

@@ -104,14 +104,15 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> {
             if chrono::Local::now().timestamp() > last_update_time {
                 // Give time for the change to take effect before reading the file
                 std::thread::sleep(std::time::Duration::from_millis(100));
+                let mut updated = false;
                 if let Ok(evt) = evt {
                     let mut messages = Vec::new();
                     let mut needs_rebuild = false;
                     for path in evt.paths.clone() {
-                        let mut file = File::open(path.clone()).unwrap();
                         if path.extension().map(|p| p.to_str()).flatten() != Some("rs") {
                             continue;
                         }
+                        let mut file = File::open(path.clone()).unwrap();
                         let mut src = String::new();
                         file.read_to_string(&mut src).expect("Unable to read file");
                         // find changes to the rsx in the file
@@ -119,6 +120,7 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> {
                             let mut last_file_rebuild = last_file_rebuild.lock().unwrap();
                             if let Some(old_str) = last_file_rebuild.map.get(&path) {
                                 if let Ok(old) = syn::parse_file(&old_str) {
+                                    updated = true;
                                     match find_rsx(&syntax, &old) {
                                         DiffResult::CodeChanged => {
                                             needs_rebuild = true;
@@ -191,7 +193,9 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> {
                         let _ = hot_reload_tx.send(SetManyRsxMessage(messages));
                     }
                 }
-                last_update_time = chrono::Local::now().timestamp();
+                if updated {
+                    last_update_time = chrono::Local::now().timestamp();
+                }
             }
         },
         notify::Config::default(),
@@ -419,19 +423,17 @@ pub struct PrettierOptions {
 }
 
 fn print_console_info(port: u16, config: &CrateConfig, options: PrettierOptions) {
-    print!(
-        "{}",
-        String::from_utf8_lossy(
-            &Command::new(if cfg!(target_os = "windows") {
-                "cls"
-            } else {
-                "clear"
-            })
-            .output()
-            .unwrap()
-            .stdout
-        )
-    );
+    if let Ok(native_clearseq) = Command::new(if cfg!(target_os = "windows") {
+        "cls"
+    } else {
+        "clear"
+    })
+    .output() {
+        print!("{}", String::from_utf8_lossy(&native_clearseq.stdout));
+    } else {
+        // Try ANSI-Escape characters
+        print!("\x1b[2J\x1b[H");
+    }
 
     // for path in &changed {
     //     let path = path