Skip to content

Commit fbdf7e3

Browse files
committed
fix: preserve code lenses on resolve
1 parent 6b0f620 commit fbdf7e3

2 files changed

Lines changed: 25 additions & 14 deletions

File tree

helix-term/src/commands/lsp.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,7 +1522,7 @@ pub fn show_code_lenses_under_cursor(cx: &mut Context) {
15221522
}
15231523

15241524
if let Some(doc) = editor.documents.get_mut(&doc_id) {
1525-
doc.set_code_lenses(lenses.clone());
1525+
doc.update_code_lenses(lenses.clone());
15261526
}
15271527

15281528
let mut picker = ui::Menu::new(lenses, (), move |editor, lens, event| {

helix-view/src/document.rs

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2244,29 +2244,40 @@ impl Document {
22442244
&self.code_lenses
22452245
}
22462246

2247-
pub fn set_code_lenses(&mut self, lenses: Vec<lsp::CodeLens>) {
2247+
fn map_code_lenses(&self, lenses: Vec<lsp::CodeLens>) -> Vec<CodeLens> {
22482248
let text = self.text().clone();
22492249
let Some(language_server) = self
22502250
.language_servers_with_feature(LanguageServerFeature::CodeLens)
22512251
.next()
22522252
else {
2253-
return;
2253+
return Vec::new();
22542254
};
22552255
let offset_encoding = language_server.offset_encoding();
2256-
self.code_lenses = lenses
2256+
lenses
22572257
.into_iter()
22582258
.filter_map(|l| {
2259-
if let Some(char_idx) = lsp_pos_to_pos(&text, l.range.start, offset_encoding) {
2260-
Some(CodeLens {
2261-
line: self.text.char_to_line(char_idx),
2262-
char_idx,
2263-
lens: l,
2264-
})
2265-
} else {
2266-
None
2267-
}
2259+
lsp_pos_to_pos(&text, l.range.start, offset_encoding).map(|char_idx| CodeLens {
2260+
line: self.text.char_to_line(char_idx),
2261+
char_idx,
2262+
lens: l,
2263+
})
22682264
})
2269-
.collect();
2265+
.collect()
2266+
}
2267+
2268+
pub fn set_code_lenses(&mut self, lenses: Vec<lsp::CodeLens>) {
2269+
self.code_lenses = self.map_code_lenses(lenses);
2270+
}
2271+
2272+
pub fn update_code_lenses(&mut self, lenses: Vec<lsp::CodeLens>) {
2273+
for updated_lens in lenses {
2274+
if let Some(existing_lens) = self.code_lenses.iter_mut().find(|existing_lens| {
2275+
existing_lens.lens.range == updated_lens.range
2276+
&& existing_lens.lens.data == updated_lens.data
2277+
}) {
2278+
existing_lens.lens = updated_lens;
2279+
}
2280+
}
22702281
}
22712282

22722283
/// Get the document's auto pairs. If the document has a recognized

0 commit comments

Comments
 (0)