build: improve the help message in ZiglingStep
Add the Mode enum, so that ZiglingStep can detect if it was called in normal mode or in named mode. Update the help method to print the correct message based on the current build mode.
This commit is contained in:
parent
9b7ef7d8cf
commit
c393debe44
1 changed files with 27 additions and 17 deletions
44
build.zig
44
build.zig
|
@ -66,6 +66,14 @@ pub const Exercise = struct {
|
|||
}
|
||||
};
|
||||
|
||||
/// Build mode.
|
||||
const Mode = enum {
|
||||
/// Normal build mode: `zig build`
|
||||
normal,
|
||||
/// Named build mode: `zig build -Dn=n`
|
||||
named,
|
||||
};
|
||||
|
||||
pub const logo =
|
||||
\\ _ _ _
|
||||
\\ ___(_) __ _| (_)_ __ __ _ ___
|
||||
|
@ -141,7 +149,7 @@ pub fn build(b: *Build) !void {
|
|||
b.default_step = zigling_step;
|
||||
zigling_step.dependOn(&header_step.step);
|
||||
|
||||
const verify_step = ZiglingStep.create(b, ex, work_path);
|
||||
const verify_step = ZiglingStep.create(b, ex, work_path, .named);
|
||||
verify_step.step.dependOn(&header_step.step);
|
||||
|
||||
zigling_step.dependOn(&verify_step.step);
|
||||
|
@ -156,7 +164,7 @@ pub fn build(b: *Build) !void {
|
|||
|
||||
var prev_step = &header_step.step;
|
||||
for (exercises) |ex| {
|
||||
const verify_stepn = ZiglingStep.create(b, ex, work_path);
|
||||
const verify_stepn = ZiglingStep.create(b, ex, work_path, .normal);
|
||||
verify_stepn.step.dependOn(prev_step);
|
||||
|
||||
prev_step = &verify_stepn.step;
|
||||
|
@ -177,12 +185,18 @@ const ZiglingStep = struct {
|
|||
step: Step,
|
||||
exercise: Exercise,
|
||||
work_path: []const u8,
|
||||
mode: Mode,
|
||||
|
||||
is_testing: bool = false,
|
||||
result_messages: []const u8 = "",
|
||||
result_error_bundle: std.zig.ErrorBundle = std.zig.ErrorBundle.empty,
|
||||
|
||||
pub fn create(b: *Build, exercise: Exercise, work_path: []const u8) *ZiglingStep {
|
||||
pub fn create(
|
||||
b: *Build,
|
||||
exercise: Exercise,
|
||||
work_path: []const u8,
|
||||
mode: Mode,
|
||||
) *ZiglingStep {
|
||||
const self = b.allocator.create(ZiglingStep) catch @panic("OOM");
|
||||
self.* = .{
|
||||
.step = Step.init(.{
|
||||
|
@ -193,6 +207,7 @@ const ZiglingStep = struct {
|
|||
}),
|
||||
.exercise = exercise,
|
||||
.work_path = work_path,
|
||||
.mode = mode,
|
||||
};
|
||||
return self;
|
||||
}
|
||||
|
@ -533,23 +548,18 @@ const ZiglingStep = struct {
|
|||
}
|
||||
|
||||
fn help(self: *ZiglingStep) void {
|
||||
const b = self.step.owner;
|
||||
const key = self.exercise.key();
|
||||
const path = self.exercise.main_file;
|
||||
|
||||
print("\n{s}Edit exercises/{s} and run 'zig build' again.{s}\n", .{
|
||||
red_text, path, reset_text,
|
||||
});
|
||||
const cmd = switch (self.mode) {
|
||||
.normal => "zig build",
|
||||
.named => b.fmt("zig build -Dn={s}", .{key}),
|
||||
};
|
||||
|
||||
// NOTE: The README explains this "advanced feature" if anyone wishes to use
|
||||
// it. Otherwise, beginners are thinking they *have* to do this.
|
||||
//const key = self.exercise.key();
|
||||
//const format =
|
||||
// \\
|
||||
// \\{s}To compile only this exercise, you can also use this command:{s}
|
||||
// \\{s}zig build -Dn={s}{s}
|
||||
// \\
|
||||
// \\
|
||||
//;
|
||||
//print(format, .{ red_text, reset_text, bold_text, key, reset_text });
|
||||
print("\n{s}Edit exercises/{s} and run '{s}' again.{s}\n", .{
|
||||
red_text, path, cmd, reset_text,
|
||||
});
|
||||
}
|
||||
|
||||
fn printErrors(self: *ZiglingStep) void {
|
||||
|
|
Loading…
Reference in a new issue