mirror of
https://github.com/go-nunu/nunu.git
synced 2025-09-26 20:31:18 +08:00
75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
package helper
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func GetProjectName(dir string) string {
|
|
modFile, err := os.Open(dir + "/go.mod")
|
|
if err != nil {
|
|
fmt.Println("go.mod does not exist", err)
|
|
return ""
|
|
}
|
|
defer modFile.Close()
|
|
|
|
var moduleName string
|
|
_, err = fmt.Fscanf(modFile, "module %s", &moduleName)
|
|
if err != nil {
|
|
fmt.Println("read go mod error: ", err)
|
|
return ""
|
|
}
|
|
return moduleName
|
|
}
|
|
func SplitArgs(cmd *cobra.Command, args []string) (cmdArgs, programArgs []string) {
|
|
dashAt := cmd.ArgsLenAtDash()
|
|
if dashAt >= 0 {
|
|
return args[:dashAt], args[dashAt:]
|
|
}
|
|
return args, []string{}
|
|
}
|
|
func FindMain(base string) (map[string]string, error) {
|
|
wd, err := os.Getwd()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if !strings.HasSuffix(wd, "/") {
|
|
wd += "/"
|
|
}
|
|
cmdPath := make(map[string]string)
|
|
err = filepath.Walk(base, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !info.IsDir() && filepath.Ext(path) == ".go" {
|
|
content, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !strings.Contains(string(content), "package main") {
|
|
return nil
|
|
}
|
|
re := regexp.MustCompile(`func\s+main\s*\(`)
|
|
if re.Match(content) {
|
|
absPath, err := filepath.Abs(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
d, _ := filepath.Split(absPath)
|
|
cmdPath[strings.TrimPrefix(absPath, wd)] = d
|
|
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return cmdPath, nil
|
|
}
|