From e5ddbc01ab06a82c2674c8e630e1d6ee5eacb51e Mon Sep 17 00:00:00 2001 From: Micro Liu Date: Mon, 29 Sep 2025 17:33:41 +0800 Subject: [PATCH 1/5] chore: add fmt cmd for outputs --- cmd/llpyg/llpyg.go | 3 +++ cmd/llpyg/utils.go | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/cmd/llpyg/llpyg.go b/cmd/llpyg/llpyg.go index 900b74e..f36e05c 100644 --- a/cmd/llpyg/llpyg.go +++ b/cmd/llpyg/llpyg.go @@ -63,6 +63,9 @@ func main() { // tidy go module goModTidy(args.OutputDir) + // format go code + codeFormat(args.OutputDir) + fmt.Printf("LLGo bindings generated successfully in %s\n", args.OutputDir) } diff --git a/cmd/llpyg/utils.go b/cmd/llpyg/utils.go index a26ca2a..52582bc 100644 --- a/cmd/llpyg/utils.go +++ b/cmd/llpyg/utils.go @@ -65,3 +65,15 @@ func goModTidy(outDir string) error { return nil } +func codeFormat(outDir string) error { + if err := os.Chdir(outDir); err != nil { + return fmt.Errorf("error: failed to change directory: %w", err) + } + cmd := exec.Command("go", "fmt", "./...") + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + return fmt.Errorf("error: failed to format Go code: %w", err) + } + return nil +} From 6da1fc9dcf70dcdc63fc526e44109b188ca928ac Mon Sep 17 00:00:00 2001 From: Micro Liu Date: Mon, 29 Sep 2025 17:54:04 +0800 Subject: [PATCH 2/5] chore: delete change work dir oper --- cmd/llpyg/utils.go | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/cmd/llpyg/utils.go b/cmd/llpyg/utils.go index 52582bc..7d9931b 100644 --- a/cmd/llpyg/utils.go +++ b/cmd/llpyg/utils.go @@ -32,44 +32,39 @@ func writeConfig(cfg Config, outDir string) error { } func initGoModule(modName string, outDir string) error { - if err := os.Chdir(outDir); err != nil { - return fmt.Errorf("error: failed to change directory: %w", err) - } // init go module cmd := exec.Command("go", "mod", "init", modName) + cmd.Dir = outDir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("error: failed to initialize Go module: %w", err) } - getCmd := exec.Command("go", "get", "github.com/goplus/lib/py") - getCmd.Stdout = os.Stdout - getCmd.Stderr = os.Stderr - if err := getCmd.Run(); err != nil { + cmd = exec.Command("go", "get", "github.com/goplus/lib/py") + cmd.Dir = outDir + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { return fmt.Errorf("error: failed to get github.com/goplus/lib/py: %w", err) } return nil } func goModTidy(outDir string) error { - if err := os.Chdir(outDir); err != nil { - return fmt.Errorf("error: failed to change directory: %w", err) - } - tidyCmd := exec.Command("go", "mod", "tidy") - tidyCmd.Stdout = os.Stdout - tidyCmd.Stderr = os.Stderr - if err := tidyCmd.Run(); err != nil { + cmd := exec.Command("go", "mod", "tidy") + cmd.Dir = outDir + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { return fmt.Errorf("error: failed to tidy Go module: %w", err) } return nil } func codeFormat(outDir string) error { - if err := os.Chdir(outDir); err != nil { - return fmt.Errorf("error: failed to change directory: %w", err) - } cmd := exec.Command("go", "fmt", "./...") + cmd.Dir = outDir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { From add75a42192e61e103cb98f2787a075bd7ebce9e Mon Sep 17 00:00:00 2001 From: Micro Liu Date: Mon, 29 Sep 2025 18:01:17 +0800 Subject: [PATCH 3/5] test: make test happy --- cmd/llpyg/llpyg_test.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/cmd/llpyg/llpyg_test.go b/cmd/llpyg/llpyg_test.go index 19a5d6f..bb792be 100644 --- a/cmd/llpyg/llpyg_test.go +++ b/cmd/llpyg/llpyg_test.go @@ -106,3 +106,37 @@ func assertArgsEqual(t *testing.T, got, want Args) { t.Errorf("unexpected Kwarg: got %q, want %q", got.Kwarg, want.Kwarg) } } + + +func TestGoModuleUtils(t *testing.T) { + tempDir := t.TempDir() + goFile := filepath.Join(tempDir, "test.go") + goContent := `package main + + import ( + "fmt" + "github.com/goplus/lib/py" + ) + + func main() { + a := py.Object{} + fmt.Printf("hello %v", a) + } + ` + err := os.WriteFile(goFile, []byte(goContent), 0644) + if err != nil { + t.Fatalf("Failed to create test Go file: %v", err) + } + err = initGoModule("test", tempDir) + if err != nil { + t.Fatal(err) + } + err = goModTidy(tempDir) + if err != nil { + t.Log(err) + } + err = codeFormat(tempDir) + if err != nil { + t.Log(err) + } +} From 5a7bad4ebc06a4a335f6ac092e73e08fa4e90e3d Mon Sep 17 00:00:00 2001 From: Micro Liu Date: Fri, 10 Oct 2025 10:50:50 +0800 Subject: [PATCH 4/5] supplement error handle --- cmd/llpyg/llpyg.go | 21 ++++++++++++++------- cmd/llpyg/llpyg_test.go | 4 ++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/cmd/llpyg/llpyg.go b/cmd/llpyg/llpyg.go index f36e05c..cfdf8ca 100644 --- a/cmd/llpyg/llpyg.go +++ b/cmd/llpyg/llpyg.go @@ -55,16 +55,22 @@ func main() { } // init work dir - initWorkDir(&args, cfg) + if err := initWorkDir(&args, cfg); err != nil { + log.Fatal(err) + } // LLGo Bindings generation generateFromConfig(cfg, args.OutputDir) // tidy go module - goModTidy(args.OutputDir) + if err := goModTidy(args.OutputDir); err != nil { + log.Fatal(err) + } // format go code - codeFormat(args.OutputDir) + if err := codeFormat(args.OutputDir); err != nil { + log.Fatal(err) + } fmt.Printf("LLGo bindings generated successfully in %s\n", args.OutputDir) } @@ -144,23 +150,24 @@ func readConfig(cfgPath string) (cfg Config) { } // init work dir, include go module, llpyg.cfg -func initWorkDir(args *Args, cfg Config) { +func initWorkDir(args *Args, cfg Config) error { args.OutputDir = filepath.Join(args.OutputDir, cfg.Name) // remove origin output dir if err := os.RemoveAll(args.OutputDir); err != nil { - log.Fatalf("error: failed to remove output directory %s: %v\n", args.OutputDir, err) + return fmt.Errorf("failed to remove output directory %s: %v", args.OutputDir, err) } // write config file if err := writeConfig(cfg, args.OutputDir); err != nil { - log.Fatalf("error: failed to write config file %s: %v\n", args.OutputDir, err) + return fmt.Errorf("failed to write config file %s: %v", args.OutputDir, err) } // init go module if args.ModName == "" { args.ModName = cfg.Name } if err := initGoModule(args.ModName, args.OutputDir); err != nil { - log.Fatal(err) + return err } + return nil } func generateFromConfig(cfg Config, outDir string) { diff --git a/cmd/llpyg/llpyg_test.go b/cmd/llpyg/llpyg_test.go index bb792be..6370f70 100644 --- a/cmd/llpyg/llpyg_test.go +++ b/cmd/llpyg/llpyg_test.go @@ -133,10 +133,10 @@ func TestGoModuleUtils(t *testing.T) { } err = goModTidy(tempDir) if err != nil { - t.Log(err) + t.Fatal(err) } err = codeFormat(tempDir) if err != nil { - t.Log(err) + t.Fatal(err) } } From e2219e3e077115775e08cd4c6b4706976a8809ca Mon Sep 17 00:00:00 2001 From: Micro Liu Date: Fri, 10 Oct 2025 11:38:41 +0800 Subject: [PATCH 5/5] code optimization and make test happy --- cmd/llpyg/llpyg.go | 5 +---- cmd/llpyg/llpyg_test.go | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/cmd/llpyg/llpyg.go b/cmd/llpyg/llpyg.go index cfdf8ca..7d3b826 100644 --- a/cmd/llpyg/llpyg.go +++ b/cmd/llpyg/llpyg.go @@ -164,10 +164,7 @@ func initWorkDir(args *Args, cfg Config) error { if args.ModName == "" { args.ModName = cfg.Name } - if err := initGoModule(args.ModName, args.OutputDir); err != nil { - return err - } - return nil + return initGoModule(args.ModName, args.OutputDir) } func generateFromConfig(cfg Config, outDir string) { diff --git a/cmd/llpyg/llpyg_test.go b/cmd/llpyg/llpyg_test.go index 6370f70..a39634d 100644 --- a/cmd/llpyg/llpyg_test.go +++ b/cmd/llpyg/llpyg_test.go @@ -110,7 +110,21 @@ func assertArgsEqual(t *testing.T, got, want Args) { func TestGoModuleUtils(t *testing.T) { tempDir := t.TempDir() - goFile := filepath.Join(tempDir, "test.go") + args := Args{ + OutputDir: tempDir, + ModName: "test", + ModDepth: 1, + Kwarg: "test", + } + cfg := Config{ + Name: "test", + LibName: "test", + Modules: []string{"test"}, + } + if err := initWorkDir(&args, cfg); err != nil { + t.Fatal(err) + } + goFile := filepath.Join(args.OutputDir, "test.go") goContent := `package main import ( @@ -127,15 +141,11 @@ func TestGoModuleUtils(t *testing.T) { if err != nil { t.Fatalf("Failed to create test Go file: %v", err) } - err = initGoModule("test", tempDir) - if err != nil { - t.Fatal(err) - } - err = goModTidy(tempDir) + err = goModTidy(args.OutputDir) if err != nil { t.Fatal(err) } - err = codeFormat(tempDir) + err = codeFormat(args.OutputDir) if err != nil { t.Fatal(err) }