Trigger completion when typing words or trigger characters

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Max Brunsfeld 2022-01-31 16:50:51 -08:00
parent 8d2b7ba032
commit 1d1f8df180
6 changed files with 254 additions and 5 deletions

View file

@ -882,6 +882,45 @@ impl MultiBuffer {
})
}
pub fn is_completion_trigger<T>(&self, position: T, text: &str, cx: &AppContext) -> bool
where
T: ToOffset,
{
let mut chars = text.chars();
let char = if let Some(char) = chars.next() {
char
} else {
return false;
};
if chars.next().is_some() {
return false;
}
if char.is_alphanumeric() || char == '_' {
return true;
}
let snapshot = self.snapshot(cx);
let anchor = snapshot.anchor_before(position);
let buffer = self.buffers.borrow()[&anchor.buffer_id].buffer.clone();
if let Some(language_server) = buffer.read(cx).language_server() {
language_server
.capabilities()
.completion_provider
.as_ref()
.map_or(false, |provider| {
provider
.trigger_characters
.as_ref()
.map_or(false, |characters| {
characters.iter().any(|string| string == text)
})
})
} else {
false
}
}
pub fn language<'a>(&self, cx: &'a AppContext) -> Option<&'a Arc<Language>> {
self.buffers
.borrow()