Skip to content

Commit

Permalink
Add default documentation for undocumented keybind actions
Browse files Browse the repository at this point in the history
Previously, `ghostty +list-actions` would only show actions that had doc
comments, making it difficult for users to discover all available actions.
This change ensures all actions are listed with appropriate documentation.

For actions without doc comments, we now generate a default message
encouraging contribution.
  • Loading branch information
liby committed Jan 12, 2025
1 parent d4190c9 commit 54c0a17
Showing 1 changed file with 33 additions and 1 deletion.
34 changes: 33 additions & 1 deletion src/helpgen.zig
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,38 @@ fn genActions(alloc: std.mem.Allocator, writer: anytype) !void {
try writer.writeAll("};\n");
}

fn genKeybindField(
alloc: std.mem.Allocator,
writer: anytype,
ast: std.zig.Ast,
comptime field: []const u8,
) !void {
const tokens = ast.tokens.items(.tag);

// Find the field and check if it has doc comments
for (tokens, 0..) |token, i| {
if (token != .identifier) continue;
const name = ast.tokenSlice(@intCast(i));
if (!std.mem.eql(u8, name, field)) continue;

try writer.writeAll("pub const ");
try writer.writeAll(name);
try writer.writeAll(": [:0]const u8 = \n");

// If it has doc comments, use them
if (i > 0 and tokens[i - 1] == .doc_comment) {
const comment = try extractDocComments(alloc, ast, @intCast(i - 1), tokens);
try writer.writeAll(comment);
} else {
// Otherwise use default documentation
try writer.writeAll(" \\\\This action is currently undocumented.\n");
try writer.writeAll(" \\\\Please refer to the source code or contribute documentation.\n");
try writer.writeAll(";\n");
}
break;
}
}

fn genKeybindActions(alloc: std.mem.Allocator, writer: anytype) !void {
var ast = try std.zig.Ast.parse(alloc, @embedFile("input/Binding.zig"), .zig);
defer ast.deinit(alloc);
Expand All @@ -128,7 +160,7 @@ fn genKeybindActions(alloc: std.mem.Allocator, writer: anytype) !void {

inline for (@typeInfo(KeybindAction).Union.fields) |field| {
if (field.name[0] == '_') continue;
try genConfigField(alloc, writer, ast, field.name);
try genKeybindField(alloc, writer, ast, field.name);
}

try writer.writeAll("};\n");
Expand Down

0 comments on commit 54c0a17

Please sign in to comment.