aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server/src/server_world.rs
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2019-05-29 13:48:13 +0100
committerbors[bot] <bors[bot]@users.noreply.github.com>2019-05-29 13:48:13 +0100
commit557a4b8301d33e545fb5bb2b86cc811ecd9de7eb (patch)
tree130e5984e2a40f467815f9feb49c989beaa7ca97 /crates/ra_lsp_server/src/server_world.rs
parent87c8437af32779e1fd42d94b4c4147f6dd2b8157 (diff)
parent2c9a1cb3dd941b3f2f608a0633f620478bce0c68 (diff)
Merge #1342
1342: add latest requests to status page r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_lsp_server/src/server_world.rs')
-rw-r--r--crates/ra_lsp_server/src/server_world.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/crates/ra_lsp_server/src/server_world.rs b/crates/ra_lsp_server/src/server_world.rs
index b2808b817..b63927a4f 100644
--- a/crates/ra_lsp_server/src/server_world.rs
+++ b/crates/ra_lsp_server/src/server_world.rs
@@ -1,6 +1,7 @@
1use std::{ 1use std::{
2 path::{Path, PathBuf}, 2 path::{Path, PathBuf},
3 sync::Arc, 3 sync::Arc,
4 time::Duration,
4}; 5};
5 6
6use lsp_types::Url; 7use lsp_types::Url;
@@ -28,12 +29,26 @@ pub struct ServerWorldState {
28 pub workspaces: Arc<Vec<ProjectWorkspace>>, 29 pub workspaces: Arc<Vec<ProjectWorkspace>>,
29 pub analysis_host: AnalysisHost, 30 pub analysis_host: AnalysisHost,
30 pub vfs: Arc<RwLock<Vfs>>, 31 pub vfs: Arc<RwLock<Vfs>>,
32 // hand-rolling VecDeque here to print things in a nicer way
33 pub latest_completed_requests: Arc<RwLock<[CompletedRequest; N_COMPLETED_REQUESTS]>>,
34 pub request_idx: usize,
31} 35}
32 36
37const N_COMPLETED_REQUESTS: usize = 10;
38
33pub struct ServerWorld { 39pub struct ServerWorld {
34 pub workspaces: Arc<Vec<ProjectWorkspace>>, 40 pub workspaces: Arc<Vec<ProjectWorkspace>>,
35 pub analysis: Analysis, 41 pub analysis: Analysis,
36 pub vfs: Arc<RwLock<Vfs>>, 42 pub vfs: Arc<RwLock<Vfs>>,
43 pub latest_completed_requests: Arc<RwLock<[CompletedRequest; N_COMPLETED_REQUESTS]>>,
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,
37} 52}
38 53
39impl ServerWorldState { 54impl ServerWorldState {
@@ -73,6 +88,8 @@ impl ServerWorldState {
73 workspaces: Arc::new(workspaces), 88 workspaces: Arc::new(workspaces),
74 analysis_host, 89 analysis_host,
75 vfs: Arc::new(RwLock::new(vfs)), 90 vfs: Arc::new(RwLock::new(vfs)),
91 latest_completed_requests: Default::default(),
92 request_idx: 0,
76 } 93 }
77 } 94 }
78 95
@@ -137,6 +154,8 @@ impl ServerWorldState {
137 workspaces: Arc::clone(&self.workspaces), 154 workspaces: Arc::clone(&self.workspaces),
138 analysis: self.analysis_host.analysis(), 155 analysis: self.analysis_host.analysis(),
139 vfs: Arc::clone(&self.vfs), 156 vfs: Arc::clone(&self.vfs),
157 latest_completed_requests: Arc::clone(&self.latest_completed_requests),
158 request_idx: self.request_idx.checked_sub(1).unwrap_or(N_COMPLETED_REQUESTS - 1),
140 } 159 }
141 } 160 }
142 161
@@ -147,6 +166,16 @@ impl ServerWorldState {
147 pub fn collect_garbage(&mut self) { 166 pub fn collect_garbage(&mut self) {
148 self.analysis_host.collect_garbage() 167 self.analysis_host.collect_garbage()
149 } 168 }
169
170 pub fn complete_request(&mut self, request: CompletedRequest) {
171 // special case: don't track status request itself
172 if request.method == "rust-analyzer/analyzerStatus" {
173 return;
174 }
175 let idx = self.request_idx;
176 self.latest_completed_requests.write()[idx] = request;
177 self.request_idx = (idx + 1) % N_COMPLETED_REQUESTS;
178 }
150} 179}
151 180
152impl ServerWorld { 181impl ServerWorld {