diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index 6cf1b50e1f9279..1ae24f61cf2a23 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -2662,9 +2662,13 @@ pub fn (s string) camel_to_snake() string { } lower_first_c, lower_second_c } else { - lower_first_c := s[0] - second_c := if s[1].is_capital() { u8(`_`) } else { s[1] } - lower_first_c, second_c + first_c := s[0] + second_c := if s[1].is_capital() { + if first_c == `_` { s[1] + 32 } else { u8(`_`) } + } else { + s[1] + } + first_c, second_c } unsafe { b[0] = first_char diff --git a/vlib/builtin/string_test.v b/vlib/builtin/string_test.v index 0ecb67c853bb0f..b9cf2dcf912c77 100644 --- a/vlib/builtin/string_test.v +++ b/vlib/builtin/string_test.v @@ -1529,6 +1529,7 @@ fn test_camel_to_snake() { assert 'BBaa'.camel_to_snake() == 'b_baa' assert 'aa_BB'.camel_to_snake() == 'aa_bb' assert 'JVM_PUBLIC_ACC'.camel_to_snake() == 'jvm_public_acc' + assert '_ISspace'.camel_to_snake() == '_i_sspace' } fn test_snake_to_camel() {