Skip to content

Commit 097f7f5

Browse files
committed
fix: preserve code lenses on resolve
1 parent 3735434 commit 097f7f5

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
@@ -1512,7 +1512,7 @@ pub fn show_code_lenses_under_cursor(cx: &mut Context) {
15121512
}
15131513

15141514
if let Some(doc) = editor.documents.get_mut(&doc_id) {
1515-
doc.set_code_lenses(lenses.clone());
1515+
doc.update_code_lenses(lenses.clone());
15161516
}
15171517

15181518
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
@@ -2240,29 +2240,40 @@ impl Document {
22402240
&self.code_lenses
22412241
}
22422242

2243-
pub fn set_code_lenses(&mut self, lenses: Vec<lsp::CodeLens>) {
2243+
fn map_code_lenses(&self, lenses: Vec<lsp::CodeLens>) -> Vec<CodeLens> {
22442244
let text = self.text().clone();
22452245
let Some(language_server) = self
22462246
.language_servers_with_feature(LanguageServerFeature::CodeLens)
22472247
.next()
22482248
else {
2249-
return;
2249+
return Vec::new();
22502250
};
22512251
let offset_encoding = language_server.offset_encoding();
2252-
self.code_lenses = lenses
2252+
lenses
22532253
.into_iter()
22542254
.filter_map(|l| {
2255-
if let Some(char_idx) = lsp_pos_to_pos(&text, l.range.start, offset_encoding) {
2256-
Some(CodeLens {
2257-
line: self.text.char_to_line(char_idx),
2258-
char_idx,
2259-
lens: l,
2260-
})
2261-
} else {
2262-
None
2263-
}
2255+
lsp_pos_to_pos(&text, l.range.start, offset_encoding).map(|char_idx| CodeLens {
2256+
line: self.text.char_to_line(char_idx),
2257+
char_idx,
2258+
lens: l,
2259+
})
22642260
})
2265-
.collect();
2261+
.collect()
2262+
}
2263+
2264+
pub fn set_code_lenses(&mut self, lenses: Vec<lsp::CodeLens>) {
2265+
self.code_lenses = self.map_code_lenses(lenses);
2266+
}
2267+
2268+
pub fn update_code_lenses(&mut self, lenses: Vec<lsp::CodeLens>) {
2269+
for updated_lens in lenses {
2270+
if let Some(existing_lens) = self.code_lenses.iter_mut().find(|existing_lens| {
2271+
existing_lens.lens.range == updated_lens.range
2272+
&& existing_lens.lens.data == updated_lens.data
2273+
}) {
2274+
existing_lens.lens = updated_lens;
2275+
}
2276+
}
22662277
}
22672278

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

0 commit comments

Comments
 (0)