Compare commits

...

2 Commits

Author SHA1 Message Date
7a4fda31a5 update python config 2023-11-14 12:58:45 +01:00
ed79dfccfb Rewire SelectNextNode / SelectPreviousNode 2023-11-13 19:10:22 +01:00
2 changed files with 29 additions and 40 deletions

View File

@ -10,11 +10,11 @@ group.type = ["abstract_type", "reference_type", "metavariable", "pointer_type",
[filetype.python] [filetype.python]
group.identifier = ["identifier"] group.identifier = ["identifier"]
group.declaration = ["function_definition", "class_definition"] group.declaration = ["function_definition", "class_definition", "decorated_definition"]
group.statement = ["expression_statement", "for_statement", "if_statement", "return_statement", "while_statement", "raise_statement", "try_statement", "assert_statement", "import_statement"] group.statement = ["expression_statement", "for_statement", "if_statement", "return_statement", "while_statement", "raise_statement", "try_statement", "assert_statement", "import_statement", "with_statement"]
group.call = ["call"] group.call = ["call"]
group.arguments = ["arguments", "parameters"] group.arguments = ["argument_list", "generator_expression"]
group.string = ["string"] group.string = ["string", "concatenated_string"]
group.number = ["integer", "float"] group.number = ["integer", "float"]
group.type = ["type", "generic_type"] group.type = ["type", "generic_type"]

View File

@ -125,56 +125,45 @@ fn handle_request(config: &Config, request: &Request) -> String {
} }
kakoune::select_ranges(&buffer, &new_ranges) kakoune::select_ranges(&buffer, &new_ranges)
} }
Op::SelectNextNode { kind } => { Op::SelectNextNode { kind } | Op::SelectPreviousNode { kind } => {
let kinds = kind let kinds = kind
.as_ref() .as_ref()
.and_then(|kind| Some(filetype_config.resolve_alias(kind))); .and_then(|kind| Some(filetype_config.resolve_alias(kind)));
'outer_next: for range in &ranges { 'outer_next: for range in &ranges {
let node = tree::shrink_to_range(tree.root_node(), range); 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 { loop {
while let Some(node) = cursor.next_named_sibling() { let parent = cursor.parent();
if filetype_config.is_node_visible(node) && node_of_kinds(node, &kinds) { loop {
new_ranges.push(node.range()); if filetype_config.is_node_visible(cursor) && node_of_kinds(cursor, &kinds) {
continue 'outer_next; if cursor != node {
new_ranges.push(cursor.range());
continue 'outer_next;
}
}
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;
}
} }
cursor = node;
} }
if let Some(parent) = cursor.parent() { if let Some(parent) = parent {
cursor = parent; cursor = parent;
} else { } else {
break; break;
} }
} }
// TODO: Do we want this behaviour? // TODO: Do we want this behaviour?
let node = find_parent_of_interest(filetype_config, node, &kinds); // let node = find_parent_of_interest(filetype_config, node, &kinds);
new_ranges.push(node.range()); // 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());
} }
kakoune::select_ranges(&buffer, &new_ranges) kakoune::select_ranges(&buffer, &new_ranges)
} }