From 947cc8e80fb6af4a07ccd1472927b4542c28ae31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=94=D0=BE=D0=BD?= =?UTF-8?q?=D0=BE=D1=81?= Date: Tue, 22 Apr 2025 08:37:53 +0300 Subject: [PATCH 1/2] feat: add option to ignore unexported interface methods instead of error returning --- cmd_generate.go | 21 ++++++++++++--------- generator/generator.go | 12 ++++++++++-- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/cmd_generate.go b/cmd_generate.go index 5ab5220..0b8e85c 100644 --- a/cmd_generate.go +++ b/cmd_generate.go @@ -23,13 +23,14 @@ import ( type GenerateCommand struct { BaseCommand - interfaceName string - template string - outputFile string - sourcePkg string - noGenerate bool - vars vars - localPrefix string + interfaceName string + template string + outputFile string + sourcePkg string + noGenerate bool + vars vars + localPrefix string + ignoreUnexported bool loader templateLoader filepath fs @@ -57,6 +58,7 @@ func NewGenerateCommand(l remoteTemplateLoader) *GenerateCommand { "run `gowrap template list` for details") fs.Var(&gc.vars, "v", "a key-value pair to parametrize the template,\narguments without an equal sign are treated as a bool values,\ni.e. -v foo=bar -v disableChecks") fs.StringVar(&gc.localPrefix, "l", "", "put imports beginning with this string after 3rd-party packages; comma-separated list") + fs.BoolVar(&gc.ignoreUnexported, "u", false, "ignore unexported methods") gc.BaseCommand = BaseCommand{ Short: "generate decorators", @@ -133,8 +135,9 @@ func (gc *GenerateCommand) getOptions() (*generator.Options, error) { "OutputFileName": filepath.Base(gc.outputFile), "VarsArgs": varsToArgs(gc.vars), }, - Vars: gc.vars.toMap(), - LocalPrefix: gc.localPrefix, + Vars: gc.vars.toMap(), + LocalPrefix: gc.localPrefix, + IgnoreUnexported: gc.ignoreUnexported, } outputFileDir, err := gc.filepath.Abs(gc.filepath.Dir(gc.outputFile)) diff --git a/generator/generator.go b/generator/generator.go index 2131a2d..53562ea 100644 --- a/generator/generator.go +++ b/generator/generator.go @@ -132,6 +132,9 @@ type Options struct { //LocalPrefix is a comma-separated string of import path prefixes, which, if set, instructs Process to sort the import //paths with the given prefixes into another group after 3rd-party packages. LocalPrefix string + + //IgnoreUnexported skip generation of unexported methods instead of return an error + IgnoreUnexported bool } type methodsList map[string]Method @@ -238,10 +241,15 @@ func NewGenerator(options Options) (*Generator, error) { return nil, errEmptyInterface } - for _, m := range output.methods { - if srcPackageAST.Name != "" && []rune(m.Name)[0] == []rune(strings.ToLower(m.Name))[0] { + for n, m := range output.methods { + unexported := srcPackageAST.Name != "" && []rune(m.Name)[0] == []rune(strings.ToLower(m.Name))[0] + if !options.IgnoreUnexported && unexported { return nil, errors.Wrap(errUnexportedMethod, m.Name) } + + if unexported { + delete(output.methods, n) + } } options.Imports = append(options.Imports, makeImports(output.imports)...) From 4bb57fd45105edead0df4eb82f55c1ad28c77899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=20=D0=94=D0=BE=D0=BD?= =?UTF-8?q?=D0=BE=D1=81?= Date: Mon, 12 May 2025 19:45:36 +0300 Subject: [PATCH 2/2] fix: add `-u` flag in generated code (cherry picked from commit 1ee915ddd51fa239d8aeb294685225e48497fba5) --- cmd_generate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd_generate.go b/cmd_generate.go index 0b8e85c..e8cffc1 100644 --- a/cmd_generate.go +++ b/cmd_generate.go @@ -310,7 +310,7 @@ const headerTemplate = `// Code generated by gowrap. DO NOT EDIT. package {{.Package.Name}} {{if (not .Options.HeaderVars.DisableGoGenerate)}} -//{{"go:generate"}} gowrap gen -p {{.SourcePackage.PkgPath}} -i {{.Options.InterfaceName}} -t {{.Options.HeaderVars.Template}} -o {{.Options.HeaderVars.OutputFileName}}{{.Options.HeaderVars.VarsArgs}} -l "{{.Options.LocalPrefix}}" +//{{"go:generate"}} gowrap gen -p {{.SourcePackage.PkgPath}} -i {{.Options.InterfaceName}} -t {{.Options.HeaderVars.Template}} -o {{.Options.HeaderVars.OutputFileName}}{{.Options.HeaderVars.VarsArgs}} -l "{{.Options.LocalPrefix}}"{{if .Options.IgnoreUnexported}} -u{{end}} {{end}} import( {{range $import := .Options.Imports}}{{$import}}