diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_ide_api/src/lib.rs | 6 | ||||
-rw-r--r-- | crates/ra_ide_api/src/status.rs | 15 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop.rs | 1 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 4 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/req.rs | 8 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/server_world.rs | 15 |
6 files changed, 49 insertions, 0 deletions
diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index a09a8f926..3c53e75ac 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs | |||
@@ -15,6 +15,7 @@ pub mod mock_analysis; | |||
15 | mod symbol_index; | 15 | mod symbol_index; |
16 | mod navigation_target; | 16 | mod navigation_target; |
17 | 17 | ||
18 | mod status; | ||
18 | mod completion; | 19 | mod completion; |
19 | mod runnables; | 20 | mod runnables; |
20 | mod goto_definition; | 21 | mod goto_definition; |
@@ -293,6 +294,11 @@ pub struct Analysis { | |||
293 | } | 294 | } |
294 | 295 | ||
295 | impl Analysis { | 296 | impl Analysis { |
297 | /// Debug info about the current state of the analysis | ||
298 | pub fn status(&self) -> String { | ||
299 | status::status(&*self.db) | ||
300 | } | ||
301 | |||
296 | /// Gets the text of the source file. | 302 | /// Gets the text of the source file. |
297 | pub fn file_text(&self, file_id: FileId) -> Arc<String> { | 303 | pub fn file_text(&self, file_id: FileId) -> Arc<String> { |
298 | self.db.file_text(file_id) | 304 | self.db.file_text(file_id) |
diff --git a/crates/ra_ide_api/src/status.rs b/crates/ra_ide_api/src/status.rs new file mode 100644 index 000000000..d3e04be23 --- /dev/null +++ b/crates/ra_ide_api/src/status.rs | |||
@@ -0,0 +1,15 @@ | |||
1 | use ra_db::{ | ||
2 | LocationIntener, SourceFileQuery, | ||
3 | salsa::{Database, debug::DebugQueryTable}, | ||
4 | }; | ||
5 | |||
6 | use crate::db::RootDatabase; | ||
7 | |||
8 | pub(crate) fn status(db: &RootDatabase) -> String { | ||
9 | let n_parsed_files = db.query(SourceFileQuery).keys::<Vec<_>>().len(); | ||
10 | let n_defs = { | ||
11 | let interner: &LocationIntener<hir::DefLoc, hir::DefId> = db.as_ref(); | ||
12 | interner.len() | ||
13 | }; | ||
14 | format!("#n_parsed_files {}\n#n_defs {}\n", n_parsed_files, n_defs) | ||
15 | } | ||
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index fa07b1942..f51576521 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs | |||
@@ -285,6 +285,7 @@ fn on_request( | |||
285 | sender, | 285 | sender, |
286 | }; | 286 | }; |
287 | let req = pool_dispatcher | 287 | let req = pool_dispatcher |
288 | .on::<req::AnalyzerStatus>(handlers::handle_analyzer_status)? | ||
288 | .on::<req::SyntaxTree>(handlers::handle_syntax_tree)? | 289 | .on::<req::SyntaxTree>(handlers::handle_syntax_tree)? |
289 | .on::<req::ExtendSelection>(handlers::handle_extend_selection)? | 290 | .on::<req::ExtendSelection>(handlers::handle_extend_selection)? |
290 | .on::<req::FindMatchingBrace>(handlers::handle_find_matching_brace)? | 291 | .on::<req::FindMatchingBrace>(handlers::handle_find_matching_brace)? |
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index 497f819be..d84f762f4 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -23,6 +23,10 @@ use crate::{ | |||
23 | LspError, Result, | 23 | LspError, Result, |
24 | }; | 24 | }; |
25 | 25 | ||
26 | pub fn handle_analyzer_status(world: ServerWorld, _: ()) -> Result<String> { | ||
27 | Ok(world.status()) | ||
28 | } | ||
29 | |||
26 | pub fn handle_syntax_tree(world: ServerWorld, params: req::SyntaxTreeParams) -> Result<String> { | 30 | pub fn handle_syntax_tree(world: ServerWorld, params: req::SyntaxTreeParams) -> Result<String> { |
27 | let id = params.text_document.try_conv_with(&world)?; | 31 | let id = params.text_document.try_conv_with(&world)?; |
28 | let res = world.analysis().syntax_tree(id); | 32 | let res = world.analysis().syntax_tree(id); |
diff --git a/crates/ra_lsp_server/src/req.rs b/crates/ra_lsp_server/src/req.rs index 156cf9641..ec6b6d905 100644 --- a/crates/ra_lsp_server/src/req.rs +++ b/crates/ra_lsp_server/src/req.rs | |||
@@ -11,6 +11,14 @@ pub use lsp_types::{ | |||
11 | TextDocumentPositionParams, TextEdit, WorkspaceEdit, WorkspaceSymbolParams, | 11 | TextDocumentPositionParams, TextEdit, WorkspaceEdit, WorkspaceSymbolParams, |
12 | }; | 12 | }; |
13 | 13 | ||
14 | pub enum AnalyzerStatus {} | ||
15 | |||
16 | impl Request for AnalyzerStatus { | ||
17 | type Params = (); | ||
18 | type Result = String; | ||
19 | const METHOD: &'static str = "ra/analyzerStatus"; | ||
20 | } | ||
21 | |||
14 | pub enum SyntaxTree {} | 22 | pub enum SyntaxTree {} |
15 | 23 | ||
16 | impl Request for SyntaxTree { | 24 | impl Request for SyntaxTree { |
diff --git a/crates/ra_lsp_server/src/server_world.rs b/crates/ra_lsp_server/src/server_world.rs index c24ded9f9..5cb97b29b 100644 --- a/crates/ra_lsp_server/src/server_world.rs +++ b/crates/ra_lsp_server/src/server_world.rs | |||
@@ -264,4 +264,19 @@ impl ServerWorld { | |||
264 | .map_err(|_| format_err!("can't convert path to url: {}", path.display()))?; | 264 | .map_err(|_| format_err!("can't convert path to url: {}", path.display()))?; |
265 | Ok(url) | 265 | Ok(url) |
266 | } | 266 | } |
267 | |||
268 | pub fn status(&self) -> String { | ||
269 | let mut res = String::new(); | ||
270 | if self.workspaces.is_empty() { | ||
271 | res.push_str("no workspaces\n") | ||
272 | } else { | ||
273 | res.push_str("workspaces:\n"); | ||
274 | for w in self.workspaces.iter() { | ||
275 | res += &format!("{} packages loaded\n", w.cargo.packages().count()); | ||
276 | } | ||
277 | } | ||
278 | res.push_str("\nanalysis:\n"); | ||
279 | res.push_str(&self.analysis.status()); | ||
280 | res | ||
281 | } | ||
267 | } | 282 | } |