tiny.smg.command.exports
Defined in command.
API (1)
Actions
Public operations.
Source
Source: tools/smg/src/command/exports.zig
zig
const std = @import("std");const smg = @import("../root.zig");const exports = smg.exports;const text = smg.text;const cli_options = smg.cli.options;const cli_output = smg.cli.output;const cli_session = smg.command.session;const cli_validation = smg.cli.validation;pub fn run(allocator: std.mem.Allocator, phases: std.mem.Allocator, args: []const []const u8, limits: smg.Limits, boundary: cli_session.PhaseBoundary) !u8 { const fmt = args[0]; if (!isFormat(fmt)) { try cli_output.writeClickUsageError(allocator, "export", "[OPTIONS] COMMAND [ARGS]...", try std.fmt.allocPrint(allocator, "No such command '{s}'.", .{fmt})); return 2; } const rest = args[1..]; if (try validate(allocator, fmt, rest)) return 2; const loaded = try cli_session.loadRead(allocator, phases, limits, boundary); defer boundary.beginTeardown(); const graph = loaded[1]; if (std.mem.eql(u8, fmt, "json")) return try cli_output.writeOut(try exports.toJson(allocator, graph, cli_options.hasFlag(rest, "--indent"))); if (std.mem.eql(u8, fmt, "mermaid")) return try cli_output.writeOut(try exports.toMermaid(allocator, graph)); if (std.mem.eql(u8, fmt, "dot")) return try cli_output.writeOut(try exports.toDot(allocator, graph)); if (std.mem.eql(u8, fmt, "text")) return try cli_output.writeOut(try exports.toText(allocator, graph)); return try cli_output.writeOut(try exports.toDsm(allocator, graph, cli_options.flagValue(rest, "--level") orelse "module"));}fn validate(allocator: std.mem.Allocator, fmt: []const u8, args: []const []const u8) !bool { if (std.mem.eql(u8, fmt, "json")) return try validateJson(allocator, args); if (std.mem.eql(u8, fmt, "dsm")) return try validateDsm(allocator, args); return try validatePlain(allocator, fmt, args);}fn validateJson(allocator: std.mem.Allocator, args: []const []const u8) !bool { if (try cli_validation.rejectUnexpectedOptionsPlain(allocator, "export json", "[OPTIONS]", args, &.{ "--indent", "--no-indent" })) return true; return try rejectPositionals(allocator, "export json", args);}fn validateDsm(allocator: std.mem.Allocator, args: []const []const u8) !bool { if (try cli_validation.rejectMissingOptionValues(allocator, args, &.{"--level"})) return true; if (try cli_validation.rejectUnexpectedOptionsPlain(allocator, "export dsm", "[OPTIONS]", args, &.{"--level"})) return true; if (try rejectPositionals(allocator, "export dsm", args)) return true; const level = cli_options.flagValue(args, "--level") orelse return false; if (isDsmLevel(level)) return false; try cli_output.writeClickUsageError(allocator, "export dsm", "[OPTIONS]", try std.fmt.allocPrint(allocator, "Invalid value for '--level': '{s}' is not one of 'module', 'class', 'all'.", .{level})); return true;}fn validatePlain(allocator: std.mem.Allocator, fmt: []const u8, args: []const []const u8) !bool { const command = try std.fmt.allocPrint(allocator, "export {s}", .{fmt}); if (try cli_validation.rejectUnexpectedOptionsPlain(allocator, command, "[OPTIONS]", args, &.{})) return true; return try rejectPositionals(allocator, command, args);}fn rejectPositionals(allocator: std.mem.Allocator, command: []const u8, args: []const []const u8) !bool { const pos = try cli_options.positional(allocator, args); if (pos.len == 0) return false; try cli_output.writeClickUsageError(allocator, command, "[OPTIONS]", try cli_validation.unexpectedArgumentMessage(allocator, pos)); return true;}fn isFormat(fmt: []const u8) bool { return text.list.containsString(&.{ "json", "mermaid", "dot", "text", "dsm" }, fmt);}fn isDsmLevel(level: []const u8) bool { return text.list.containsString(&.{ "module", "class", "all" }, level);}test "export command choices match help surface" { try std.testing.expect(isFormat("json")); try std.testing.expect(isFormat("mermaid")); try std.testing.expect(isFormat("dot")); try std.testing.expect(isFormat("text")); try std.testing.expect(isFormat("dsm")); try std.testing.expect(!isFormat("csv"));}test "export dsm levels are explicit" { try std.testing.expect(isDsmLevel("module")); try std.testing.expect(isDsmLevel("class")); try std.testing.expect(isDsmLevel("all")); try std.testing.expect(!isDsmLevel("package"));}Source: tools/smg/src/command/root.zig:12
zig
pub const exports = @import("exports.zig");Audit
| Definitions | 2 |
|---|---|
| Public names | 2 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |