build: make Exercise.hint optional

Use an optional type, instead of an empty string, since it is more
idiomatic.
This commit is contained in:
Manlio Perillo 2023-05-06 11:50:42 +02:00
parent 1c73ad29a7
commit be43e2d010
2 changed files with 6 additions and 12 deletions

View file

@ -25,7 +25,7 @@ pub const Exercise = struct {
output: []const u8, output: []const u8,
/// This is an optional hint to give if the program does not succeed. /// This is an optional hint to give if the program does not succeed.
hint: []const u8 = "", hint: ?[]const u8 = null,
/// By default, we verify output against stderr. /// By default, we verify output against stderr.
/// Set this to true to check stdout instead. /// Set this to true to check stdout instead.
@ -254,22 +254,16 @@ const ZiglingStep = struct {
} }
const exe_path = self.compile(prog_node) catch { const exe_path = self.compile(prog_node) catch {
if (self.exercise.hint.len > 0) { if (self.exercise.hint) |hint|
print("\n{s}HINT: {s}{s}", .{ print("\n{s}HINT: {s}{s}", .{ bold_text, hint, reset_text });
bold_text, self.exercise.hint, reset_text,
});
}
self.help(); self.help();
std.os.exit(1); std.os.exit(1);
}; };
self.run(exe_path, prog_node) catch { self.run(exe_path, prog_node) catch {
if (self.exercise.hint.len > 0) { if (self.exercise.hint) |hint|
print("\n{s}HINT: {s}{s}", .{ print("\n{s}HINT: {s}{s}", .{ bold_text, hint, reset_text });
bold_text, self.exercise.hint, reset_text,
});
}
self.help(); self.help();
std.os.exit(1); std.os.exit(1);

View file

@ -175,7 +175,7 @@ pub fn addCliTests(b: *std.Build, exercises: []const Exercise) *Step {
const cmd = b.addSystemCommand(&.{ b.zig_exe, "build", "-Dn=1" }); const cmd = b.addSystemCommand(&.{ b.zig_exe, "build", "-Dn=1" });
cmd.setName("zig build -Dn=1"); cmd.setName("zig build -Dn=1");
cmd.expectExitCode(1); cmd.expectExitCode(1);
expectStdErrMatch(cmd, exercises[0].hint); expectStdErrMatch(cmd, exercises[0].hint orelse "");
cmd.step.dependOn(case_step); cmd.step.dependOn(case_step);