Error if project is disconnected after getting code actions response

This commit is contained in:
Antonio Scandurra 2022-11-28 15:05:34 +01:00
parent 5581674f8f
commit 2a0ddd99d2

View file

@ -3579,7 +3579,7 @@ impl Project {
} else if let Some(project_id) = self.remote_id() { } else if let Some(project_id) = self.remote_id() {
let rpc = self.client.clone(); let rpc = self.client.clone();
let version = buffer.version(); let version = buffer.version();
cx.spawn_weak(|_, mut cx| async move { cx.spawn_weak(|this, mut cx| async move {
let response = rpc let response = rpc
.request(proto::GetCodeActions { .request(proto::GetCodeActions {
project_id, project_id,
@ -3590,17 +3590,27 @@ impl Project {
}) })
.await?; .await?;
buffer_handle if this
.update(&mut cx, |buffer, _| { .upgrade(&cx)
buffer.wait_for_version(deserialize_version(response.version)) .ok_or_else(|| anyhow!("project was dropped"))?
}) .read_with(&cx, |this, _| this.is_read_only())
.await; {
return Err(anyhow!(
"failed to get code actions: project was disconnected"
));
} else {
buffer_handle
.update(&mut cx, |buffer, _| {
buffer.wait_for_version(deserialize_version(response.version))
})
.await;
response response
.actions .actions
.into_iter() .into_iter()
.map(language::proto::deserialize_code_action) .map(language::proto::deserialize_code_action)
.collect() .collect()
}
}) })
} else { } else {
Task::ready(Ok(Default::default())) Task::ready(Ok(Default::default()))