diff options
| -rw-r--r-- | doc/docgen.zig | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/doc/docgen.zig b/doc/docgen.zig index 781f3e500c..e2a5348614 100644 --- a/doc/docgen.zig +++ b/doc/docgen.zig @@ -265,6 +265,7 @@ const SeeAlsoItem = struct { const ExpectedOutcome = enum { Succeed, Fail, + BuildFail, }; const Code = struct { @@ -468,6 +469,8 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { code_kind_id = Code.Id{ .Exe = ExpectedOutcome.Succeed }; } else if (mem.eql(u8, code_kind_str, "exe_err")) { code_kind_id = Code.Id{ .Exe = ExpectedOutcome.Fail }; + } else if (mem.eql(u8, code_kind_str, "exe_build_err")) { + code_kind_id = Code.Id{ .Exe = ExpectedOutcome.BuildFail }; } else if (mem.eql(u8, code_kind_str, "test")) { code_kind_id = Code.Id.Test; } else if (mem.eql(u8, code_kind_str, "test_err")) { @@ -1025,6 +1028,8 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var tmp_dir_name, "--name", code.name, + "--color", + "on", }); try out.print("<pre><code class=\"shell\">$ zig build-exe {}.zig", code.name); switch (code.mode) { @@ -1060,6 +1065,39 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var if (code.target_str) |triple| { try build_args.appendSlice([][]const u8{ "-target", triple }); } + if (expected_outcome == .BuildFail) { + const result = try os.ChildProcess.exec( + allocator, + build_args.toSliceConst(), + null, + &env_map, + max_doc_file_size, + ); + switch (result.term) { + os.ChildProcess.Term.Exited => |exit_code| { + if (exit_code == 0) { + warn("{}\nThe following command incorrectly succeeded:\n", result.stderr); + for (build_args.toSliceConst()) |arg| + warn("{} ", arg) + else + warn("\n"); + return parseError(tokenizer, code.source_token, "example incorrectly compiled"); + } + }, + else => { + warn("{}\nThe following command crashed:\n", result.stderr); + for (build_args.toSliceConst()) |arg| + warn("{} ", arg) + else + warn("\n"); + return parseError(tokenizer, code.source_token, "example compile crashed"); + }, + } + const escaped_stderr = try escapeHtml(allocator, result.stderr); + const colored_stderr = try termColor(allocator, escaped_stderr); + try out.print("\n{}</code></pre>\n", colored_stderr); + break :code_block; + } _ = exec(allocator, &env_map, build_args.toSliceConst()) catch return parseError(tokenizer, code.source_token, "example failed to compile"); if (code.target_str) |triple| { |
