SemanticTree: simplify max_depth logic

This commit is contained in:
Adrià Arrufat
2026-03-19 20:25:20 +09:00
parent f0cfe3ffc8
commit 9c2393351d
3 changed files with 6 additions and 8 deletions

View File

@@ -38,7 +38,7 @@ page: *Page,
arena: std.mem.Allocator, arena: std.mem.Allocator,
prune: bool = true, prune: bool = true,
interactive_only: bool = false, interactive_only: bool = false,
max_depth: ?u32 = null, max_depth: u32 = std.math.maxInt(u32) - 1,
pub fn jsonStringify(self: @This(), jw: *std.json.Stringify) error{WriteFailed}!void { pub fn jsonStringify(self: @This(), jw: *std.json.Stringify) error{WriteFailed}!void {
var visitor = JsonVisitor{ .jw = jw, .tree = self }; var visitor = JsonVisitor{ .jw = jw, .tree = self };
@@ -85,9 +85,7 @@ const NodeData = struct {
}; };
fn walk(self: @This(), node: *Node, xpath_buffer: *std.ArrayList(u8), parent_name: ?[]const u8, visitor: anytype, index: usize, listener_targets: interactive.ListenerTargetMap, current_depth: u32) !void { fn walk(self: @This(), node: *Node, xpath_buffer: *std.ArrayList(u8), parent_name: ?[]const u8, visitor: anytype, index: usize, listener_targets: interactive.ListenerTargetMap, current_depth: u32) !void {
if (self.max_depth) |max| { if (current_depth > self.max_depth) return;
if (current_depth > max) return;
}
// 1. Skip non-content nodes // 1. Skip non-content nodes
if (node.is(Element)) |el| { if (node.is(Element)) |el| {
@@ -497,7 +495,7 @@ test "SemanticTree backendDOMNodeId" {
.arena = testing.arena_allocator, .arena = testing.arena_allocator,
.prune = false, .prune = false,
.interactive_only = false, .interactive_only = false,
.max_depth = null, .max_depth = std.math.maxInt(u32) - 1,
}; };
const json_str = try std.json.Stringify.valueAlloc(testing.allocator, st, .{}); const json_str = try std.json.Stringify.valueAlloc(testing.allocator, st, .{});

View File

@@ -73,7 +73,7 @@ fn getSemanticTree(cmd: anytype) !void {
.arena = cmd.arena, .arena = cmd.arena,
.prune = params.prune orelse true, .prune = params.prune orelse true,
.interactive_only = params.interactiveOnly orelse false, .interactive_only = params.interactiveOnly orelse false,
.max_depth = params.maxDepth, .max_depth = params.maxDepth orelse std.math.maxInt(u32) - 1,
}; };
if (params.format) |format| { if (params.format) |format| {

View File

@@ -206,7 +206,7 @@ const ToolStreamingText = struct {
if (registry.lookup_by_id.get(node_id)) |n| { if (registry.lookup_by_id.get(node_id)) |n| {
root_node = n.dom; root_node = n.dom;
} else { } else {
log.warn(.mcp, "semantic_tree id missing", .{.id = node_id}); log.warn(.mcp, "semantic_tree id missing", .{ .id = node_id });
} }
} }
} }
@@ -217,7 +217,7 @@ const ToolStreamingText = struct {
.page = self.page, .page = self.page,
.arena = self.arena.?, .arena = self.arena.?,
.prune = true, .prune = true,
.max_depth = self.maxDepth, .max_depth = self.maxDepth orelse std.math.maxInt(u32) - 1,
}; };
st.textStringify(w) catch |err| { st.textStringify(w) catch |err| {