all repos

viye @ d364a1ebe8c4550b026304ebafeb56b60eeb8ed3

my shot at reimplementing xiki

viye/internal/plumbing/gobin/gobin.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
refactor, 1 month ago
1
package gobin
2
3
import (
4
	"os/exec"
5
6
	"github.com/olexsmir/viye/internal/viye"
7
)
8
9
const menu = `- build
10
- test
11
- run
12
- generate
13
- doc
14
- mod/
15
`
16
17
const modMenu = `- tidy
18
- download
19
- verify
20
- init`
21
22
type Tool struct{}
23
24
func (Tool) Name() string               { return "go" }
25
func (Tool) Match(c *viye.Context) bool { return c.Cmd == "go" }
26
func (Tool) Execute(c *viye.Context) (string, error) {
27
	if len(c.Args) == 0 {
28
		return menu, nil
29
	}
30
31
	args := c.Args[1:]
32
	switch c.Args[0] {
33
	case "mod":
34
		if len(args) == 0 {
35
			return modMenu, nil
36
		}
37
	case "build", "test", "generate", "doc", "install", "run", "fmt", "vet", "clean", "env", "fix", "list", "tool", "version":
38
	default:
39
		return menu, nil
40
	}
41
42
	return runGo(c.Dir, c.Args[0], args...)
43
}
44
45
func runGo(dir, subcmd string, args ...string) (string, error) {
46
	cmd := exec.Command("go", append([]string{subcmd}, args...)...)
47
	cmd.Dir = dir
48
	out, _ := cmd.CombinedOutput()
49
	return viye.FormatOutput(string(out)), nil
50
}