Rewire SelectNextNode / SelectPreviousNode
This commit is contained in:
parent
0e27fd91a7
commit
ed79dfccfb
59
src/main.rs
59
src/main.rs
|
@ -125,56 +125,45 @@ fn handle_request(config: &Config, request: &Request) -> String {
|
|||
}
|
||||
kakoune::select_ranges(&buffer, &new_ranges)
|
||||
}
|
||||
Op::SelectNextNode { kind } => {
|
||||
Op::SelectNextNode { kind } | Op::SelectPreviousNode { kind } => {
|
||||
let kinds = kind
|
||||
.as_ref()
|
||||
.and_then(|kind| Some(filetype_config.resolve_alias(kind)));
|
||||
'outer_next: for range in &ranges {
|
||||
let node = tree::shrink_to_range(tree.root_node(), range);
|
||||
let mut cursor = traverse_up_to_node_which_matters(filetype_config, node);
|
||||
let mut cursor = node;
|
||||
loop {
|
||||
while let Some(node) = cursor.next_named_sibling() {
|
||||
if filetype_config.is_node_visible(node) && node_of_kinds(node, &kinds) {
|
||||
new_ranges.push(node.range());
|
||||
let parent = cursor.parent();
|
||||
loop {
|
||||
if filetype_config.is_node_visible(cursor) && node_of_kinds(cursor, &kinds) {
|
||||
if cursor != node {
|
||||
new_ranges.push(cursor.range());
|
||||
continue 'outer_next;
|
||||
}
|
||||
cursor = node;
|
||||
}
|
||||
if let Some(parent) = cursor.parent() {
|
||||
if let Op::SelectNextNode { .. } = request.op {
|
||||
if let Some(next) = cursor.next_named_sibling() {
|
||||
cursor = next;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if let Some(prev) = cursor.prev_named_sibling() {
|
||||
cursor = prev;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if let Some(parent) = parent {
|
||||
cursor = parent;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// TODO: Do we want this behaviour?
|
||||
let node = find_parent_of_interest(filetype_config, node, &kinds);
|
||||
new_ranges.push(node.range());
|
||||
}
|
||||
kakoune::select_ranges(&buffer, &new_ranges)
|
||||
}
|
||||
Op::SelectPreviousNode { kind } => {
|
||||
let kinds = kind
|
||||
.as_ref()
|
||||
.and_then(|kind| Some(filetype_config.resolve_alias(kind)));
|
||||
'outer_prev: for range in &ranges {
|
||||
let node = tree::shrink_to_range(tree.root_node(), range);
|
||||
let mut cursor = traverse_up_to_node_which_matters(filetype_config, node);
|
||||
loop {
|
||||
while let Some(node) = cursor.prev_named_sibling() {
|
||||
if filetype_config.is_node_visible(node) && node_of_kinds(node, &kinds) {
|
||||
new_ranges.push(node.range());
|
||||
continue 'outer_prev;
|
||||
}
|
||||
cursor = node;
|
||||
}
|
||||
if let Some(parent) = cursor.parent() {
|
||||
cursor = parent;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
let node = find_parent_of_interest(filetype_config, node, &kinds);
|
||||
new_ranges.push(node.range());
|
||||
// let node = find_parent_of_interest(filetype_config, node, &kinds);
|
||||
// new_ranges.push(node.range());
|
||||
}
|
||||
kakoune::select_ranges(&buffer, &new_ranges)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user