]> git.lizzy.rs Git - rust.git/commitdiff
Don't fire no-op changes after files are saved to disk
authorAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 22 Dec 2019 12:56:19 +0000 (13:56 +0100)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Sun, 22 Dec 2019 12:56:19 +0000 (13:56 +0100)
crates/ra_lsp_server/src/main_loop.rs
crates/ra_lsp_server/src/world.rs

index 81fd08c910fac379ed7dc939a1f1ebc4268bd821..dda318e43eb80bf96146b1dd8f05af83333ad062 100644 (file)
@@ -305,7 +305,6 @@ fn loop_turn(
         log::info!("queued count = {}", queue_count);
     }
 
-    let mut state_changed = false;
     match event {
         Event::Task(task) => {
             on_task(task, &connection.sender, &mut loop_state.pending_requests, world_state);
@@ -313,7 +312,6 @@ fn loop_turn(
         }
         Event::Vfs(task) => {
             world_state.vfs.write().handle_task(task);
-            state_changed = true;
         }
         Event::Lib(lib) => {
             world_state.add_lib(lib);
@@ -338,7 +336,6 @@ fn loop_turn(
                     &mut loop_state.subscriptions,
                     not,
                 )?;
-                state_changed = true;
             }
             Message::Response(resp) => {
                 let removed = loop_state.pending_responses.remove(&resp.id);
@@ -349,7 +346,12 @@ fn loop_turn(
         },
     };
 
-    loop_state.pending_libraries.extend(world_state.process_changes());
+    let mut state_changed = false;
+    if let Some(changes) = world_state.process_changes() {
+        state_changed = true;
+        loop_state.pending_libraries.extend(changes);
+    }
+
     while loop_state.in_flight_libraries < MAX_IN_FLIGHT_LIBS
         && !loop_state.pending_libraries.is_empty()
     {
index 5e53b027855c8e880b4a1daae64d4f66a1c0cecc..79431e7e6f62087e72635528e3c0190362d2eecd 100644 (file)
@@ -145,10 +145,10 @@ pub fn new(
     /// FIXME: better API here
     pub fn process_changes(
         &mut self,
-    ) -> Vec<(SourceRootId, Vec<(FileId, RelativePathBuf, Arc<String>)>)> {
+    ) -> Option<Vec<(SourceRootId, Vec<(FileId, RelativePathBuf, Arc<String>)>)>> {
         let changes = self.vfs.write().commit_changes();
         if changes.is_empty() {
-            return Vec::new();
+            return None;
         }
         let mut libs = Vec::new();
         let mut change = AnalysisChange::new();
@@ -182,7 +182,7 @@ pub fn process_changes(
             }
         }
         self.analysis_host.apply_change(change);
-        libs
+        Some(libs)
     }
 
     pub fn add_lib(&mut self, data: LibraryData) {