Skip to content

Commit f4560cb

Browse files
committed
Better fix for w/e that also covers ia<esc>we/ia<esc>wb
1 parent cbb3eba commit f4560cb

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

helix-core/src/movement.rs

+12-8
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub fn move_next_word_start(slice: RopeSlice, mut begin: usize, count: usize) ->
6464
let mut end = begin;
6565

6666
for _ in 0..count {
67-
if begin + 2 > slice.len_chars() {
67+
if begin + 1 == slice.len_chars() {
6868
return None;
6969
}
7070

@@ -76,8 +76,9 @@ pub fn move_next_word_start(slice: RopeSlice, mut begin: usize, count: usize) ->
7676
begin += 1;
7777
}
7878

79-
// return if not skip while?
80-
skip_over_next(slice, &mut begin, |ch| ch == '\n');
79+
if !skip_over_next(slice, &mut begin, |ch| ch == '\n') {
80+
return None;
81+
};
8182
ch = slice.char(begin);
8283

8384
end = begin + 1;
@@ -134,7 +135,7 @@ pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> O
134135
let mut end = begin;
135136

136137
for _ in 0..count {
137-
if begin + 2 > slice.len_chars() {
138+
if begin + 2 >= slice.len_chars() {
138139
return None;
139140
}
140141

@@ -145,8 +146,9 @@ pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> O
145146
begin += 1;
146147
}
147148

148-
// return if not skip while?
149-
skip_over_next(slice, &mut begin, |ch| ch == '\n');
149+
if !skip_over_next(slice, &mut begin, |ch| ch == '\n') {
150+
return None;
151+
};
150152

151153
end = begin;
152154

@@ -199,18 +201,20 @@ fn categorize(ch: char) -> Category {
199201
}
200202

201203
#[inline]
202-
pub fn skip_over_next<F>(slice: RopeSlice, pos: &mut usize, fun: F)
204+
/// Returns true if there are more characters left after the new position.
205+
pub fn skip_over_next<F>(slice: RopeSlice, pos: &mut usize, fun: F) -> bool
203206
where
204207
F: Fn(char) -> bool,
205208
{
206209
let mut chars = slice.chars_at(*pos);
207210

208-
for ch in chars {
211+
while let Some(ch) = chars.next() {
209212
if !fun(ch) {
210213
break;
211214
}
212215
*pos += 1;
213216
}
217+
chars.next().is_some()
214218
}
215219

216220
#[inline]

0 commit comments

Comments
 (0)