@@ -855,6 +855,58 @@ fn nodeTagName(tag: Ast.Node.Tag) []const u8 {
855855 };
856856}
857857
858+ var debug_allocator : std .heap .DebugAllocator (.{}) = .init ;
859+
860+ pub fn main () ! u8 {
861+ const gpa , const is_debug = gpa : {
862+ if (@import ("builtin" ).target .os .tag == .wasi ) break :gpa .{ std .heap .wasm_allocator , false };
863+ break :gpa switch (@import ("builtin" ).mode ) {
864+ .Debug , .ReleaseSafe = > .{ debug_allocator .allocator (), true },
865+ .ReleaseFast , .ReleaseSmall = > .{ std .heap .smp_allocator , false },
866+ };
867+ };
868+ defer if (is_debug ) {
869+ _ = debug_allocator .deinit ();
870+ };
871+
872+ var threaded : std.Io.Threaded = .init_single_threaded ;
873+ const io = threaded .ioBasic ();
874+
875+ var args = try std .process .argsAlloc (gpa );
876+ defer std .process .argsFree (gpa , args );
877+
878+ if (args .len != 2 ) {
879+ std .process .fatal ("expected exactly 1 argument but got {d}" , .{args .len - 1 });
880+ }
881+
882+ const file_path = args [1 ];
883+
884+ const source = source : {
885+ const source_file = try std .Io .Dir .cwd ().openFile (io , file_path , .{});
886+ defer source_file .close (io );
887+ var read_buffer : [4096 ]u8 = undefined ;
888+ var file_reader = source_file .reader (io , & read_buffer );
889+ break :source try std .zig .readSourceFileToEndAlloc (gpa , & file_reader );
890+ };
891+ defer gpa .free (source );
892+
893+ const mode : Ast.Mode = if (std .mem .endsWith (u8 , file_path , ".zon" )) .zon else .zig ;
894+ var tree : Ast = try .parse (gpa , source , mode );
895+ defer tree .deinit (gpa );
896+
897+ var buffer : [4096 ]u8 = undefined ;
898+ var stdout_writer = std .fs .File .stdout ().writer (& buffer );
899+
900+ renderToWriter (
901+ & tree ,
902+ .{ .trailing_comments = .{ .filename = file_path } },
903+ & stdout_writer .interface ,
904+ ) catch return stdout_writer .err .? ;
905+ stdout_writer .interface .flush () catch return stdout_writer .err .? ;
906+
907+ return 0 ;
908+ }
909+
858910test PrintAst {
859911 const source =
860912 \\const std = @import("std");
0 commit comments