Skip to content

Commit a95194e

Browse files
committed
support variadic types
1 parent 9e68769 commit a95194e

File tree

2 files changed

+23
-21
lines changed

2 files changed

+23
-21
lines changed

coderd/audit/audit_gen.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
set -euo pipefail
44

55
cd "$(git rev-parse --show-toplevel)"
6-
go run ./scripts/auditgen ./coderd/database "$1"
6+
go run ./scripts/auditgen ./coderd/database "$@"

scripts/auditgen/main.go

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
func main() {
2020
ctx := context.Background()
2121
log := slog.Make(sloghuman.Sink(os.Stderr))
22-
code, err := GenerateFromDirectory(ctx, os.Args[1], os.Args[2])
22+
code, err := GenerateFromDirectory(ctx, os.Args[1], os.Args[2:]...)
2323
if err != nil {
2424
log.Fatal(ctx, "generate", slog.Error(err))
2525
}
@@ -28,14 +28,14 @@ func main() {
2828
}
2929

3030
// GenerateFromDirectory will return all the typescript code blocks for a directory
31-
func GenerateFromDirectory(ctx context.Context, directory, typName string) (string, error) {
31+
func GenerateFromDirectory(ctx context.Context, directory string, typeNames ...string) (string, error) {
3232
g := Generator{}
3333
err := g.parsePackage(ctx, directory)
3434
if err != nil {
3535
return "", xerrors.Errorf("parse package %q: %w", directory, err)
3636
}
3737

38-
str, err := g.generate(typName)
38+
str, err := g.generate(typeNames...)
3939
if err != nil {
4040
return "", xerrors.Errorf("parse package %q: %w", directory, err)
4141
}
@@ -74,38 +74,40 @@ func (g *Generator) parsePackage(ctx context.Context, patterns ...string) error
7474
return nil
7575
}
7676

77-
func (g *Generator) generate(typName string) (string, error) {
77+
func (g *Generator) generate(typeNames ...string) (string, error) {
7878
sb := strings.Builder{}
7979

8080
_, _ = fmt.Fprint(&sb, "Copy the following code into the audit.AuditableResources table\n\n")
8181

82-
obj := g.pkg.Types.Scope().Lookup(typName)
83-
if obj == nil || obj.Type() == nil {
84-
return "", xerrors.Errorf("type doesn't exist %q", typName)
85-
}
86-
87-
switch obj := obj.(type) {
88-
case *types.TypeName:
89-
named, ok := obj.Type().(*types.Named)
90-
if !ok {
91-
panic("all typenames should be named types")
82+
for _, typName := range typeNames {
83+
obj := g.pkg.Types.Scope().Lookup(typName)
84+
if obj == nil || obj.Type() == nil {
85+
return "", xerrors.Errorf("type doesn't exist %q", typName)
9286
}
9387

94-
switch typ := named.Underlying().(type) {
95-
case *types.Struct:
96-
g.writeStruct(&sb, typ, typName)
88+
switch obj := obj.(type) {
89+
case *types.TypeName:
90+
named, ok := obj.Type().(*types.Named)
91+
if !ok {
92+
panic("all typenames should be named types")
93+
}
94+
95+
switch typ := named.Underlying().(type) {
96+
case *types.Struct:
97+
g.writeStruct(&sb, typ, typName)
9798

99+
default:
100+
return "", xerrors.Errorf("invalid type %T", obj)
101+
}
98102
default:
99103
return "", xerrors.Errorf("invalid type %T", obj)
100104
}
101-
default:
102-
return "", xerrors.Errorf("invalid type %T", obj)
103105
}
104106

105107
return sb.String(), nil
106108
}
107109

108-
func (g *Generator) writeStruct(w io.Writer, st *types.Struct, name string) {
110+
func (*Generator) writeStruct(w io.Writer, st *types.Struct, name string) {
109111
_, _ = fmt.Fprintf(w, "\t&database.%s{}: {\n", name)
110112

111113
for i := 0; i < st.NumFields(); i++ {

0 commit comments

Comments
 (0)