@@ -408,7 +408,7 @@ pub fn previous_subword_start(map: &DisplaySnapshot, point: DisplayPoint) -> Dis
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
find_preceding_boundary_display_point(map, point, FindRange::MultiLine, &mut |left, right| {
- is_subword_start(left, right, &classifier) || left == '\n'
+ is_subword_start(left, right, &classifier) || left == '\n' || right == '\n'
})
}
@@ -431,6 +431,7 @@ pub fn is_subword_start(left: char, right: char, classifier: &CharClassifier) ->
let is_word_start = classifier.kind(left) != classifier.kind(right) && !right.is_whitespace();
let is_subword_start = classifier.is_word('-') && left == '-' && right != '-'
|| left == '_' && right != '_'
+ || left != '_' && right == '_'
|| left.is_lowercase() && right.is_uppercase();
is_word_start || is_subword_start
}
@@ -484,7 +485,7 @@ pub fn next_subword_end(map: &DisplaySnapshot, point: DisplayPoint) -> DisplayPo
let classifier = map.buffer_snapshot().char_classifier_at(raw_point);
find_boundary(map, point, FindRange::MultiLine, &mut |left, right| {
- is_subword_end(left, right, &classifier) || right == '\n'
+ is_subword_end(left, right, &classifier) || left == '\n' || right == '\n'
})
}
@@ -519,6 +520,7 @@ pub fn is_subword_end(left: char, right: char, classifier: &CharClassifier) -> b
fn is_subword_boundary_end(left: char, right: char, classifier: &CharClassifier) -> bool {
classifier.is_word('-') && left != '-' && right == '-'
|| left != '_' && right == '_'
+ || left == '_' && right != '_'
|| left.is_lowercase() && right.is_uppercase()
}
@@ -973,10 +975,10 @@ mod tests {
}
// Subword boundaries are respected
- assert("lorem_ĖipĖsum", cx);
+ assert("loremĖ_Ėipsum", cx);
assert("lorem_ĖipsumĖ", cx);
- assert("Ėlorem_Ėipsum", cx);
- assert("lorem_Ėipsum_Ėdolor", cx);
+ assert("ĖloremĖ_ipsum", cx);
+ assert("lorem_ĖipsumĖ_dolor", cx);
assert("loremĖIpĖsum", cx);
assert("loremĖIpsumĖ", cx);
@@ -1156,10 +1158,10 @@ mod tests {
}
// Subword boundaries are respected
- assert("loĖremĖ_ipsum", cx);
+ assert("loremĖ_Ėipsum", cx);
assert("ĖloremĖ_ipsum", cx);
- assert("loremĖ_ipsumĖ", cx);
- assert("loremĖ_ipsumĖ_dolor", cx);
+ assert("loremĖ_Ėipsum", cx);
+ assert("lorem_ĖipsumĖ_dolor", cx);
assert("loĖremĖIpsum", cx);
assert("loremĖIpsumĖDolor", cx);
@@ -1172,7 +1174,7 @@ mod tests {
assert("loremĖ ipsumĖ ", cx);
assert("loremĖ-Ėipsum", cx);
assert("loremĖ#$@-Ėipsum", cx);
- assert("loremĖ_ipsumĖ", cx);
+ assert("loremĖ_Ėipsum", cx);
assert(" ĖbcĖĪ", cx);
assert(" abĖāāĖcd", cx);
}