diff options
author | Laurențiu Nicola <[email protected]> | 2020-09-18 20:15:44 +0100 |
---|---|---|
committer | Laurențiu Nicola <[email protected]> | 2020-09-18 20:15:44 +0100 |
commit | 5a0bad77543f9bf6df84e6c96b903683f8d23a5e (patch) | |
tree | 2e69edfa37d63364ca74d909d1288f1354b79cfe | |
parent | c217bc561f6458f8f9f1133e25635ba32e71e7db (diff) |
Don't re-read open files from disk when reloading a workspace
-rw-r--r-- | crates/rust-analyzer/src/reload.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs index b819618cb..ae404331d 100644 --- a/crates/rust-analyzer/src/reload.rs +++ b/crates/rust-analyzer/src/reload.rs | |||
@@ -201,11 +201,14 @@ impl GlobalState { | |||
201 | let mut crate_graph = CrateGraph::default(); | 201 | let mut crate_graph = CrateGraph::default(); |
202 | let vfs = &mut self.vfs.write().0; | 202 | let vfs = &mut self.vfs.write().0; |
203 | let loader = &mut self.loader; | 203 | let loader = &mut self.loader; |
204 | let mem_docs = &self.mem_docs; | ||
204 | let mut load = |path: &AbsPath| { | 205 | let mut load = |path: &AbsPath| { |
205 | let contents = loader.handle.load_sync(path); | 206 | let vfs_path = vfs::VfsPath::from(path.to_path_buf()); |
206 | let path = vfs::VfsPath::from(path.to_path_buf()); | 207 | if !mem_docs.contains_key(&vfs_path) { |
207 | vfs.set_file_contents(path.clone(), contents); | 208 | let contents = loader.handle.load_sync(path); |
208 | vfs.file_id(&path) | 209 | vfs.set_file_contents(vfs_path.clone(), contents); |
210 | } | ||
211 | vfs.file_id(&vfs_path) | ||
209 | }; | 212 | }; |
210 | for ws in workspaces.iter() { | 213 | for ws in workspaces.iter() { |
211 | crate_graph.extend(ws.to_crate_graph( | 214 | crate_graph.extend(ws.to_crate_graph( |