Skip to content

Commit cf976e7

Browse files
authored
Add code lens sign (#1189)
1 parent b1744b2 commit cf976e7

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

src/language_server_protocol.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ impl LanguageClient {
180180
));
181181
}
182182

183+
let cld = self.get_config(|c| c.code_lens_display.clone())?;
184+
cmds.push(format!(
185+
"sign define LanguageClientCodeLens text={} texthl={}",
186+
cld.sign_text, cld.sign_texthl
187+
));
188+
183189
self.vim()?.command(cmds)?;
184190
Ok(())
185191
}
@@ -2912,10 +2918,11 @@ impl LanguageClient {
29122918
#[tracing::instrument(level = "info", skip(self))]
29132919
fn get_signs_to_display(&self, filename: &str, viewport: &Viewport) -> Result<Vec<Sign>> {
29142920
let max_signs = self.get_config(|c| c.diagnostics_signs_max.unwrap_or(std::usize::MAX))?;
2915-
let signs: Vec<_> = self.get_state(|state| {
2921+
let mut signs = vec![];
2922+
let mut diagnostics: Vec<Sign> = self.get_state(|state| {
29162923
let diagnostics = state.diagnostics.get(filename).cloned().unwrap_or_default();
29172924
let mut diagnostics = diagnostics
2918-
.iter()
2925+
.into_iter()
29192926
.filter(|diag| viewport.overlaps(diag.range))
29202927
.sorted_by_key(|diag| {
29212928
(
@@ -2925,14 +2932,22 @@ impl LanguageClient {
29252932
})
29262933
.collect_vec();
29272934
diagnostics.dedup_by_key(|diag| diag.range.start.line);
2928-
diagnostics
2929-
.into_iter()
2930-
.take(max_signs)
2935+
diagnostics.iter().map(Into::into).collect_vec()
2936+
})?;
2937+
2938+
let mut code_lenses: Vec<Sign> = self.get_state(|state| {
2939+
let ccll = state.code_lens.get(filename).cloned().unwrap_or_default();
2940+
let ccll = ccll
2941+
.iter()
2942+
.filter(|cl| viewport.overlaps(cl.range))
29312943
.map(Into::into)
2932-
.collect()
2944+
.collect_vec();
2945+
ccll
29332946
})?;
29342947

2935-
Ok(signs)
2948+
signs.append(&mut diagnostics);
2949+
signs.append(&mut code_lenses);
2950+
Ok(signs.into_iter().take(max_signs).collect())
29362951
}
29372952

29382953
#[tracing::instrument(level = "info", skip(self))]

src/sign.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use lsp_types::{Diagnostic, DiagnosticSeverity};
1+
use lsp_types::{CodeLens, Diagnostic, DiagnosticSeverity};
22
use serde::{Deserialize, Serialize};
33

44
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
@@ -19,3 +19,13 @@ impl From<&Diagnostic> for Sign {
1919
Sign { id, line, name }
2020
}
2121
}
22+
23+
impl From<&CodeLens> for Sign {
24+
fn from(code_lens: &CodeLens) -> Self {
25+
let line = code_lens.range.start.line;
26+
let name = "LanguageClientCodeLens".to_owned();
27+
let id = 95_000 + line as u64;
28+
29+
Sign { id, line, name }
30+
}
31+
}

src/types.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,12 +356,16 @@ impl FromStr for DiagnosticsList {
356356
#[serde(rename_all = "camelCase")]
357357
pub struct CodeLensDisplay {
358358
pub virtual_texthl: String,
359+
pub sign_text: String,
360+
pub sign_texthl: String,
359361
}
360362

361363
impl Default for CodeLensDisplay {
362364
fn default() -> Self {
363365
CodeLensDisplay {
364366
virtual_texthl: "LanguageClientCodeLens".into(),
367+
sign_text: "🔍".to_owned(),
368+
sign_texthl: "Todo".to_owned(),
365369
}
366370
}
367371
}

0 commit comments

Comments
 (0)