From 77ae99d8fff5ed9c4c7b95b3ade1d80529b3a6b0 Mon Sep 17 00:00:00 2001 From: Meghan Date: Sat, 14 Nov 2020 02:13:18 -0800 Subject: [PATCH] zig: add cmd_init --- src/cmd_init.zig | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/main.zig | 1 + 2 files changed, 47 insertions(+) create mode 100644 src/cmd_init.zig diff --git a/src/cmd_init.zig b/src/cmd_init.zig new file mode 100644 index 0000000000000000000000000000000000000000..a4061e50e765c9b8833a20029059667bab18f2a1 --- /dev/null +++ b/src/cmd_init.zig @@ -0,0 +1,46 @@ +const std = @import("std"); +const gpa = std.heap.c_allocator; + +const u = @import("./util/index.zig"); + +// +// + +pub fn execute(args: [][]u8) !void { + const name = try detect_pkgname(u.try_index([]const u8, args, 0, "")); + const mainf = try detct_mainfile(u.try_index([]const u8, args, 1, "")); + + const file = try std.fs.cwd().createFile("./zig.mod", .{}); + defer file.close(); + + const fwriter = file.writer(); + try fwriter.print("name: {}\n", .{name}); + try fwriter.print("main: {}\n", .{mainf}); + try fwriter.print("dependencies:\n", .{}); + + u.print("Initialized a new package named {} with entry point {}", .{name, mainf}); +} + +fn detect_pkgname(def: []const u8) ![]const u8 { + if (def.len > 0) { + return def; + } + const dpath = try std.fs.realpathAlloc(gpa, "./"); + const split = try u.split(dpath, "/"); + var name = split[split.len-1]; + name = u.trim_prefix(name, "zig-"); + std.debug.assert(name.len > 0); + return name; +} + +fn detct_mainfile(def: []const u8) ![]const u8 { + if (def.len > 0) { + if (u.does_file_exist(def)) { + if (std.mem.endsWith(u8, def, ".zig")) { + return def; + } + } + } + std.debug.assert(u.does_file_exist("./src/main.zig")); + return "src/main.zig"; +} diff --git a/src/main.zig b/src/main.zig index b0c9c13357a6095ab34df265d09606c94dd3e3de..ce257cc8a8db128bf7e085af1f89ad1deeda0d0e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -7,6 +7,7 @@ const u = @import("./util/index.zig"); // const commands = struct { + const init = @import("./cmd_init.zig"); }; pub fn main() !void { -- 2.54.0