Skip to content

Commit 1fc62ac

Browse files
authored
feat: refactor generator options -> config (#1688)
* feat: refactor generator options -> config * cleanups * address reviewer feedback
1 parent 592909b commit 1fc62ac

26 files changed

+419
-397
lines changed

internal/gengapic/auxiliary.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ func (g *generator) genAuxFile() error {
7676
return err
7777
}
7878

79-
g.commit(filepath.Join(g.opts.outDir, "auxiliary.go"), g.opts.pkgName)
79+
g.commit(filepath.Join(g.cfg.outDir, "auxiliary.go"), g.cfg.pkgName)
8080
g.reset()
8181

8282
g.genIteratorsGo123()
83-
g.commitWithBuildTag(filepath.Join(g.opts.outDir, "auxiliary_go123.go"), g.opts.pkgName, "go1.23")
83+
g.commitWithBuildTag(filepath.Join(g.cfg.outDir, "auxiliary_go123.go"), g.cfg.pkgName, "go1.23")
8484
g.reset()
8585

8686
return nil
@@ -251,7 +251,7 @@ func (g *generator) maybeAddOperationWrapper(m *descriptorpb.MethodDescriptorPro
251251
// this.
252252
func (g *generator) genOperationWrapperType(ow operationWrapper) error {
253253
p := g.pt.Printf
254-
hasREST := containsTransport(g.opts.transports, rest)
254+
hasREST := containsTransport(g.cfg.transports, rest)
255255
isEmpty := ow.responseName == emptyValue
256256

257257
// Response Go type resolution.

internal/gengapic/auxiliary_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ func TestGenOperations(t *testing.T) {
392392
ParentElement: make(map[pbinfo.ProtoType]pbinfo.ProtoType),
393393
},
394394
imports: make(map[pbinfo.ImportSpec]bool),
395-
opts: &options{transports: []transport{grpc, rest}},
395+
cfg: &generatorConfig{transports: []transport{grpc, rest}},
396396
}
397397

398398
wantImports := map[pbinfo.ImportSpec]bool{

internal/gengapic/client_init.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (g *generator) clientOptions(serv *descriptorpb.ServiceDescriptorProto, ser
5454
g.imports[pbinfo.ImportSpec{Name: "gax", Path: "github.com/googleapis/gax-go/v2"}] = true
5555
}
5656

57-
for _, v := range g.opts.transports {
57+
for _, v := range g.cfg.transports {
5858
switch v {
5959
case grpc:
6060
if err := g.grpcClientOptions(serv, servName); err != nil {
@@ -396,7 +396,7 @@ func (g *generator) makeClients(serv *descriptorpb.ServiceDescriptorProto, servN
396396
}
397397
g.clientInit(serv, servName, hasLRO)
398398

399-
for _, v := range g.opts.transports {
399+
for _, v := range g.cfg.transports {
400400
switch v {
401401
case grpc:
402402
g.grpcClientInit(serv, servName, imp, hasLRO)

internal/gengapic/client_init_test.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,19 @@ func TestClientOpt(t *testing.T) {
122122
"google.cloud.location.Locations": locationMethods(),
123123
"google.iam.v1.IAMPolicy": iamPolicyMethods(),
124124
},
125-
serviceConfig: &serviceconfig.Service{
126-
Name: "showcase.googleapis.com",
127-
Apis: []*apipb.Api{
128-
{Name: "foo.bar.Baz"},
129-
{Name: "google.iam.v1.IAMPolicy"},
130-
{Name: "google.cloud.location.Locations"},
131-
{Name: "google.longrunning.Operations"},
125+
126+
cfg: &generatorConfig{
127+
transports: []transport{grpc, rest},
128+
APIServiceConfig: &serviceconfig.Service{
129+
Name: "showcase.googleapis.com",
130+
Apis: []*apipb.Api{
131+
{Name: "foo.bar.Baz"},
132+
{Name: "google.iam.v1.IAMPolicy"},
133+
{Name: "google.cloud.location.Locations"},
134+
{Name: "google.longrunning.Operations"},
135+
},
132136
},
133-
},
134-
opts: &options{transports: []transport{grpc, rest}},
135-
grpcConf: grpcConf,
137+
gRPCServiceConfig: grpcConf},
136138
}
137139

138140
serv := &descriptorpb.ServiceDescriptorProto{
@@ -270,6 +272,7 @@ func TestServiceDoc(t *testing.T) {
270272

271273
var g generator
272274
g.comments = make(map[protoiface.MessageV1]string)
275+
g.cfg = &generatorConfig{}
273276

274277
for _, tst := range []struct {
275278
in, want string
@@ -573,14 +576,15 @@ func TestClientInit(t *testing.T) {
573576
tst.serv.GetMethod()[0]: "Does some stuff.",
574577
}
575578
g.mixins = tst.mixins
576-
g.serviceConfig = &serviceconfig.Service{
579+
g.cfg.APIServiceConfig = &serviceconfig.Service{
577580
Apis: []*apipb.Api{
578581
{Name: "foo.bar.Baz"},
579582
{Name: "google.iam.v1.IAMPolicy"},
580583
{Name: "google.cloud.location.Locations"},
581584
{Name: "google.longrunning.Operations"},
582585
},
583586
}
587+
584588
g.aux.customOp = &customOp{
585589
message: cop,
586590
}

internal/gengapic/custom_operation.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ type customOp struct {
3333

3434
// isCustomOp determines if the given method should return a custom operation wrapper.
3535
func (g *generator) isCustomOp(m *descriptorpb.MethodDescriptorProto, info *httpInfo) bool {
36-
return g.opts.generateAsDIREGAPIC && // Generator in DIREGAPIC mode.
36+
return g.cfg.generateAsDIREGAPIC && // Generator in DIREGAPIC mode.
3737
g.aux.customOp != nil && // API Defines a custom operation.
3838
m.GetOutputType() == g.customOpProtoName() && // Method returns the custom operation.
3939
m.GetName() != "Wait" && // Method is not a Wait (uses POST).
@@ -70,7 +70,7 @@ func (g *generator) customOpPointerType() (string, error) {
7070
// operation wrapper type with the Go identifier for a variable that is the
7171
// proto-defined operation type.
7272
func (g *generator) customOpInit(rspVar, reqVar, opVar string, req *descriptorpb.DescriptorProto, s *descriptorpb.ServiceDescriptorProto) {
73-
h := handleName(s.GetName(), g.opts.pkgName)
73+
h := handleName(s.GetName(), g.cfg.pkgName)
7474
opName := g.aux.customOp.message.GetName()
7575
pt := g.pt.Printf
7676

internal/gengapic/custom_operation_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func TestCustomOpInit(t *testing.T) {
114114
},
115115
},
116116
},
117-
opts: &options{pkgName: "bar"},
117+
cfg: &generatorConfig{pkgName: "bar"},
118118
}
119119
g.customOpInit("foo", "req", "op", req, opServ)
120120
txtdiff.Diff(t, g.pt.String(), filepath.Join("testdata", "custom_op_init_helper.want"))

internal/gengapic/doc_file.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ func (g *generator) genDocFile(year int, services []*descriptorpb.ServiceDescrip
4141
p("")
4242

4343
if g.apiName != "" {
44-
p("// Package %s is an auto-generated package for the ", g.opts.pkgName)
44+
p("// Package %s is an auto-generated package for the ", g.cfg.pkgName)
4545
p("// %s.", g.apiName)
4646
}
4747

48-
if g.serviceConfig != nil && g.serviceConfig.GetDocumentation() != nil {
49-
summary := g.serviceConfig.GetDocumentation().GetSummary()
48+
if g.cfg.APIServiceConfig != nil && g.cfg.APIServiceConfig.GetDocumentation() != nil {
49+
summary := g.cfg.APIServiceConfig.GetDocumentation().GetSummary()
5050
summary = mdPlain(summary)
5151
wrapped := wrapString(summary, 75)
5252

@@ -59,7 +59,7 @@ func (g *generator) genDocFile(year int, services []*descriptorpb.ServiceDescrip
5959
}
6060
}
6161

62-
switch g.opts.relLvl {
62+
switch g.cfg.relLvl {
6363
case alpha:
6464
p("//")
6565
p("// NOTE: This package is in alpha. It is not stable, and is likely to change.")
@@ -92,10 +92,10 @@ func (g *generator) genDocFile(year int, services []*descriptorpb.ServiceDescrip
9292
// Code block for client creation
9393
exampleService := services[0]
9494
override := g.getServiceNameOverride(exampleService)
95-
servName := pbinfo.ReduceServNameWithOverride(exampleService.GetName(), g.opts.pkgName, override)
95+
servName := pbinfo.ReduceServNameWithOverride(exampleService.GetName(), g.cfg.pkgName, override)
9696
tmpClient := g.pt
9797
g.pt = printer.P{}
98-
g.exampleInitClientWithOpts(g.opts.pkgName, servName, true)
98+
g.exampleInitClientWithOpts(g.cfg.pkgName, servName, true)
9999
snipClient := g.pt.String()
100100
g.pt = tmpClient
101101
g.codesnippet(snipClient)
@@ -112,7 +112,7 @@ func (g *generator) genDocFile(year int, services []*descriptorpb.ServiceDescrip
112112
// Code block for client using the first method of the service
113113
tmpMethod := g.pt
114114
g.pt = printer.P{}
115-
g.exampleMethodBodyWithOpts(g.opts.pkgName, servName, exampleService.GetMethod()[0], true)
115+
g.exampleMethodBodyWithOpts(g.cfg.pkgName, servName, exampleService.GetMethod()[0], true)
116116
snipMethod := g.pt.String()
117117
g.pt = tmpMethod
118118
g.codesnippet(snipMethod)
@@ -131,7 +131,7 @@ func (g *generator) genDocFile(year int, services []*descriptorpb.ServiceDescrip
131131
p("// [Testing against Client Libraries]: https://pkg.go.dev/cloud.google.com/go#hdr-Testing")
132132
p("// [Debugging Client Libraries]: https://pkg.go.dev/cloud.google.com/go#hdr-Debugging")
133133
p("// [Inspecting errors]: https://pkg.go.dev/cloud.google.com/go#hdr-Inspecting_errors")
134-
p("package %s // import %q", g.opts.pkgName, g.opts.pkgPath)
134+
p("package %s // import %q", g.cfg.pkgName, g.cfg.pkgPath)
135135
p("")
136136
}
137137

@@ -202,7 +202,7 @@ func (g *generator) apiVersionSection(services []*descriptorpb.ServiceDescriptor
202202
// Construct the reduced/overridden service name used for client
203203
// type name derivation.
204204
override := g.getServiceNameOverride(s)
205-
sn := pbinfo.ReduceServNameWithOverride(n, g.opts.pkgName, override)
205+
sn := pbinfo.ReduceServNameWithOverride(n, g.cfg.pkgName, override)
206206
ct := fmt.Sprintf("%sClient", sn)
207207

208208
// Use the raw proto service name in the tuple to associate it with

internal/gengapic/doc_file_test.go

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ import (
2727

2828
func TestDocFile(t *testing.T) {
2929
g := generator{
30-
apiName: sample.ServiceTitle,
31-
serviceConfig: sample.ServiceConfig(),
32-
imports: map[pbinfo.ImportSpec]bool{},
33-
opts: &options{
34-
pkgPath: sample.GoPackagePath,
35-
pkgName: sample.GoPackageName,
36-
transports: []transport{grpc, rest},
30+
apiName: sample.ServiceTitle,
31+
imports: map[pbinfo.ImportSpec]bool{},
32+
cfg: &generatorConfig{
33+
pkgPath: sample.GoPackagePath,
34+
pkgName: sample.GoPackageName,
35+
transports: []transport{grpc, rest},
36+
APIServiceConfig: sample.ServiceConfig(),
3737
},
3838
}
3939

@@ -67,7 +67,7 @@ func TestDocFile(t *testing.T) {
6767
},
6868
} {
6969
t.Run(tst.want, func(t *testing.T) {
70-
g.opts.relLvl = tst.relLvl
70+
g.cfg.relLvl = tst.relLvl
7171
g.genDocFile(sample.Year, []*descriptorpb.ServiceDescriptorProto{serv})
7272
txtdiff.Diff(t, g.pt.String(), tst.want)
7373
g.reset()
@@ -77,13 +77,13 @@ func TestDocFile(t *testing.T) {
7777

7878
func TestDocFile_APIVersionSection(t *testing.T) {
7979
g := generator{
80-
apiName: sample.ServiceTitle,
81-
serviceConfig: sample.ServiceConfig(),
82-
imports: map[pbinfo.ImportSpec]bool{},
83-
opts: &options{
84-
pkgPath: sample.GoPackagePath,
85-
pkgName: sample.GoPackageName,
86-
transports: []transport{grpc, rest},
80+
apiName: sample.ServiceTitle,
81+
imports: map[pbinfo.ImportSpec]bool{},
82+
cfg: &generatorConfig{
83+
pkgPath: sample.GoPackagePath,
84+
pkgName: sample.GoPackageName,
85+
transports: []transport{grpc, rest},
86+
APIServiceConfig: sample.ServiceConfig(),
8787
},
8888
}
8989

@@ -110,13 +110,13 @@ func TestDocFile_APIVersionSection(t *testing.T) {
110110

111111
func TestDocFileEmptyService(t *testing.T) {
112112
g := generator{
113-
apiName: sample.ServiceTitle,
114-
imports: map[pbinfo.ImportSpec]bool{},
115-
serviceConfig: sample.ServiceConfig(),
116-
opts: &options{
117-
pkgPath: sample.GoPackagePath,
118-
pkgName: sample.GoPackageName,
119-
transports: []transport{grpc, rest},
113+
apiName: sample.ServiceTitle,
114+
imports: map[pbinfo.ImportSpec]bool{},
115+
cfg: &generatorConfig{
116+
pkgPath: sample.GoPackagePath,
117+
pkgName: sample.GoPackageName,
118+
transports: []transport{grpc, rest},
119+
APIServiceConfig: sample.ServiceConfig(),
120120
},
121121
}
122122
inputType := sample.InputType(sample.CreateRequest)
@@ -154,7 +154,7 @@ func TestDocFileEmptyService(t *testing.T) {
154154
},
155155
} {
156156
t.Run(tst.want, func(t *testing.T) {
157-
g.opts.relLvl = tst.relLvl
157+
g.cfg.relLvl = tst.relLvl
158158
g.genDocFile(sample.Year, []*descriptorpb.ServiceDescriptorProto{serv})
159159
txtdiff.Diff(t, g.pt.String(), tst.want)
160160
g.reset()
@@ -164,9 +164,9 @@ func TestDocFileEmptyService(t *testing.T) {
164164

165165
func TestApiVersionSection(t *testing.T) {
166166
g := generator{
167-
serviceConfig: sample.ServiceConfig(),
168-
opts: &options{
169-
pkgName: sample.GoPackageName,
167+
cfg: &generatorConfig{
168+
pkgName: sample.GoPackageName,
169+
APIServiceConfig: sample.ServiceConfig(),
170170
},
171171
}
172172

internal/gengapic/example.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525
)
2626

2727
func (g *generator) genExampleFile(serv *descriptorpb.ServiceDescriptorProto) error {
28-
pkgName := g.opts.pkgName
28+
pkgName := g.cfg.pkgName
2929
override := g.getServiceNameOverride(serv)
3030
servName := pbinfo.ReduceServNameWithOverride(serv.GetName(), pkgName, override)
3131

@@ -42,7 +42,7 @@ func (g *generator) genExampleFile(serv *descriptorpb.ServiceDescriptorProto) er
4242
}
4343

4444
func (g *generator) genExampleIteratorFile(serv *descriptorpb.ServiceDescriptorProto) error {
45-
pkgName := g.opts.pkgName
45+
pkgName := g.cfg.pkgName
4646
override := g.getServiceNameOverride(serv)
4747
servName := pbinfo.ReduceServNameWithOverride(serv.GetName(), pkgName, override)
4848
methods := append(serv.GetMethod(), g.getMixinMethods()...)
@@ -75,7 +75,7 @@ func (g *generator) genExampleIteratorFile(serv *descriptorpb.ServiceDescriptorP
7575
g.imports[inSpec] = true
7676
// Pick the first transport for simplicity. We don't need examples
7777
// of each method for both transports when they have the same surface.
78-
t := g.opts.transports[0]
78+
t := g.cfg.transports[0]
7979
s := servName
8080
if t == rest {
8181
s += "REST"
@@ -100,7 +100,7 @@ func (g *generator) genExampleIteratorFile(serv *descriptorpb.ServiceDescriptorP
100100

101101
func (g *generator) exampleClientFactory(pkgName, servName string) {
102102
p := g.printf
103-
for _, t := range g.opts.transports {
103+
for _, t := range g.cfg.transports {
104104
s := servName
105105
if t == rest {
106106
s += "REST"
@@ -125,7 +125,7 @@ func (g *generator) exampleInitClient(pkgName, servName string) {
125125
func (g *generator) exampleInitClientWithOpts(pkgName, servName string, isPackageDoc bool) {
126126
p := g.printf
127127
if isPackageDoc {
128-
p("// go get %s@latest", g.opts.pkgPath)
128+
p("// go get %s@latest", g.cfg.pkgPath)
129129
}
130130
p("ctx := context.Background()")
131131
p("// This snippet has been automatically generated and should be regarded as a code template only.")
@@ -195,7 +195,7 @@ func (g *generator) exampleMethodBodyWithOpts(pkgName, servName string, m *descr
195195
g.imports[inSpec] = true
196196
// Pick the first transport for simplicity. We don't need examples
197197
// of each method for both transports when they have the same surface.
198-
t := g.opts.transports[0]
198+
t := g.cfg.transports[0]
199199
s := servName
200200
if t == rest {
201201
s += "REST"

0 commit comments

Comments
 (0)