-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathutils.go
49 lines (40 loc) · 1.02 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package musttag
import (
"encoding/json"
"fmt"
"os/exec"
"strings"
)
func getMainModule() (string, error) {
args := [...]string{"go", "mod", "edit", "-json"}
out, err := exec.Command(args[0], args[1:]...).Output()
if err != nil {
return "", fmt.Errorf("running %q: %w", strings.Join(args[:], " "), err)
}
var info struct {
Module struct {
Path string `json:"Path"`
} `json:"Module"`
}
if err := json.Unmarshal(out, &info); err != nil {
return "", fmt.Errorf("decoding module info: %w\n%s", err, out)
}
return info.Module.Path, nil
}
// based on golang.org/x/tools/imports.VendorlessPath
func cutVendor(path string) string {
var prefix string
switch {
case strings.HasPrefix(path, "(*"):
prefix, path = "(*", path[len("(*"):]
case strings.HasPrefix(path, "("):
prefix, path = "(", path[len("("):]
}
if i := strings.LastIndex(path, "/vendor/"); i >= 0 {
return prefix + path[i+len("/vendor/"):]
}
if strings.HasPrefix(path, "vendor/") {
return prefix + path[len("vendor/"):]
}
return prefix + path
}