authorgravatar for jacoblevgw@gmail.comJacob G-W <jacoblevgw@gmail.com> 2021-06-19 21:58:27-04:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2021-06-20 19:56:14+03:00
log1071ca61294c81c939574f70637191b957aee1b1
treefc200d864e62147ccdc92d7ee552e0413f214228
parent8a7730672f33199b6f85cba84990dd35197f8fb6

fmt: make --ast-check work with --stdin


1 files changed, 44 insertions(+), 1 deletions(-)

src/main.zig+44-1
...@@ -3019,7 +3019,50 @@ pub fn cmdFmt(gpa: *Allocator, args: []const []const u8) !void {...@@ -3019,7 +3019,50 @@ pub fn cmdFmt(gpa: *Allocator, args: []const []const u8) !void {
3019 for (tree.errors) |parse_error| {3019 for (tree.errors) |parse_error| {
3020 try printErrMsgToStdErr(gpa, parse_error, tree, "<stdin>", color);3020 try printErrMsgToStdErr(gpa, parse_error, tree, "<stdin>", color);
3021 }3021 }
3022 if (tree.errors.len != 0) {3022 var has_ast_error = false;
3023 if (check_ast_flag) {
3024 const Module = @import("Module.zig");
3025 const AstGen = @import("AstGen.zig");
3026
3027 var file: Module.Scope.File = .{
3028 .status = .never_loaded,
3029 .source_loaded = true,
3030 .zir_loaded = false,
3031 .sub_file_path = "<stdin>",
3032 .source = source_code,
3033 .stat_size = undefined,
3034 .stat_inode = undefined,
3035 .stat_mtime = undefined,
3036 .tree = tree,
3037 .tree_loaded = true,
3038 .zir = undefined,
3039 .pkg = undefined,
3040 .root_decl = null,
3041 };
3042
3043 file.zir = try AstGen.generate(gpa, file.tree);
3044 file.zir_loaded = true;
3045 defer file.zir.deinit(gpa);
3046
3047 if (file.zir.hasCompileErrors()) {
3048 var arena_instance = std.heap.ArenaAllocator.init(gpa);
3049 defer arena_instance.deinit();
3050 var errors = std.ArrayList(Compilation.AllErrors.Message).init(gpa);
3051 defer errors.deinit();
3052
3053 try Compilation.AllErrors.addZir(&arena_instance.allocator, &errors, &file);
3054 const ttyconf: std.debug.TTY.Config = switch (color) {
3055 .auto => std.debug.detectTTYConfig(),
3056 .on => .escape_codes,
3057 .off => .no_color,
3058 };
3059 for (errors.items) |full_err_msg| {
3060 full_err_msg.renderToStdErr(ttyconf);
3061 }
3062 has_ast_error = true;
3063 }
3064 }
3065 if (tree.errors.len != 0 or has_ast_error) {
3023 process.exit(1);3066 process.exit(1);
3024 }3067 }
3025 const formatted = try tree.render(gpa);3068 const formatted = try tree.render(gpa);