Filter completion items from language server by starts_with word under cursor (#883)
* filter items by starts_with pre nth char of cursor * add config for filter completion items by starts_with * filter items by starts_with pre nth char of cursor * add config for filter completion items by starts_with * remove completion items pre filter configuratio
This commit is contained in:
parent
0cb5e0b2ca
commit
971ba8929f
1 changed files with 14 additions and 1 deletions
|
@ -4142,6 +4142,7 @@ pub fn completion(cx: &mut Context) {
|
|||
iter.reverse();
|
||||
let offset = iter.take_while(|ch| chars::char_is_word(*ch)).count();
|
||||
let start_offset = cursor.saturating_sub(offset);
|
||||
let prefix = text.slice(start_offset..cursor).to_string();
|
||||
|
||||
cx.callback(
|
||||
future,
|
||||
|
@ -4154,7 +4155,7 @@ pub fn completion(cx: &mut Context) {
|
|||
return;
|
||||
}
|
||||
|
||||
let items = match response {
|
||||
let mut items = match response {
|
||||
Some(lsp::CompletionResponse::Array(items)) => items,
|
||||
// TODO: do something with is_incomplete
|
||||
Some(lsp::CompletionResponse::List(lsp::CompletionList {
|
||||
|
@ -4164,6 +4165,18 @@ pub fn completion(cx: &mut Context) {
|
|||
None => Vec::new(),
|
||||
};
|
||||
|
||||
if !prefix.is_empty() {
|
||||
items = items
|
||||
.into_iter()
|
||||
.filter(|item| {
|
||||
item.filter_text
|
||||
.as_ref()
|
||||
.unwrap_or(&item.label)
|
||||
.starts_with(&prefix)
|
||||
})
|
||||
.collect();
|
||||
}
|
||||
|
||||
if items.is_empty() {
|
||||
// editor.set_error("No completion available".to_string());
|
||||
return;
|
||||
|
|
Loading…
Add table
Reference in a new issue