@@ -389,6 +389,8 @@ fn reached_target(target: WordMotionTarget, prev_ch: char, next_ch: char) -> boo
389389 }
390390}
391391
392+/// Finds the range of the next or previous textobject in the syntax sub-tree of `node`.
393+/// Returns the range in the forwards direction.
392394pub fn goto_treesitter_object(
393395 slice: RopeSlice,
394396 range: Range,
@@ -419,8 +421,8 @@ pub fn goto_treesitter_object(
419421 .filter(|n| n.start_byte() > byte_pos)
420422 .min_by_key(|n| n.start_byte())?,
421423 Direction::Backward => nodes
422− .filter(|n| n.start_byte() < byte_pos)
423− .max_by_key(|n| n.start_byte())?,
424+ .filter(|n| n.end_byte() < byte_pos)
425+ .max_by_key(|n| n.end_byte())?,
424426 };
425427
426428 let len = slice.len_bytes();
@@ -434,7 +436,7 @@ pub fn goto_treesitter_object(
434436 let end_char = slice.byte_to_char(end_byte);
435437
436438 // head of range should be at beginning
437− Some(Range::new(end_char, start_char))
439+ Some(Range::new(start_char, end_char))
438440 };
439441 (0..count).fold(range, |range, _| get_range(range).unwrap_or(range))
440442}