@@ -8,6 +8,7 @@ use colored::Colorize;
88use std:: sync:: Arc ;
99use std:: time:: Duration ;
1010
11+ use std:: fmt:: Write ;
1112use techscript_common:: { FileId , SourceManager } ;
1213use techscript_errors:: { Diagnostic , DiagnosticLevel , ErrorCode } ;
1314
@@ -229,29 +230,32 @@ impl<'a> DiagnosticRenderer<'a> {
229230
230231 if self . output == DiagnosticOutput :: Colored {
231232 if header. is_empty ( ) {
232- out. push_str ( & format ! (
233+ let _ = write ! (
234+ out,
233235 "{}: {}\n " ,
234236 diag. severity. colored_label( ) ,
235237 diag. message. bold( )
236- ) ) ;
238+ ) ;
237239 } else {
238- out. push_str ( & format ! (
240+ let _ = write ! (
241+ out,
239242 "{}[{}]: {}\n " ,
240243 diag. severity. colored_label( ) ,
241244 header. white( ) ,
242245 diag. message. bold( )
243- ) ) ;
246+ ) ;
244247 }
245248 } else {
246249 if header. is_empty ( ) {
247- out . push_str ( & format ! ( "{}: {}\n " , diag. severity. label( ) , diag. message) ) ;
250+ let _ = write ! ( out , "{}: {}\n " , diag. severity. label( ) , diag. message) ;
248251 } else {
249- out. push_str ( & format ! (
252+ let _ = write ! (
253+ out,
250254 "{}[{}]: {}\n " ,
251255 diag. severity. label( ) ,
252256 header,
253257 diag. message
254- ) ) ;
258+ ) ;
255259 }
256260 }
257261
@@ -262,26 +266,21 @@ impl<'a> DiagnosticRenderer<'a> {
262266
263267 let file_ref = format ! ( " --> {}:{}:{}" , file. path( ) . display( ) , line, col) ;
264268 if self . output == DiagnosticOutput :: Colored {
265- out . push_str ( & format ! ( "{}\n " , file_ref. cyan( ) ) ) ;
269+ let _ = write ! ( out , "{}\n " , file_ref. cyan( ) ) ;
266270 } else {
267- out . push_str ( & format ! ( "{}\n " , file_ref) ) ;
271+ let _ = write ! ( out , "{}\n " , file_ref) ;
268272 }
269273
270274 // Source line
271275 if let Some ( line_text) = file. line_content ( line) {
272276 let line_num = format ! ( "{:>4}" , line) ;
273277 let bar = "|" ;
274278 if self . output == DiagnosticOutput :: Colored {
275- out. push_str ( & format ! ( "{} {}\n " , line_num. cyan( ) , bar. cyan( ) ) ) ;
276- out. push_str ( & format ! (
277- "{} {} {}\n " ,
278- line_num. cyan( ) ,
279- bar. cyan( ) ,
280- line_text
281- ) ) ;
279+ let _ = write ! ( out, "{} {}\n " , line_num. cyan( ) , bar. cyan( ) ) ;
280+ let _ = write ! ( out, "{} {} {}\n " , line_num. cyan( ) , bar. cyan( ) , line_text) ;
282281 } else {
283- out . push_str ( & format ! ( "{} {}\n " , line_num, bar) ) ;
284- out . push_str ( & format ! ( "{} {} {}\n " , line_num, bar, line_text) ) ;
282+ let _ = write ! ( out , "{} {}\n " , line_num, bar) ;
283+ let _ = write ! ( out , "{} {} {}\n " , line_num, bar, line_text) ;
285284 }
286285
287286 // Caret underline — Unicode-safe (count chars, not bytes)
@@ -298,13 +297,9 @@ impl<'a> DiagnosticRenderer<'a> {
298297 format ! ( "{}{}" , spaces, carets)
299298 } ;
300299 if self . output == DiagnosticOutput :: Colored {
301- out. push_str ( & format ! (
302- " {} {}\n " ,
303- bar. cyan( ) ,
304- caret_line. red( ) . bold( )
305- ) ) ;
300+ let _ = write ! ( out, " {} {}\n " , bar. cyan( ) , caret_line. red( ) . bold( ) ) ;
306301 } else {
307- out . push_str ( & format ! ( " {} {}\n " , bar, caret_line) ) ;
302+ let _ = write ! ( out , " {} {}\n " , bar, caret_line) ;
308303 }
309304 }
310305 }
@@ -313,54 +308,54 @@ impl<'a> DiagnosticRenderer<'a> {
313308 // Related diagnostics (help, notes)
314309 for related in & diag. related {
315310 if self . output == DiagnosticOutput :: Colored {
316- out. push_str ( & format ! (
311+ let _ = write ! (
312+ out,
317313 " {}: {}\n " ,
318314 related. severity. colored_label( ) ,
319315 related. message
320- ) ) ;
316+ ) ;
321317 } else {
322- out. push_str ( & format ! (
323- " {}: {}\n " ,
324- related. severity. label( ) ,
325- related. message
326- ) ) ;
318+ let _ = write ! ( out, " {}: {}\n " , related. severity. label( ) , related. message) ;
327319 }
328320 }
329321
330322 // Fix suggestions
331323 for suggestion in & diag. suggestions {
332324 if self . output == DiagnosticOutput :: Colored {
333- out. push_str ( & format ! (
325+ let _ = write ! (
326+ out,
334327 " {}: {} → `{}`\n " ,
335328 "suggestion" . green( ) . bold( ) ,
336329 suggestion. message,
337330 suggestion. replacement. green( )
338- ) ) ;
331+ ) ;
339332 } else {
340- out. push_str ( & format ! (
333+ let _ = write ! (
334+ out,
341335 " suggestion: {} → `{}`\n " ,
342336 suggestion. message, suggestion. replacement
343- ) ) ;
337+ ) ;
344338 }
345339 }
346340
347341 // Documentation link if code is present
348342 if let Some ( code) = diag. code {
349343 if self . output == DiagnosticOutput :: Colored {
350- out. push_str ( & format ! (
344+ let _ = write ! (
345+ out,
351346 " {}: For more details see: {}\n " ,
352347 "note" . cyan( ) . bold( ) ,
353348 format!(
354349 "https://github.com/Tcode-Motion/techscript/blob/main/docs/errors.md#{:?}" ,
355350 code
356351 )
357352 . underline( )
358- ) ) ;
353+ ) ;
359354 } else {
360- out . push_str ( & format ! (
355+ let _ = write ! ( out ,
361356 " note: For more details see: https://github.com/Tcode-Motion/techscript/blob/main/docs/errors.md#{:?}\n " ,
362357 code
363- ) ) ;
358+ ) ;
364359 }
365360 }
366361
0 commit comments