diff --git a/internal/internal.go b/internal/internal.go index 9344593b2..aa50ddaad 100644 --- a/internal/internal.go +++ b/internal/internal.go @@ -112,8 +112,15 @@ func SnakeCase(in string) string { var out []rune for i := 0; i < length; i++ { - if i > 0 && unicode.IsUpper(runes[i]) && ((i+1 < length && unicode.IsLower(runes[i+1])) || unicode.IsLower(runes[i-1])) { - out = append(out, '_') + if i > 0 && unicode.IsUpper(runes[i]) { + prevLower := unicode.IsLower(runes[i-1]) + nextLower := i+1 < length && unicode.IsLower(runes[i+1]) + // Special case for plural acronyms + nextPlural := i+1 < length && runes[i+1] == 's' + + if prevLower || (nextLower && !nextPlural) { + out = append(out, '_') + } } out = append(out, unicode.ToLower(runes[i])) } diff --git a/internal/internal_test.go b/internal/internal_test.go index f75f9b010..9834f66ea 100644 --- a/internal/internal_test.go +++ b/internal/internal_test.go @@ -34,6 +34,7 @@ var tests = []SnakeTest{ {"LinuxMOTD", "linux_motd"}, {"OMGWTFBBQ", "omgwtfbbq"}, {"omg_wtf_bbq", "omg_wtf_bbq"}, + {"ConsumedLCUs", "consumed_lcus"}, } func TestSnakeCase(t *testing.T) {