From 504d9517591f876e4a3a75fd16e22ed312f991c5 Mon Sep 17 00:00:00 2001 From: twacqwq Date: Mon, 11 Mar 2024 15:11:00 +0800 Subject: [PATCH] feat(cmd/init): change default module name to project name --- v2/cmd/wails/flags/init.go | 1 + v2/cmd/wails/init.go | 9 ++++++ v2/cmd/wails/internal/gomod/gomod.go | 22 +++++++++++++++ v2/internal/gomod/gomod.go | 10 +++++++ v2/internal/gomod/gomod_test.go | 41 ++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+) diff --git a/v2/cmd/wails/flags/init.go b/v2/cmd/wails/flags/init.go index 16d56a207..7d7d56901 100644 --- a/v2/cmd/wails/flags/init.go +++ b/v2/cmd/wails/flags/init.go @@ -11,6 +11,7 @@ type Init struct { InitGit bool `name:"g" description:"Initialise git repository"` IDE string `name:"ide" description:"Generate IDE project files"` List bool `name:"l" description:"List templates"` + InitModule bool `name:"m" description:"Change Default go.mod module name to project Name. default: changeme"` } func (i *Init) Default() *Init { diff --git a/v2/cmd/wails/init.go b/v2/cmd/wails/init.go index 709905c0f..7fbb2645a 100644 --- a/v2/cmd/wails/init.go +++ b/v2/cmd/wails/init.go @@ -14,6 +14,7 @@ import ( "github.com/pkg/errors" "github.com/pterm/pterm" "github.com/wailsapp/wails/v2/cmd/wails/flags" + "github.com/wailsapp/wails/v2/cmd/wails/internal/gomod" "github.com/wailsapp/wails/v2/internal/colour" "github.com/wailsapp/wails/v2/pkg/buildassets" "github.com/wailsapp/wails/v2/pkg/clilogger" @@ -125,6 +126,14 @@ func initProject(f *flags.Init) error { return err } + if f.InitModule { + // Change the module name to project name + err = gomod.ChangeModuleName(options.ProjectName) + if err != nil { + return err + } + } + if !f.CIMode { // Run `go mod tidy` to ensure `go.sum` is up to date cmd := exec.Command("go", "mod", "tidy") diff --git a/v2/cmd/wails/internal/gomod/gomod.go b/v2/cmd/wails/internal/gomod/gomod.go index 5da14a5ff..cd1129c17 100644 --- a/v2/cmd/wails/internal/gomod/gomod.go +++ b/v2/cmd/wails/internal/gomod/gomod.go @@ -62,6 +62,28 @@ func SyncGoMod(logger *clilogger.CLILogger, updateWailsVersion bool) error { return nil } +func ChangeModuleName(newModuleName string) error { + cwd, err := os.Getwd() + if err != nil { + return err + } + gomodFilename := fs.FindFileInParents(cwd, "go.mod") + if gomodFilename == "" { + return fmt.Errorf("no go.mod file found") + } + gomodData, err := os.ReadFile(gomodFilename) + if err != nil { + return err + } + + gomodData, err = gomod.UpdateGoModuleName(gomodData, newModuleName) + if err != nil { + return err + } + + return os.WriteFile(gomodFilename, gomodData, 0o755) +} + func LogGreen(message string, args ...interface{}) { text := fmt.Sprintf(message, args...) println(colour.Green(text)) diff --git a/v2/internal/gomod/gomod.go b/v2/internal/gomod/gomod.go index c38e60f0b..412ecefed 100644 --- a/v2/internal/gomod/gomod.go +++ b/v2/internal/gomod/gomod.go @@ -112,3 +112,13 @@ func SyncGoVersion(goModText []byte, goVersion string) ([]byte, bool, error) { return goModText, true, nil } + +func UpdateGoModuleName(goModText []byte, newModuleName string) ([]byte, error) { + file, err := modfile.Parse("", goModText, nil) + if err != nil { + return nil, err + } + + file.Module.Syntax.Token[1] = newModuleName + return file.Format() +} diff --git a/v2/internal/gomod/gomod_test.go b/v2/internal/gomod/gomod_test.go index eeafd0f9a..7bd5b50f9 100644 --- a/v2/internal/gomod/gomod_test.go +++ b/v2/internal/gomod/gomod_test.go @@ -137,3 +137,44 @@ func TestUpdateGoModGoVersion(t *testing.T) { }) } } + +const beforeGoModName string = `module changeme + +go 1.19 + +require github.com/wailsapp/wails/v2 v2.0.0-beta.7 +` + +const afterGoModName string = `module myproject + +go 1.19 + +require github.com/wailsapp/wails/v2 v2.0.0-beta.7 +` + +func TestUpdateGoModName(t *testing.T) { + is2 := is.New(t) + + type args struct { + goModText []byte + changeModName string + } + tests := []struct { + name string + args args + want []byte + }{ + {"default1", args{[]byte(beforeGoModName), "myproject"}, []byte(afterGoModName)}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := UpdateGoModuleName(tt.args.goModText, tt.args.changeModName) + if err != nil { + t.Errorf("UpdateGoModuleName() error = %v", err) + return + } + is2.Equal(got, tt.want) + }) + } +}