mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-06 02:37:21 +00:00
Refactor closure to extract async
This commit is contained in:
parent
7d128e81aa
commit
4dad2eb7d7
1 changed files with 45 additions and 18 deletions
|
@ -3485,11 +3485,18 @@ impl Project {
|
|||
Default::default()
|
||||
};
|
||||
|
||||
source_buffer_handle.read_with(&cx, |this, _| {
|
||||
struct PartialCompletion<F: Future<Output = Option<CodeLabel>>> {
|
||||
pub old_range: Range<Anchor>,
|
||||
pub new_text: String,
|
||||
pub label: Option<F>,
|
||||
pub lsp_completion: lsp::CompletionItem,
|
||||
}
|
||||
|
||||
let partial_completions = source_buffer_handle.read_with(&cx, |this, _| {
|
||||
let snapshot = this.snapshot();
|
||||
let clipped_position = this.clip_point_utf16(position, Bias::Left);
|
||||
let mut range_for_token = None;
|
||||
let result = Vec::new();
|
||||
let mut partial_completions = Vec::new();
|
||||
|
||||
for lsp_completion in completions.into_iter() {
|
||||
// For now, we can only handle additional edits if they are returned
|
||||
|
@ -3601,28 +3608,48 @@ impl Project {
|
|||
}
|
||||
};
|
||||
|
||||
let completion = Completion {
|
||||
let label = match language.as_ref() {
|
||||
Some(l) => Some(l.label_for_completion(&lsp_completion)),
|
||||
None => None,
|
||||
};
|
||||
|
||||
let partial_completion = PartialCompletion {
|
||||
old_range,
|
||||
new_text,
|
||||
label: {
|
||||
match language.as_ref() {
|
||||
Some(l) => l.label_for_completion(&lsp_completion).await,
|
||||
None => None,
|
||||
}
|
||||
.unwrap_or_else(|| {
|
||||
CodeLabel::plain(
|
||||
lsp_completion.label.clone(),
|
||||
lsp_completion.filter_text.as_deref(),
|
||||
)
|
||||
})
|
||||
},
|
||||
label,
|
||||
lsp_completion,
|
||||
};
|
||||
|
||||
result.push(completion);
|
||||
partial_completions.push(partial_completion);
|
||||
}
|
||||
Ok(result)
|
||||
})
|
||||
partial_completions
|
||||
});
|
||||
|
||||
let mut result = Vec::new();
|
||||
|
||||
for pc in partial_completions.into_iter() {
|
||||
let label = match pc.label {
|
||||
Some(label) => label.await,
|
||||
None => None,
|
||||
}
|
||||
.unwrap_or_else(|| {
|
||||
CodeLabel::plain(
|
||||
pc.lsp_completion.label.clone(),
|
||||
pc.lsp_completion.filter_text.as_deref(),
|
||||
)
|
||||
});
|
||||
|
||||
let completion = Completion {
|
||||
old_range: pc.old_range,
|
||||
new_text: pc.new_text,
|
||||
label,
|
||||
lsp_completion: pc.lsp_completion,
|
||||
};
|
||||
|
||||
result.push(completion);
|
||||
}
|
||||
|
||||
Ok(result)
|
||||
})
|
||||
} else if let Some(project_id) = self.remote_id() {
|
||||
let rpc = self.client.clone();
|
||||
|
|
Loading…
Reference in a new issue