Skip to content

Commit

Permalink
feat: re-use logic for sub word movement in subword text object
Browse files Browse the repository at this point in the history
  • Loading branch information
nikitarevenco committed Nov 7, 2024
1 parent c71be9f commit 0166c59
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
2 changes: 1 addition & 1 deletion helix-core/src/movement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,7 @@ fn is_long_word_boundary(a: char, b: char) -> bool {
}
}

fn is_sub_word_boundary(a: char, b: char, dir: Direction) -> bool {
pub fn is_sub_word_boundary(a: char, b: char, dir: Direction) -> bool {
match (categorize_char(a), categorize_char(b)) {
(CharCategory::Word, CharCategory::Word) => {
if (a == '_') != (b == '_') {
Expand Down
13 changes: 7 additions & 6 deletions helix-core/src/textobject.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use tree_sitter::{Node, QueryCursor};
use crate::chars::{categorize_char, char_is_subword_delimiter, char_is_whitespace, CharCategory};
use crate::graphemes::{next_grapheme_boundary, prev_grapheme_boundary};
use crate::line_ending::rope_is_line_ending;
use crate::movement::Direction;
use crate::movement::{is_sub_word_boundary, Direction};
use crate::syntax::LanguageConfiguration;
use crate::Range;
use crate::{surround, Syntax};
Expand Down Expand Up @@ -64,11 +64,12 @@ fn find_word_boundary(
&& pos != slice.len_chars();

let matches_subword = is_subword
&& ((char_is_subword_delimiter(prev_ch) || char_is_subword_delimiter(ch))
|| match direction {
Direction::Forward => prev_ch.is_lowercase() && ch.is_uppercase(),
Direction::Backward => prev_ch.is_uppercase() && ch.is_lowercase(),
});
&& match direction {
Direction::Forward => is_sub_word_boundary(prev_ch, ch, Direction::Forward),
Direction::Backward => {
is_sub_word_boundary(prev_ch, ch, Direction::Backward)
}
};

if matches_subword {
return pos;
Expand Down

0 comments on commit 0166c59

Please sign in to comment.