From 559dad893ff783c0ebe3f9b0a8590440b35ad61d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 22 Aug 2022 12:33:28 +0200 Subject: [PATCH] Implement `ElixirLspAdapter::label_for_symbol` --- crates/zed/src/languages/elixir.rs | 34 ++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/crates/zed/src/languages/elixir.rs b/crates/zed/src/languages/elixir.rs index c6c7c8d1616fd973c5f9f501235b305a88e8ffac..4959338522a5a991ac0f871d0a581cb5951d2425 100644 --- a/crates/zed/src/languages/elixir.rs +++ b/crates/zed/src/languages/elixir.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use client::http::HttpClient; use futures::StreamExt; pub use language::*; -use lsp::CompletionItemKind; +use lsp::{CompletionItemKind, SymbolKind}; use smol::fs::{self, File}; use std::{any::Any, path::PathBuf, sync::Arc}; use util::ResultExt; @@ -139,7 +139,8 @@ impl LspAdapter for ElixirLspAdapter { }); } Some(( - CompletionItemKind::MODULE + CompletionItemKind::CLASS + | CompletionItemKind::MODULE | CompletionItemKind::INTERFACE | CompletionItemKind::STRUCT, _, @@ -162,4 +163,33 @@ impl LspAdapter for ElixirLspAdapter { None } + + async fn label_for_symbol( + &self, + name: &str, + kind: SymbolKind, + language: &Language, + ) -> Option { + let (text, filter_range, display_range) = match kind { + SymbolKind::METHOD | SymbolKind::FUNCTION => { + let text = format!("def {}", name); + let filter_range = 4..4 + name.len(); + let display_range = 0..filter_range.end; + (text, filter_range, display_range) + } + SymbolKind::CLASS | SymbolKind::MODULE | SymbolKind::INTERFACE | SymbolKind::STRUCT => { + let text = format!("defmodule {}", name); + let filter_range = 10..10 + name.len(); + let display_range = 0..filter_range.end; + (text, filter_range, display_range) + } + _ => return None, + }; + + Some(CodeLabel { + runs: language.highlight_text(&text.as_str().into(), display_range.clone()), + text: text[display_range].to_string(), + filter_range, + }) + } }