Skip to content

Commit 248ff11

Browse files
authored
Merge pull request #4749 from kersten/chore/improve-scaffolder-error-context
🌱 (chore): wrap plugin and util error returns for better context
2 parents ba9307d + fea45a4 commit 248ff11

File tree

1 file changed

+37
-20
lines changed

1 file changed

+37
-20
lines changed

pkg/machinery/scaffold.go

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -210,13 +210,13 @@ func doTemplate(t Template) ([]byte, error) {
210210

211211
// Set the template body
212212
if _, err := temp.Parse(t.GetBody()); err != nil {
213-
return nil, err
213+
return nil, fmt.Errorf("failed to parse template: %w", err)
214214
}
215215

216216
// Execute the template
217217
out := &bytes.Buffer{}
218218
if err := temp.Execute(out, t); err != nil {
219-
return nil, err
219+
return nil, fmt.Errorf("failed to execute template: %w", err)
220220
}
221221
b := out.Bytes()
222222

@@ -225,7 +225,7 @@ func doTemplate(t Template) ([]byte, error) {
225225
if filepath.Ext(t.GetPath()) == ".go" {
226226
var err error
227227
if b, err = imports.Process(t.GetPath(), b, &options); err != nil {
228-
return nil, err
228+
return nil, fmt.Errorf("failed to process template: %w", err)
229229
}
230230
}
231231

@@ -236,7 +236,7 @@ func doTemplate(t Template) ([]byte, error) {
236236
func (s Scaffold) updateFileModel(i Inserter, models map[string]*File) error {
237237
m, err := s.loadPreviousModel(i, models)
238238
if err != nil {
239-
return err
239+
return fmt.Errorf("failed to load previous model: %w", err)
240240
}
241241

242242
// Get valid code fragments
@@ -245,7 +245,7 @@ func (s Scaffold) updateFileModel(i Inserter, models map[string]*File) error {
245245
// Remove code fragments that already were applied
246246
err = filterExistingValues(m.Contents, codeFragments)
247247
if err != nil {
248-
return err
248+
return fmt.Errorf("failed to filter existing values: %w", err)
249249
}
250250

251251
// If no code fragment to insert, we are done
@@ -255,15 +255,15 @@ func (s Scaffold) updateFileModel(i Inserter, models map[string]*File) error {
255255

256256
content, err := insertStrings(m.Contents, codeFragments)
257257
if err != nil {
258-
return err
258+
return fmt.Errorf("failed to insert values: %w", err)
259259
}
260260

261261
// TODO(adirio): move go-formatting to write step
262262
formattedContent := content
263263
if ext := filepath.Ext(i.GetPath()); ext == ".go" {
264264
formattedContent, err = imports.Process(i.GetPath(), content, nil)
265265
if err != nil {
266-
return err
266+
return fmt.Errorf("failed to process formatted content: %w", err)
267267
}
268268
}
269269

@@ -277,9 +277,9 @@ func (s Scaffold) updateFileModel(i Inserter, models map[string]*File) error {
277277
func (s Scaffold) loadPreviousModel(i Inserter, models map[string]*File) (*File, error) {
278278
path := i.GetPath()
279279

280-
// Lets see if we already have a model for this file
280+
// Let's see if we already have a model for this file
281281
if m, found := models[path]; found {
282-
// Check if there is already an scaffolded file
282+
// Check if there is already a scaffolded file
283283
exists, err := afero.Exists(s.fs, path)
284284
if err != nil {
285285
return nil, ExistsFileError{err}
@@ -365,7 +365,7 @@ func filterExistingValues(content string, codeFragmentsMap CodeFragmentsMap) err
365365
for _, codeFragment := range codeFragments {
366366
exists, err := codeFragmentExists(content, codeFragment)
367367
if err != nil {
368-
return err
368+
return fmt.Errorf("failed to check if code fragment exists: %w", err)
369369
}
370370
if !exists {
371371
codeFragmentsOut = append(codeFragmentsOut, codeFragment)
@@ -401,8 +401,8 @@ func codeFragmentExists(content, codeFragment string) (exists bool, err error) {
401401
return true
402402
}
403403

404-
if err := scanMultiline(content, scanLines, scanFunc); err != nil {
405-
return false, err
404+
if scanMultilineErr := scanMultiline(content, scanLines, scanFunc); scanMultilineErr != nil {
405+
return false, scanMultilineErr
406406
}
407407

408408
return exists, nil
@@ -418,10 +418,19 @@ func scanMultiline(content string, scanLines int, scanFunc func(contentGroup str
418418
if scanLines == 1 {
419419
for scanner.Scan() {
420420
if !scanFunc(strings.TrimSpace(scanner.Text())) {
421-
return scanner.Err()
421+
if err := scanner.Err(); err != nil {
422+
return fmt.Errorf("failed to scan content: %w", err)
423+
}
424+
425+
return nil
422426
}
423427
}
424-
return scanner.Err()
428+
429+
if err := scanner.Err(); err != nil {
430+
return fmt.Errorf("failed to scan content: %w", err)
431+
}
432+
433+
return nil
425434
}
426435

427436
// Complex case.
@@ -441,11 +450,19 @@ func scanMultiline(content string, scanLines int, scanFunc func(contentGroup str
441450
}
442451

443452
if !scanFunc(strings.TrimSpace(sb.String())) {
444-
return scanner.Err()
453+
if err := scanner.Err(); err != nil {
454+
return fmt.Errorf("failed to scan content: %w", err)
455+
}
456+
457+
return nil
445458
}
446459
}
447460

448-
return scanner.Err()
461+
if err := scanner.Err(); err != nil {
462+
return fmt.Errorf("failed to scan content: %w", err)
463+
}
464+
465+
return nil
449466
}
450467

451468
func insertStrings(content string, codeFragmentsMap CodeFragmentsMap) ([]byte, error) {
@@ -466,13 +483,13 @@ func insertStrings(content string, codeFragmentsMap CodeFragmentsMap) ([]byte, e
466483
_, _ = out.WriteString(line + "\n") // bytes.Buffer.WriteString always returns nil errors
467484
}
468485
if err := scanner.Err(); err != nil {
469-
return nil, err
486+
return nil, fmt.Errorf("failed to scan content: %w", err)
470487
}
471488

472489
return out.Bytes(), nil
473490
}
474491

475-
func (s Scaffold) writeFile(f *File) (err error) {
492+
func (s Scaffold) writeFile(f *File) error {
476493
// Check if the file to write already exists
477494
exists, err := afero.Exists(s.fs, f.Path)
478495
if err != nil {
@@ -507,8 +524,8 @@ func (s Scaffold) writeFile(f *File) (err error) {
507524
}
508525
}()
509526

510-
if _, err := writer.Write([]byte(f.Contents)); err != nil {
511-
return WriteFileError{err}
527+
if _, writeErr := writer.Write([]byte(f.Contents)); writeErr != nil {
528+
return WriteFileError{writeErr}
512529
}
513530

514531
return nil

0 commit comments

Comments
 (0)