diff options
Diffstat (limited to 'helpers/general.go')
-rw-r--r-- | helpers/general.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/helpers/general.go b/helpers/general.go index 76275a6b9..5c3af9712 100644 --- a/helpers/general.go +++ b/helpers/general.go @@ -255,6 +255,27 @@ func SliceToLower(s []string) []string { return l } +// StringSliceToList formats a string slice into a human-readable list. +// It joins the elements of the slice s with commas, using an Oxford comma, +// and precedes the final element with the conjunction c. +func StringSliceToList(s []string, c string) string { + const defaultConjunction = "and" + + if c == "" { + c = defaultConjunction + } + if len(s) == 0 { + return "" + } + if len(s) == 1 { + return s[0] + } + if len(s) == 2 { + return fmt.Sprintf("%s %s %s", s[0], c, s[1]) + } + return fmt.Sprintf("%s, %s %s", strings.Join(s[:len(s)-1], ", "), c, s[len(s)-1]) +} + // IsWhitespace determines if the given rune is whitespace. func IsWhitespace(r rune) bool { return r == ' ' || r == '\t' || r == '\n' || r == '\r' |