]> git.lizzy.rs Git - rust.git/commitdiff
Better account for project reload
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 1 Jul 2020 14:01:03 +0000 (16:01 +0200)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 1 Jul 2020 14:01:03 +0000 (16:01 +0200)
crates/rust-analyzer/src/global_state.rs
crates/rust-analyzer/src/main_loop.rs

index b8aa1e5b5a8be17526a029d8eb1ff821d6504996..b7b4edf6611ff3fd78ea8f19aff728fc43f2abaf 100644 (file)
@@ -27,7 +27,7 @@
     Result,
 };
 
-#[derive(Eq, PartialEq)]
+#[derive(Eq, PartialEq, Copy, Clone)]
 pub(crate) enum Status {
     Loading,
     Ready,
index e3d49d24d7bc678db03bc824ed18b707bd4e9eed..e03038b25827a5adc37b5e87c1a93710b108347f 100644 (file)
@@ -136,7 +136,7 @@ fn handle_event(&mut self, event: Event) -> Result<()> {
             log::info!("queued count = {}", queue_count);
         }
 
-        let mut became_ready = false;
+        let prev_status = self.status;
         match event {
             Event::Lsp(msg) => match msg {
                 lsp_server::Message::Request(req) => self.on_request(loop_start, req)?,
@@ -168,15 +168,17 @@ fn handle_event(&mut self, event: Event) -> Result<()> {
                     }
                 }
                 vfs::loader::Message::Progress { n_total, n_done } => {
-                    if n_total > 0 {
+                    if n_total == 0 {
+                        self.status = Status::Ready;
+                    } else {
                         let state = if n_done == 0 {
+                            self.status = Status::Loading;
                             Progress::Begin
                         } else if n_done < n_total {
                             Progress::Report
                         } else {
                             assert_eq!(n_done, n_total);
                             self.status = Status::Ready;
-                            became_ready = true;
                             Progress::End
                         };
                         self.report_progress(
@@ -233,13 +235,13 @@ fn handle_event(&mut self, event: Event) -> Result<()> {
         }
 
         let state_changed = self.process_changes();
-        if became_ready {
+        if prev_status == Status::Loading && self.status == Status::Ready {
             if let Some(flycheck) = &self.flycheck {
                 flycheck.handle.update();
             }
         }
 
-        if self.status == Status::Ready && (state_changed || became_ready) {
+        if self.status == Status::Ready && (state_changed || prev_status == Status::Loading) {
             let subscriptions = self
                 .mem_docs
                 .iter()