mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
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
@ -4142,6 +4142,7 @@ pub fn completion(cx: &mut Context) {
|
|||||||
iter.reverse();
|
iter.reverse();
|
||||||
let offset = iter.take_while(|ch| chars::char_is_word(*ch)).count();
|
let offset = iter.take_while(|ch| chars::char_is_word(*ch)).count();
|
||||||
let start_offset = cursor.saturating_sub(offset);
|
let start_offset = cursor.saturating_sub(offset);
|
||||||
|
let prefix = text.slice(start_offset..cursor).to_string();
|
||||||
|
|
||||||
cx.callback(
|
cx.callback(
|
||||||
future,
|
future,
|
||||||
@ -4154,7 +4155,7 @@ pub fn completion(cx: &mut Context) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let items = match response {
|
let mut items = match response {
|
||||||
Some(lsp::CompletionResponse::Array(items)) => items,
|
Some(lsp::CompletionResponse::Array(items)) => items,
|
||||||
// TODO: do something with is_incomplete
|
// TODO: do something with is_incomplete
|
||||||
Some(lsp::CompletionResponse::List(lsp::CompletionList {
|
Some(lsp::CompletionResponse::List(lsp::CompletionList {
|
||||||
@ -4164,6 +4165,18 @@ pub fn completion(cx: &mut Context) {
|
|||||||
None => Vec::new(),
|
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() {
|
if items.is_empty() {
|
||||||
// editor.set_error("No completion available".to_string());
|
// editor.set_error("No completion available".to_string());
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user