From d4dd3a953d9922fec32d7b9b66de63d13c634fd3 Mon Sep 17 00:00:00 2001 From: Christopher Utz Date: Fri, 8 Nov 2019 13:52:09 -0500 Subject: [PATCH 1/3] Add support for -transform=space --- stringer.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stringer.go b/stringer.go index 720233a..e433ea8 100644 --- a/stringer.go +++ b/stringer.go @@ -316,6 +316,8 @@ func (g *Generator) transformValueNames(values []Value, transformMethod string) sep = '_' case "kebab": sep = '-' + case "space": + sep = ' ' default: return } From 4e9d5a2de89fb4995e719d13342f7ea5efbc4bbe Mon Sep 17 00:00:00 2001 From: Christopher Utz Date: Fri, 8 Nov 2019 20:48:39 -0500 Subject: [PATCH 2/3] Document usage of -transform=space --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 50d149c..0551658 100644 --- a/README.md +++ b/README.md @@ -121,14 +121,14 @@ name := MyTypeValue.String() // name => "MyTypeValue" Sometimes you need to use some other string representation format than CamelCase (i.e. in JSON). -To transform it from CamelCase to snake_case or kebab-case, you can use the `transform` flag. +To transform it from CamelCase to snake_case, kebab-case, or space case you can use the `transform` flag. For example, the command `enumer -type=MyType -json -transform=snake` would generate the following string representation: ```go name := MyTypeValue.String() // name => "my_type_value" ``` -**Note**: The transformation only works form CamelCase to snake_case or kebab-case, not the other way around. +**Note**: The transformation only works form CamelCase to snake_case, kebab-case, or space case, not the other way around. ## How to use The usage of Enumer is the same as Stringer, so you can refer to the [Stringer docs](https://godoc.org/golang.org/x/tools/cmd/stringer) @@ -139,7 +139,7 @@ There are four boolean flags: `json`, `text`, `yaml` and `sql`. You can use any For enum string representation transformation the `transform` and `trimprefix` flags were added (i.e. `enumer -type=MyType -json -transform=snake`). -Possible transform values are `snake` and `kebab` for transformation to snake_case and kebab-case accordingly. +Possible transform values are `snake`, `kebab`, and `space` for transformation to snake_case, kebab-case, and space case accordingly. The default value for `transform` flag is `noop` which means no transformation will be performed. If a prefix is provided via the `trimprefix` flag, it will be trimmed from the start of each name (before From 6b8c08ee982e2d3874689aa6cc8f5108d0aecdf6 Mon Sep 17 00:00:00 2001 From: Christopher Utz Date: Fri, 8 Nov 2019 20:48:16 -0500 Subject: [PATCH 3/3] Add test case for -transform=space --- endtoend_test.go | 5 ++++- testdata/transformspace.go | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 testdata/transformspace.go diff --git a/endtoend_test.go b/endtoend_test.go index ff060d7..f6f6ae2 100644 --- a/endtoend_test.go +++ b/endtoend_test.go @@ -64,6 +64,9 @@ func TestEndToEnd(t *testing.T) { if name == "transform.go" { typeName = "CamelCaseValue" transformNameMethod = "snake" + } else if name == "transformspace.go" { + typeName = "CamelCaseValue" + transformNameMethod = "space" } stringerCompileAndRun(t, dir, stringer, typeName, name, transformNameMethod) @@ -122,4 +125,4 @@ func runInDir(dir, name string, arg ...string) error { cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() -} \ No newline at end of file +} diff --git a/testdata/transformspace.go b/testdata/transformspace.go new file mode 100644 index 0000000..e97b259 --- /dev/null +++ b/testdata/transformspace.go @@ -0,0 +1,25 @@ +package main + +import "fmt" + +type CamelCaseValue int + +const ( + CamelCaseValueOne CamelCaseValue = iota + CamelCaseValueTwo + CamelCaseValueThree +) + +func main() { + ck(CamelCaseValueOne, "camel case value one") + ck(CamelCaseValueTwo, "camel case value two") + ck(CamelCaseValueThree, "camel case value three") + ck(-127, "CamelCaseValue(-127)") + ck(127, "CamelCaseValue(127)") +} + +func ck(value CamelCaseValue, str string) { + if fmt.Sprint(value) != str { + panic("transformspace.go: " + str) + } +}