Skip to documentation
SLOP

tiny.smg.command.mutate.node

Reference tiny.smg command mutate node

Defined in command.mutate.

API (3)

Actions

Public operations.

No direct callersNo direct callscommand.mutatenode
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallsNo direct callersmodelmergePairscommand.mutate.nodeupdate
Static calls · unresolved targets: 0 · external targets: 17.

Source: tools/smg/src/command/mutate/node.zig

zig
const std = @import("std");const smg = @import("../../root.zig");const graph_mod = smg.graph;const model = smg.model;const text = smg.text;const cli_metadata = smg.cli.metadata;const cli_options = smg.cli.options;const cli_output = smg.cli.output;const cli_resolve = smg.cli.resolve;const cli_session = smg.command.session;const cli_validation = smg.cli.validation;pub fn add(allocator: std.mem.Allocator, phases: std.mem.Allocator, args: []const []const u8, limits: smg.Limits) !u8 {    if (try cli_validation.rejectMissingOptionValues(allocator, args, &.{ "--file", "--line", "--doc", "--meta" })) return 2;    if (try cli_validation.rejectUnexpectedOptions(allocator, "add", "[OPTIONS] TYPE NAME", args, &.{ "--file", "--line", "--doc", "--meta" })) return 2;    const pos = try cli_options.positional(allocator, args);    if (pos.len == 0) {        try cli_output.writeClickUsageError(allocator, "add", "[OPTIONS] TYPE NAME", "Missing argument 'TYPE'.");        return 2;    }    if (pos.len == 1) {        try cli_output.writeClickUsageError(allocator, "add", "[OPTIONS] TYPE NAME", "Missing argument 'NAME'.");        return 2;    }    if (pos.len > 2) {        try cli_output.writeClickUsageError(allocator, "add", "[OPTIONS] TYPE NAME", try cli_validation.unexpectedArgumentMessage(allocator, pos[2..]));        return 2;    }    if (try cli_validation.rejectInvalidLine(allocator, "add", "[OPTIONS] TYPE NAME", args)) return 2;    if (try cli_validation.rejectInvalidMeta(allocator, args)) return 2;    const loaded = try cli_session.loadMutation(allocator, phases, limits);    var graph = loaded.graph;    const meta = try cli_metadata.pairs(allocator, args, "manual");    try graph_mod.addNode(&graph, .{        .type = try allocator.dupe(u8, pos[0]),        .name = try allocator.dupe(u8, pos[1]),        .file = if (cli_options.flagValue(args, "--file")) |v| try allocator.dupe(u8, v) else null,        .line = if (cli_options.flagValue(args, "--line")) |v| text.parseInt(v, 0) else null,        .docstring = if (cli_options.flagValue(args, "--doc")) |v| try allocator.dupe(u8, v) else null,        .metadata = meta,    });    try smg.storage.graph.publish(phases, loaded.root, graph, loaded.head, limits);    return try cli_output.writeOutFmt(allocator, "Added [{s}] {s}\n", .{ pos[0], pos[1] });}pub fn remove(allocator: std.mem.Allocator, phases: std.mem.Allocator, args: []const []const u8, limits: smg.Limits) !u8 {    if (try cli_validation.rejectUnexpectedOptions(allocator, "rm", "[OPTIONS] NAME", args, &.{})) return 2;    const pos = try cli_options.positional(allocator, args);    if (pos.len == 0) {        try cli_output.writeClickUsageError(allocator, "rm", "[OPTIONS] NAME", "Missing argument 'NAME'.");        return 2;    }    if (pos.len > 1) {        try cli_output.writeClickUsageError(allocator, "rm", "[OPTIONS] NAME", try cli_validation.unexpectedArgumentMessage(allocator, pos[1..]));        return 2;    }    const loaded = try cli_session.loadMutation(allocator, phases, limits);    var graph = loaded.graph;    const name = try cli_resolve.graphNode(allocator, graph, pos[0], limits.suggestions);    try graph_mod.removeNodes(&graph, &.{name});    try smg.storage.graph.publish(phases, loaded.root, graph, loaded.head, limits);    return try cli_output.writeOutFmt(allocator, "Removed {s}\n", .{name});}pub fn update(allocator: std.mem.Allocator, phases: std.mem.Allocator, args: []const []const u8, limits: smg.Limits) !u8 {    if (try cli_validation.rejectMissingOptionValues(allocator, args, &.{ "--type", "--file", "--line", "--doc", "--meta" })) return 2;    if (try cli_validation.rejectUnexpectedOptions(allocator, "update", "[OPTIONS] NAME", args, &.{ "--type", "--file", "--line", "--doc", "--meta" })) return 2;    const pos = try cli_options.positional(allocator, args);    if (pos.len == 0) {        try cli_output.writeClickUsageError(allocator, "update", "[OPTIONS] NAME", "Missing argument 'NAME'.");        return 2;    }    if (pos.len > 1) {        try cli_output.writeClickUsageError(allocator, "update", "[OPTIONS] NAME", try cli_validation.unexpectedArgumentMessage(allocator, pos[1..]));        return 2;    }    if (try cli_validation.rejectInvalidLine(allocator, "update", "[OPTIONS] NAME", args)) return 2;    if (try cli_validation.rejectInvalidMeta(allocator, args)) return 2;    const loaded = try cli_session.loadMutation(allocator, phases, limits);    var graph = loaded.graph;    const name = try cli_resolve.graphNode(allocator, graph, pos[0], limits.suggestions);    const existing = graph_mod.getNode(&graph, name) orelse return error.NodeNotFound;    var node = existing;    if (cli_options.flagValue(args, "--type")) |v| node.type = try allocator.dupe(u8, v);    if (cli_options.flagValue(args, "--file")) |v| node.file = try allocator.dupe(u8, v);    if (cli_options.flagValue(args, "--line")) |v| node.line = text.parseInt(v, 0);    if (cli_options.flagValue(args, "--doc")) |v| node.docstring = try allocator.dupe(u8, v);    const updates = try cli_metadata.pairs(allocator, args, "");    if (updates.len != 0) node.metadata = try model.mergePairs(allocator, node.metadata, updates);    try graph_mod.addNode(&graph, node);    try smg.storage.graph.publish(phases, loaded.root, graph, loaded.head, limits);    return try cli_output.writeOutFmt(allocator, "Updated {s}\n", .{name});}

Source: tools/smg/src/command/mutate/root.zig:2

zig
pub const node = @import("node.zig");

Audit

Definitions4
Public names7
Members0
Version26.7.0
Revisiondaab053ee433