Skip to content

Commit

Permalink
fix(daemon): crashing on multiline message nvim print
Browse files Browse the repository at this point in the history
only print the first line and the rest redirect to log buffer
  • Loading branch information
kkharji committed Jun 22, 2022
1 parent cda8db4 commit bdd0e6c
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 13 deletions.
25 changes: 21 additions & 4 deletions daemon/src/compile.rs
Expand Up @@ -43,7 +43,7 @@ pub async fn ensure_server_support<'a>(
client: &Client,
event: Option<&Event>,
) -> Result<bool> {
let Client { root, .. } = client;
let Client { root, pid, .. } = client;
let ref name = client.abbrev_root();

let compile_path = root.join(".compile");
Expand All @@ -58,10 +58,27 @@ pub async fn ensure_server_support<'a>(

if let Some(event) = event {
let project = state.projects.get_mut(root)?;
let name = project.name().to_string();
if project.should_generate(event) {
if let Err(e) = project.generate().await {
state.clients.echo_err(&root, name, &e.to_string()).await;
return Err(e);
let mut lines = e
.to_string()
.split("\n")
.map(ToString::to_string)
.collect::<Vec<String>>();
if lines.len() == 1 {
state.clients.get(&pid)?.echo_err(&lines[0]).await?;
} else {
let first = lines.remove(0);
state.clients.get(&pid)?.echo_err(&first).await?;
let mut logger = state.clients.get(&pid)?.logger();
logger.set_status_end(false, true).await?;
logger.set_title(name);
logger.append(first).await?;
logger.append(lines.join("\n")).await?;
}

return Ok(false);
};

project.update_compile_database().await?;
Expand All @@ -88,7 +105,7 @@ pub async fn ensure_server_support<'a>(

logger.set_status_end(false, true).await.ok();

return Err(err);
return Ok(false);
}
Ok(true)
} else {
Expand Down
26 changes: 17 additions & 9 deletions daemon/src/watch/mod.rs
Expand Up @@ -56,19 +56,27 @@ impl WatchService {
client: &Client,
state: &mut MutexGuard<'a, State>,
) -> Result<()> {
let recompiled = (event.is_create_event()
let recompiled = event.is_create_event()
|| event.is_remove_event()
|| event.is_content_update_event()
|| event.is_rename_event() && !event.is_seen())
&& ensure_server_support(state, client, Some(event)).await?;
|| event.is_rename_event() && !event.is_seen();

if recompiled {
let ref name = client.abbrev_root();
state
.clients
.echo_msg(&client.root, name, "new compilation database generated ✅")
.await;
info!("Recompiled: {name:?}");
let ensure = ensure_server_support(state, client, Some(event)).await;
match ensure {
Err(err) => {
log::error!("Ensure server support Errored!! {err:?} ");
}
Ok(true) => {
let ref name = client.abbrev_root();
state
.clients
.echo_msg(&client.root, name, "new compilation database generated ✅")
.await;
info!("Recompiled: {name:?}");
}
_ => (),
}
};

Ok(())
Expand Down

0 comments on commit bdd0e6c

Please sign in to comment.