Extracted golang comment format function

This commit is contained in:
Volker Lieber 2024-09-26 14:17:21 +02:00
parent 30e02dc9c0
commit 64884e4969
7 changed files with 50 additions and 44 deletions

View file

@ -1,9 +1,5 @@
package metadata package metadata
import (
"regexp"
)
// Column struct // Column struct
type Column struct { type Column struct {
Name string `sql:"primary_key"` Name string `sql:"primary_key"`
@ -15,16 +11,6 @@ type Column struct {
Comment string 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) // DataTypeKind is database type kind(base, enum, user-defined, array)
type DataTypeKind string type DataTypeKind string

View file

@ -1,20 +1,8 @@
package metadata package metadata
import "regexp"
// Enum metadata struct // Enum metadata struct
type Enum struct { type Enum struct {
Name string `sql:"primary_key"` Name string `sql:"primary_key"`
Comment string Comment string
Values []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, "")
}

View file

@ -1,7 +1,5 @@
package metadata package metadata
import "regexp"
// Table metadata struct // Table metadata struct
type Table struct { type Table struct {
Name string `sql:"primary_key"` Name string `sql:"primary_key"`
@ -23,13 +21,3 @@ func (t Table) MutableColumns() []Column {
return ret 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, "")
}

View file

@ -26,14 +26,14 @@ import (
var {{tableTemplate.InstanceName}} = new{{tableTemplate.TypeName}}("{{schemaName}}", "{{.Name}}", "{{tableTemplate.DefaultAlias}}") var {{tableTemplate.InstanceName}} = new{{tableTemplate.TypeName}}("{{schemaName}}", "{{.Name}}", "{{tableTemplate.DefaultAlias}}")
{{if .Comment }} // {{.GoLangComment}} {{end}} {{golangComment .Comment}}
type {{structImplName}} struct { type {{structImplName}} struct {
{{dialect.PackageName}}.Table {{dialect.PackageName}}.Table
// Columns // Columns
{{- range $i, $c := .Columns}} {{- range $i, $c := .Columns}}
{{- $field := columnField $c}} {{- $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}} {{- end}}
AllColumns {{dialect.PackageName}}.ColumnList AllColumns {{dialect.PackageName}}.ColumnList
@ -120,11 +120,11 @@ import (
{{end}} {{end}}
{{$modelTableTemplate := tableTemplate}} {{$modelTableTemplate := tableTemplate}}
{{if .Comment }} // {{.GoLangComment}} {{end}} {{golangComment .Comment}}
type {{$modelTableTemplate.TypeName}} struct { type {{$modelTableTemplate.TypeName}} struct {
{{- range .Columns}} {{- range .Columns}}
{{- $field := structField .}} {{- $field := structField .}}
{{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{- if .Comment }} // {{.GoLangComment}} {{end}} {{$field.Name}} {{$field.Type.Name}} ` + "{{$field.TagsString}}" + ` {{golangComment .Comment}}
{{- end}} {{- end}}
} }
@ -134,7 +134,7 @@ var enumSQLBuilderTemplate = `package {{package}}
import "github.com/go-jet/jet/v2/{{dialect.PackageName}}" import "github.com/go-jet/jet/v2/{{dialect.PackageName}}"
{{if .Comment }} // {{.GoLangComment}} {{end}} {{golangComment .Comment}}
var {{enumTemplate.InstanceName}} = &struct { var {{enumTemplate.InstanceName}} = &struct {
{{- range $index, $value := .Values}} {{- range $index, $value := .Values}}
{{enumValueName $value}} {{dialect.PackageName}}.StringExpression {{enumValueName $value}} {{dialect.PackageName}}.StringExpression
@ -151,7 +151,7 @@ var enumModelTemplate = `package {{package}}
import "errors" import "errors"
{{if .Comment }} // {{.GoLangComment}} {{end}} {{golangComment .Comment}}
type {{$enumTemplate.TypeName}} string type {{$enumTemplate.TypeName}} string
const ( const (

View file

@ -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, "")
}

View file

@ -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)
}
})
}
}

View file

@ -140,6 +140,7 @@ func processEnumSQLBuilder(dirPath string, dialect jet.Dialect, enumsMetaData []
"enumValueName": func(enumValue string) string { "enumValueName": func(enumValue string) string {
return enumTemplate.ValueName(enumValue) return enumTemplate.ValueName(enumValue)
}, },
"golangComment": formatGolangComment,
}) })
if err != nil { if err != nil {
return fmt.Errorf("failed to generete enum type %s: %w", enumTemplate.FileName, err) 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 { "insertedRowAlias": func() string {
return insertedRowAlias(dialect) return insertedRowAlias(dialect)
}, },
"golangComment": formatGolangComment,
}) })
if err != nil { if err != nil {
return fmt.Errorf("failed to generate table sql builder type %s: %w", tableSQLBuilder.TypeName, err) 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 { "structField": func(columnMetaData metadata.Column) TableModelField {
return tableTemplate.Field(columnMetaData) return tableTemplate.Field(columnMetaData)
}, },
"golangComment": formatGolangComment,
}) })
if err != nil { if err != nil {
return fmt.Errorf("failed to generate model type '%s': %w", tableMetaData.Name, err) 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 { "valueName": func(value string) string {
return enumTemplate.ValueName(value) return enumTemplate.ValueName(value)
}, },
"golangComment": formatGolangComment,
}) })
if err != nil { if err != nil {