mirror of https://github.com/helix-editor/helix
[text-object/indent] fix: ensure zero-indent scope are skipped
parent
851f9c73dd
commit
c0062c9c37
|
@ -3891,6 +3891,11 @@ fn goto_indent_impl(cx: &mut Context, movement: Movement, direction: Direction)
|
||||||
current_line = text.line(line_idx);
|
current_line = text.line(line_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the first significant line is zeroth-indent, don't proceed
|
||||||
|
if current_line.chars().map_while(count_indent).sum::<u64>() == 0 {
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
|
||||||
let first_char_pos = current_line.first_non_whitespace_char();
|
let first_char_pos = current_line.first_non_whitespace_char();
|
||||||
let mut target_idx = line_idx;
|
let mut target_idx = line_idx;
|
||||||
loop {
|
loop {
|
||||||
|
@ -3923,6 +3928,15 @@ fn goto_indent_impl(cx: &mut Context, movement: Movement, direction: Direction)
|
||||||
Direction::Backward => target_idx.saturating_add(1),
|
Direction::Backward => target_idx.saturating_add(1),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let indents: Vec<u64> = (line_idx..target_idx)
|
||||||
|
.map(|i| text.line(i))
|
||||||
|
.map(|l| l.chars().map_while(count_indent).sum()).collect();
|
||||||
|
|
||||||
|
// If there are no indents, or all indents are 0, return the original range.
|
||||||
|
if indents.is_empty() || indents.into_iter().all(|n| n == 0) {
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
|
||||||
range.put_cursor(
|
range.put_cursor(
|
||||||
text,
|
text,
|
||||||
text.line_to_char(target_idx),
|
text.line_to_char(target_idx),
|
||||||
|
|
Loading…
Reference in New Issue