authorgravatar for hello@nektro.netMeghan <hello@nektro.net> 2020-11-09 14:51:09 -08:00
committergravatar for hello@nektro.netMeghan <hello@nektro.net> 2020-11-09 14:51:09 -08:00
log1a59a50bf17a91e1b089af71814bc6e9c02f6b8c
tree871e8c18a9143008cbb8a06ad373c6469b64ec58
parent9df0f5ebcb642a4e1f8af09637c4312b0ee61b9c

add init command


1 files changed, 81 insertions(+), 0 deletions(-)

cmd_init.go created+81
......@@ -0,0 +1,81 @@
1package main
2
3import (
4 "bytes"
5 "errors"
6 "fmt"
7 "log"
8 "os"
9 "path/filepath"
10 "strings"
11
12 "github.com/nektro/go-util/util"
13 "github.com/spf13/cobra"
14)
15
16func init() {
17 last := func(a []string) string {
18 if len(a) == 0 {
19 return ""
20 }
21 return a[len(a)-1]
22 }
23 tryIndex := func(a []string, n int) string {
24 if n >= len(a) {
25 return ""
26 }
27 return a[n]
28 }
29 detectPkgName := func(arg string) string {
30 if len(arg) > 0 {
31 return arg
32 }
33 n, _ := filepath.Abs("./")
34 n = last(strings.Split(n, "/"))
35 n = strings.TrimPrefix(n, "zig-")
36 assert(len(n) > 0, "name may not be an empty string")
37 return n
38 }
39 detectMainFile := func(arg string) string {
40 if len(arg) > 0 {
41 argR, err := filepath.Abs(arg)
42 util.DieOnError(err)
43 if !util.DoesFileExist(argR) {
44 util.DieOnError(errors.New("specified entry point file does not exist: " + arg))
45 }
46 if !strings.HasSuffix(arg, ".zig") {
47 util.DieOnError(errors.New("main entry point must be a .zig file"))
48 }
49 cwd, _ := os.Getwd()
50 argR = strings.TrimPrefix(argR, cwd)[1:]
51 argR = strings.ReplaceAll(argR, "\\", "/")
52 return argR
53 }
54 if util.DoesFileExist("./src/main.zig") {
55 return "src/main.zig"
56 }
57 util.DieOnError(errors.New("unable to determine package entry point"))
58 return ""
59 }
60 rootCmd.AddCommand(&cobra.Command{
61 Use: "init",
62 Short: "Initialize a new package.",
63 Long: `zigmod init [name] [main_file]`,
64 Run: func(cmd *cobra.Command, args []string) {
65 buf := new(bytes.Buffer)
66
67 name := detectPkgName(tryIndex(args, 0))
68 fmt.Fprintln(buf, "name:", name)
69
70 mainf := detectMainFile(tryIndex(args, 1))
71 fmt.Fprintln(buf, "main:", mainf)
72
73 fmt.Fprintln(buf, "dependencies:")
74 f, err := os.Create("./zig.mod")
75 util.DieOnError(err)
76
77 fmt.Fprint(f, buf.String())
78 log.Println("Initialized a new package named", name, "with entry point", mainf)
79 },
80 })
81}