aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server/src/server_world.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_lsp_server/src/server_world.rs')
-rw-r--r--crates/ra_lsp_server/src/server_world.rs32
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 @@
1use std::{ 1use std::{
2 path::{Path, PathBuf}, 2 path::{Path, PathBuf},
3 sync::Arc, 3 sync::Arc,
4 time::Duration,
5}; 4};
6 5
7use lsp_types::Url; 6use lsp_types::Url;
@@ -16,6 +15,7 @@ use failure::{Error, format_err};
16use gen_lsp_server::ErrorCode; 15use gen_lsp_server::ErrorCode;
17 16
18use crate::{ 17use 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
37const N_COMPLETED_REQUESTS: usize = 10;
38
39pub struct ServerWorld { 35pub 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)]
48pub struct CompletedRequest {
49 pub id: u64,
50 pub method: String,
51 pub duration: Duration,
52} 40}
53 41
54impl ServerWorldState { 42impl 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