diff --git a/README.md b/README.md index 701205c..8c670e6 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,8 @@ Given a constant named `MyTypeValue`: | `snake-upper` | `MY_TYPE_VALUE` | | `kebab` | `my-type-value` | | `kebab-upper` | `MY-TYPE-VALUE` | +| `dot` | `my.type.value` | +| `dot-upper` | `MY.TYPE.VALUE` | | `whitespace` | `my type value` | | `lower` | `mytypevalue` | | `upper` | `MYTYPEVALUE` | @@ -145,8 +147,8 @@ Given a constant named `MyTypeValue`: | `first-upper` | `M` | | `first-lower` | `m` | -Word splitting only works from CamelCase. `snake_upper`, `kebab_upper`, `first_upper`, and -`first_lower` are accepted as aliases of the hyphenated names. +Word splitting only works from CamelCase. `snake_upper`, `kebab_upper`, `dot_upper`, `first_upper`, +and `first_lower` are accepted as aliases of the hyphenated names. ### Line comments diff --git a/endtoend_test.go b/endtoend_test.go index 1f1d230..d3609fb 100644 --- a/endtoend_test.go +++ b/endtoend_test.go @@ -91,6 +91,12 @@ func TestEndToEnd(t *testing.T) { case "transform_kebab_upper.go": typeName = "KebabUpperCaseValue" transformNameMethod = "kebab-upper" + case "transform_dot.go": + typeName = "DotCaseValue" + transformNameMethod = "dot" + case "transform_dot_upper.go": + typeName = "DotUpperCaseValue" + transformNameMethod = "dot-upper" case "transform_upper.go": typeName = "UpperCaseValue" transformNameMethod = "upper" diff --git a/stringer.go b/stringer.go index 7e12ff3..efbfce9 100644 --- a/stringer.go +++ b/stringer.go @@ -370,6 +370,14 @@ func (g *Generator) transformValueNames(values []Value, transformMethod string) fn = func(s string) string { return strings.ToUpper(name.Delimit(s, '-')) } + case "dot": + fn = func(s string) string { + return strings.ToLower(name.Delimit(s, '.')) + } + case "dot_upper", "dot-upper": + fn = func(s string) string { + return strings.ToUpper(name.Delimit(s, '.')) + } case "upper": fn = func(s string) string { return strings.ToUpper(s) diff --git a/testdata/transform_dot.go b/testdata/transform_dot.go new file mode 100644 index 0000000..2010842 --- /dev/null +++ b/testdata/transform_dot.go @@ -0,0 +1,25 @@ +package main + +import "fmt" + +type DotCaseValue int + +const ( + DotCaseValueOne DotCaseValue = iota + DotCaseValueTwo + DotCaseValueThree +) + +func main() { + ck(DotCaseValueOne, "dot.case.value.one") + ck(DotCaseValueTwo, "dot.case.value.two") + ck(DotCaseValueThree, "dot.case.value.three") + ck(-127, "DotCaseValue(-127)") + ck(127, "DotCaseValue(127)") +} + +func ck(value DotCaseValue, str string) { + if fmt.Sprint(value) != str { + panic("transform_dot.go: " + str) + } +} diff --git a/testdata/transform_dot_upper.go b/testdata/transform_dot_upper.go new file mode 100644 index 0000000..7850ed6 --- /dev/null +++ b/testdata/transform_dot_upper.go @@ -0,0 +1,25 @@ +package main + +import "fmt" + +type DotUpperCaseValue int + +const ( + DotUpperCaseValueOne DotUpperCaseValue = iota + DotUpperCaseValueTwo + DotUpperCaseValueThree +) + +func main() { + ck(DotUpperCaseValueOne, "DOT.UPPER.CASE.VALUE.ONE") + ck(DotUpperCaseValueTwo, "DOT.UPPER.CASE.VALUE.TWO") + ck(DotUpperCaseValueThree, "DOT.UPPER.CASE.VALUE.THREE") + ck(-127, "DotUpperCaseValue(-127)") + ck(127, "DotUpperCaseValue(127)") +} + +func ck(value DotUpperCaseValue, str string) { + if fmt.Sprint(value) != str { + panic("transform_dot_upper.go: " + str) + } +}