@@ -271,34 +271,26 @@ func (g *generator) genSample(ifaceName, methName, regTag string, valSet SampleV
271271 p ("" )
272272 g .imports [pbinfo.ImportSpec {Path : "context" }] = true
273273
274- for i , name := range argNames {
275- var sb strings.Builder
276- fmt .Fprintf (& sb , "// %s := " , name )
277- if err := argTrees [i ].Print (& sb , g ); err != nil {
278- return errors .E (err , "can't initializing parameter: %s" , name )
279- }
280- s := sb .String ()
281- s = strings .Replace (s , "\n " , "\n //" , - 1 )
282-
283- w := g .pt .Writer ()
284- if _ , err := w .Write ([]byte (s )); err != nil {
285- return err
286- }
287- if _ , err := w .Write ([]byte {'\n' }); err != nil {
288- return err
289- }
290- }
291-
292274 {
293- w := g . pt . Writer ()
275+ var buf bytes. Buffer
294276
295- if _ , err := w .Write ([]byte ("req := " )); err != nil {
296- return err
277+ for i , name := range argNames {
278+ fmt .Fprintf (& buf , "%s := " , name )
279+ if err := argTrees [i ].Print (& buf , g ); err != nil {
280+ return errors .E (err , "can't initialize parameter: %s" , name )
281+ }
282+ buf .WriteByte ('\n' )
297283 }
298- if err := itree .Print (g .pt .Writer (), g ); err != nil {
299- return errors .E (err , "can't initializing request object" )
284+ prependLines (& buf , "// " )
285+
286+ buf .WriteString ("req := " )
287+ if err := itree .Print (& buf , g ); err != nil {
288+ return errors .E (err , "can't initialize request object" )
300289 }
301- if _ , err := w .Write ([]byte {'\n' }); err != nil {
290+ buf .WriteByte ('\n' )
291+ prependLines (& buf , "\t " )
292+
293+ if _ , err := buf .WriteTo (g .pt .Writer ()); err != nil {
302294 return err
303295 }
304296 }
@@ -433,3 +425,26 @@ func (g *generator) handleOut(meth *descriptor.MethodDescriptorProto, valSet Sam
433425 }
434426 return nil
435427}
428+
429+ // prependLines adds prefix to every line in b. A line is defined as a possibly empty run
430+ // of non-newlines terminated by a newline character.
431+ // If b doesn't end with a newline, prependLines panics.
432+ func prependLines (b * bytes.Buffer , prefix string ) {
433+ if b .Len () == 0 {
434+ return
435+ }
436+ if b .Bytes ()[b .Len ()- 1 ] != '\n' {
437+ panic (errors .E (nil , "prependLines: must end with newline" ))
438+ }
439+ // Don't split with b.Bytes; we have to make a copy of the content since we're overwriting the buffer.
440+ lines := strings .SplitAfter (b .String (), "\n " )
441+ b .Reset ()
442+ for _ , l := range lines {
443+ // When splitting, we have an empty string after the last newline, ignore it.
444+ if l == "" {
445+ continue
446+ }
447+ b .WriteString (prefix )
448+ b .WriteString (l )
449+ }
450+ }
0 commit comments