diff --git a/generator/metadata/column_meta_data.go b/generator/metadata/column_meta_data.go index 1502719..ecd61e2 100644 --- a/generator/metadata/column_meta_data.go +++ b/generator/metadata/column_meta_data.go @@ -1,9 +1,5 @@ package metadata -import ( - "regexp" -) - // Column struct type Column struct { Name string `sql:"primary_key"` @@ -15,16 +11,6 @@ type Column struct { Comment string } -// GoLangComment returns column comment without ascii control characters -func (c Column) GoLangComment() string { - if c.Comment == "" { - return "" - } - - // remove ascii control characters from string - return regexp.MustCompile(`[[:cntrl:]]+`).ReplaceAllString(c.Comment, "") -} - // DataTypeKind is database type kind(base, enum, user-defined, array) type DataTypeKind string diff --git a/generator/metadata/enum_meta_data.go b/generator/metadata/enum_meta_data.go index 733150b..8cce596 100644 --- a/generator/metadata/enum_meta_data.go +++ b/generator/metadata/enum_meta_data.go @@ -1,20 +1,8 @@ package metadata -import "regexp" - // Enum metadata struct type Enum struct { Name string `sql:"primary_key"` Comment string Values []string } - -// GoLangComment returns enum comment without ascii control characters -func (e Enum) GoLangComment() string { - if e.Comment == "" { - return "" - } - - // remove ascii control characters from string - return regexp.MustCompile(`[[:cntrl:]]+`).ReplaceAllString(e.Comment, "") -} diff --git a/generator/metadata/table_meta_data.go b/generator/metadata/table_meta_data.go index 95fd3c4..1d56bc0 100644 --- a/generator/metadata/table_meta_data.go +++ b/generator/metadata/table_meta_data.go @@ -1,7 +1,5 @@ package metadata -import "regexp" - // Table metadata struct type Table struct { Name string `sql:"primary_key"` @@ -23,13 +21,3 @@ func (t Table) MutableColumns() []Column { return ret } - -// GoLangComment returns table comment without ascii control characters -func (t Table) GoLangComment() string { - if t.Comment == "" { - return "" - } - - // remove ascii control characters from string - return regexp.MustCompile(`[[:cntrl:]]+`).ReplaceAllString(t.Comment, "") -} diff --git a/generator/template/file_templates.go b/generator/template/file_templates.go index 45104db..1538031 100644 --- a/generator/template/file_templates.go +++ b/generator/template/file_templates.go @@ -26,14 +26,14 @@ import ( var {{tableTemplate.InstanceName}} = new{{tableTemplate.TypeName}}("{{schemaName}}", "{{.Name}}", "{{tableTemplate.DefaultAlias}}") -{{if .Comment }} // {{.GoLangComment}} {{end}} +{{golangComment .Comment}} type {{structImplName}} struct { {{dialect.PackageName}}.Table // Columns {{- range $i, $c := .Columns}} {{- $field := columnField $c}} - {{$field.Name}} {{dialect.PackageName}}.Column{{$field.Type}} {{- if $c.Comment }} // {{$c.GoLangComment}} {{end}} + {{$field.Name}} {{dialect.PackageName}}.Column{{$field.Type}} {{golangComment .Comment}} {{- end}} AllColumns {{dialect.PackageName}}.ColumnList @@ -120,11 +120,11 @@ import ( {{end}} {{$modelTableTemplate := tableTemplate}} -{{if .Comment }} // {{.GoLangComment}} {{end}} +{{golangComment .Comment}} type {{$modelTableTemplate.TypeName}} struct { {{- range .Columns}} {{- $field := structField .}} - {{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{- if .Comment }} // {{.GoLangComment}} {{end}} + {{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{golangComment .Comment}} {{- end}} } @@ -134,7 +134,7 @@ var enumSQLBuilderTemplate = `package {{package}} import "github.com/go-jet/jet/v2/{{dialect.PackageName}}" -{{if .Comment }} // {{.GoLangComment}} {{end}} +{{golangComment .Comment}} var {{enumTemplate.InstanceName}} = &struct { {{- range $index, $value := .Values}} {{enumValueName $value}} {{dialect.PackageName}}.StringExpression @@ -151,7 +151,7 @@ var enumModelTemplate = `package {{package}} import "errors" -{{if .Comment }} // {{.GoLangComment}} {{end}} +{{golangComment .Comment}} type {{$enumTemplate.TypeName}} string const ( diff --git a/generator/template/format.go b/generator/template/format.go new file mode 100644 index 0000000..bd88fb1 --- /dev/null +++ b/generator/template/format.go @@ -0,0 +1,13 @@ +package template + +import "regexp" + +// Returns the provided string as golang comment without ascii control characters +func formatGolangComment(comment string) string { + if len(comment) == 0 { + return "" + } + + // Format as colang comment and remove ascii control characters from string + return "// " + regexp.MustCompile(`[[:cntrl:]]+`).ReplaceAllString(comment, "") +} diff --git a/generator/template/format_test.go b/generator/template/format_test.go new file mode 100644 index 0000000..b43b61d --- /dev/null +++ b/generator/template/format_test.go @@ -0,0 +1,27 @@ +package template + +import "testing" + +func Test_formatGolangComment(t *testing.T) { + type args struct { + comment string + } + tests := []struct { + name string + args args + want string + }{ + {name: "Empty string", args: args{comment: ""}, want: ""}, + {name: "Non-empty string", args: args{comment: "This is a comment"}, want: "// This is a comment"}, + {name: "String with control characters", args: args{comment: "This is a comment with control characters \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f and text after"}, want: "// This is a comment with control characters and text after"}, + {name: "String with escape characters", args: args{comment: "This is a comment with escape characters \n\r\t and text after"}, want: "// This is a comment with escape characters and text after"}, + {name: "String with unicode characters", args: args{comment: "This is a comment with unicode characters ₲鬼佬℧⇄↻ and text after"}, want: "// This is a comment with unicode characters ₲鬼佬℧⇄↻ and text after"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := formatGolangComment(tt.args.comment); got != tt.want { + t.Errorf("formatGoLangComment() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/generator/template/process.go b/generator/template/process.go index 3f3798a..5abef87 100644 --- a/generator/template/process.go +++ b/generator/template/process.go @@ -140,6 +140,7 @@ func processEnumSQLBuilder(dirPath string, dialect jet.Dialect, enumsMetaData [] "enumValueName": func(enumValue string) string { return enumTemplate.ValueName(enumValue) }, + "golangComment": formatGolangComment, }) if err != nil { return fmt.Errorf("failed to generete enum type %s: %w", enumTemplate.FileName, err) @@ -215,6 +216,7 @@ func processTableSQLBuilder(fileTypes, dirPath string, "insertedRowAlias": func() string { return insertedRowAlias(dialect) }, + "golangComment": formatGolangComment, }) if err != nil { return fmt.Errorf("failed to generate table sql builder type %s: %w", tableSQLBuilder.TypeName, err) @@ -307,6 +309,7 @@ func processTableModels(fileTypes, modelDirPath string, tablesMetaData []metadat "structField": func(columnMetaData metadata.Column) TableModelField { return tableTemplate.Field(columnMetaData) }, + "golangComment": formatGolangComment, }) if err != nil { return fmt.Errorf("failed to generate model type '%s': %w", tableMetaData.Name, err) @@ -347,6 +350,7 @@ func processEnumModels(modelDir string, enumsMetaData []metadata.Enum, modelTemp "valueName": func(value string) string { return enumTemplate.ValueName(value) }, + "golangComment": formatGolangComment, }) if err != nil {