44 "bytes"
55 "embed"
66 "fmt"
7+ "strings"
78 "text/template"
89
910 "github.com/ethereum/go-ethereum/common/hexutil"
@@ -132,8 +133,9 @@ func (r *TextRenderer) RenderDecodedCall(d *DecodedCall, ctx *FieldContext) stri
132133 if err := r .decodedCallTmpl .Execute (& buf , data ); err != nil {
133134 return fmt .Sprintf ("Error rendering decoded call: %v" , err )
134135 }
135-
136- return buf .String ()
136+ out := buf .String ()
137+ out = strings .TrimSuffix (out , "\n " )
138+ return out
137139}
138140
139141// RenderProposal renders a ProposalReport as plain text using templates
@@ -156,7 +158,11 @@ func (r *TextRenderer) RenderProposal(rep *ProposalReport, ctx *FieldContext) st
156158 return fmt .Sprintf ("Error rendering proposal: %v" , err )
157159 }
158160
159- return buf .String ()
161+ out := buf .String ()
162+ if ! strings .HasSuffix (out , "\n \n " ) { // assuming double newline means intentional spacing
163+ out = strings .TrimSuffix (out , "\n " )
164+ }
165+ return out
160166}
161167
162168// RenderTimelockProposal renders a Timelock ProposalReport as plain text using templates
@@ -188,7 +194,11 @@ func (r *TextRenderer) RenderTimelockProposal(rep *ProposalReport, ctx *FieldCon
188194 return fmt .Sprintf ("Error rendering timelock: %v" , err )
189195 }
190196
191- return buf .String ()
197+ out := buf .String ()
198+ if ! strings .HasSuffix (out , "\n \n " ) { // assuming double newline means intentional spacing
199+ out = strings .TrimSuffix (out , "\n " )
200+ }
201+ return out
192202}
193203
194204// RenderField renders a NamedField as plain text
@@ -225,66 +235,71 @@ func (r *TextRenderer) getChainNameOrEmpty(selector uint64) string {
225235// renderFieldValue renders any field value as plain text using templates
226236func (r * TextRenderer ) renderFieldValue (field FieldValue ) string {
227237 var buf bytes.Buffer
228-
238+ var out string
229239 switch f := field .(type ) {
230240 case AddressField :
231241 data := AddressFieldData {Value : f .GetValue ()}
232242 if err := r .addressFieldTmpl .Execute (& buf , data ); err != nil {
233243 return fmt .Sprintf ("Error rendering address field: %v" , err )
234244 }
235245
236- return buf .String ()
246+ out = buf .String ()
237247
238248 case ChainSelectorField :
239249 if err := r .chainSelectorFieldTmpl .Execute (& buf , f ); err != nil {
240250 return fmt .Sprintf ("Error rendering chain selector field: %v" , err )
241251 }
242252
243- return buf .String ()
253+ out = buf .String ()
244254
245255 case BytesField :
246256 if err := r .bytesFieldTmpl .Execute (& buf , f ); err != nil {
247257 return fmt .Sprintf ("Error rendering bytes field: %v" , err )
248258 }
249259
250- return buf .String ()
260+ out = buf .String ()
251261
252262 case ArrayField :
253263 if err := r .arrayFieldTmpl .Execute (& buf , f ); err != nil {
254264 return fmt .Sprintf ("Error rendering array field: %v" , err )
255265 }
256266
257- return buf .String ()
267+ out = buf .String ()
258268
259269 case StructField :
260270 if err := r .structFieldTmpl .Execute (& buf , f ); err != nil {
261271 return fmt .Sprintf ("Error rendering struct field: %v" , err )
262272 }
263273
264- return buf .String ()
274+ out = buf .String ()
265275
266276 case SimpleField :
267277 if err := r .simpleFieldTmpl .Execute (& buf , f ); err != nil {
268278 return fmt .Sprintf ("Error rendering simple field: %v" , err )
269279 }
270280
271- return buf .String ()
281+ out = buf .String ()
272282
273283 case YamlField :
274284 if err := r .yamlFieldTmpl .Execute (& buf , f ); err != nil {
275285 return fmt .Sprintf ("Error rendering yaml field: %v" , err )
276286 }
277287
278- return buf .String ()
288+ out = buf .String ()
279289
280290 case NamedField :
281291 if err := r .namedFieldTmpl .Execute (& buf , f ); err != nil {
282292 return fmt .Sprintf ("Error rendering named field: %v" , err )
283293 }
284294
285- return buf .String ()
295+ out = buf .String ()
286296
287297 default :
288298 return fmt .Sprintf ("<unknown field type: %s>" , field .GetType ())
289299 }
300+
301+ if ! strings .HasSuffix (out , "\n \n " ) { // assuming double newline means intentional spacing
302+ out = strings .TrimSuffix (out , "\n " )
303+ }
304+ return out
290305}
0 commit comments