Adds "restart server" command
This commit is contained in:
parent
546d9be2a7
commit
12f28f6276
@ -37,11 +37,9 @@ pub struct Threads {
|
||||
}
|
||||
|
||||
impl Threads {
|
||||
pub fn join(self) -> Result<()> {
|
||||
match self.reader.join() {
|
||||
Ok(r) => r?,
|
||||
Err(_) => bail!("reader panicked"),
|
||||
}
|
||||
pub fn exit(self) -> Result<()> {
|
||||
// We can't rely on stdin being closed
|
||||
drop(self.reader);
|
||||
match self.writer.join() {
|
||||
Ok(r) => r,
|
||||
Err(_) => bail!("writer panicked"),
|
||||
|
@ -54,7 +54,7 @@ fn main_inner() -> Result<()> {
|
||||
ra_lsp_server::main_loop(workspace_roots, opts, r, s)
|
||||
})?;
|
||||
log::info!("shutting down IO...");
|
||||
threads.join()?;
|
||||
threads.exit()?;
|
||||
log::info!("... IO is down");
|
||||
Ok(())
|
||||
}
|
||||
|
@ -114,6 +114,11 @@
|
||||
"command": "rust-analyzer.collectGarbage",
|
||||
"title": "Run garbage collection",
|
||||
"category": "Rust Analyzer"
|
||||
},
|
||||
{
|
||||
"command": "rust-analyzer.reload",
|
||||
"title": "Restart server",
|
||||
"category": "Rust Analyzer"
|
||||
}
|
||||
],
|
||||
"keybindings": [
|
||||
|
@ -120,11 +120,16 @@ export function activate(context: vscode.ExtensionContext) {
|
||||
context.subscriptions
|
||||
);
|
||||
|
||||
const startServer = () => Server.start(allNotifications);
|
||||
const reloadCommand = () => reloadServer(startServer);
|
||||
|
||||
vscode.commands.registerCommand('rust-analyzer.reload', reloadCommand);
|
||||
|
||||
// Executing `cargo watch` provides us with inline diagnostics on save
|
||||
interactivelyStartCargoWatch(context);
|
||||
|
||||
// Start the language server, finally!
|
||||
Server.start(allNotifications);
|
||||
startServer();
|
||||
}
|
||||
|
||||
export function deactivate(): Thenable<void> {
|
||||
@ -133,3 +138,12 @@ export function deactivate(): Thenable<void> {
|
||||
}
|
||||
return Server.client.stop();
|
||||
}
|
||||
|
||||
|
||||
async function reloadServer(startServer: () => void) {
|
||||
if (Server.client != null) {
|
||||
vscode.window.showInformationMessage('Reloading rust-analyzer...');
|
||||
await Server.client.stop();
|
||||
startServer();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user