From ef2b035e015bd29a60ebe929a450221738fc800b Mon Sep 17 00:00:00 2001 From: Nikita Revenco <154856872+NikitaRevenco@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:23:53 +0000 Subject: [PATCH] refactor: increase readability split logic into variables and add comments --- helix-core/src/case_conversion.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/helix-core/src/case_conversion.rs b/helix-core/src/case_conversion.rs index 3a122ac4e..7b0426b55 100644 --- a/helix-core/src/case_conversion.rs +++ b/helix-core/src/case_conversion.rs @@ -63,15 +63,23 @@ pub fn separator_case_conversion( let mut prev: Option = None; for c in text.skip_while(|ch| ch.is_whitespace()) { - if c.is_alphanumeric() { - if prev.is_some_and(|p| p.is_lowercase()) && c.is_uppercase() - || !prev.is_some_and(|p| p.is_alphanumeric()) && !buf.is_empty() - { - buf.push(separator); - } - - buf.push(c.to_ascii_lowercase()); + if !c.is_alphanumeric() { + prev = Some(c); + continue; } + + // "camelCase" => transition at 'l' -> 'C' + let has_camel_transition = prev.is_some_and(|p| p.is_lowercase()) && c.is_uppercase(); + // "email@somewhere" => transition at 'l' -> '@' + // first character must not be separator, e.g. @emailSomewhere should not become -email-somewhere + let has_alphanum_transition = !prev.is_some_and(|p| p.is_alphanumeric()) && !buf.is_empty(); + + if has_camel_transition || has_alphanum_transition { + buf.push(separator); + } + + buf.push(c.to_ascii_lowercase()); + prev = Some(c); } }