mirror of https://github.com/golang/go.git
go/types: allow filename arguments to generator for easier manual use
Change-Id: I96b25fae1dcbfae55f57c07de9529c6663ad28d4 Reviewed-on: https://go-review.googlesource.com/c/go/+/461602 Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Run-TryBot: Robert Griesemer <gri@google.com>
This commit is contained in:
parent
5ce9d9fee8
commit
4cc8d0eea9
|
|
@ -11,6 +11,8 @@ package main
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"flag"
|
||||
"fmt"
|
||||
"go/ast"
|
||||
"go/format"
|
||||
"go/parser"
|
||||
|
|
@ -30,34 +32,50 @@ const (
|
|||
var fset = token.NewFileSet()
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
// process provided filenames, if any
|
||||
if flag.NArg() > 0 {
|
||||
for _, filename := range flag.Args() {
|
||||
fmt.Println("generating", filename)
|
||||
generate(filename, filemap[filename])
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// otherwise process per filemap below
|
||||
for filename, action := range filemap {
|
||||
// parse src
|
||||
srcFilename := filepath.FromSlash(runtime.GOROOT() + "/src/" + srcDir + "/" + filename)
|
||||
file, err := parser.ParseFile(fset, srcFilename, nil, parser.ParseComments)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
generate(filename, action)
|
||||
}
|
||||
}
|
||||
|
||||
// fix package name
|
||||
file.Name.Name = strings.ReplaceAll(file.Name.Name, "types2", "types")
|
||||
func generate(filename string, action action) {
|
||||
// parse src
|
||||
srcFilename := filepath.FromSlash(runtime.GOROOT() + "/src/" + srcDir + "/" + filename)
|
||||
file, err := parser.ParseFile(fset, srcFilename, nil, parser.ParseComments)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// rewrite AST as needed
|
||||
if action != nil {
|
||||
action(file)
|
||||
}
|
||||
// fix package name
|
||||
file.Name.Name = strings.ReplaceAll(file.Name.Name, "types2", "types")
|
||||
|
||||
// format AST
|
||||
var buf bytes.Buffer
|
||||
buf.WriteString("// Code generated by \"go run generator.go\"; DO NOT EDIT.\n\n")
|
||||
if err := format.Node(&buf, fset, file); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
// rewrite AST as needed
|
||||
if action != nil {
|
||||
action(file)
|
||||
}
|
||||
|
||||
// write dst
|
||||
dstFilename := filepath.FromSlash(runtime.GOROOT() + "/src/" + dstDir + "/" + filename)
|
||||
if err := os.WriteFile(dstFilename, buf.Bytes(), 0o644); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
// format AST
|
||||
var buf bytes.Buffer
|
||||
buf.WriteString("// Code generated by \"go run generator.go\"; DO NOT EDIT.\n\n")
|
||||
if err := format.Node(&buf, fset, file); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// write dst
|
||||
dstFilename := filepath.FromSlash(runtime.GOROOT() + "/src/" + dstDir + "/" + filename)
|
||||
if err := os.WriteFile(dstFilename, buf.Bytes(), 0o644); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue