Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'src/complete.rs')
| -rw-r--r-- | src/complete.rs | 70 |
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(); } _ => { |