tiny.smg.command.mutate.node
Defined in command.mutate.
API (3)
Actions
Public operations.
Source
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
| Definitions | 4 |
|---|---|
| Public names | 7 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |