@@ -117,18 +117,12 @@ func (s *Scaffold) doFile(e input.File) error {
117
117
}
118
118
}
119
119
120
- return s .doTemplate (i , e , absFilePath )
120
+ return s .doRender (i , e , absFilePath )
121
121
}
122
122
123
123
const goFileExt = ".go"
124
124
125
- // doTemplate executes the template at absPath for a file using the input
126
- func (s * Scaffold ) doTemplate (i input.Input , e input.File , absPath string ) error {
127
- temp , err := newTemplate (e ).Parse (i .TemplateBody )
128
- if err != nil {
129
- return err
130
- }
131
-
125
+ func (s * Scaffold ) doRender (i input.Input , e input.File , absPath string ) error {
132
126
var mode os.FileMode = fileutil .DefaultFileMode
133
127
if i .IsExec {
134
128
mode = fileutil .DefaultExecFileMode
@@ -145,18 +139,30 @@ func (s *Scaffold) doTemplate(i input.Input, e input.File, absPath string) error
145
139
}()
146
140
}
147
141
148
- out := & bytes.Buffer {}
149
- err = temp .Execute (out , e )
150
- if err != nil {
151
- return err
142
+ var b []byte
143
+ if c , ok := e .(CustomRenderer ); ok {
144
+ // CustomRenderers have a non-template method of file rendering.
145
+ if b , err = c .CustomRender (); err != nil {
146
+ return err
147
+ }
148
+ } else {
149
+ // All other files are rendered via their templates.
150
+ temp , err := newTemplate (e ).Parse (i .TemplateBody )
151
+ if err != nil {
152
+ return err
153
+ }
154
+
155
+ out := & bytes.Buffer {}
156
+ if err = temp .Execute (out , e ); err != nil {
157
+ return err
158
+ }
159
+ b = out .Bytes ()
152
160
}
153
- b := out .Bytes ()
154
161
155
162
// gofmt the imports
156
163
if filepath .Ext (absPath ) == goFileExt {
157
164
b , err = imports .Process (absPath , b , nil )
158
165
if err != nil {
159
- fmt .Printf ("%s\n " , out .Bytes ())
160
166
return err
161
167
}
162
168
}
0 commit comments