util/codegen: add NamedTypes

And use it in cmd/cloner.

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
Josh Bleecher Snyder
2021-09-16 16:24:50 -07:00
committed by Josh Bleecher Snyder
parent 367a973dc2
commit d8a8f70000
2 changed files with 34 additions and 26 deletions

View File

@@ -17,8 +17,6 @@ import (
"bytes"
"flag"
"fmt"
"go/ast"
"go/token"
"go/types"
"log"
"os"
@@ -62,33 +60,13 @@ func main() {
pkg := pkgs[0]
buf := new(bytes.Buffer)
imports := make(map[string]struct{})
namedTypes := codegen.NamedTypes(pkg)
for _, typeName := range typeNames {
found := false
for _, file := range pkg.Syntax {
for _, d := range file.Decls {
decl, ok := d.(*ast.GenDecl)
if !ok || decl.Tok != token.TYPE {
continue
}
for _, s := range decl.Specs {
spec, ok := s.(*ast.TypeSpec)
if !ok || spec.Name.Name != typeName {
continue
}
typeNameObj := pkg.TypesInfo.Defs[spec.Name]
typ, ok := typeNameObj.Type().(*types.Named)
if !ok {
continue
}
pkg := typeNameObj.Pkg()
gen(buf, imports, typ, pkg)
found = true
}
}
}
if !found {
typ, ok := namedTypes[typeName]
if !ok {
log.Fatalf("could not find type %s", typeName)
}
gen(buf, imports, typ, pkg.Types)
}
w := func(format string, args ...interface{}) {