authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2021-03-13 14:09:34+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-03-14 17:22:48-04:00
logd33f0d3375c621db479fbf565855c7d2a7eea735
treedd190d5f0ea998c7a201f626c61c464293827259
parentb98d7747fa7fb86d5f3f9bdbd00901e16fc58fca

docgen: Use Progress API

Really slow as usual but now looks slightly better.

1 files changed, 18 insertions(+), 5 deletions(-)

doc/docgen.zig+18-5
...@@ -4,6 +4,7 @@ const io = std.io;...@@ -4,6 +4,7 @@ const io = std.io;
4const fs = std.fs;4const fs = std.fs;
5const process = std.process;5const process = std.process;
6const ChildProcess = std.ChildProcess;6const ChildProcess = std.ChildProcess;
7const Progress = std.Progress;
7const print = std.debug.print;8const print = std.debug.print;
8const mem = std.mem;9const mem = std.mem;
9const testing = std.testing;10const testing = std.testing;
...@@ -234,7 +235,7 @@ fn parseError(tokenizer: *Tokenizer, token: Token, comptime fmt: []const u8, arg...@@ -234,7 +235,7 @@ fn parseError(tokenizer: *Tokenizer, token: Token, comptime fmt: []const u8, arg
234 }235 }
235 }236 }
236 {237 {
237 const caret_count = token.end - token.start;238 const caret_count = std.math.min(token.end, loc.line_end) - token.start;
238 var i: usize = 0;239 var i: usize = 0;
239 while (i < caret_count) : (i += 1) {240 while (i < caret_count) : (i += 1) {
240 print("~", .{});241 print("~", .{});
...@@ -1012,6 +1013,9 @@ fn tokenizeAndPrint(docgen_tokenizer: *Tokenizer, out: anytype, source_token: To...@@ -1012,6 +1013,9 @@ fn tokenizeAndPrint(docgen_tokenizer: *Tokenizer, out: anytype, source_token: To
10121013
1013fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: anytype, zig_exe: []const u8, do_code_tests: bool) !void {1014fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: anytype, zig_exe: []const u8, do_code_tests: bool) !void {
1014 var code_progress_index: usize = 0;1015 var code_progress_index: usize = 0;
1016 var progress = Progress{};
1017 const root_node = try progress.start("Generating docgen examples", toc.nodes.len);
1018 defer root_node.end();
10151019
1016 var env_map = try process.getEnvMap(allocator);1020 var env_map = try process.getEnvMap(allocator);
1017 try env_map.set("ZIG_DEBUG_COLOR", "1");1021 try env_map.set("ZIG_DEBUG_COLOR", "1");
...@@ -1058,8 +1062,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1058,8 +1062,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1058 try tokenizeAndPrint(tokenizer, out, content_tok);1062 try tokenizeAndPrint(tokenizer, out, content_tok);
1059 },1063 },
1060 .Code => |code| {1064 .Code => |code| {
1061 code_progress_index += 1;1065 root_node.completeOne();
1062 print("docgen example code {}/{}...", .{ code_progress_index, tokenizer.code_node_count });
10631066
1064 const raw_source = tokenizer.buffer[code.source_token.start..code.source_token.end];1067 const raw_source = tokenizer.buffer[code.source_token.start..code.source_token.end];
1065 const trimmed_raw_source = mem.trim(u8, raw_source, " \n");1068 const trimmed_raw_source = mem.trim(u8, raw_source, " \n");
...@@ -1071,7 +1074,6 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1071,7 +1074,6 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1071 try out.writeAll("</pre>");1074 try out.writeAll("</pre>");
10721075
1073 if (!do_code_tests) {1076 if (!do_code_tests) {
1074 print("SKIP\n", .{});
1075 continue;1077 continue;
1076 }1078 }
10771079
...@@ -1133,12 +1135,14 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1133,12 +1135,14 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1133 switch (result.term) {1135 switch (result.term) {
1134 .Exited => |exit_code| {1136 .Exited => |exit_code| {
1135 if (exit_code == 0) {1137 if (exit_code == 0) {
1138 progress.log("", .{});
1136 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});1139 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1137 dumpArgs(build_args.items);1140 dumpArgs(build_args.items);
1138 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});1141 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});
1139 }1142 }
1140 },1143 },
1141 else => {1144 else => {
1145 progress.log("", .{});
1142 print("{s}\nThe following command crashed:\n", .{result.stderr});1146 print("{s}\nThe following command crashed:\n", .{result.stderr});
1143 dumpArgs(build_args.items);1147 dumpArgs(build_args.items);
1144 return parseError(tokenizer, code.source_token, "example compile crashed", .{});1148 return parseError(tokenizer, code.source_token, "example compile crashed", .{});
...@@ -1187,6 +1191,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1187,6 +1191,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1187 switch (result.term) {1191 switch (result.term) {
1188 .Exited => |exit_code| {1192 .Exited => |exit_code| {
1189 if (exit_code == 0) {1193 if (exit_code == 0) {
1194 progress.log("", .{});
1190 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});1195 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1191 dumpArgs(run_args);1196 dumpArgs(run_args);
1192 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});1197 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});
...@@ -1266,18 +1271,21 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1266,18 +1271,21 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1266 switch (result.term) {1271 switch (result.term) {
1267 .Exited => |exit_code| {1272 .Exited => |exit_code| {
1268 if (exit_code == 0) {1273 if (exit_code == 0) {
1274 progress.log("", .{});
1269 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});1275 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1270 dumpArgs(test_args.items);1276 dumpArgs(test_args.items);
1271 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});1277 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});
1272 }1278 }
1273 },1279 },
1274 else => {1280 else => {
1281 progress.log("", .{});
1275 print("{s}\nThe following command crashed:\n", .{result.stderr});1282 print("{s}\nThe following command crashed:\n", .{result.stderr});
1276 dumpArgs(test_args.items);1283 dumpArgs(test_args.items);
1277 return parseError(tokenizer, code.source_token, "example compile crashed", .{});1284 return parseError(tokenizer, code.source_token, "example compile crashed", .{});
1278 },1285 },
1279 }1286 }
1280 if (mem.indexOf(u8, result.stderr, error_match) == null) {1287 if (mem.indexOf(u8, result.stderr, error_match) == null) {
1288 progress.log("", .{});
1281 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });1289 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });
1282 return parseError(tokenizer, code.source_token, "example did not have expected compile error", .{});1290 return parseError(tokenizer, code.source_token, "example did not have expected compile error", .{});
1283 }1291 }
...@@ -1321,18 +1329,21 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1321,18 +1329,21 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1321 switch (result.term) {1329 switch (result.term) {
1322 .Exited => |exit_code| {1330 .Exited => |exit_code| {
1323 if (exit_code == 0) {1331 if (exit_code == 0) {
1332 progress.log("", .{});
1324 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});1333 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1325 dumpArgs(test_args.items);1334 dumpArgs(test_args.items);
1326 return parseError(tokenizer, code.source_token, "example test incorrectly succeeded", .{});1335 return parseError(tokenizer, code.source_token, "example test incorrectly succeeded", .{});
1327 }1336 }
1328 },1337 },
1329 else => {1338 else => {
1339 progress.log("", .{});
1330 print("{s}\nThe following command crashed:\n", .{result.stderr});1340 print("{s}\nThe following command crashed:\n", .{result.stderr});
1331 dumpArgs(test_args.items);1341 dumpArgs(test_args.items);
1332 return parseError(tokenizer, code.source_token, "example compile crashed", .{});1342 return parseError(tokenizer, code.source_token, "example compile crashed", .{});
1333 },1343 },
1334 }1344 }
1335 if (mem.indexOf(u8, result.stderr, error_match) == null) {1345 if (mem.indexOf(u8, result.stderr, error_match) == null) {
1346 progress.log("", .{});
1336 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });1347 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });
1337 return parseError(tokenizer, code.source_token, "example did not have expected runtime safety error message", .{});1348 return parseError(tokenizer, code.source_token, "example did not have expected runtime safety error message", .{});
1338 }1349 }
...@@ -1400,18 +1411,21 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1400,18 +1411,21 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1400 switch (result.term) {1411 switch (result.term) {
1401 .Exited => |exit_code| {1412 .Exited => |exit_code| {
1402 if (exit_code == 0) {1413 if (exit_code == 0) {
1414 progress.log("", .{});
1403 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});1415 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1404 dumpArgs(build_args.items);1416 dumpArgs(build_args.items);
1405 return parseError(tokenizer, code.source_token, "example build incorrectly succeeded", .{});1417 return parseError(tokenizer, code.source_token, "example build incorrectly succeeded", .{});
1406 }1418 }
1407 },1419 },
1408 else => {1420 else => {
1421 progress.log("", .{});
1409 print("{s}\nThe following command crashed:\n", .{result.stderr});1422 print("{s}\nThe following command crashed:\n", .{result.stderr});
1410 dumpArgs(build_args.items);1423 dumpArgs(build_args.items);
1411 return parseError(tokenizer, code.source_token, "example compile crashed", .{});1424 return parseError(tokenizer, code.source_token, "example compile crashed", .{});
1412 },1425 },
1413 }1426 }
1414 if (mem.indexOf(u8, result.stderr, error_match) == null) {1427 if (mem.indexOf(u8, result.stderr, error_match) == null) {
1428 progress.log("", .{});
1415 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });1429 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });
1416 return parseError(tokenizer, code.source_token, "example did not have expected compile error message", .{});1430 return parseError(tokenizer, code.source_token, "example did not have expected compile error message", .{});
1417 }1431 }
...@@ -1461,7 +1475,6 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1461,7 +1475,6 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1461 try out.print("\n{s}{s}</code></pre>\n", .{ escaped_stderr, escaped_stdout });1475 try out.print("\n{s}{s}</code></pre>\n", .{ escaped_stderr, escaped_stdout });
1462 },1476 },
1463 }1477 }
1464 print("OK\n", .{});
1465 },1478 },
1466 }1479 }
1467 }1480 }