ad status command

This commit is contained in:
Aleksey Kladov 2019-01-23 00:15:03 +03:00
parent e08df3219d
commit 0ba7e2eaeb
10 changed files with 68 additions and 0 deletions

View file

@ -15,6 +15,7 @@ pub mod mock_analysis;
mod symbol_index;
mod navigation_target;
mod status;
mod completion;
mod runnables;
mod goto_definition;
@ -293,6 +294,11 @@ pub struct Analysis {
}
impl Analysis {
/// Debug info about the current state of the analysis
pub fn status(&self) -> String {
status::status(&*self.db)
}
/// Gets the text of the source file.
pub fn file_text(&self, file_id: FileId) -> Arc<String> {
self.db.file_text(file_id)

View file

@ -0,0 +1,15 @@
use ra_db::{
LocationIntener, SourceFileQuery,
salsa::{Database, debug::DebugQueryTable},
};
use crate::db::RootDatabase;
pub(crate) fn status(db: &RootDatabase) -> String {
let n_parsed_files = db.query(SourceFileQuery).keys::<Vec<_>>().len();
let n_defs = {
let interner: &LocationIntener<hir::DefLoc, hir::DefId> = db.as_ref();
interner.len()
};
format!("#n_parsed_files {}\n#n_defs {}\n", n_parsed_files, n_defs)
}

View file

@ -285,6 +285,7 @@ fn on_request(
sender,
};
let req = pool_dispatcher
.on::<req::AnalyzerStatus>(handlers::handle_analyzer_status)?
.on::<req::SyntaxTree>(handlers::handle_syntax_tree)?
.on::<req::ExtendSelection>(handlers::handle_extend_selection)?
.on::<req::FindMatchingBrace>(handlers::handle_find_matching_brace)?

View file

@ -23,6 +23,10 @@ use crate::{
LspError, Result,
};
pub fn handle_analyzer_status(world: ServerWorld, _: ()) -> Result<String> {
Ok(world.status())
}
pub fn handle_syntax_tree(world: ServerWorld, params: req::SyntaxTreeParams) -> Result<String> {
let id = params.text_document.try_conv_with(&world)?;
let res = world.analysis().syntax_tree(id);

View file

@ -11,6 +11,14 @@ pub use lsp_types::{
TextDocumentPositionParams, TextEdit, WorkspaceEdit, WorkspaceSymbolParams,
};
pub enum AnalyzerStatus {}
impl Request for AnalyzerStatus {
type Params = ();
type Result = String;
const METHOD: &'static str = "ra/analyzerStatus";
}
pub enum SyntaxTree {}
impl Request for SyntaxTree {

View file

@ -264,4 +264,19 @@ impl ServerWorld {
.map_err(|_| format_err!("can't convert path to url: {}", path.display()))?;
Ok(url)
}
pub fn status(&self) -> String {
let mut res = String::new();
if self.workspaces.is_empty() {
res.push_str("no workspaces\n")
} else {
res.push_str("workspaces:\n");
for w in self.workspaces.iter() {
res += &format!("{} packages loaded\n", w.cargo.packages().count());
}
}
res.push_str("\nanalysis:\n");
res.push_str(&self.analysis.status());
res
}
}

View file

@ -94,6 +94,10 @@
{
"command": "ra-lsp.run",
"title": "Rust Run"
},
{
"command": "ra-lsp.analyzerStatus",
"title": "Status of rust-analyzer (debug)"
}
],
"keybindings": [

View file

@ -0,0 +1,12 @@
import * as vscode from 'vscode';
import { Server } from '../server';
// Shows status of rust-analyzer (for debugging)
export async function handle() {
const status = await Server.client.sendRequest<string>(
'ra/analyzerStatus',
null
);
const doc = await vscode.workspace.openTextDocument({ content: status });
await vscode.window.showTextDocument(doc, vscode.ViewColumn.Two);
}

View file

@ -1,3 +1,4 @@
import * as analyzerStatus from './analyzer_status';
import * as applySourceChange from './apply_source_change';
import * as extendSelection from './extend_selection';
import * as joinLines from './join_lines';
@ -8,6 +9,7 @@ import * as runnables from './runnables';
import * as syntaxTree from './syntaxTree';
export {
analyzerStatus,
applySourceChange,
extendSelection,
joinLines,

View file

@ -45,6 +45,7 @@ export function activate(context: vscode.ExtensionContext) {
}
// Commands are requests from vscode to the language server
registerCommand('ra-lsp.analyzerStatus', commands.analyzerStatus.handle);
registerCommand('ra-lsp.syntaxTree', commands.syntaxTree.handle);
registerCommand('ra-lsp.extendSelection', commands.extendSelection.handle);
registerCommand('ra-lsp.matchingBrace', commands.matchingBrace.handle);