authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-01 15:34:17-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-01 15:34:36-04:00
log6e4f69a54a976efd2d5203a848deeffcd7891f62
treea51f8f79cc4a7fccae751d83a73d3e3abeffa761
parent54a93e53935d7c7a7702849d66182fa6e9670b6e
signaturelock-open Commit is signed but in an unrecognized format.

docgen: add exe_build_err tag


1 files changed, 38 insertions(+), 0 deletions(-)

doc/docgen.zig+38
......@@ -265,6 +265,7 @@ const SeeAlsoItem = struct {
265265const ExpectedOutcome = enum {
266266 Succeed,
267267 Fail,
268 BuildFail,
268269};
269270
270271const Code = struct {
......@@ -468,6 +469,8 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {
468469 code_kind_id = Code.Id{ .Exe = ExpectedOutcome.Succeed };
469470 } else if (mem.eql(u8, code_kind_str, "exe_err")) {
470471 code_kind_id = Code.Id{ .Exe = ExpectedOutcome.Fail };
472 } else if (mem.eql(u8, code_kind_str, "exe_build_err")) {
473 code_kind_id = Code.Id{ .Exe = ExpectedOutcome.BuildFail };
471474 } else if (mem.eql(u8, code_kind_str, "test")) {
472475 code_kind_id = Code.Id.Test;
473476 } 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
10251028 tmp_dir_name,
10261029 "--name",
10271030 code.name,
1031 "--color",
1032 "on",
10281033 });
10291034 try out.print("<pre><code class=\"shell\">$ zig build-exe {}.zig", code.name);
10301035 switch (code.mode) {
......@@ -1060,6 +1065,39 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var
10601065 if (code.target_str) |triple| {
10611066 try build_args.appendSlice([][]const u8{ "-target", triple });
10621067 }
1068 if (expected_outcome == .BuildFail) {
1069 const result = try os.ChildProcess.exec(
1070 allocator,
1071 build_args.toSliceConst(),
1072 null,
1073 &env_map,
1074 max_doc_file_size,
1075 );
1076 switch (result.term) {
1077 os.ChildProcess.Term.Exited => |exit_code| {
1078 if (exit_code == 0) {
1079 warn("{}\nThe following command incorrectly succeeded:\n", result.stderr);
1080 for (build_args.toSliceConst()) |arg|
1081 warn("{} ", arg)
1082 else
1083 warn("\n");
1084 return parseError(tokenizer, code.source_token, "example incorrectly compiled");
1085 }
1086 },
1087 else => {
1088 warn("{}\nThe following command crashed:\n", result.stderr);
1089 for (build_args.toSliceConst()) |arg|
1090 warn("{} ", arg)
1091 else
1092 warn("\n");
1093 return parseError(tokenizer, code.source_token, "example compile crashed");
1094 },
1095 }
1096 const escaped_stderr = try escapeHtml(allocator, result.stderr);
1097 const colored_stderr = try termColor(allocator, escaped_stderr);
1098 try out.print("\n{}</code></pre>\n", colored_stderr);
1099 break :code_block;
1100 }
10631101 _ = exec(allocator, &env_map, build_args.toSliceConst()) catch return parseError(tokenizer, code.source_token, "example failed to compile");
10641102
10651103 if (code.target_str) |triple| {