codegen template improvments

* Include the header so we generate code that passes the header-check
* Some tweaks to make golint happier
This commit is contained in:
Justin Santa Barbara 2016-12-11 10:36:24 -05:00
parent bda37d4921
commit cc80e75e90
3 changed files with 45 additions and 11 deletions

View File

@ -28,7 +28,25 @@ type FitaskGenerator struct {
var _ codegen.Generator = &FitaskGenerator{} var _ codegen.Generator = &FitaskGenerator{}
const headerDef = ` const fileHeaderDef = `/*
Copyright 2016 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
`
var preambleDef = `
package {{.Package}} package {{.Package}}
import ( import (
@ -44,6 +62,7 @@ const perTypeDef = `
// JSON marshalling boilerplate // JSON marshalling boilerplate
type real{{.Name}} {{.Name}} type real{{.Name}} {{.Name}}
// UnmarshalJSON implements conversion to JSON, supporitng an alternate specification of the object as a string
func (o *{{.Name}}) UnmarshalJSON(data []byte) error { func (o *{{.Name}}) UnmarshalJSON(data []byte) error {
var jsonName string var jsonName string
if err := json.Unmarshal(data, &jsonName); err == nil { if err := json.Unmarshal(data, &jsonName); err == nil {
@ -61,16 +80,19 @@ func (o *{{.Name}}) UnmarshalJSON(data []byte) error {
var _ fi.HasName = &{{.Name}}{} var _ fi.HasName = &{{.Name}}{}
func (e *{{.Name}}) GetName() *string { // GetName returns the Name of the object, implementing fi.HasName
return e.Name func (o *{{.Name}}) GetName() *string {
return o.Name
} }
func (e *{{.Name}}) SetName(name string) { // SetName sets the Name of the object, implementing fi.SetName
e.Name = &name func (o *{{.Name}}) SetName(name string) {
o.Name = &name
} }
func (e *{{.Name}}) String() string { // String is the stringer function for the task, producing readable output using fi.TaskAsString
return fi.TaskAsString(e) func (o *{{.Name}}) String() string {
return fi.TaskAsString(o)
} }
` `
@ -80,8 +102,14 @@ func (g *FitaskGenerator) Init(parser *codegen.GoParser) error {
return nil return nil
} }
func (g *FitaskGenerator) WriteHeader(w io.Writer) error { func (g *FitaskGenerator) WriteFileHeader(w io.Writer) error {
t := template.Must(template.New("Header").Parse(headerDef)) t := template.Must(template.New("FileHeader").Parse(fileHeaderDef))
return t.Execute(w, g)
}
func (g *FitaskGenerator) WritePreamble(w io.Writer) error {
t := template.Must(template.New("Preamble").Parse(preambleDef))
return t.Execute(w, g) return t.Execute(w, g)
} }

View File

@ -20,6 +20,7 @@ import "io"
type Generator interface { type Generator interface {
Init(parser *GoParser) error Init(parser *GoParser) error
WriteHeader(w io.Writer) error WriteFileHeader(w io.Writer) error
WritePreamble(w io.Writer) error
WriteType(w io.Writer, typeName string) error WriteType(w io.Writer, typeName string) error
} }

View File

@ -86,9 +86,14 @@ func RunGenerator(key string, generator Generator) {
var b bytes.Buffer var b bytes.Buffer
err = generator.WriteFileHeader(&b)
if err != nil {
log.Fatalf("error generating header: %v", err)
}
fmt.Fprintf(&b, "// Code generated by \"%q %s\"; DO NOT EDIT\n\n", key, strings.Join(os.Args[1:], " ")) fmt.Fprintf(&b, "// Code generated by \"%q %s\"; DO NOT EDIT\n\n", key, strings.Join(os.Args[1:], " "))
err = generator.WriteHeader(&b) err = generator.WritePreamble(&b)
if err != nil { if err != nil {
log.Fatalf("error generating header: %v", err) log.Fatalf("error generating header: %v", err)
} }