tiny.smg.model
Defined in tiny.smg.
API (32)
Actions
Public operations.
cloneEdgecloneNodeclonePairsdeinitEdgedeinitNodeedgeEqualsedgeFromValuefreePairsmergePairsnodeEqualsnodeFromValuepairValuepairsEqualpairsFromRenderedJsonrenderPairsAllocreplaceOwnedPairValuesourcePairupsertPairwriteEdgeDataJsonwriteEdgeDataJsonObjectwriteEdgeJsonwriteEdgeJsonObjectwriteMetadatawriteNodeDataJsonwriteNodeDataJsonObjectwriteNodeJsonwriteNodeJsonObject
Types and contracts
Public types and contracts.
Source
Source: tools/smg/src/model.zig
zig
const std = @import("std");const pretty = @import("pretty");const pretty_json = pretty.json;pub const NodeType = struct { pub const package = "package"; pub const module = "module"; pub const class = "class"; pub const function = "function"; pub const method = "method"; pub const interface = "interface"; pub const variable = "variable"; pub const constant = "constant"; pub const @"type" = "type"; pub const field = "field"; pub const enum_tag = "enum_tag"; pub const error_member = "error_member"; pub const member_gap = "member_gap"; pub const endpoint = "endpoint"; pub const config = "config";};pub const RelType = struct { pub const calls = "calls"; pub const inherits = "inherits"; pub const implements = "implements"; pub const contains = "contains"; pub const depends_on = "depends_on"; pub const imports = "imports"; pub const returns = "returns"; pub const accepts = "accepts"; pub const overrides = "overrides"; pub const decorates = "decorates"; pub const tests = "tests";};pub const Pair = struct { key: []const u8, value: []const u8, json: bool = false,};pub const Node = struct { name: []const u8, type: []const u8, file: ?[]const u8 = null, line: ?i64 = null, end_line: ?i64 = null, docstring: ?[]const u8 = null, metadata: []const Pair = &.{},};pub const Edge = struct { source: []const u8, target: []const u8, rel: []const u8, metadata: []const Pair = &.{},};pub fn deinitNode(node: *Node, allocator: std.mem.Allocator) void { allocator.free(node.name); allocator.free(node.type); if (node.file) |value| allocator.free(value); if (node.docstring) |value| allocator.free(value); freePairs(allocator, node.metadata); node.* = undefined;}pub fn deinitEdge(edge: *Edge, allocator: std.mem.Allocator) void { allocator.free(edge.source); allocator.free(edge.target); allocator.free(edge.rel); freePairs(allocator, edge.metadata); edge.* = undefined;}pub fn cloneNode(allocator: std.mem.Allocator, node: Node) !Node { var cloned = Node{ .name = try allocator.dupe(u8, node.name), .type = &.{}, }; errdefer deinitNode(&cloned, allocator); cloned.type = try allocator.dupe(u8, node.type); cloned.file = if (node.file) |value| try allocator.dupe(u8, value) else null; cloned.line = node.line; cloned.end_line = node.end_line; cloned.docstring = if (node.docstring) |value| try allocator.dupe(u8, value) else null; cloned.metadata = try clonePairs(allocator, node.metadata); return cloned;}pub fn cloneEdge(allocator: std.mem.Allocator, edge: Edge) !Edge { var cloned = Edge{ .source = try allocator.dupe(u8, edge.source), .target = &.{}, .rel = &.{}, }; errdefer deinitEdge(&cloned, allocator); cloned.target = try allocator.dupe(u8, edge.target); cloned.rel = try allocator.dupe(u8, edge.rel); cloned.metadata = try clonePairs(allocator, edge.metadata); return cloned;}pub fn clonePairs(allocator: std.mem.Allocator, pairs: []const Pair) ![]const Pair { if (pairs.len == 0) return &.{}; const out = try allocator.alloc(Pair, pairs.len); var initialized: usize = 0; errdefer { freePairPayloads(allocator, out[0..initialized]); allocator.free(out); } for (pairs, 0..) |pair, index| { const key = try allocator.dupe(u8, pair.key); errdefer allocator.free(key); const value = try allocator.dupe(u8, pair.value); out[index] = .{ .key = key, .value = value, .json = pair.json, }; initialized += 1; } return out;}pub fn freePairs(allocator: std.mem.Allocator, pairs: []const Pair) void { freePairPayloads(allocator, pairs); if (pairs.len != 0) allocator.free(pairs);}fn freePairPayloads(allocator: std.mem.Allocator, pairs: []const Pair) void { for (pairs) |pair| { allocator.free(pair.key); allocator.free(pair.value); }}pub fn pairValue(pairs: []const Pair, key: []const u8) ?[]const u8 { for (pairs) |pair| if (std.mem.eql(u8, pair.key, key)) return pair.value; return null;}pub fn replaceOwnedPairValue(pairs: []const Pair, key: []const u8, value: []const u8, json: bool) bool { for (@constCast(pairs)) |*pair| { if (!std.mem.eql(u8, pair.key, key)) continue; pair.value = value; pair.json = json; return true; } return false;}pub fn upsertPair(allocator: std.mem.Allocator, pairs: *std.ArrayList(Pair), update: Pair) !void { for (pairs.items) |*pair| { if (std.mem.eql(u8, pair.key, update.key)) { pair.value = update.value; pair.json = update.json; return; } } try pairs.append(allocator, update);}pub fn mergePairs(allocator: std.mem.Allocator, existing: []const Pair, updates: []const Pair) ![]const Pair { var out: std.ArrayList(Pair) = .empty; errdefer out.deinit(allocator); for (existing) |pair| try out.append(allocator, .{ .key = pair.key, .value = pair.value, .json = pair.json }); for (updates) |update| { var replaced = false; for (out.items) |*pair| { if (std.mem.eql(u8, pair.key, update.key)) { pair.value = update.value; pair.json = update.json; replaced = true; break; } } if (!replaced) try out.append(allocator, .{ .key = update.key, .value = update.value, .json = update.json }); } return try out.toOwnedSlice(allocator);}pub fn sourcePair(allocator: std.mem.Allocator, value: []const u8) ![]const Pair { const pairs = try allocator.alloc(Pair, 1); errdefer allocator.free(pairs); const key = try allocator.dupe(u8, "source"); errdefer allocator.free(key); const pair_value = try allocator.dupe(u8, value); pairs[0] = .{ .key = key, .value = pair_value, }; return pairs;}pub fn nodeFromValue(allocator: std.mem.Allocator, value: std.json.Value) !Node { const object = switch (value) { .object => |object| object, else => return error.InvalidNode, }; var node = Node{ .name = try allocator.dupe(u8, stringField(object, "name") orelse return error.InvalidNode), .type = &.{}, }; errdefer deinitNode(&node, allocator); node.type = try allocator.dupe(u8, stringField(object, "type") orelse return error.InvalidNode); node.file = if (stringField(object, "file")) |v| try allocator.dupe(u8, v) else null; node.line = intField(object, "line"); node.end_line = intField(object, "end_line"); node.docstring = if (stringField(object, "docstring")) |v| try allocator.dupe(u8, v) else null; node.metadata = try metadataFromObject(allocator, object.get("metadata")); return node;}pub fn edgeFromValue(allocator: std.mem.Allocator, value: std.json.Value) !Edge { const object = switch (value) { .object => |object| object, else => return error.InvalidEdge, }; var edge = Edge{ .source = try allocator.dupe(u8, stringField(object, "source") orelse return error.InvalidEdge), .target = &.{}, .rel = &.{}, }; errdefer deinitEdge(&edge, allocator); edge.target = try allocator.dupe(u8, stringField(object, "target") orelse return error.InvalidEdge); edge.rel = try allocator.dupe(u8, stringField(object, "rel") orelse return error.InvalidEdge); edge.metadata = try metadataFromObject(allocator, object.get("metadata")); return edge;}fn stringField(object: std.json.ObjectMap, key: []const u8) ?[]const u8 { const value = object.get(key) orelse return null; return switch (value) { .string => |string| string, else => null, };}fn intField(object: std.json.ObjectMap, key: []const u8) ?i64 { const value = object.get(key) orelse return null; return switch (value) { .integer => |integer| integer, .float => |float| @intFromFloat(float), else => null, };}fn metadataFromObject(allocator: std.mem.Allocator, maybe_value: ?std.json.Value) ![]const Pair { const value = maybe_value orelse return &.{}; const object = switch (value) { .object => |object| object, else => return &.{}, }; var out: std.ArrayList(Pair) = .empty; errdefer { freePairPayloads(allocator, out.items); out.deinit(allocator); } var it = object.iterator(); while (it.next()) |entry| { const key = try allocator.dupe(u8, entry.key_ptr.*); errdefer allocator.free(key); const rendered = switch (entry.value_ptr.*) { .string => |string| try allocator.dupe(u8, string), else => try pretty_json.renderMinifiedAlloc(allocator, entry.value_ptr.*), }; errdefer allocator.free(rendered); try out.append(allocator, .{ .key = key, .value = rendered, .json = entry.value_ptr.* != .string, }); } return try out.toOwnedSlice(allocator);}pub fn writeNodeJson(node: Node, writer: *std.Io.Writer) !void { var out = pretty_json.Writer.init(writer, .minified); try writeNodeJsonKind(node, &out, true);}pub fn writeNodeDataJson(node: Node, writer: *std.Io.Writer) !void { var out = pretty_json.Writer.init(writer, .minified); try writeNodeJsonKind(node, &out, false);}pub fn writeNodeJsonObject(node: Node, writer: *pretty_json.Writer) !void { try writeNodeJsonKind(node, writer, true);}pub fn writeNodeDataJsonObject(node: Node, writer: *pretty_json.Writer) !void { try writeNodeJsonKind(node, writer, false);}fn writeNodeJsonKind(node: Node, writer: *pretty_json.Writer, include_kind: bool) !void { try writer.beginObject(); if (include_kind) { try writer.objectField("kind"); try writer.write("node"); } try writer.objectField("name"); try writer.write(node.name); try writer.objectField("type"); try writer.write(node.type); if (node.file) |file| { try writer.objectField("file"); try writer.write(file); } if (node.line) |line| { try writer.objectField("line"); try writer.write(line); } if (node.end_line) |line| { try writer.objectField("end_line"); try writer.write(line); } if (node.docstring) |doc| { try writer.objectField("docstring"); try writer.write(doc); } if (node.metadata.len != 0) try writeMetadata(node.metadata, writer); try writer.endObject();}pub fn writeEdgeJson(edge: Edge, writer: *std.Io.Writer) !void { var out = pretty_json.Writer.init(writer, .minified); try writeEdgeJsonKind(edge, &out, true);}pub fn writeEdgeDataJson(edge: Edge, writer: *std.Io.Writer) !void { var out = pretty_json.Writer.init(writer, .minified); try writeEdgeJsonKind(edge, &out, false);}pub fn writeEdgeJsonObject(edge: Edge, writer: *pretty_json.Writer) !void { try writeEdgeJsonKind(edge, writer, true);}pub fn writeEdgeDataJsonObject(edge: Edge, writer: *pretty_json.Writer) !void { try writeEdgeJsonKind(edge, writer, false);}fn writeEdgeJsonKind(edge: Edge, writer: *pretty_json.Writer, include_kind: bool) !void { try writer.beginObject(); if (include_kind) { try writer.objectField("kind"); try writer.write("edge"); } try writer.objectField("source"); try writer.write(edge.source); try writer.objectField("rel"); try writer.write(edge.rel); try writer.objectField("target"); try writer.write(edge.target); if (edge.metadata.len != 0) try writeMetadata(edge.metadata, writer); try writer.endObject();}pub fn writeMetadata(pairs: []const Pair, writer: *pretty_json.Writer) !void { try writer.objectField("metadata"); try writePairsObject(pairs, writer);}fn writePairsObject(pairs: []const Pair, writer: *pretty_json.Writer) !void { try writer.beginObject(); for (pairs) |pair| { try writer.objectField(pair.key); if (pair.json) { try writer.raw(pair.value); } else { try writer.write(pair.value); } } try writer.endObject();}pub fn renderPairsAlloc(allocator: std.mem.Allocator, pairs: []const Pair) ![]const u8 { var out: std.Io.Writer.Allocating = .init(allocator); errdefer out.deinit(); var writer = pretty_json.Writer.init(&out.writer, .minified); try writePairsObject(pairs, &writer); return try out.toOwnedSlice();}pub fn pairsFromRenderedJson(allocator: std.mem.Allocator, text: []const u8) ![]const Pair { if (text.len == 0) return &.{}; var scanner = std.json.Scanner.initCompleteInput(allocator, text); defer scanner.deinit(); var out: std.ArrayList(Pair) = .empty; errdefer { freePairPayloads(allocator, out.items); out.deinit(allocator); } renderedPairsInto(allocator, &scanner, text, &out) catch |err| switch (err) { error.OutOfMemory => return error.OutOfMemory, else => return error.InvalidMetadata, }; return try out.toOwnedSlice(allocator);}fn renderedPairsInto(allocator: std.mem.Allocator, scanner: *std.json.Scanner, text: []const u8, out: *std.ArrayList(Pair)) !void { switch (try scanner.peekNextTokenType()) { .object_begin => {}, .end_of_document => return error.InvalidMetadata, else => { try scanner.skipValue(); if (try scanner.peekNextTokenType() != .end_of_document) return error.InvalidMetadata; return; }, } _ = try scanner.next(); while (true) { if (try scanner.peekNextTokenType() == .object_end) { _ = try scanner.next(); break; } const key = try ownedTokenString(allocator, try scanner.nextAllocMax(allocator, .alloc_if_needed, std.json.default_max_value_len)); errdefer allocator.free(key); switch (try scanner.peekNextTokenType()) { .string => { const value = try ownedTokenString(allocator, try scanner.nextAllocMax(allocator, .alloc_if_needed, std.json.default_max_value_len)); errdefer allocator.free(value); try out.append(allocator, .{ .key = key, .value = value, .json = false }); }, .object_begin, .array_begin, .number, .true, .false, .null => { const start = scanner.cursor; try scanner.skipValue(); const value = try allocator.dupe(u8, text[start..scanner.cursor]); errdefer allocator.free(value); try out.append(allocator, .{ .key = key, .value = value, .json = true }); }, else => return error.InvalidMetadata, } } if (try scanner.peekNextTokenType() != .end_of_document) return error.InvalidMetadata;}fn ownedTokenString(allocator: std.mem.Allocator, token: std.json.Token) ![]const u8 { return switch (token) { .string => |slice| try allocator.dupe(u8, slice), .allocated_string => |slice| slice, else => error.InvalidMetadata, };}pub fn pairsEqual(left: []const Pair, right: []const Pair) bool { if (left.len != right.len) return false; for (left, right) |a, b| { if (a.json != b.json) return false; if (!std.mem.eql(u8, a.key, b.key)) return false; if (!std.mem.eql(u8, a.value, b.value)) return false; } return true;}pub fn nodeEquals(left: Node, right: Node) bool { if (!std.mem.eql(u8, left.name, right.name)) return false; if (!std.mem.eql(u8, left.type, right.type)) return false; if (!optionalTextEqual(left.file, right.file)) return false; if (!std.meta.eql(left.line, right.line)) return false; if (!std.meta.eql(left.end_line, right.end_line)) return false; if (!optionalTextEqual(left.docstring, right.docstring)) return false; return pairsEqual(left.metadata, right.metadata);}pub fn edgeEquals(left: Edge, right: Edge) bool { if (!std.mem.eql(u8, left.source, right.source)) return false; if (!std.mem.eql(u8, left.rel, right.rel)) return false; if (!std.mem.eql(u8, left.target, right.target)) return false; return pairsEqual(left.metadata, right.metadata);}fn optionalTextEqual(left: ?[]const u8, right: ?[]const u8) bool { const a = left orelse return right == null; const b = right orelse return false; return std.mem.eql(u8, a, b);}test "node json round trip" { var arena = std.heap.ArenaAllocator.init(std.testing.allocator); defer arena.deinit(); const allocator = arena.allocator(); const meta = try sourcePair(allocator, "manual"); const node: Node = .{ .name = "a.b", .type = NodeType.module, .file = "a/b.zig", .line = 3, .metadata = meta }; var out: std.Io.Writer.Allocating = .init(allocator); try writeNodeJson(node, &out.writer); const parsed = try std.json.parseFromSlice(std.json.Value, allocator, out.written(), .{}); const clone = try nodeFromValue(allocator, parsed.value); try std.testing.expectEqualStrings("a.b", clone.name); try std.testing.expectEqualStrings("manual", pairValue(clone.metadata, "source").?);}test "metadata pairs round trip through json text" { const allocator = std.testing.allocator; const pairs = [_]Pair{ .{ .key = "source", .value = "scan" }, .{ .key = "metrics", .value = "{\"fan_in\":2,\"fan_out\":0}", .json = true }, }; const rendered = try renderPairsAlloc(allocator, &pairs); defer allocator.free(rendered); try std.testing.expectEqualStrings("{\"source\":\"scan\",\"metrics\":{\"fan_in\":2,\"fan_out\":0}}", rendered); const decoded = try pairsFromRenderedJson(allocator, rendered); defer freePairs(allocator, decoded); try std.testing.expect(pairsEqual(&pairs, decoded)); const rerendered = try renderPairsAlloc(allocator, decoded); defer allocator.free(rerendered); try std.testing.expectEqualStrings(rendered, rerendered); const empty = try pairsFromRenderedJson(allocator, ""); try std.testing.expectEqual(@as(usize, 0), empty.len); try std.testing.expectError(error.InvalidMetadata, pairsFromRenderedJson(allocator, "not json"));}test "metadata pair upsert preserves replacement shape" { const allocator = std.testing.allocator; var pairs: std.ArrayList(Pair) = .empty; defer pairs.deinit(allocator); try upsertPair(allocator, &pairs, .{ .key = "source", .value = "manual" }); try upsertPair(allocator, &pairs, .{ .key = "source", .value = "scan", .json = true }); try upsertPair(allocator, &pairs, .{ .key = "owner", .value = "smg" }); try std.testing.expectEqual(@as(usize, 2), pairs.items.len); try std.testing.expectEqualStrings("scan", pairValue(pairs.items, "source").?); try std.testing.expect(pairs.items[0].json); try std.testing.expectEqualStrings("smg", pairValue(pairs.items, "owner").?);}test "rendered pairs decode all value shapes byte exactly" { const allocator = std.testing.allocator; const pairs = [_]Pair{ .{ .key = "plain", .value = "scan" }, .{ .key = "esc\"aped", .value = "line\nbreak \"quoted\" \\slash" }, .{ .key = "unicode", .value = "snowman \u{2603} tail" }, .{ .key = "metrics", .value = "{\"fan_in\":2,\"nested\":{\"deep\":[1,2,3]}}", .json = true }, .{ .key = "count", .value = "42", .json = true }, .{ .key = "ratio", .value = "-3.5e-2", .json = true }, .{ .key = "flag", .value = "true", .json = true }, .{ .key = "gone", .value = "null", .json = true }, .{ .key = "list", .value = "[\"a\",{\"b\":\"c\"}]", .json = true }, }; const rendered = try renderPairsAlloc(allocator, &pairs); defer allocator.free(rendered); const decoded = try pairsFromRenderedJson(allocator, rendered); defer freePairs(allocator, decoded); try std.testing.expect(pairsEqual(&pairs, decoded)); const rerendered = try renderPairsAlloc(allocator, decoded); defer allocator.free(rerendered); try std.testing.expectEqualStrings(rendered, rerendered); const non_object = try pairsFromRenderedJson(allocator, "[1,2]"); try std.testing.expectEqual(@as(usize, 0), non_object.len); try std.testing.expectError(error.InvalidMetadata, pairsFromRenderedJson(allocator, "{\"a\":\"b\"}trailing")); try std.testing.expectError(error.InvalidMetadata, pairsFromRenderedJson(allocator, "{\"a\":}"));}test "pair helpers clean up allocation failures" { try std.testing.checkAllAllocationFailures( std.testing.allocator, checkPairHelperAllocationFailures, .{}, );}fn checkPairHelperAllocationFailures(allocator: std.mem.Allocator) !void { const source = try sourcePair(allocator, "manual"); defer freePairs(allocator, source); const cloned = try clonePairs(allocator, source); defer freePairs(allocator, cloned); const updates = [_]Pair{ .{ .key = "source", .value = "scan" }, .{ .key = "async", .value = "true", .json = true }, }; const merged = try mergePairs(allocator, cloned, &updates); defer allocator.free(merged); try std.testing.expectEqualStrings("scan", pairValue(merged, "source").?); try std.testing.expectEqualStrings("true", pairValue(merged, "async").?);}test "node parsing cleans up allocation failures" { try checkAllModelAllocationFailures(checkNodeParsingAllocationFailures);}fn checkNodeParsingAllocationFailures(allocator: std.mem.Allocator) !void { var parsed = try std.json.parseFromSlice(std.json.Value, std.testing.allocator, \\{"name":"app.main","type":"function","file":"app.zig","line":7,"end_line":9,"docstring":"entry","metadata":{"source":"scan","async":true,"rank":3}} , .{}); defer parsed.deinit(); var node = try nodeFromValue(allocator, parsed.value); defer deinitNode(&node, allocator); try std.testing.expectEqualStrings("app.main", node.name); try std.testing.expectEqualStrings("true", pairValue(node.metadata, "async").?);}test "edge parsing cleans up allocation failures" { try checkAllModelAllocationFailures(checkEdgeParsingAllocationFailures);}fn checkEdgeParsingAllocationFailures(allocator: std.mem.Allocator) !void { var parsed = try std.json.parseFromSlice(std.json.Value, std.testing.allocator, \\{"source":"app.main","rel":"calls","target":"app.helper","metadata":{"source":"scan","weight":2}} , .{}); defer parsed.deinit(); var edge = try edgeFromValue(allocator, parsed.value); defer deinitEdge(&edge, allocator); try std.testing.expectEqualStrings("app.main", edge.source); try std.testing.expectEqualStrings("2", pairValue(edge.metadata, "weight").?);}fn checkAllModelAllocationFailures(comptime test_fn: anytype) !void { var fail_index: usize = 0; while (true) : (fail_index += 1) { var failing = std.testing.FailingAllocator.init(std.testing.allocator, .{ .fail_index = fail_index }); if (@call(.auto, test_fn, .{failing.allocator()})) |_| { if (failing.has_induced_failure) return error.SwallowedOutOfMemoryError; return; } else |err| switch (err) { error.OutOfMemory => { try std.testing.expect(failing.has_induced_failure); try std.testing.expectEqual(failing.allocated_bytes, failing.freed_bytes); }, else => |other| return other, } }}Source: tools/smg/src/root.zig:26
zig
pub const model = @import("model.zig");Complete caller list for model.deinitEdge
14 direct callers.
tools.smg.src.graph.checkGraphCloneAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:735in nearest public ownertiny.smg.graphtiny.smg.graph.clone[function] attools/smg/src/graph.zig:212tools.smg.src.model.checkEdgeParsingAllocationFailures[function] — private; no exact target attools/smg/src/model.zig:599in nearest public ownertiny.smg.modeltiny.smg.model.cloneEdge[function] attools/smg/src/model.zig:92tiny.smg.model.edgeFromValue[function] attools/smg/src/model.zig:216tools.smg.src.scan.reconcile.projection.checkClonePlanAllocationFailures[function] — private; no exact target attools/smg/src/scan/reconcile/projection.zig:226in nearest public ownertiny.smg.scan.reconcile.projectiontiny.smg.scan.reconcile.projection.clonePlan[function] attools/smg/src/scan/reconcile/projection.zig:16tools.smg.src.storage.context.edgesByIndex[function] — private; no exact target attools/smg/src/storage/context.zig:435in nearest public ownertiny.smg.storage.contexttools.smg.src.storage.graph.loadRecordsFromReader[function] — private; no exact target attools/smg/src/storage/graph.zig:425in nearest public ownertiny.smg.storage.graphtiny.smg.storage.rows.decodeEdgeRow[function] attools/smg/src/storage/rows/read.zig:205tiny.smg.storage.rows.freeEdgeRowSlice[function] attools/smg/src/storage/rows/read.zig:161tools.smg.src.storage.rows.read.freeEdgeRows[function] — private; no exact target attools/smg/src/storage/rows/read.zig:277in nearest public ownertools.smg.src.storage.rows.readtiny.smg.storage.rows.scanEdgeRows[function] attools/smg/src/storage/rows/read.zig:40tiny.smg.storage.rows.scanEdgeRowsInto[function] attools/smg/src/storage/rows/read.zig:132
Complete caller list for model.deinitNode
18 direct callers.
tools.smg.src.graph.checkGraphCloneAllocationFailures[function] — private; no exact target attools/smg/src/graph.zig:735in nearest public ownertiny.smg.graphtiny.smg.graph.clone[function] attools/smg/src/graph.zig:212tools.smg.src.model.checkNodeParsingAllocationFailures[function] — private; no exact target attools/smg/src/model.zig:584in nearest public ownertiny.smg.modeltiny.smg.model.cloneNode[function] attools/smg/src/model.zig:77tiny.smg.model.nodeFromValue[function] attools/smg/src/model.zig:197tiny.smg.storage.context.loadFromReader[function] attools/smg/src/storage/context.zig:356tiny.smg.storage.context.loadNodesFromReader[function] attools/smg/src/storage/context.zig:383tiny.smg.storage.nodes.freeListed[function] attools/smg/src/storage/nodes.zig:150tiny.smg.storage.nodes.freeRows[function] attools/smg/src/storage/nodes.zig:145tiny.smg.storage.nodes.listed[function] attools/smg/src/storage/nodes.zig:52tools.smg.src.storage.nodes.listedBounded[function] — private; no exact target attools/smg/src/storage/nodes.zig:86in nearest public ownertiny.smg.storage.nodestools.smg.src.storage.nodes.retainBoundedNode[function] — private; no exact target attools/smg/src/storage/nodes.zig:122in nearest public ownertiny.smg.storage.nodestiny.smg.storage.nodes.rowsByIdFromReader[function] attools/smg/src/storage/nodes.zig:33tiny.smg.storage.rows.decodeNodeRow[function] attools/smg/src/storage/rows/read.zig:174tiny.smg.storage.rows.freeNodeRowSlice[function] attools/smg/src/storage/rows/read.zig:156tools.smg.src.storage.rows.read.freeNodeRows[function] — private; no exact target attools/smg/src/storage/rows/read.zig:272in nearest public ownertools.smg.src.storage.rows.readtiny.smg.storage.rows.scanNodeRows[function] attools/smg/src/storage/rows/read.zig:9tiny.smg.storage.rows.scanNodeRowsInto[function] attools/smg/src/storage/rows/read.zig:108
Complete caller list for model.mergePairs
13 direct callers.
tools.smg.src.batch.mutation.update[function] — private; no exact target attools/smg/src/batch/mutation.zig:210in nearest public ownertools.smg.src.batch.mutationtiny.smg.command.mutate.node.update[function] attools/smg/src/command/mutate/node.zig:66tiny.smg.graph.addEdgeTracked[function] attools/smg/src/graph.zig:397tiny.smg.graph.addNode[function] attools/smg/src/graph.zig:293tools.smg.src.model.checkPairHelperAllocationFailures[function] — private; no exact target attools/smg/src/model.zig:565in nearest public ownertiny.smg.modeltools.smg.src.scan.chiclet.declarationMetadata[function] — private; no exact target attools/smg/src/scan/chiclet.zig:360in nearest public ownertiny.smg.scan.chiclettools.smg.src.scan.clike.enhanceMetadataFromText[function] — private; no exact target attools/smg/src/scan/clike.zig:47in nearest public ownertiny.smg.scan.cliketiny.smg.scan.core.edge.scanEdgeMetadata[function] attools/smg/src/scan/core/edge.zig:53tools.smg.src.scan.pipeline.scan.zigContainerMetadata[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:3467in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.zigDeclarationMetadata[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:3384in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.zigVariableDeclarationMetadata[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:3428in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.script.enhanceMetadataFromText[function] — private; no exact target attools/smg/src/scan/script.zig:306in nearest public ownertiny.smg.scan.scripttiny.smg.scan.source_metadata.spanMetadata[function] attools/smg/src/scan/source.zig:9
Complete caller list for model.pairValue
103 direct callers.
tools.smg.src.analysis.report.cyclomaticComplexity[function] — private; no exact target attools/smg/src/analysis/report.zig:1904in nearest public ownertools.smg.src.analysis.reporttiny.smg.api.PublicMember.sourceSpelling[method] attools/smg/src/api.zig:196tiny.smg.api.PublicMember.typeExpression[method] attools/smg/src/api.zig:202tiny.smg.api.PublicMember.valueExpression[method] attools/smg/src/api.zig:209tiny.smg.api.PublicMemberGap.sourceSpelling[method] attools/smg/src/api.zig:241tiny.smg.api.aliasTarget[function] attools/smg/src/api.zig:505tiny.smg.api.containerKind[function] attools/smg/src/api.zig:571tiny.smg.api.declarationSource[function] attools/smg/src/api.zig:131tiny.smg.api.declarationSourceSpan[function] attools/smg/src/api.zig:117tiny.smg.api.directAliasTarget[function] attools/smg/src/api.zig:510tiny.smg.api.explicitDeclaredType[function] attools/smg/src/api.zig:520tiny.smg.api.isTestDeclaration[function] attools/smg/src/api.zig:497tools.smg.src.api.memberIdentifier[function] — private; no exact target attools/smg/src/api.zig:614in nearest public ownertiny.smg.apitools.smg.src.api.memberOrder[function] — private; no exact target attools/smg/src/api.zig:618in nearest public ownertiny.smg.apitools.smg.src.api.memberSourceSpan[function] — private; no exact target attools/smg/src/api.zig:623in nearest public ownertiny.smg.apitools.smg.src.api.publicMember[function] — private; no exact target attools/smg/src/api.zig:576in nearest public ownertiny.smg.apitools.smg.src.api.publicMemberGap[function] — private; no exact target attools/smg/src/api.zig:595in nearest public ownertiny.smg.apitiny.smg.api.signature[function] attools/smg/src/api.zig:501tools.smg.src.api.test_explicit_declared_type_distinguishes_omitted_and_unavailable_states[function] — test; no exact target attools/smg/src/api.zig:537in nearest public ownertiny.smg.apitiny.smg.api.visibility[function] attools/smg/src/api.zig:488tools.smg.src.batch.mutation.commandMetadata[function] — private; no exact target attools/smg/src/batch/mutation.zig:267in nearest public ownertools.smg.src.batch.mutationtools.smg.src.batch.test.test_batch_processes_jsonl_mutations_and_renders_json_envelope[function] — test; no exact target attools/smg/src/batch/test.zig:14in nearest public ownertools.smg.src.batch.testtools.smg.src.calls.analyze.resolution[function] — private; no exact target attools/smg/src/calls/analyze.zig:261in nearest public ownertools.smg.src.calls.analyzetiny.smg.cli.metadata.pairs[function] attools/smg/src/cli/metadata.zig:7tools.smg.src.diff.detectRenames[function] — private; no exact target attools/smg/src/diff.zig:131in nearest public ownertiny.smg.difftools.smg.src.diff.nodeChanges[function] — private; no exact target attools/smg/src/diff.zig:105in nearest public ownertiny.smg.difftiny.smg.graph.isScan[function] attools/smg/src/graph.zig:687tools.smg.src.graph.test_graph_clone_owns_payload_independently[function] — test; no exact target attools/smg/src/graph.zig:692in nearest public ownertiny.smg.graphtools.smg.src.model.checkEdgeParsingAllocationFailures[function] — private; no exact target attools/smg/src/model.zig:599in nearest public ownertiny.smg.modeltools.smg.src.model.checkNodeParsingAllocationFailures[function] — private; no exact target attools/smg/src/model.zig:584in nearest public ownertiny.smg.modeltools.smg.src.model.checkPairHelperAllocationFailures[function] — private; no exact target attools/smg/src/model.zig:565in nearest public ownertiny.smg.modeltools.smg.src.model.test_metadata_pair_upsert_preserves_replacement_shape[function] — test; no exact target attools/smg/src/model.zig:516in nearest public ownertiny.smg.modeltools.smg.src.model.test_node_json_round_trip[function] — test; no exact target attools/smg/src/model.zig:481in nearest public ownertiny.smg.modeltools.smg.src.rules.checkDead[function] — private; no exact target attools/smg/src/rules.zig:1090in nearest public ownertiny.smg.rulestools.smg.src.rules.metricFromMetadata[function] — private; no exact target attools/smg/src/rules.zig:1720in nearest public ownertiny.smg.rulestools.smg.src.rules.namespaceHandleImportBaseline[function] — private; no exact target attools/smg/src/rules.zig:948in nearest public ownertiny.smg.rulestools.smg.src.rules.test_namespace_import_baseline_update_preserves_rule_identity_and_other_parameters[function] — test; no exact target attools/smg/src/rules.zig:2172in nearest public ownertiny.smg.rulestools.smg.src.scan.clike.enhanceMetadataFromText[function] — private; no exact target attools/smg/src/scan/clike.zig:47in nearest public ownertiny.smg.scan.cliketools.smg.src.scan.metrics.test_call_metrics_finalization_transfers_metrics_retained_by_a_non-callable_node[function] — test; no exact target attools/smg/src/scan/metrics.zig:1328in nearest public ownertiny.smg.scan.scan_metricstools.smg.src.scan.metrics.test_call_metrics_replace_the_owned_metadata_value_without_replacing_pair_storage[function] — test; no exact target attools/smg/src/scan/metrics.zig:1276in nearest public ownertiny.smg.scan.scan_metricstiny.smg.scan.scan_metrics.updateCallMetrics[function] attools/smg/src/scan/metrics.zig:1026tools.smg.src.scan.reconcile.projection.manualEdge[function] — private; no exact target attools/smg/src/scan/reconcile/projection.zig:149in nearest public ownertiny.smg.scan.reconcile.projectiontools.smg.src.scan.test.edgeMetadataValue[function] — private; no exact target attools/smg/src/scan/test.zig:115in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.expectZigDeclaredTypeGraph[function] — private; no exact target attools/smg/src/scan/test.zig:4949in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.metricInt[function] — private; no exact target attools/smg/src/scan/test.zig:681in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_Chiclet_scan_preserves_public_declarations_imports_and_documentation[function] — test; no exact target attools/smg/src/scan/test.zig:1149in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_c++_metadata_replaces_fallback_record_kind[function] — test; no exact target attools/smg/src/scan/test.zig:2744in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_c_fallback_extracts_records_macros_includes_and_calls[function] — test; no exact target attools/smg/src/scan/test.zig:2646in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_c_metrics_walk_handles_deeply_nested_ASTs[function] — test; no exact target attools/smg/src/scan/test.zig:5607in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_fallback_avoids_call_expression_functions[function] — test; no exact target attools/smg/src/scan/test.zig:1369in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_fallback_ignores_constructor_expressions[function] — test; no exact target attools/smg/src/scan/test.zig:1450in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_branches[function] — test; no exact target attools/smg/src/scan/test.zig:1894in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_do_loops[function] — test; no exact target attools/smg/src/scan/test.zig:2041in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_else_branches[function] — test; no exact target attools/smg/src/scan/test.zig:1915in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_for_in_loops[function] — test; no exact target attools/smg/src/scan/test.zig:1999in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_for_loops[function] — test; no exact target attools/smg/src/scan/test.zig:1978in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_for_of_loops[function] — test; no exact target attools/smg/src/scan/test.zig:2020in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_logical_expressions[function] — test; no exact target attools/smg/src/scan/test.zig:1873in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_switch_default_clauses[function] — test; no exact target attools/smg/src/scan/test.zig:2125in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_switch_statements[function] — test; no exact target attools/smg/src/scan/test.zig:2104in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_ternary_expressions[function] — test; no exact target attools/smg/src/scan/test.zig:1852in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_try_catch_statements[function] — test; no exact target attools/smg/src/scan/test.zig:2062in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_counts_compact_method_while_loops[function] — test; no exact target attools/smg/src/scan/test.zig:1936in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_extracts_compact_async_awaited_calls[function] — test; no exact target attools/smg/src/scan/test.zig:1791in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_extracts_compact_default_function_values[function] — test; no exact target attools/smg/src/scan/test.zig:1637in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_extracts_compact_export_declarations[function] — test; no exact target attools/smg/src/scan/test.zig:1607in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_extracts_compact_lexical_initializer_calls[function] — test; no exact target attools/smg/src/scan/test.zig:1831in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_extracts_compact_method_calls[function] — test; no exact target attools/smg/src/scan/test.zig:1684in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_extracts_compact_method_calls_with_arguments[function] — test; no exact target attools/smg/src/scan/test.zig:1730in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_extracts_compact_multi-root_helper_calls[function] — test; no exact target attools/smg/src/scan/test.zig:1707in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_extracts_compact_return_method_calls[function] — test; no exact target attools/smg/src/scan/test.zig:1773in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_handles_compact_method_break_statements[function] — test; no exact target attools/smg/src/scan/test.zig:1957in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_handles_compact_method_throw_statements[function] — test; no exact target attools/smg/src/scan/test.zig:2083in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_ignores_compact_method_new_expressions[function] — test; no exact target attools/smg/src/scan/test.zig:1810in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_inserts_compact_class_methods[function] — test; no exact target attools/smg/src/scan/test.zig:1475in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_inserts_compact_let_and_var_functions[function] — test; no exact target attools/smg/src/scan/test.zig:1579in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_inserts_compact_lexical_functions[function] — test; no exact target attools/smg/src/scan/test.zig:1536in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_javascript_tree_scan_preserves_compact_nested_member_call_arguments[function] — test; no exact target attools/smg/src/scan/test.zig:1752in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_python_metrics_walk_handles_deeply_nested_ASTs[function] — test; no exact target attools/smg/src/scan/test.zig:5592in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_python_text_scan_records_metrics_hashes_and_fan_counts[function] — test; no exact target attools/smg/src/scan/test.zig:2902in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_scan_file_retains_no_source_line_index_storage_after_scratch_teardown[function] — test; no exact target attools/smg/src/scan/test.zig:766in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_scan_generation_projection_survives_predecessor_teardown[function] — test; no exact target attools/smg/src/scan/test.zig:701in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_typescript_scan_records_tree_metadata[function] — test; no exact target attools/smg/src/scan/test.zig:2411in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_typescript_tree_scan_resolves_compact_interface_implements[function] — test; no exact target attools/smg/src/scan/test.zig:1659in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_ast_scan_matches_core_extractor_contract[function] — test; no exact target attools/smg/src/scan/test.zig:3312in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_ast_scan_records_type_alias_metadata_without_local_gap[function] — test; no exact target attools/smg/src/scan/test.zig:4803in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_compact_declarations_and_test_calls[function] — test; no exact target attools/smg/src/scan/test.zig:3548in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_comptime_block_and_condition_calls[function] — test; no exact target attools/smg/src/scan/test.zig:4564in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_comptime_parameter_functions_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4508in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_errdefer_cleanup_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:3945in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_guard_return_continue_and_break_calls[function] — test; no exact target attools/smg/src/scan/test.zig:4113in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_inline_for_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4213in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_labeled_break_block_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4446in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_orelse_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4633in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_simple_catch_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4334in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_simple_for_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4166in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_simple_if_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4000in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_simple_if_else_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4053in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_simple_switch_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4390in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_extracts_simple_while_calls_and_metrics[function] — test; no exact target attools/smg/src/scan/test.zig:4268in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_zig_tree_scan_resolves_optional_field_method_calls[function] — test; no exact target attools/smg/src/scan/test.zig:3801in nearest public ownertools.smg.src.scan.testtools.smg.src.storage.database.lifecycle.test_smg_database_round-trips_nodes_and_edges_with_history[function] — test; no exact target attools/smg/src/storage/database/lifecycle.zig:220in nearest public ownertiny.smg.storage.database.lifecycletools.smg.src.storage.graph.test_save_graph_orders_nodes_and_preserves_json_metadata[function] — test; no exact target attools/smg/src/storage/graph.zig:523in nearest public ownertiny.smg.storage.graph
Complete caller list for model.sourcePair
53 direct callers.
tools.smg.src.batch.test.test_batch_renders_Python-compatible_missing_link_node_errors[function] — test; no exact target attools/smg/src/batch/test.zig:59in nearest public ownertools.smg.src.batch.testtools.smg.src.graph.test_graph_clone_owns_payload_independently[function] — test; no exact target attools/smg/src/graph.zig:692in nearest public ownertiny.smg.graphtools.smg.src.model.checkPairHelperAllocationFailures[function] — private; no exact target attools/smg/src/model.zig:565in nearest public ownertiny.smg.modeltools.smg.src.model.test_node_json_round_trip[function] — test; no exact target attools/smg/src/model.zig:481in nearest public ownertiny.smg.modeltools.smg.src.scan.chiclet.addDeclaration[function] — private; no exact target attools/smg/src/scan/chiclet.zig:311in nearest public ownertiny.smg.scan.chiclettools.smg.src.scan.chiclet.declarationMetadata[function] — private; no exact target attools/smg/src/scan/chiclet.zig:360in nearest public ownertiny.smg.scan.chiclettiny.smg.scan.core.edge.scanEdgeMetadata[function] attools/smg/src/scan/core/edge.zig:53tools.smg.src.scan.pipeline.scan.addCDefineConstantNode[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:3882in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addCLikeFunctionNode[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:4190in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addCLikeNamespaceNode[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:3919in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addCLikeRecordNode[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:4174in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addScanFileModule[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:1516in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigAstContainerContainment[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:2589in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigAstFunctionContainment[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:2661in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigAstMemberGapNode[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:2277in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigAstMemberNode[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:2238in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigAstTestContainment[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:2705in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigCallTarget[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:3205in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigLineDeclarationNode[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:3357in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigLineImport[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:3338in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigSimpleNode[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:2716in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigTreeFunctionContainment[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:1918in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.addZigTreeTestContainment[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:1961in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.cKindMetadata[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:4205in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.closeCNamespaces[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:4043in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.scanZigTreeContainer[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:1803in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.pipeline.scan.scanZigVariableBinding[function] — private; no exact target attools/smg/src/scan/pipeline/scan.zig:2744in nearest public ownertools.smg.src.scan.pipeline.scantools.smg.src.scan.python.addClassRelations[function] — private; no exact target attools/smg/src/scan/python.zig:294in nearest public ownertiny.smg.scan.pythontools.smg.src.scan.python.extractAssignmentText[function] — private; no exact target attools/smg/src/scan/python.zig:327in nearest public ownertiny.smg.scan.pythontools.smg.src.scan.python.extractFunctionText[function] — private; no exact target attools/smg/src/scan/python.zig:307in nearest public ownertiny.smg.scan.pythontools.smg.src.scan.python.extractSuperText[function] — private; no exact target attools/smg/src/scan/python.zig:346in nearest public ownertiny.smg.scan.pythontiny.smg.scan.reconcile.projection.ensurePackageHierarchy[function] attools/smg/src/scan/reconcile/projection.zig:157tools.smg.src.scan.reconcile.test.test_deleted_file-backed_namespace_preserves_hierarchy_and_manual_edges[function] — test; no exact target attools/smg/src/scan/reconcile/test.zig:103in nearest public ownertools.smg.src.scan.reconcile.testtools.smg.src.scan.reconcile.test.test_missing_file_reconciliation_does_not_sweep_absent_siblings[function] — test; no exact target attools/smg/src/scan/reconcile/test.zig:184in nearest public ownertools.smg.src.scan.reconcile.testtools.smg.src.scan.reconcile.test.test_python_package_marker_transitions_refresh_descendant_identities[function] — test; no exact target attools/smg/src/scan/reconcile/test.zig:134in nearest public ownertools.smg.src.scan.reconcile.testtools.smg.src.scan.reconcile.test.test_reconciliation_counts_only_orphaned_manual_edges_as_removed[function] — test; no exact target attools/smg/src/scan/reconcile/test.zig:47in nearest public ownertools.smg.src.scan.reconcile.testtools.smg.src.scan.reconcile.test.test_reconciliation_restores_displaced_edges_whose_endpoints_return[function] — test; no exact target attools/smg/src/scan/reconcile/test.zig:75in nearest public ownertools.smg.src.scan.reconcile.testtools.smg.src.scan.reconcile.test.test_tree_reconciliation_scopes_deleted_directories_and_file_replacements[function] — test; no exact target attools/smg/src/scan/reconcile/test.zig:205in nearest public ownertools.smg.src.scan.reconcile.testtools.smg.src.scan.script.addClassNode[function] — private; no exact target attools/smg/src/scan/script.zig:251in nearest public ownertiny.smg.scan.scripttools.smg.src.scan.script.addConstantNode[function] — private; no exact target attools/smg/src/scan/script.zig:190in nearest public ownertiny.smg.scan.scripttools.smg.src.scan.script.addFunctionNode[function] — private; no exact target attools/smg/src/scan/script.zig:241in nearest public ownertiny.smg.scan.scripttools.smg.src.scan.script.addInterfaceNode[function] — private; no exact target attools/smg/src/scan/script.zig:261in nearest public ownertiny.smg.scan.scripttools.smg.src.scan.script.addMethodNode[function] — private; no exact target attools/smg/src/scan/script.zig:271in nearest public ownertiny.smg.scan.scripttools.smg.src.scan.script.upsertNamedNodeFromTree[function] — private; no exact target attools/smg/src/scan/script.zig:460in nearest public ownertiny.smg.scan.scripttools.smg.src.scan.test.test_project_scan_includes_build_source_and_refuses_ignored_and_linked_trees[function] — test; no exact target attools/smg/src/scan/test.zig:986in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_scan_edge_insertion_preserves_existing_manual_provenance[function] — test; no exact target attools/smg/src/scan/test.zig:889in nearest public ownertools.smg.src.scan.testtools.smg.src.scan.test.test_scan_generation_projection_survives_predecessor_teardown[function] — test; no exact target attools/smg/src/scan/test.zig:701in nearest public ownertools.smg.src.scan.testtools.smg.src.search.test_stored_search_document_plan_preserves_rowids_and_rendered_fields_without_node_snapshots[function] — test; no exact target attools/smg/src/search.zig:1343in nearest public ownertiny.smg.searchtools.smg.src.storage.graph.test_graph_save_load_and_node-only_load[function] — test; no exact target attools/smg/src/storage/graph.zig:500in nearest public ownertiny.smg.storage.graphtools.smg.src.storage.nodes.test_node_projections_load_search_rows_listings_and_stable_rowids[function] — test; no exact target attools/smg/src/storage/nodes.zig:201in nearest public ownertiny.smg.storage.nodestools.smg.src.test.test_persisted_clean_rescan_preserves_edges_to_surviving_symbols[function] — test; no exact target attools/smg/src/test.zig:109in nearest public ownertools.smg.src.testtools.smg.src.test.test_persisted_ordinary_scan_retires_deleted_source_nodes[function] — test; no exact target attools/smg/src/test.zig:70in nearest public ownertools.smg.src.testtools.smg.src.view.test_resolve_suffix_and_validate_edge[function] — test; no exact target attools/smg/src/view.zig:329in nearest public ownertiny.smg.view
Audit
| Definitions | 29 |
|---|---|
| Public names | 29 |
| Members | 3 |
| Version | 26.7.0 |
| Revision | daab053ee433 |