aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2019-01-22 22:25:22 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2019-01-22 22:25:22 +0000
commitf90783fc5309e1835b22aa65d071efb9cf3eb9df (patch)
treef60d21521d667e46bb7596c74b0064f3650798e2 /crates
parente08df3219d7a06b1e38c632e7f13967fb540769b (diff)
parentc0dba92b7fec667bda1c1a1af258ef37ee8cbf54 (diff)
Merge #602
602: add status command r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_ide_api/src/lib.rs6
-rw-r--r--crates/ra_ide_api/src/status.rs15
-rw-r--r--crates/ra_lsp_server/src/main_loop.rs1
-rw-r--r--crates/ra_lsp_server/src/main_loop/handlers.rs4
-rw-r--r--crates/ra_lsp_server/src/req.rs8
-rw-r--r--crates/ra_lsp_server/src/server_world.rs15
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;
15mod symbol_index; 15mod symbol_index;
16mod navigation_target; 16mod navigation_target;
17 17
18mod status;
18mod completion; 19mod completion;
19mod runnables; 20mod runnables;
20mod goto_definition; 21mod goto_definition;
@@ -293,6 +294,11 @@ pub struct Analysis {
293} 294}
294 295
295impl Analysis { 296impl 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 @@
1use ra_db::{
2 LocationIntener, SourceFileQuery,
3 salsa::{Database, debug::DebugQueryTable},
4};
5
6use crate::db::RootDatabase;
7
8pub(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
26pub fn handle_analyzer_status(world: ServerWorld, _: ()) -> Result<String> {
27 Ok(world.status())
28}
29
26pub fn handle_syntax_tree(world: ServerWorld, params: req::SyntaxTreeParams) -> Result<String> { 30pub 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
14pub enum AnalyzerStatus {}
15
16impl Request for AnalyzerStatus {
17 type Params = ();
18 type Result = String;
19 const METHOD: &'static str = "ra/analyzerStatus";
20}
21
14pub enum SyntaxTree {} 22pub enum SyntaxTree {}
15 23
16impl Request for SyntaxTree { 24impl 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}