946: when loading workspace, say how many packages were loaded r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2019-03-07 14:48:37 +00:00
commit a41d8e140c
3 changed files with 21 additions and 22 deletions

View file

@ -248,8 +248,10 @@ fn main_loop_inner(
&& pending_libraries.is_empty()
&& in_flight_libraries == 0
{
let n_packages: usize = state.workspaces.iter().map(|it| it.count()).sum();
if options.show_workspace_loaded {
show_message(req::MessageType::Info, "workspace loaded", msg_sender);
let msg = format!("workspace loaded, {} rust packages", n_packages);
show_message(req::MessageType::Info, msg, msg_sender);
}
// Only send the notification first time
send_workspace_notification = false;
@ -508,12 +510,10 @@ fn update_file_notifications_on_threadpool(
});
}
fn show_message<M: Into<String>>(typ: req::MessageType, msg: M, sender: &Sender<RawMessage>) {
let not = RawNotification::new::<req::ShowMessage>(&req::ShowMessageParams {
typ,
message: msg.into(),
});
fn show_message(typ: req::MessageType, message: impl Into<String>, sender: &Sender<RawMessage>) {
let message = message.into();
let params = req::ShowMessageParams { typ, message };
let not = RawNotification::new::<req::ShowMessage>(&params);
sender.send(not.into()).unwrap();
}

View file

@ -32,7 +32,7 @@ version = "0.0.0"
use std::collections::Spam;
"#,
);
server.wait_for_message("workspace loaded");
server.wait_until_workspace_is_loaded();
eprintln!("loading took {:?}", project_start.elapsed());
let completion_start = Instant::now();
let res = server.send_request::<Completion>(CompletionParams {
@ -54,7 +54,7 @@ fn foo() {
}
",
);
server.wait_for_message("workspace loaded");
server.wait_until_workspace_is_loaded();
server.request::<Runnables>(
RunnablesParams { text_document: server.doc_id("lib.rs"), position: None },
json!([
@ -108,7 +108,7 @@ pub fn foo() {}
fn test_eggs() {}
"#,
);
server.wait_for_message("workspace loaded");
server.wait_until_workspace_is_loaded();
server.request::<Runnables>(
RunnablesParams {
text_document: server.doc_id("tests/spam.rs"),
@ -168,7 +168,7 @@ fn main() {
pub use std::collections::HashMap;
"#,
);
server.wait_for_message("workspace loaded");
server.wait_until_workspace_is_loaded();
server.request::<Formatting>(
DocumentFormattingParams {
@ -217,7 +217,7 @@ mod bar;
fn main() {}
"#,
);
server.wait_for_message("workspace loaded");
server.wait_until_workspace_is_loaded();
let empty_context = || CodeActionContext { diagnostics: Vec::new(), only: None };
server.request::<CodeActionRequest>(
CodeActionParams {
@ -279,7 +279,7 @@ fn main() {}
PATH = tmp_dir.path().display()
);
let server = project_with_tmpdir(tmp_dir, &code);
server.wait_for_message("workspace loaded");
server.wait_until_workspace_is_loaded();
let empty_context = || CodeActionContext { diagnostics: Vec::new(), only: None };
server.request::<CodeActionRequest>(
CodeActionParams {

View file

@ -145,26 +145,25 @@ impl Server {
}
panic!("no response");
}
pub fn wait_for_message(&self, message: &str) {
self.wait_for_message_n(message, 1)
}
pub fn wait_for_message_n(&self, message: &str, n: usize) {
let f = |msg: &RawMessage| match msg {
pub fn wait_until_workspace_is_loaded(&self) {
self.wait_for_message_cond(1, &|msg: &RawMessage| match msg {
RawMessage::Notification(n) if n.method == ShowMessage::METHOD => {
let msg = n.clone().cast::<req::ShowMessage>().unwrap();
msg.message == message
msg.message.starts_with("workspace loaded")
}
_ => false,
};
})
}
fn wait_for_message_cond(&self, n: usize, cond: &dyn Fn(&RawMessage) -> bool) {
let mut total = 0;
for msg in self.messages.borrow().iter() {
if f(msg) {
if cond(msg) {
total += 1
}
}
while total < n {
let msg = self.recv().expect("no response");
if f(&msg) {
if cond(&msg) {
total += 1;
}
}