cmd/eg: don't do rewrites within the template file itself

Change-Id: I5b408ce894553ea2ffb099f459797edae617ac8a
Reviewed-on: https://go-review.googlesource.com/c/tools/+/258305
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
diff --git a/cmd/eg/eg.go b/cmd/eg/eg.go
index c178a48..6463ac4 100644
--- a/cmd/eg/eg.go
+++ b/cmd/eg/eg.go
@@ -17,6 +17,7 @@
 	"go/types"
 	"io/ioutil"
 	"os"
+	"path/filepath"
 	"strings"
 
 	exec "golang.org/x/sys/execabs"
@@ -71,7 +72,11 @@
 		return fmt.Errorf("no -t template.go file specified")
 	}
 
-	template, err := ioutil.ReadFile(*templateFlag)
+	tAbs, err := filepath.Abs(*templateFlag)
+	if err != nil {
+		return err
+	}
+	template, err := ioutil.ReadFile(tAbs)
 	if err != nil {
 		return err
 	}
@@ -87,7 +92,7 @@
 		return err
 	}
 
-	tFile, err := parser.ParseFile(cfg.Fset, *templateFlag, template, parser.ParseComments)
+	tFile, err := parser.ParseFile(cfg.Fset, tAbs, template, parser.ParseComments)
 	if err != nil {
 		return err
 	}
@@ -125,6 +130,10 @@
 	var hadErrors bool
 	for _, pkg := range pkgs {
 		for i, filename := range pkg.CompiledGoFiles {
+			if filename == tAbs {
+				// Don't rewrite the template file.
+				continue
+			}
 			file := pkg.Syntax[i]
 			n := xform.Transform(pkg.TypesInfo, pkg.Types, file)
 			if n == 0 {