mirror of https://github.com/helix-editor/helix
add removing inlay hints by id to remove all invalidated inlay hints
parent
629bb38be6
commit
ec38807642
|
@ -3795,10 +3795,12 @@ Await the given value, and call the callback function on once the future is comp
|
||||||
r#"
|
r#"
|
||||||
Warning: this is experimental
|
Warning: this is experimental
|
||||||
|
|
||||||
Adds an inlay hint at the given character index.
|
Adds an inlay hint at the given character index. Returns the (first-line, last-line) list
|
||||||
|
associated with this snapshot of the inlay hints. Use this pair of line numbers to invalidate
|
||||||
|
the inlay hints.
|
||||||
|
|
||||||
```scheme
|
```scheme
|
||||||
(add-inlay-hint char-index completion)
|
(add-inlay-hint char-index completion) -> (list int? int?)
|
||||||
```
|
```
|
||||||
|
|
||||||
char-index : int?
|
char-index : int?
|
||||||
|
@ -3810,7 +3812,8 @@ completion : string?
|
||||||
"remove-inlay-hint",
|
"remove-inlay-hint",
|
||||||
remove_inlay_hint,
|
remove_inlay_hint,
|
||||||
r#"
|
r#"
|
||||||
Warning: this is experimental
|
Warning: this is experimental and should not be used.
|
||||||
|
This will most likely be removed soon.
|
||||||
|
|
||||||
Removes an inlay hint at the given character index. Note - to remove
|
Removes an inlay hint at the given character index. Note - to remove
|
||||||
properly, the completion must match what was already there.
|
properly, the completion must match what was already there.
|
||||||
|
@ -3822,6 +3825,24 @@ properly, the completion must match what was already there.
|
||||||
char-index : int?
|
char-index : int?
|
||||||
completion : string?
|
completion : string?
|
||||||
|
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
|
||||||
|
register_2!(
|
||||||
|
"remove-inlay-hint-by-id",
|
||||||
|
remove_inlay_hint_by_id,
|
||||||
|
r#"
|
||||||
|
Warning: this is experimental
|
||||||
|
|
||||||
|
Removes an inlay hint by the id that was associated with the added inlay hints.
|
||||||
|
|
||||||
|
```scheme
|
||||||
|
(remove-inlay-hint first-line last-line)
|
||||||
|
```
|
||||||
|
|
||||||
|
first-line : int?
|
||||||
|
last-line : int?
|
||||||
|
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -5061,17 +5082,18 @@ fn create_callback<T: TryInto<SteelVal, Error = SteelErr> + 'static>(
|
||||||
}
|
}
|
||||||
|
|
||||||
// "add-inlay-hint",
|
// "add-inlay-hint",
|
||||||
pub fn add_inlay_hint(cx: &mut Context, char_index: usize, completion: SteelString) -> bool {
|
pub fn add_inlay_hint(
|
||||||
|
cx: &mut Context,
|
||||||
|
char_index: usize,
|
||||||
|
completion: SteelString,
|
||||||
|
) -> Option<(usize, usize)> {
|
||||||
let view_id = cx.editor.tree.focus;
|
let view_id = cx.editor.tree.focus;
|
||||||
if !cx.editor.tree.contains(view_id) {
|
if !cx.editor.tree.contains(view_id) {
|
||||||
return false;
|
return None;
|
||||||
}
|
}
|
||||||
let view = cx.editor.tree.get(view_id);
|
let view = cx.editor.tree.get(view_id);
|
||||||
let doc_id = cx.editor.tree.get(view_id).doc;
|
let doc_id = cx.editor.tree.get(view_id).doc;
|
||||||
let doc = match cx.editor.documents.get_mut(&doc_id) {
|
let doc = cx.editor.documents.get_mut(&doc_id)?;
|
||||||
Some(x) => x,
|
|
||||||
None => return false,
|
|
||||||
};
|
|
||||||
let mut new_inlay_hints = doc
|
let mut new_inlay_hints = doc
|
||||||
.inlay_hints(view_id)
|
.inlay_hints(view_id)
|
||||||
.map(|x| x.clone())
|
.map(|x| x.clone())
|
||||||
|
@ -5094,12 +5116,63 @@ pub fn add_inlay_hint(cx: &mut Context, char_index: usize, completion: SteelStri
|
||||||
|
|
||||||
DocumentInlayHints::empty_with_id(new_doc_inlay_hints_id)
|
DocumentInlayHints::empty_with_id(new_doc_inlay_hints_id)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// TODO: The inlay hints should actually instead return the id?
|
||||||
new_inlay_hints
|
new_inlay_hints
|
||||||
.other_inlay_hints
|
.other_inlay_hints
|
||||||
.push(InlineAnnotation::new(char_index, completion.to_string()));
|
.push(InlineAnnotation::new(char_index, completion.to_string()));
|
||||||
|
|
||||||
|
let id = new_inlay_hints.id;
|
||||||
|
|
||||||
doc.set_inlay_hints(view_id, new_inlay_hints);
|
doc.set_inlay_hints(view_id, new_inlay_hints);
|
||||||
true
|
|
||||||
|
Some((id.first_line, id.last_line))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn remove_inlay_hint_by_id(
|
||||||
|
cx: &mut Context,
|
||||||
|
first_line: usize,
|
||||||
|
last_line: usize,
|
||||||
|
) -> Option<()> {
|
||||||
|
// let text = completion.to_string();
|
||||||
|
let view_id = cx.editor.tree.focus;
|
||||||
|
if !cx.editor.tree.contains(view_id) {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let view = cx.editor.tree.get(view_id);
|
||||||
|
let doc_id = cx.editor.tree.get(view_id).doc;
|
||||||
|
let doc = cx.editor.documents.get_mut(&doc_id)?;
|
||||||
|
|
||||||
|
let inlay_hints = doc.inlay_hints(view_id)?;
|
||||||
|
let id = DocumentInlayHintsId {
|
||||||
|
first_line,
|
||||||
|
last_line,
|
||||||
|
};
|
||||||
|
|
||||||
|
if inlay_hints.id == id {
|
||||||
|
let doc_text = doc.text();
|
||||||
|
let len_lines = doc_text.len_lines();
|
||||||
|
|
||||||
|
let view_height = view.inner_height();
|
||||||
|
let first_visible_line =
|
||||||
|
doc_text.char_to_line(doc.view_offset(view_id).anchor.min(doc_text.len_chars()));
|
||||||
|
let first_line = first_visible_line.saturating_sub(view_height);
|
||||||
|
let last_line = first_visible_line
|
||||||
|
.saturating_add(view_height.saturating_mul(2))
|
||||||
|
.min(len_lines);
|
||||||
|
|
||||||
|
let new_doc_inlay_hints_id = DocumentInlayHintsId {
|
||||||
|
first_line,
|
||||||
|
last_line,
|
||||||
|
};
|
||||||
|
|
||||||
|
doc.set_inlay_hints(
|
||||||
|
view_id,
|
||||||
|
DocumentInlayHints::empty_with_id(new_doc_inlay_hints_id),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
// "remove-inlay-hint",
|
// "remove-inlay-hint",
|
||||||
|
|
Loading…
Reference in New Issue