Skip to content

Commit

Permalink
chore: show diagnostics progress
Browse files Browse the repository at this point in the history
  • Loading branch information
mtshiba committed Jun 16, 2024
1 parent d22abd7 commit ea2e4f5
Showing 1 changed file with 53 additions and 4 deletions.
57 changes: 53 additions & 4 deletions crates/els/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,11 @@ use lsp_types::{
DidChangeTextDocumentParams, DidOpenTextDocumentParams, DidSaveTextDocumentParams,
ExecuteCommandOptions, FoldingRangeProviderCapability, HoverProviderCapability,
ImplementationProviderCapability, InitializeParams, InitializeResult, InlayHintOptions,
InlayHintServerCapabilities, OneOf, Position, SemanticTokenType, SemanticTokensFullOptions,
SemanticTokensLegend, SemanticTokensOptions, SemanticTokensServerCapabilities,
ServerCapabilities, SignatureHelpOptions, WorkDoneProgressOptions,
InlayHintServerCapabilities, NumberOrString, OneOf, Position, ProgressParams,
ProgressParamsValue, SemanticTokenType, SemanticTokensFullOptions, SemanticTokensLegend,
SemanticTokensOptions, SemanticTokensServerCapabilities, ServerCapabilities,
SignatureHelpOptions, WorkDoneProgress, WorkDoneProgressBegin, WorkDoneProgressCreateParams,
WorkDoneProgressEnd, WorkDoneProgressOptions,
};

use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -777,6 +779,50 @@ impl<Checker: BuildRunnable, Parser: Parsable> Server<Checker, Parser> {
);
}

fn start_work_done_progress(&self, title: &str) -> NumberOrString {
let token = NumberOrString::String(title.to_string());
let progress_token = WorkDoneProgressCreateParams {
token: token.clone(),
};
let _ = self.send_stdout(&json!({
"jsonrpc": "2.0",
"id": 1,
"method": "window/workDoneProgress/create",
"params": progress_token,
}));
let progress_begin = WorkDoneProgressBegin {
title: title.to_string(),
cancellable: Some(false),
message: None,
percentage: Some(0),
};
let params = ProgressParams {
token: token.clone(),
value: ProgressParamsValue::WorkDone(WorkDoneProgress::Begin(progress_begin)),
};
let _ = self.send_stdout(&json!({
"jsonrpc": "2.0",
"method": "$/progress",
"params": params,
}));
token
}

fn stop_work_done_progress(&self, token: NumberOrString, message: &str) {
let progress_end = WorkDoneProgressEnd {
message: Some(message.to_string()),
};
let params = ProgressParams {
token,
value: ProgressParamsValue::WorkDone(WorkDoneProgress::End(progress_end)),
};
let _ = self.send_stdout(&json!({
"jsonrpc": "2.0",
"method": "$/progress",
"params": params,
}));
}

fn handle_request(&mut self, msg: &Value, id: i64, method: &str) -> ELSResult<()> {
match method {
"initialize" => self.init(msg, id),
Expand Down Expand Up @@ -833,7 +879,10 @@ impl<Checker: BuildRunnable, Parser: Parsable> Server<Checker, Parser> {
let code = params.text_document.text;
let ver = params.text_document.version;
self.file_cache.update(&uri, code.clone(), Some(ver));
self.check_file(uri, code)
let token = self.start_work_done_progress("checking files ...");
let res = self.check_file(uri, code);
self.stop_work_done_progress(token, "checking done");
res
}
"textDocument/didSave" => {
let params = DidSaveTextDocumentParams::deserialize(msg["params"].clone())?;
Expand Down

0 comments on commit ea2e4f5

Please sign in to comment.