mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
add show_subtree command for viewing tree-sitter subtree in Popup (#1453)
* add show_subtree command for viewing tree-sitter subtree in Popup * remove '.slice(..)' from show_subtree command * name docs and subtree Popups 'hover'
This commit is contained in:
parent
dd1f64d4dc
commit
64d3e7b705
@ -400,6 +400,7 @@ pub fn doc(&self) -> &str {
|
||||
decrement, "Decrement",
|
||||
record_macro, "Record macro",
|
||||
replay_macro, "Replay macro",
|
||||
show_subtree, "Show tree-sitter subtree under primary selection",
|
||||
);
|
||||
}
|
||||
|
||||
@ -5388,8 +5389,8 @@ fn marked_string_to_markdown(contents: lsp::MarkedString) -> String {
|
||||
// skip if contents empty
|
||||
|
||||
let contents = ui::Markdown::new(contents, editor.syn_loader.clone());
|
||||
let popup = Popup::new("documentation", contents);
|
||||
if let Some(doc_popup) = compositor.find_id("documentation") {
|
||||
let popup = Popup::new("hover", contents);
|
||||
if let Some(doc_popup) = compositor.find_id("hover") {
|
||||
*doc_popup = popup;
|
||||
} else {
|
||||
compositor.push(Box::new(popup));
|
||||
@ -6210,3 +6211,33 @@ fn replay_macro(cx: &mut Context) {
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
fn show_subtree(cx: &mut Context) {
|
||||
let (view, doc) = current!(cx.editor);
|
||||
|
||||
if let Some(syntax) = doc.syntax() {
|
||||
let primary_selection = doc.selection(view.id).primary();
|
||||
let text = doc.text();
|
||||
let from = text.char_to_byte(primary_selection.from());
|
||||
let to = text.char_to_byte(primary_selection.to());
|
||||
if let Some(selected_node) = syntax
|
||||
.tree()
|
||||
.root_node()
|
||||
.descendant_for_byte_range(from, to)
|
||||
{
|
||||
let contents = format!("```tsq\n{}\n```", selected_node.to_sexp());
|
||||
|
||||
cx.callback = Some(Box::new(
|
||||
move |compositor: &mut Compositor, cx: &mut compositor::Context| {
|
||||
let contents = ui::Markdown::new(contents, cx.editor.syn_loader.clone());
|
||||
let popup = Popup::new("hover", contents);
|
||||
if let Some(doc_popup) = compositor.find_id("hover") {
|
||||
*doc_popup = popup;
|
||||
} else {
|
||||
compositor.push(Box::new(popup));
|
||||
}
|
||||
},
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -378,6 +378,7 @@ scope = "source.tsq"
|
||||
file-types = ["scm"]
|
||||
roots = []
|
||||
comment-token = ";"
|
||||
injection-regex = "tsq"
|
||||
indent = { tab-width = 2, unit = " " }
|
||||
|
||||
[[language]]
|
||||
|
Loading…
Reference in New Issue
Block a user