@@ -671,34 +671,45 @@ fn cmdFmt(allocator: &Allocator, args: []const []const u8) !void {
671
671
};
672
672
defer allocator .free (source_code );
673
673
674
- var tokenizer = std .zig .Tokenizer .init (source_code );
675
- var parser = std .zig .Parser .init (& tokenizer , allocator , file_path );
676
- defer parser .deinit ();
677
-
678
- var tree = parser .parse () catch | err | {
674
+ var tree = std .zig .parse (allocator , source_code ) catch | err | {
679
675
try stderr .print ("error parsing file '{}': {}\n " , file_path , err );
680
676
continue ;
681
677
};
682
678
defer tree .deinit ();
683
679
684
- var original_file_backup = try Buffer .init (allocator , file_path );
685
- defer original_file_backup .deinit ();
686
- try original_file_backup .append (".backup" );
687
680
688
- try os .rename (allocator , file_path , original_file_backup .toSliceConst ());
681
+ var error_it = tree .errors .iterator (0 );
682
+ while (error_it .next ()) | parse_error | {
683
+ const token = tree .tokens .at (parse_error .loc ());
684
+ const loc = tree .tokenLocation (0 , parse_error .loc ());
685
+ try stderr .print ("{}:{}:{}: error: " , file_path , loc .line + 1 , loc .column + 1 );
686
+ try tree .renderError (parse_error , stderr );
687
+ try stderr .print ("\n {}\n " , source_code [loc .line_start .. loc .line_end ]);
688
+ {
689
+ var i : usize = 0 ;
690
+ while (i < loc .column ) : (i += 1 ) {
691
+ try stderr .write (" " );
692
+ }
693
+ }
694
+ {
695
+ const caret_count = token .end - token .start ;
696
+ var i : usize = 0 ;
697
+ while (i < caret_count ) : (i += 1 ) {
698
+ try stderr .write ("~" );
699
+ }
700
+ }
701
+ try stderr .write ("\n " );
702
+ }
703
+ if (tree .errors .len != 0 ) {
704
+ continue ;
705
+ }
689
706
690
707
try stderr .print ("{}\n " , file_path );
691
708
692
- // TODO: BufferedAtomicFile has some access problems.
693
- var out_file = try os .File .openWrite (allocator , file_path );
694
- defer out_file .close ();
709
+ const baf = try io .BufferedAtomicFile .create (allocator , file_path );
710
+ defer baf .destroy ();
695
711
696
- var out_file_stream = io .FileOutStream .init (& out_file );
697
- try parser .renderSource (out_file_stream .stream , tree .root_node );
698
-
699
- if (! flags .present ("keep-backups" )) {
700
- try os .deleteFile (allocator , original_file_backup .toSliceConst ());
701
- }
712
+ try std .zig .render (allocator , baf .stream (), & tree );
702
713
}
703
714
}
704
715
0 commit comments