diff options
Diffstat (limited to 'crates/ra_lsp_server/src/server_world.rs')
-rw-r--r-- | crates/ra_lsp_server/src/server_world.rs | 32 |
1 files changed, 6 insertions, 26 deletions
diff --git a/crates/ra_lsp_server/src/server_world.rs b/crates/ra_lsp_server/src/server_world.rs index 7eb4d3e56..8c7951e13 100644 --- a/crates/ra_lsp_server/src/server_world.rs +++ b/crates/ra_lsp_server/src/server_world.rs | |||
@@ -1,7 +1,6 @@ | |||
1 | use std::{ | 1 | use std::{ |
2 | path::{Path, PathBuf}, | 2 | path::{Path, PathBuf}, |
3 | sync::Arc, | 3 | sync::Arc, |
4 | time::Duration, | ||
5 | }; | 4 | }; |
6 | 5 | ||
7 | use lsp_types::Url; | 6 | use lsp_types::Url; |
@@ -16,6 +15,7 @@ use failure::{Error, format_err}; | |||
16 | use gen_lsp_server::ErrorCode; | 15 | use gen_lsp_server::ErrorCode; |
17 | 16 | ||
18 | use crate::{ | 17 | use crate::{ |
18 | main_loop::pending_requests::{CompletedRequest, LatestRequests}, | ||
19 | project_model::ProjectWorkspace, | 19 | project_model::ProjectWorkspace, |
20 | vfs_filter::IncludeRustFiles, | 20 | vfs_filter::IncludeRustFiles, |
21 | Result, | 21 | Result, |
@@ -29,26 +29,14 @@ pub struct ServerWorldState { | |||
29 | pub workspaces: Arc<Vec<ProjectWorkspace>>, | 29 | pub workspaces: Arc<Vec<ProjectWorkspace>>, |
30 | pub analysis_host: AnalysisHost, | 30 | pub analysis_host: AnalysisHost, |
31 | pub vfs: Arc<RwLock<Vfs>>, | 31 | pub vfs: Arc<RwLock<Vfs>>, |
32 | // hand-rolling VecDeque here to print things in a nicer way | 32 | pub latest_requests: Arc<RwLock<LatestRequests>>, |
33 | pub latest_completed_requests: Arc<RwLock<[CompletedRequest; N_COMPLETED_REQUESTS]>>, | ||
34 | pub request_idx: usize, | ||
35 | } | 33 | } |
36 | 34 | ||
37 | const N_COMPLETED_REQUESTS: usize = 10; | ||
38 | |||
39 | pub struct ServerWorld { | 35 | pub struct ServerWorld { |
40 | pub workspaces: Arc<Vec<ProjectWorkspace>>, | 36 | pub workspaces: Arc<Vec<ProjectWorkspace>>, |
41 | pub analysis: Analysis, | 37 | pub analysis: Analysis, |
42 | pub vfs: Arc<RwLock<Vfs>>, | 38 | pub vfs: Arc<RwLock<Vfs>>, |
43 | pub latest_completed_requests: Arc<RwLock<[CompletedRequest; N_COMPLETED_REQUESTS]>>, | 39 | pub latest_requests: Arc<RwLock<LatestRequests>>, |
44 | pub request_idx: usize, | ||
45 | } | ||
46 | |||
47 | #[derive(Debug, Default)] | ||
48 | pub struct CompletedRequest { | ||
49 | pub id: u64, | ||
50 | pub method: String, | ||
51 | pub duration: Duration, | ||
52 | } | 40 | } |
53 | 41 | ||
54 | impl ServerWorldState { | 42 | impl ServerWorldState { |
@@ -88,8 +76,7 @@ impl ServerWorldState { | |||
88 | workspaces: Arc::new(workspaces), | 76 | workspaces: Arc::new(workspaces), |
89 | analysis_host, | 77 | analysis_host, |
90 | vfs: Arc::new(RwLock::new(vfs)), | 78 | vfs: Arc::new(RwLock::new(vfs)), |
91 | latest_completed_requests: Default::default(), | 79 | latest_requests: Default::default(), |
92 | request_idx: 0, | ||
93 | } | 80 | } |
94 | } | 81 | } |
95 | 82 | ||
@@ -158,8 +145,7 @@ impl ServerWorldState { | |||
158 | workspaces: Arc::clone(&self.workspaces), | 145 | workspaces: Arc::clone(&self.workspaces), |
159 | analysis: self.analysis_host.analysis(), | 146 | analysis: self.analysis_host.analysis(), |
160 | vfs: Arc::clone(&self.vfs), | 147 | vfs: Arc::clone(&self.vfs), |
161 | latest_completed_requests: Arc::clone(&self.latest_completed_requests), | 148 | latest_requests: Arc::clone(&self.latest_requests), |
162 | request_idx: self.request_idx.checked_sub(1).unwrap_or(N_COMPLETED_REQUESTS - 1), | ||
163 | } | 149 | } |
164 | } | 150 | } |
165 | 151 | ||
@@ -172,13 +158,7 @@ impl ServerWorldState { | |||
172 | } | 158 | } |
173 | 159 | ||
174 | pub fn complete_request(&mut self, request: CompletedRequest) { | 160 | pub fn complete_request(&mut self, request: CompletedRequest) { |
175 | // special case: don't track status request itself | 161 | self.latest_requests.write().record(request) |
176 | if request.method == "rust-analyzer/analyzerStatus" { | ||
177 | return; | ||
178 | } | ||
179 | let idx = self.request_idx; | ||
180 | self.latest_completed_requests.write()[idx] = request; | ||
181 | self.request_idx = (idx + 1) % N_COMPLETED_REQUESTS; | ||
182 | } | 162 | } |
183 | } | 163 | } |
184 | 164 | ||