Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'src/complete.rs')
-rw-r--r--src/complete.rs70
1 files changed, 42 insertions, 28 deletions
diff --git a/src/complete.rs b/src/complete.rs
index 81c9c2f..3ab13d3 100644
--- a/src/complete.rs
+++ b/src/complete.rs
@@ -63,8 +63,8 @@ fn filter_c<'a>(
) -> impl Iterator<Item = &'a CompletionItem> {
let x = &completion.r;
let y = match x {
- CompletionResponse::Array(x) => x,
- CompletionResponse::List(x) => &x.items,
+ CompletionResponse::CompletionItemList(x) => x,
+ CompletionResponse::CompletionList(x) => &x.items,
};
filter(y.iter(), f)
}
@@ -82,7 +82,9 @@ pub fn s(completion: &Complete, c: usize, f: &str) -> Vec<Cell> {
});
out
-}
+}pub const fn i<T:Copy>(x: T) -> usize {
+ (unsafe { *<*const _>::from(&x).cast::<u32>() }) as usize
+ }
#[implicit_fn::implicit_fn]
fn r(
x: &CompletionItem,
@@ -96,34 +98,36 @@ fn r(
let ds = Style::new(FG, bg);
let d: Cell = Cell { letter: None, style: ds };
let mut b = vec![d; c];
+
const MAP: [([u8; 3], [u8; 3], &str); 26] = {
(
amap::amap! {
- const { CompletionItemKind::TEXT.0 as usize } => ("#9a9b9a", " "),
- const { CompletionItemKind::METHOD.0 as usize } | const { CompletionItemKind::FUNCTION.0 as usize } => ("#FFD173", "λ "),
- const { CompletionItemKind::CONSTRUCTOR.0 as usize } => ("#FFAD66", "->"),
- const { CompletionItemKind::FIELD.0 as usize } => ("#E06C75", "x."),
- const { CompletionItemKind::VARIABLE.0 as usize } => ("#E06C75", "x "),
- const { CompletionItemKind::MODULE.0 as usize } => ("#D5FF80", "::"),
- const { CompletionItemKind::PROPERTY.0 as usize } => ("#e6e1cf", "x."),
- const { CompletionItemKind::VALUE.0 as usize } => ("#DFBFFF", "4 "),
- const { CompletionItemKind::ENUM.0 as usize } => ("#73b9ff", "󰓹u"),
- const { CompletionItemKind::ENUM_MEMBER.0 as usize } => ("#73b9ff", "󰓹:"),
- const { CompletionItemKind::SNIPPET.0 as usize } => ("#9a9b9a", "! "),
- const { CompletionItemKind::INTERFACE.0 as usize } => ("#E5C07B", "t "),
- const { CompletionItemKind::REFERENCE.0 as usize } => ("#9a9b9a", "& "),
- const { CompletionItemKind::CONSTANT.0 as usize } => ("#DFBFFF", "N "),
- const { CompletionItemKind::STRUCT.0 as usize } => ("#73D0FF", "X{"),
- const { CompletionItemKind::OPERATOR.0 as usize } => ("#F29E74", "+ "),
- const { CompletionItemKind::TYPE_PARAMETER.0 as usize } => ("#9a9b9a", "T "),
- const { CompletionItemKind::KEYWORD.0 as usize } => ("#FFAD66", "as"),
+ const { i(CompletionItemKind::Text) } => ("#9a9b9a", " "),
+ const { i(CompletionItemKind::Method) } | const { i(CompletionItemKind::Function) } => ("#FFD173", "λ "),
+ const { i(CompletionItemKind::Constructor) } => ("#FFAD66", "->"),
+ const { i(CompletionItemKind::Field) } => ("#E06C75", "x."),
+ const { i(CompletionItemKind::Variable) } => ("#E06C75", "x "),
+ const { i(CompletionItemKind::Module) } => ("#D5FF80", "::"),
+ const { i(CompletionItemKind::Property) } => ("#e6e1cf", "x."),
+ const { i(CompletionItemKind::Value) } => ("#DFBFFF", "4 "),
+ const { i(CompletionItemKind::Enum) } => ("#73b9ff", "󰓹u"),
+ const { i(CompletionItemKind::EnumMember) } => ("#73b9ff", "󰓹:"),
+ const { i(CompletionItemKind::Snippet) } => ("#9a9b9a", "! "),
+ const { i(CompletionItemKind::Interface) } => ("#E5C07B", "t "),
+ const { i(CompletionItemKind::Reference) } => ("#9a9b9a", "& "),
+ const { i(CompletionItemKind::Constant) } => ("#DFBFFF", "N "),
+ const { i(CompletionItemKind::Struct) } => ("#73D0FF", "X{"),
+ const { i(CompletionItemKind::Operator) } => ("#F29E74", "+ "),
+ const { i(CompletionItemKind::TypeParameter) } => ("#9a9b9a", "T "),
+ const { i(CompletionItemKind::Keyword) } => ("#FFAD66", "as"),
+
_ => ("#9a9b9a", " ")
}).map(const
|(x, y)| (set_a(color_(x), 0.5), color_(x), y),
)
};
let (bgt, col, ty) =
- MAP[x.kind.unwrap_or(CompletionItemKind(25)).0 as usize];
+ MAP[i(x.kind.unwrap_or(CompletionItemKind::Text))];
b.iter_mut().zip(ty.chars()).for_each(|(x, c)| {
*x = (Style::new(col, bgt) | Style::BOLD).basic(c)
});
@@ -159,20 +163,30 @@ fn r(
}))
.for_each(|(a, b)| *a = b);
}
+ let s = if let Some(ref ft) = x.filter_text
+ && &x.label != ft
+ // l = &x
+ // ft = x
+ && let Some(e) = x.label.find(ft)
+ {
+ -(e as i32)
+ } else {
+ 0
+ };
i.iter_mut()
.zip(
- x.label.chars().map(|x| ds.basic(x)).zip(0..).chain(
+ x.label.chars().map(|x| ds.basic(x)).zip(s..).chain(
label_details
.map(|x| {
Style { bg, fg: color_("#858685"), ..default() }
.basic(x)
})
- .zip(repeat(u32::MAX)),
+ .zip(repeat(i32::MAX)),
),
)
.for_each(|(a, (b, i))| {
*a = b;
- if indices.contains(&i) {
+ if indices.contains(&(i as u32)) {
a.style |= (Style::BOLD, color_("#ffcc66"));
}
});
@@ -224,16 +238,16 @@ impl Editor {
let sel = x.sel(&crate::filter(&self.text));
let sel = lsp.resolve(sel.clone()).unwrap();
let CompletionItem {
- text_edit: Some(CompletionTextEdit::Edit(ed)),
+ text_edit: Some(CompletionItemTextEdit::TextEdit(ed)),
additional_text_edits,
insert_text_format,
..
} = sel.clone()
else {
- panic!()
+ return;
};
match insert_text_format {
- Some(InsertTextFormat::SNIPPET) => {
+ Some(InsertTextFormat::Snippet) => {
self.text.apply_snippet(&ed).unwrap();
}
_ => {