| ... | ... | @@ -215,9 +215,9 @@ const Tokenizer = struct { |
| 215 | 215 | fn parseError(tokenizer: *Tokenizer, token: Token, comptime fmt: []const u8, args: anytype) anyerror { |
| 216 | 216 | const loc = tokenizer.getTokenLocation(token); |
| 217 | 217 | const args_prefix = .{ tokenizer.source_file_name, loc.line + 1, loc.column + 1 }; |
| 218 | | print("{}:{}:{}: error: " ++ fmt ++ "\n", args_prefix ++ args); |
| 218 | print("{s}:{d}:{d}: error: " ++ fmt ++ "\n", args_prefix ++ args); |
| 219 | 219 | if (loc.line_start <= loc.line_end) { |
| 220 | | print("{}\n", .{tokenizer.buffer[loc.line_start..loc.line_end]}); |
| 220 | print("{s}\n", .{tokenizer.buffer[loc.line_start..loc.line_end]}); |
| 221 | 221 | { |
| 222 | 222 | var i: usize = 0; |
| 223 | 223 | while (i < loc.column) : (i += 1) { |
| ... | ... | @@ -238,7 +238,7 @@ fn parseError(tokenizer: *Tokenizer, token: Token, comptime fmt: []const u8, arg |
| 238 | 238 | |
| 239 | 239 | fn assertToken(tokenizer: *Tokenizer, token: Token, id: Token.Id) !void { |
| 240 | 240 | if (token.id != id) { |
| 241 | | return parseError(tokenizer, token, "expected {}, found {}", .{ @tagName(id), @tagName(token.id) }); |
| 241 | return parseError(tokenizer, token, "expected {s}, found {s}", .{ @tagName(id), @tagName(token.id) }); |
| 242 | 242 | } |
| 243 | 243 | } |
| 244 | 244 | |
| ... | ... | @@ -374,7 +374,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 374 | 374 | return parseError( |
| 375 | 375 | tokenizer, |
| 376 | 376 | bracket_tok, |
| 377 | | "unrecognized header_open param: {}", |
| 377 | "unrecognized header_open param: {s}", |
| 378 | 378 | .{param}, |
| 379 | 379 | ); |
| 380 | 380 | } |
| ... | ... | @@ -394,7 +394,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 394 | 394 | }, |
| 395 | 395 | }); |
| 396 | 396 | if (try urls.fetchPut(urlized, tag_token)) |entry| { |
| 397 | | parseError(tokenizer, tag_token, "duplicate header url: #{}", .{urlized}) catch {}; |
| 397 | parseError(tokenizer, tag_token, "duplicate header url: #{s}", .{urlized}) catch {}; |
| 398 | 398 | parseError(tokenizer, entry.value, "other tag here", .{}) catch {}; |
| 399 | 399 | return error.ParseError; |
| 400 | 400 | } |
| ... | ... | @@ -411,7 +411,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 411 | 411 | } |
| 412 | 412 | last_columns = columns; |
| 413 | 413 | try toc.writeByteNTimes(' ', 4 + header_stack_size * 4); |
| 414 | | try toc.print("<li><a id=\"toc-{}\" href=\"#{}\">{}</a>", .{ urlized, urlized, content }); |
| 414 | try toc.print("<li><a id=\"toc-{s}\" href=\"#{s}\">{s}</a>", .{ urlized, urlized, content }); |
| 415 | 415 | } else if (mem.eql(u8, tag_name, "header_close")) { |
| 416 | 416 | if (header_stack_size == 0) { |
| 417 | 417 | return parseError(tokenizer, tag_token, "unbalanced close header", .{}); |
| ... | ... | @@ -515,7 +515,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 515 | 515 | code_kind_id = Code.Id{ .Obj = null }; |
| 516 | 516 | is_inline = true; |
| 517 | 517 | } else { |
| 518 | | return parseError(tokenizer, code_kind_tok, "unrecognized code kind: {}", .{code_kind_str}); |
| 518 | return parseError(tokenizer, code_kind_tok, "unrecognized code kind: {s}", .{code_kind_str}); |
| 519 | 519 | } |
| 520 | 520 | |
| 521 | 521 | var mode: builtin.Mode = .Debug; |
| ... | ... | @@ -559,7 +559,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 559 | 559 | return parseError( |
| 560 | 560 | tokenizer, |
| 561 | 561 | end_code_tag, |
| 562 | | "invalid token inside code_begin: {}", |
| 562 | "invalid token inside code_begin: {s}", |
| 563 | 563 | .{end_tag_name}, |
| 564 | 564 | ); |
| 565 | 565 | } |
| ... | ... | @@ -590,14 +590,14 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 590 | 590 | return parseError( |
| 591 | 591 | tokenizer, |
| 592 | 592 | end_syntax_tag, |
| 593 | | "invalid token inside syntax: {}", |
| 593 | "invalid token inside syntax: {s}", |
| 594 | 594 | .{end_tag_name}, |
| 595 | 595 | ); |
| 596 | 596 | } |
| 597 | 597 | _ = try eatToken(tokenizer, Token.Id.BracketClose); |
| 598 | 598 | try nodes.append(Node{ .Syntax = content_tok }); |
| 599 | 599 | } else { |
| 600 | | return parseError(tokenizer, tag_token, "unrecognized tag name: {}", .{tag_name}); |
| 600 | return parseError(tokenizer, tag_token, "unrecognized tag name: {s}", .{tag_name}); |
| 601 | 601 | } |
| 602 | 602 | }, |
| 603 | 603 | else => return parseError(tokenizer, token, "invalid token", .{}), |
| ... | ... | @@ -744,7 +744,7 @@ fn termColor(allocator: *mem.Allocator, input: []const u8) ![]u8 { |
| 744 | 744 | try out.writeAll("</span>"); |
| 745 | 745 | } |
| 746 | 746 | if (first_number != 0 or second_number != 0) { |
| 747 | | try out.print("<span class=\"t{}_{}\">", .{ first_number, second_number }); |
| 747 | try out.print("<span class=\"t{d}_{d}\">", .{ first_number, second_number }); |
| 748 | 748 | open_span_count += 1; |
| 749 | 749 | } |
| 750 | 750 | }, |
| ... | ... | @@ -1004,9 +1004,9 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1004 | 1004 | }, |
| 1005 | 1005 | .Link => |info| { |
| 1006 | 1006 | if (!toc.urls.contains(info.url)) { |
| 1007 | | return parseError(tokenizer, info.token, "url not found: {}", .{info.url}); |
| 1007 | return parseError(tokenizer, info.token, "url not found: {s}", .{info.url}); |
| 1008 | 1008 | } |
| 1009 | | try out.print("<a href=\"#{}\">{}</a>", .{ info.url, info.name }); |
| 1009 | try out.print("<a href=\"#{s}\">{s}</a>", .{ info.url, info.name }); |
| 1010 | 1010 | }, |
| 1011 | 1011 | .Nav => { |
| 1012 | 1012 | try out.writeAll(toc.toc); |
| ... | ... | @@ -1018,7 +1018,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1018 | 1018 | }, |
| 1019 | 1019 | .HeaderOpen => |info| { |
| 1020 | 1020 | try out.print( |
| 1021 | | "<h{} id=\"{}\"><a href=\"#toc-{}\">{}</a> <a class=\"hdr\" href=\"#{}\">§</a></h{}>\n", |
| 1021 | "<h{d} id=\"{s}\"><a href=\"#toc-{s}\">{s}</a> <a class=\"hdr\" href=\"#{s}\">§</a></h{d}>\n", |
| 1022 | 1022 | .{ info.n, info.url, info.url, info.name, info.url, info.n }, |
| 1023 | 1023 | ); |
| 1024 | 1024 | }, |
| ... | ... | @@ -1027,9 +1027,9 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1027 | 1027 | for (items) |item| { |
| 1028 | 1028 | const url = try urlize(allocator, item.name); |
| 1029 | 1029 | if (!toc.urls.contains(url)) { |
| 1030 | | return parseError(tokenizer, item.token, "url not found: {}", .{url}); |
| 1030 | return parseError(tokenizer, item.token, "url not found: {s}", .{url}); |
| 1031 | 1031 | } |
| 1032 | | try out.print("<li><a href=\"#{}\">{}</a></li>\n", .{ url, item.name }); |
| 1032 | try out.print("<li><a href=\"#{s}\">{s}</a></li>\n", .{ url, item.name }); |
| 1033 | 1033 | } |
| 1034 | 1034 | try out.writeAll("</ul>\n"); |
| 1035 | 1035 | }, |
| ... | ... | @@ -1043,12 +1043,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1043 | 1043 | const raw_source = tokenizer.buffer[code.source_token.start..code.source_token.end]; |
| 1044 | 1044 | const trimmed_raw_source = mem.trim(u8, raw_source, " \n"); |
| 1045 | 1045 | if (!code.is_inline) { |
| 1046 | | try out.print("<p class=\"file\">{}.zig</p>", .{code.name}); |
| 1046 | try out.print("<p class=\"file\">{s}.zig</p>", .{code.name}); |
| 1047 | 1047 | } |
| 1048 | 1048 | try out.writeAll("<pre>"); |
| 1049 | 1049 | try tokenizeAndPrint(tokenizer, out, code.source_token); |
| 1050 | 1050 | try out.writeAll("</pre>"); |
| 1051 | | const name_plus_ext = try std.fmt.allocPrint(allocator, "{}.zig", .{code.name}); |
| 1051 | const name_plus_ext = try std.fmt.allocPrint(allocator, "{s}.zig", .{code.name}); |
| 1052 | 1052 | const tmp_source_file_name = try fs.path.join( |
| 1053 | 1053 | allocator, |
| 1054 | 1054 | &[_][]const u8{ tmp_dir_name, name_plus_ext }, |
| ... | ... | @@ -1057,7 +1057,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1057 | 1057 | |
| 1058 | 1058 | switch (code.id) { |
| 1059 | 1059 | Code.Id.Exe => |expected_outcome| code_block: { |
| 1060 | | const name_plus_bin_ext = try std.fmt.allocPrint(allocator, "{}{}", .{ code.name, exe_ext }); |
| 1060 | const name_plus_bin_ext = try std.fmt.allocPrint(allocator, "{s}{s}", .{ code.name, exe_ext }); |
| 1061 | 1061 | var build_args = std.ArrayList([]const u8).init(allocator); |
| 1062 | 1062 | defer build_args.deinit(); |
| 1063 | 1063 | try build_args.appendSlice(&[_][]const u8{ |
| ... | ... | @@ -1066,7 +1066,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1066 | 1066 | "--color", "on", |
| 1067 | 1067 | "--enable-cache", tmp_source_file_name, |
| 1068 | 1068 | }); |
| 1069 | | try out.print("<pre><code class=\"shell\">$ zig build-exe {}.zig", .{code.name}); |
| 1069 | try out.print("<pre><code class=\"shell\">$ zig build-exe {s}.zig", .{code.name}); |
| 1070 | 1070 | switch (code.mode) { |
| 1071 | 1071 | .Debug => {}, |
| 1072 | 1072 | else => { |
| ... | ... | @@ -1075,7 +1075,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1075 | 1075 | }, |
| 1076 | 1076 | } |
| 1077 | 1077 | for (code.link_objects) |link_object| { |
| 1078 | | const name_with_ext = try std.fmt.allocPrint(allocator, "{}{}", .{ link_object, obj_ext }); |
| 1078 | const name_with_ext = try std.fmt.allocPrint(allocator, "{s}{s}", .{ link_object, obj_ext }); |
| 1079 | 1079 | const full_path_object = try fs.path.join( |
| 1080 | 1080 | allocator, |
| 1081 | 1081 | &[_][]const u8{ tmp_dir_name, name_with_ext }, |
| ... | ... | @@ -1093,7 +1093,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1093 | 1093 | if (code.target_str) |triple| { |
| 1094 | 1094 | try build_args.appendSlice(&[_][]const u8{ "-target", triple }); |
| 1095 | 1095 | if (!code.is_inline) { |
| 1096 | | try out.print(" -target {}", .{triple}); |
| 1096 | try out.print(" -target {s}", .{triple}); |
| 1097 | 1097 | } |
| 1098 | 1098 | } |
| 1099 | 1099 | if (expected_outcome == .BuildFail) { |
| ... | ... | @@ -1106,20 +1106,20 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1106 | 1106 | switch (result.term) { |
| 1107 | 1107 | .Exited => |exit_code| { |
| 1108 | 1108 | if (exit_code == 0) { |
| 1109 | | print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1109 | print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1110 | 1110 | dumpArgs(build_args.items); |
| 1111 | 1111 | return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{}); |
| 1112 | 1112 | } |
| 1113 | 1113 | }, |
| 1114 | 1114 | else => { |
| 1115 | | print("{}\nThe following command crashed:\n", .{result.stderr}); |
| 1115 | print("{s}\nThe following command crashed:\n", .{result.stderr}); |
| 1116 | 1116 | dumpArgs(build_args.items); |
| 1117 | 1117 | return parseError(tokenizer, code.source_token, "example compile crashed", .{}); |
| 1118 | 1118 | }, |
| 1119 | 1119 | } |
| 1120 | 1120 | const escaped_stderr = try escapeHtml(allocator, result.stderr); |
| 1121 | 1121 | const colored_stderr = try termColor(allocator, escaped_stderr); |
| 1122 | | try out.print("\n{}</code></pre>\n", .{colored_stderr}); |
| 1122 | try out.print("\n{s}</code></pre>\n", .{colored_stderr}); |
| 1123 | 1123 | break :code_block; |
| 1124 | 1124 | } |
| 1125 | 1125 | const exec_result = exec(allocator, &env_map, build_args.items) catch |
| ... | ... | @@ -1138,7 +1138,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1138 | 1138 | } |
| 1139 | 1139 | |
| 1140 | 1140 | const path_to_exe_dir = mem.trim(u8, exec_result.stdout, " \r\n"); |
| 1141 | | const path_to_exe_basename = try std.fmt.allocPrint(allocator, "{}{}", .{ |
| 1141 | const path_to_exe_basename = try std.fmt.allocPrint(allocator, "{s}{s}", .{ |
| 1142 | 1142 | code.name, |
| 1143 | 1143 | target.exeFileExt(), |
| 1144 | 1144 | }); |
| ... | ... | @@ -1160,7 +1160,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1160 | 1160 | switch (result.term) { |
| 1161 | 1161 | .Exited => |exit_code| { |
| 1162 | 1162 | if (exit_code == 0) { |
| 1163 | | print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1163 | print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1164 | 1164 | dumpArgs(run_args); |
| 1165 | 1165 | return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{}); |
| 1166 | 1166 | } |
| ... | ... | @@ -1179,7 +1179,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1179 | 1179 | const colored_stderr = try termColor(allocator, escaped_stderr); |
| 1180 | 1180 | const colored_stdout = try termColor(allocator, escaped_stdout); |
| 1181 | 1181 | |
| 1182 | | try out.print("\n$ ./{}\n{}{}", .{ code.name, colored_stdout, colored_stderr }); |
| 1182 | try out.print("\n$ ./{s}\n{s}{s}", .{ code.name, colored_stdout, colored_stderr }); |
| 1183 | 1183 | if (exited_with_signal) { |
| 1184 | 1184 | try out.print("(process terminated by signal)", .{}); |
| 1185 | 1185 | } |
| ... | ... | @@ -1190,7 +1190,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1190 | 1190 | defer test_args.deinit(); |
| 1191 | 1191 | |
| 1192 | 1192 | try test_args.appendSlice(&[_][]const u8{ zig_exe, "test", tmp_source_file_name }); |
| 1193 | | try out.print("<pre><code class=\"shell\">$ zig test {}.zig", .{code.name}); |
| 1193 | try out.print("<pre><code class=\"shell\">$ zig test {s}.zig", .{code.name}); |
| 1194 | 1194 | switch (code.mode) { |
| 1195 | 1195 | .Debug => {}, |
| 1196 | 1196 | else => { |
| ... | ... | @@ -1204,12 +1204,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1204 | 1204 | } |
| 1205 | 1205 | if (code.target_str) |triple| { |
| 1206 | 1206 | try test_args.appendSlice(&[_][]const u8{ "-target", triple }); |
| 1207 | | try out.print(" -target {}", .{triple}); |
| 1207 | try out.print(" -target {s}", .{triple}); |
| 1208 | 1208 | } |
| 1209 | 1209 | const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{}); |
| 1210 | 1210 | const escaped_stderr = try escapeHtml(allocator, result.stderr); |
| 1211 | 1211 | const escaped_stdout = try escapeHtml(allocator, result.stdout); |
| 1212 | | try out.print("\n{}{}</code></pre>\n", .{ escaped_stderr, escaped_stdout }); |
| 1212 | try out.print("\n{s}{s}</code></pre>\n", .{ escaped_stderr, escaped_stdout }); |
| 1213 | 1213 | }, |
| 1214 | 1214 | Code.Id.TestError => |error_match| { |
| 1215 | 1215 | var test_args = std.ArrayList([]const u8).init(allocator); |
| ... | ... | @@ -1222,7 +1222,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1222 | 1222 | "on", |
| 1223 | 1223 | tmp_source_file_name, |
| 1224 | 1224 | }); |
| 1225 | | try out.print("<pre><code class=\"shell\">$ zig test {}.zig", .{code.name}); |
| 1225 | try out.print("<pre><code class=\"shell\">$ zig test {s}.zig", .{code.name}); |
| 1226 | 1226 | switch (code.mode) { |
| 1227 | 1227 | .Debug => {}, |
| 1228 | 1228 | else => { |
| ... | ... | @@ -1239,24 +1239,24 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1239 | 1239 | switch (result.term) { |
| 1240 | 1240 | .Exited => |exit_code| { |
| 1241 | 1241 | if (exit_code == 0) { |
| 1242 | | print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1242 | print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1243 | 1243 | dumpArgs(test_args.items); |
| 1244 | 1244 | return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{}); |
| 1245 | 1245 | } |
| 1246 | 1246 | }, |
| 1247 | 1247 | else => { |
| 1248 | | print("{}\nThe following command crashed:\n", .{result.stderr}); |
| 1248 | print("{s}\nThe following command crashed:\n", .{result.stderr}); |
| 1249 | 1249 | dumpArgs(test_args.items); |
| 1250 | 1250 | return parseError(tokenizer, code.source_token, "example compile crashed", .{}); |
| 1251 | 1251 | }, |
| 1252 | 1252 | } |
| 1253 | 1253 | if (mem.indexOf(u8, result.stderr, error_match) == null) { |
| 1254 | | print("{}\nExpected to find '{}' in stderr\n", .{ result.stderr, error_match }); |
| 1254 | print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match }); |
| 1255 | 1255 | return parseError(tokenizer, code.source_token, "example did not have expected compile error", .{}); |
| 1256 | 1256 | } |
| 1257 | 1257 | const escaped_stderr = try escapeHtml(allocator, result.stderr); |
| 1258 | 1258 | const colored_stderr = try termColor(allocator, escaped_stderr); |
| 1259 | | try out.print("\n{}</code></pre>\n", .{colored_stderr}); |
| 1259 | try out.print("\n{s}</code></pre>\n", .{colored_stderr}); |
| 1260 | 1260 | }, |
| 1261 | 1261 | |
| 1262 | 1262 | Code.Id.TestSafety => |error_match| { |
| ... | ... | @@ -1294,31 +1294,31 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1294 | 1294 | switch (result.term) { |
| 1295 | 1295 | .Exited => |exit_code| { |
| 1296 | 1296 | if (exit_code == 0) { |
| 1297 | | print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1297 | print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1298 | 1298 | dumpArgs(test_args.items); |
| 1299 | 1299 | return parseError(tokenizer, code.source_token, "example test incorrectly succeeded", .{}); |
| 1300 | 1300 | } |
| 1301 | 1301 | }, |
| 1302 | 1302 | else => { |
| 1303 | | print("{}\nThe following command crashed:\n", .{result.stderr}); |
| 1303 | print("{s}\nThe following command crashed:\n", .{result.stderr}); |
| 1304 | 1304 | dumpArgs(test_args.items); |
| 1305 | 1305 | return parseError(tokenizer, code.source_token, "example compile crashed", .{}); |
| 1306 | 1306 | }, |
| 1307 | 1307 | } |
| 1308 | 1308 | if (mem.indexOf(u8, result.stderr, error_match) == null) { |
| 1309 | | print("{}\nExpected to find '{}' in stderr\n", .{ result.stderr, error_match }); |
| 1309 | print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match }); |
| 1310 | 1310 | return parseError(tokenizer, code.source_token, "example did not have expected runtime safety error message", .{}); |
| 1311 | 1311 | } |
| 1312 | 1312 | const escaped_stderr = try escapeHtml(allocator, result.stderr); |
| 1313 | 1313 | const colored_stderr = try termColor(allocator, escaped_stderr); |
| 1314 | | try out.print("<pre><code class=\"shell\">$ zig test {}.zig{}\n{}</code></pre>\n", .{ |
| 1314 | try out.print("<pre><code class=\"shell\">$ zig test {s}.zig{s}\n{s}</code></pre>\n", .{ |
| 1315 | 1315 | code.name, |
| 1316 | 1316 | mode_arg, |
| 1317 | 1317 | colored_stderr, |
| 1318 | 1318 | }); |
| 1319 | 1319 | }, |
| 1320 | 1320 | Code.Id.Obj => |maybe_error_match| { |
| 1321 | | const name_plus_obj_ext = try std.fmt.allocPrint(allocator, "{}{}", .{ code.name, obj_ext }); |
| 1321 | const name_plus_obj_ext = try std.fmt.allocPrint(allocator, "{s}{s}", .{ code.name, obj_ext }); |
| 1322 | 1322 | const tmp_obj_file_name = try fs.path.join( |
| 1323 | 1323 | allocator, |
| 1324 | 1324 | &[_][]const u8{ tmp_dir_name, name_plus_obj_ext }, |
| ... | ... | @@ -1326,7 +1326,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1326 | 1326 | var build_args = std.ArrayList([]const u8).init(allocator); |
| 1327 | 1327 | defer build_args.deinit(); |
| 1328 | 1328 | |
| 1329 | | const name_plus_h_ext = try std.fmt.allocPrint(allocator, "{}.h", .{code.name}); |
| 1329 | const name_plus_h_ext = try std.fmt.allocPrint(allocator, "{s}.h", .{code.name}); |
| 1330 | 1330 | const output_h_file_name = try fs.path.join( |
| 1331 | 1331 | allocator, |
| 1332 | 1332 | &[_][]const u8{ tmp_dir_name, name_plus_h_ext }, |
| ... | ... | @@ -1345,7 +1345,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1345 | 1345 | }), |
| 1346 | 1346 | }); |
| 1347 | 1347 | if (!code.is_inline) { |
| 1348 | | try out.print("<pre><code class=\"shell\">$ zig build-obj {}.zig", .{code.name}); |
| 1348 | try out.print("<pre><code class=\"shell\">$ zig build-obj {s}.zig", .{code.name}); |
| 1349 | 1349 | } |
| 1350 | 1350 | |
| 1351 | 1351 | switch (code.mode) { |
| ... | ... | @@ -1360,7 +1360,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1360 | 1360 | |
| 1361 | 1361 | if (code.target_str) |triple| { |
| 1362 | 1362 | try build_args.appendSlice(&[_][]const u8{ "-target", triple }); |
| 1363 | | try out.print(" -target {}", .{triple}); |
| 1363 | try out.print(" -target {s}", .{triple}); |
| 1364 | 1364 | } |
| 1365 | 1365 | |
| 1366 | 1366 | if (maybe_error_match) |error_match| { |
| ... | ... | @@ -1373,24 +1373,24 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1373 | 1373 | switch (result.term) { |
| 1374 | 1374 | .Exited => |exit_code| { |
| 1375 | 1375 | if (exit_code == 0) { |
| 1376 | | print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1376 | print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr}); |
| 1377 | 1377 | dumpArgs(build_args.items); |
| 1378 | 1378 | return parseError(tokenizer, code.source_token, "example build incorrectly succeeded", .{}); |
| 1379 | 1379 | } |
| 1380 | 1380 | }, |
| 1381 | 1381 | else => { |
| 1382 | | print("{}\nThe following command crashed:\n", .{result.stderr}); |
| 1382 | print("{s}\nThe following command crashed:\n", .{result.stderr}); |
| 1383 | 1383 | dumpArgs(build_args.items); |
| 1384 | 1384 | return parseError(tokenizer, code.source_token, "example compile crashed", .{}); |
| 1385 | 1385 | }, |
| 1386 | 1386 | } |
| 1387 | 1387 | if (mem.indexOf(u8, result.stderr, error_match) == null) { |
| 1388 | | print("{}\nExpected to find '{}' in stderr\n", .{ result.stderr, error_match }); |
| 1388 | print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match }); |
| 1389 | 1389 | return parseError(tokenizer, code.source_token, "example did not have expected compile error message", .{}); |
| 1390 | 1390 | } |
| 1391 | 1391 | const escaped_stderr = try escapeHtml(allocator, result.stderr); |
| 1392 | 1392 | const colored_stderr = try termColor(allocator, escaped_stderr); |
| 1393 | | try out.print("\n{}", .{colored_stderr}); |
| 1393 | try out.print("\n{s}", .{colored_stderr}); |
| 1394 | 1394 | } else { |
| 1395 | 1395 | _ = exec(allocator, &env_map, build_args.items) catch return parseError(tokenizer, code.source_token, "example failed to compile", .{}); |
| 1396 | 1396 | } |
| ... | ... | @@ -1416,7 +1416,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1416 | 1416 | tmp_dir_name, fs.path.sep_str, bin_basename, |
| 1417 | 1417 | }), |
| 1418 | 1418 | }); |
| 1419 | | try out.print("<pre><code class=\"shell\">$ zig build-lib {}.zig", .{code.name}); |
| 1419 | try out.print("<pre><code class=\"shell\">$ zig build-lib {s}.zig", .{code.name}); |
| 1420 | 1420 | switch (code.mode) { |
| 1421 | 1421 | .Debug => {}, |
| 1422 | 1422 | else => { |
| ... | ... | @@ -1426,12 +1426,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1426 | 1426 | } |
| 1427 | 1427 | if (code.target_str) |triple| { |
| 1428 | 1428 | try test_args.appendSlice(&[_][]const u8{ "-target", triple }); |
| 1429 | | try out.print(" -target {}", .{triple}); |
| 1429 | try out.print(" -target {s}", .{triple}); |
| 1430 | 1430 | } |
| 1431 | 1431 | const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{}); |
| 1432 | 1432 | const escaped_stderr = try escapeHtml(allocator, result.stderr); |
| 1433 | 1433 | const escaped_stdout = try escapeHtml(allocator, result.stdout); |
| 1434 | | try out.print("\n{}{}</code></pre>\n", .{ escaped_stderr, escaped_stdout }); |
| 1434 | try out.print("\n{s}{s}</code></pre>\n", .{ escaped_stderr, escaped_stdout }); |
| 1435 | 1435 | }, |
| 1436 | 1436 | } |
| 1437 | 1437 | print("OK\n", .{}); |
| ... | ... | @@ -1450,13 +1450,13 @@ fn exec(allocator: *mem.Allocator, env_map: *std.BufMap, args: []const []const u |
| 1450 | 1450 | switch (result.term) { |
| 1451 | 1451 | .Exited => |exit_code| { |
| 1452 | 1452 | if (exit_code != 0) { |
| 1453 | | print("{}\nThe following command exited with code {}:\n", .{ result.stderr, exit_code }); |
| 1453 | print("{s}\nThe following command exited with code {}:\n", .{ result.stderr, exit_code }); |
| 1454 | 1454 | dumpArgs(args); |
| 1455 | 1455 | return error.ChildExitError; |
| 1456 | 1456 | } |
| 1457 | 1457 | }, |
| 1458 | 1458 | else => { |
| 1459 | | print("{}\nThe following command crashed:\n", .{result.stderr}); |
| 1459 | print("{s}\nThe following command crashed:\n", .{result.stderr}); |
| 1460 | 1460 | dumpArgs(args); |
| 1461 | 1461 | return error.ChildCrashed; |
| 1462 | 1462 | }, |
| ... | ... | @@ -1471,7 +1471,7 @@ fn getBuiltinCode(allocator: *mem.Allocator, env_map: *std.BufMap, zig_exe: []co |
| 1471 | 1471 | |
| 1472 | 1472 | fn dumpArgs(args: []const []const u8) void { |
| 1473 | 1473 | for (args) |arg| |
| 1474 | | print("{} ", .{arg}) |
| 1474 | print("{s} ", .{arg}) |
| 1475 | 1475 | else |
| 1476 | 1476 | print("\n", .{}); |
| 1477 | 1477 | } |