Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Side by Side Diff: grpc/cmd/rpc/printer.go

Issue 2219023003: Update APIs to use new Google cloud paths. (Closed) Base URL: https://github.com/luci/luci-go@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The LUCI Authors. All rights reserved. 1 // Copyright 2016 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0 2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file. 3 // that can be found in the LICENSE file.
4 4
5 package main 5 package main
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "io" 9 "io"
10 "strings" 10 "strings"
11 11
12 "github.com/luci/luci-go/common/proto/google/descutil"
13
12 "github.com/luci/luci-go/common/data/text/indented" 14 "github.com/luci/luci-go/common/data/text/indented"
13 » "github.com/luci/luci-go/common/proto/google/descriptor" 15 » "google.golang.org/genproto/protobuf"
14 ) 16 )
15 17
16 // printer prints a proto3 definition from a description. 18 // printer prints a proto3 definition from a description.
17 // Does not support options. 19 // Does not support options.
18 type printer struct { 20 type printer struct {
19 // File is the file containing the desriptors being printed. 21 // File is the file containing the desriptors being printed.
20 // Used to relativize names and print comments. 22 // Used to relativize names and print comments.
21 File *descriptor.FileDescriptorProto 23 File *descriptor.FileDescriptorProto
22 Out indented.Writer 24 Out indented.Writer
23 25
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 // MaybeLeadingComments prints leading comments of the protobuf entity 59 // MaybeLeadingComments prints leading comments of the protobuf entity
58 // at path, if found. 60 // at path, if found.
59 // 61 //
60 // For path, see comment in SourceCodeInfo.Location message in 62 // For path, see comment in SourceCodeInfo.Location message in
61 // common/proto/google/descriptor/descriptor.proto. 63 // common/proto/google/descriptor/descriptor.proto.
62 func (p *printer) MaybeLeadingComments(path []int) { 64 func (p *printer) MaybeLeadingComments(path []int) {
63 if p.File == nil || p.File.SourceCodeInfo == nil || len(path) == 0 { 65 if p.File == nil || p.File.SourceCodeInfo == nil || len(path) == 0 {
64 return 66 return
65 } 67 }
66 68
67 » loc := p.File.SourceCodeInfo.FindLocation(path) 69 » loc := descutil.FindLocation(p.File.SourceCodeInfo, path)
68 if loc == nil { 70 if loc == nil {
69 return 71 return
70 } 72 }
71 73
72 comments := loc.GetLeadingComments() 74 comments := loc.GetLeadingComments()
73 // print comments, but insert "//" before each newline. 75 // print comments, but insert "//" before each newline.
74 for len(comments) > 0 { 76 for len(comments) > 0 {
75 var toPrint string 77 var toPrint string
76 if lineEnd := strings.Index(comments, "\n"); lineEnd >= 0 { 78 if lineEnd := strings.Index(comments, "\n"); lineEnd >= 0 {
77 toPrint = comments[:lineEnd+1] // includes newline 79 toPrint = comments[:lineEnd+1] // includes newline
(...skipping 16 matching lines...) Expand all
94 } 96 }
95 return name 97 return name
96 } 98 }
97 99
98 // Service prints a service definition. 100 // Service prints a service definition.
99 // If methodIndex != -1, only one method is printed. 101 // If methodIndex != -1, only one method is printed.
100 // If serviceIndex != -1, leading comments are printed if found. 102 // If serviceIndex != -1, leading comments are printed if found.
101 func (p *printer) Service(service *descriptor.ServiceDescriptorProto, serviceInd ex, methodIndex int) { 103 func (p *printer) Service(service *descriptor.ServiceDescriptorProto, serviceInd ex, methodIndex int) {
102 var path []int 104 var path []int
103 if serviceIndex != -1 { 105 if serviceIndex != -1 {
104 » » path = []int{descriptor.NumberFileDescriptorProto_Service, servi ceIndex} 106 » » path = []int{descutil.FileDescriptorProtoServiceTag, serviceInde x}
105 p.MaybeLeadingComments(path) 107 p.MaybeLeadingComments(path)
106 } 108 }
107 defer p.open("service %s", service.GetName())() 109 defer p.open("service %s", service.GetName())()
108 110
109 printMethod := func(i int) { 111 printMethod := func(i int) {
110 var methodPath []int 112 var methodPath []int
111 if path != nil { 113 if path != nil {
112 » » » methodPath = append(path, descriptor.NumberServiceDescri ptorProto_Method, i) 114 » » » methodPath = append(path, descutil.ServiceDescriptorProt oMethodTag, i)
113 } 115 }
114 p.Method(service.Method[i], methodPath) 116 p.Method(service.Method[i], methodPath)
115 } 117 }
116 118
117 if methodIndex < 0 { 119 if methodIndex < 0 {
118 for i := range service.Method { 120 for i := range service.Method {
119 printMethod(i) 121 printMethod(i)
120 } 122 }
121 } else { 123 } else {
122 printMethod(methodIndex) 124 printMethod(methodIndex)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 descriptor.FieldDescriptorProto_TYPE_SINT64: "sint64", 161 descriptor.FieldDescriptorProto_TYPE_SINT64: "sint64",
160 } 162 }
161 163
162 // Field prints a field definition. 164 // Field prints a field definition.
163 // 165 //
164 // If path is specified, leading comments are printed if found. 166 // If path is specified, leading comments are printed if found.
165 // See also comment in SourceCodeInfo.Location message in 167 // See also comment in SourceCodeInfo.Location message in
166 // common/proto/google/descriptor/descriptor.proto. 168 // common/proto/google/descriptor/descriptor.proto.
167 func (p *printer) Field(field *descriptor.FieldDescriptorProto, path []int) { 169 func (p *printer) Field(field *descriptor.FieldDescriptorProto, path []int) {
168 p.MaybeLeadingComments(path) 170 p.MaybeLeadingComments(path)
169 » if field.Repeated() { 171 » if descutil.Repeated(field) {
170 p.Printf("repeated ") 172 p.Printf("repeated ")
171 } 173 }
172 174
173 typeName := fieldTypeName[field.GetType()] 175 typeName := fieldTypeName[field.GetType()]
174 if typeName == "" { 176 if typeName == "" {
175 typeName = p.shorten(field.GetTypeName()) 177 typeName = p.shorten(field.GetTypeName())
176 } 178 }
177 if typeName == "" { 179 if typeName == "" {
178 typeName = "<unsupported type>" 180 typeName = "<unsupported type>"
179 } 181 }
(...skipping 10 matching lines...) Expand all
190 defer p.open("message %s", msg.GetName())() 192 defer p.open("message %s", msg.GetName())()
191 193
192 for i := range msg.GetOneofDecl() { 194 for i := range msg.GetOneofDecl() {
193 p.OneOf(msg, i, path) 195 p.OneOf(msg, i, path)
194 } 196 }
195 197
196 for i, f := range msg.Field { 198 for i, f := range msg.Field {
197 if f.OneofIndex == nil { 199 if f.OneofIndex == nil {
198 var fieldPath []int 200 var fieldPath []int
199 if len(path) > 0 { 201 if len(path) > 0 {
200 » » » » fieldPath = append(path, descriptor.NumberDescri ptorProto_Field, i) 202 » » » » fieldPath = append(path, descutil.DescriptorProt oFieldTag, i)
201 } 203 }
202 p.Field(msg.Field[i], fieldPath) 204 p.Field(msg.Field[i], fieldPath)
203 } 205 }
204 } 206 }
205 } 207 }
206 208
207 // OneOf prints a oneof definition. 209 // OneOf prints a oneof definition.
208 // 210 //
209 // If path is specified, leading comments are printed if found. 211 // If path is specified, leading comments are printed if found.
210 // See also comment in SourceCodeInfo.Location message in 212 // See also comment in SourceCodeInfo.Location message in
211 // common/proto/google/descriptor/descriptor.proto. 213 // common/proto/google/descriptor/descriptor.proto.
212 func (p *printer) OneOf(msg *descriptor.DescriptorProto, oneOfIndex int, msgPath []int) { 214 func (p *printer) OneOf(msg *descriptor.DescriptorProto, oneOfIndex int, msgPath []int) {
213 of := msg.GetOneofDecl()[oneOfIndex] 215 of := msg.GetOneofDecl()[oneOfIndex]
214 if len(msgPath) > 0 { 216 if len(msgPath) > 0 {
215 » » p.MaybeLeadingComments(append(msgPath, descriptor.NumberDescript orProto_OneOf, oneOfIndex)) 217 » » p.MaybeLeadingComments(append(msgPath, descutil.DescriptorProtoO neOfTag, oneOfIndex))
216 } 218 }
217 defer p.open("oneof %s", of.GetName())() 219 defer p.open("oneof %s", of.GetName())()
218 220
219 for i, f := range msg.Field { 221 for i, f := range msg.Field {
220 if f.OneofIndex != nil && int(f.GetOneofIndex()) == oneOfIndex { 222 if f.OneofIndex != nil && int(f.GetOneofIndex()) == oneOfIndex {
221 var fieldPath []int 223 var fieldPath []int
222 if len(msgPath) > 0 { 224 if len(msgPath) > 0 {
223 » » » » fieldPath = append(msgPath, descriptor.NumberDes criptorProto_Field, i) 225 » » » » fieldPath = append(msgPath, descutil.DescriptorP rotoFieldTag, i)
224 } 226 }
225 p.Field(msg.Field[i], fieldPath) 227 p.Field(msg.Field[i], fieldPath)
226 } 228 }
227 } 229 }
228 } 230 }
229 231
230 // Enum prints an enum definition. 232 // Enum prints an enum definition.
231 // 233 //
232 // If path is specified, leading comments are printed if found. 234 // If path is specified, leading comments are printed if found.
233 // See also comment in SourceCodeInfo.Location message in 235 // See also comment in SourceCodeInfo.Location message in
234 // common/proto/google/descriptor/descriptor.proto. 236 // common/proto/google/descriptor/descriptor.proto.
235 func (p *printer) Enum(enum *descriptor.EnumDescriptorProto, path []int) { 237 func (p *printer) Enum(enum *descriptor.EnumDescriptorProto, path []int) {
236 p.MaybeLeadingComments(path) 238 p.MaybeLeadingComments(path)
237 defer p.open("enum %s", enum.GetName())() 239 defer p.open("enum %s", enum.GetName())()
238 240
239 for i, v := range enum.Value { 241 for i, v := range enum.Value {
240 var valuePath []int 242 var valuePath []int
241 if len(path) > 0 { 243 if len(path) > 0 {
242 » » » valuePath = append(path, descriptor.NumberEnumDescriptor Proto_Value, i) 244 » » » valuePath = append(path, descutil.EnumDescriptorProtoVal ueTag, i)
243 } 245 }
244 p.EnumValue(v, valuePath) 246 p.EnumValue(v, valuePath)
245 } 247 }
246 } 248 }
247 249
248 // EnumValue prints an enum value definition. 250 // EnumValue prints an enum value definition.
249 // 251 //
250 // If path is specified, leading comments are printed if found. 252 // If path is specified, leading comments are printed if found.
251 // See also comment in SourceCodeInfo.Location message in 253 // See also comment in SourceCodeInfo.Location message in
252 // common/proto/google/descriptor/descriptor.proto. 254 // common/proto/google/descriptor/descriptor.proto.
253 func (p *printer) EnumValue(v *descriptor.EnumValueDescriptorProto, path []int) { 255 func (p *printer) EnumValue(v *descriptor.EnumValueDescriptorProto, path []int) {
254 p.MaybeLeadingComments(path) 256 p.MaybeLeadingComments(path)
255 p.Printf("%s = %d;\n", v.GetName(), v.GetNumber()) 257 p.Printf("%s = %d;\n", v.GetName(), v.GetNumber())
256 } 258 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698