MCPcopy Create free account
hub / github.com/bracesdev/errtrace / rewriteFile

Method rewriteFile

cmd/errtrace/main.go:562–638  ·  view source on GitHub ↗
(f parsedFile, out *bytes.Buffer)

Source from the content-addressed store, hash-verified

560}
561
562func (cmd *mainCmd) rewriteFile(f parsedFile, out *bytes.Buffer) error {
563 var lastOffset int
564 filePos := f.fset.File(f.file.Pos()) // position information for this file
565 for _, it := range f.inserts {
566 offset := filePos.Offset(it.Pos())
567 _, _ = out.Write(f.src[lastOffset:offset])
568 lastOffset = offset
569
570 switch it := it.(type) {
571 case *insertImportErrtrace:
572 _, _ = io.WriteString(out, "; ")
573 if it.AddKeyword {
574 _, _ = io.WriteString(out, "import ")
575 }
576
577 if f.errtracePkg == "errtrace" {
578 // Don't use named imports if we're using the default name.
579 fmt.Fprintf(out, "%q", "braces.dev/errtrace")
580 } else {
581 fmt.Fprintf(out, "%s %q", f.errtracePkg, "braces.dev/errtrace")
582 }
583
584 case *insertWrapOpen:
585 fmt.Fprintf(out, "%s.Wrap", f.errtracePkg)
586 if it.N > 1 {
587 fmt.Fprintf(out, "%d", it.N)
588 }
589 _, _ = out.WriteString("(")
590
591 case *insertWrapClose:
592 _, _ = out.WriteString(")")
593
594 case *insertReturnNBlockStart:
595 vars := nVars("r", it.N)
596 fmt.Fprintf(out, "{ %s := ", strings.Join(vars, ", "))
597
598 // Update last offset, so we skip writing the "return", as it's
599 // followed by the expression we want to assign to.
600 // The "return" is added in insertReturnNBlockClose.
601 lastOffset = filePos.Offset(it.SkipReturn)
602
603 case *insertReturnNBlockClose:
604 vars := nVars("r", it.N) // must match insertReturnNBlockStart
605
606 // Last return is an error, wrap it.
607 last := &vars[len(vars)-1]
608 *last = fmt.Sprintf("%s.Wrap(%v)", f.errtracePkg, *last)
609
610 fmt.Fprintf(out, "; return %s }", strings.Join(vars, ", "))
611
612 case *insertWrapAssign:
613 // Turns this:
614 // return
615 // Into this:
616 // x, y = errtrace.Wrap(x), errtrace.Wrap(y); return
617 for i, name := range it.Names {
618 if i > 0 {
619 _, _ = out.WriteString(", ")

Callers 2

rewriteCompileMethod · 0.95
processFileMethod · 0.95

Calls 3

nVarsFunction · 0.85
WriteMethod · 0.80
PosMethod · 0.65

Tested by

no test coverage detected