From 47dba0ca26e0c7cb9f5f203691101aa061e5a811 Mon Sep 17 00:00:00 2001 From: Stuart Taylor Date: Sun, 12 May 2024 15:31:33 +0100 Subject: [PATCH 1/3] Strip extra slashes when there is no package Signed-off-by: Stuart Taylor --- .../protoc-gen-php-grpc/php/template.go | 11 +++++++--- protoc_plugins/protoc_test.go | 6 +++++ .../Test/CustomImport/ServiceInterface.php | 22 +++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 protoc_plugins/testdata/NoPackage/Test/CustomImport/ServiceInterface.php diff --git a/protoc_plugins/protoc-gen-php-grpc/php/template.go b/protoc_plugins/protoc-gen-php-grpc/php/template.go index ded48b6..7b83061 100644 --- a/protoc_plugins/protoc-gen-php-grpc/php/template.go +++ b/protoc_plugins/protoc-gen-php-grpc/php/template.go @@ -46,14 +46,16 @@ interface {{ .Service.Name | interface }} extends GRPC\ServiceInterface // GRPC specific service name. public const NAME = "{{ .File.Package }}.{{ .Service.Name }}";{{ "\n" }} {{- range $m := .Service.Method}} +{{- $inName := name $ns $m.InputType }} +{{- $outName := name $ns $m.OutputType }} /** * @param GRPC\ContextInterface $ctx - * @param {{ name $ns $m.InputType }} $in - * @return {{ name $ns $m.OutputType }} + * @param {{ strip_slashes $inName }} $in + * @return {{ strip_slashes $outName }} * * @throws GRPC\Exception\InvokeException */ - public function {{ $m.Name }}(GRPC\ContextInterface $ctx, {{ name $ns $m.InputType }} $in): {{ name $ns $m.OutputType }}; + public function {{ $m.Name }}(GRPC\ContextInterface $ctx, {{ strip_slashes $inName }} $in): {{ strip_slashes $outName }}; {{end -}} } ` @@ -89,6 +91,9 @@ func body(req *plugin.CodeGeneratorRequest, file *desc.FileDescriptorProto, serv "name": func(ns *ns, name *string) string { return ns.resolve(name) }, + "strip_slashes": func(name string) string { + return strings.ReplaceAll(name, "\\\\", "\\") + }, }).Parse(phpBody)) err := tpl.Execute(out, data) diff --git a/protoc_plugins/protoc_test.go b/protoc_plugins/protoc_test.go index 35dc465..e52c9d7 100644 --- a/protoc_plugins/protoc_test.go +++ b/protoc_plugins/protoc_test.go @@ -166,6 +166,7 @@ func Test_UseOfGoogleEmptyMessage(t *testing.T) { } func Test_NoPackage(t *testing.T) { + workdir, _ := os.Getwd() tmpdir, err := os.MkdirTemp("", "proto-test") require.NoError(t, err) @@ -182,6 +183,11 @@ func Test_NoPackage(t *testing.T) { } protoc(t, args) + assertEqualFiles( + t, + workdir+"/testdata/NoPackage/Test/CustomImport/ServiceInterface.php", + tmpdir+"/Test/CustomImport/ServiceInterface.php", + ) assert.NoError(t, os.RemoveAll("plugin")) } diff --git a/protoc_plugins/testdata/NoPackage/Test/CustomImport/ServiceInterface.php b/protoc_plugins/testdata/NoPackage/Test/CustomImport/ServiceInterface.php new file mode 100644 index 0000000..d383907 --- /dev/null +++ b/protoc_plugins/testdata/NoPackage/Test/CustomImport/ServiceInterface.php @@ -0,0 +1,22 @@ +.Service"; + + /** + * @param GRPC\ContextInterface $ctx + * @param \Message $in + * @return \Message + * + * @throws GRPC\Exception\InvokeException + */ + public function SimpleMethod(GRPC\ContextInterface $ctx, \Message $in): \Message; +} From 7b4aa55f63872e0e14678542072c52983cf7cbff Mon Sep 17 00:00:00 2001 From: Stuart Taylor Date: Sun, 12 May 2024 18:28:34 +0100 Subject: [PATCH 2/3] Fix service NAME --- .../protoc-gen-php-grpc/php/template.go | 11 ++++++++++- protoc_plugins/protoc_test.go | 18 ++++++++++++------ .../Test/CustomImport/ServiceInterface.php | 2 +- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/protoc_plugins/protoc-gen-php-grpc/php/template.go b/protoc_plugins/protoc-gen-php-grpc/php/template.go index 7b83061..a5a71fb 100644 --- a/protoc_plugins/protoc-gen-php-grpc/php/template.go +++ b/protoc_plugins/protoc-gen-php-grpc/php/template.go @@ -44,7 +44,7 @@ use Spiral\RoadRunner\GRPC; interface {{ .Service.Name | interface }} extends GRPC\ServiceInterface { // GRPC specific service name. - public const NAME = "{{ .File.Package }}.{{ .Service.Name }}";{{ "\n" }} + public const NAME = "{{ resolve_name_const .File.Package .Service.Name }}";{{ "\n" }} {{- range $m := .Service.Method}} {{- $inName := name $ns $m.InputType }} {{- $outName := name $ns $m.OutputType }} @@ -94,6 +94,15 @@ func body(req *plugin.CodeGeneratorRequest, file *desc.FileDescriptorProto, serv "strip_slashes": func(name string) string { return strings.ReplaceAll(name, "\\\\", "\\") }, + "resolve_name_const": func(packagePath, serviceName *string) string { + + if packagePath == nil || *packagePath == "" { + return *serviceName + } + + return *packagePath + "." + *serviceName + + }, }).Parse(phpBody)) err := tpl.Execute(out, data) diff --git a/protoc_plugins/protoc_test.go b/protoc_plugins/protoc_test.go index e52c9d7..89cd63b 100644 --- a/protoc_plugins/protoc_test.go +++ b/protoc_plugins/protoc_test.go @@ -34,7 +34,8 @@ func protoc(t *testing.T, args []string) { } func Test_Simple(t *testing.T) { - workdir, _ := os.Getwd() + workdir, err := os.Getwd() + require.NoError(t, err) tmpdir, err := os.MkdirTemp("", "proto-test") require.NoError(t, err) @@ -61,7 +62,8 @@ func Test_Simple(t *testing.T) { } func Test_PhpNamespaceOption(t *testing.T) { - workdir, _ := os.Getwd() + workdir, err := os.Getwd() + require.NoError(t, err) tmpdir, err := os.MkdirTemp("", "proto-test") require.NoError(t, err) @@ -87,7 +89,8 @@ func Test_PhpNamespaceOption(t *testing.T) { } func Test_UseImportedMessage(t *testing.T) { - workdir, _ := os.Getwd() + workdir, err := os.Getwd() + require.NoError(t, err) tmpdir, err := os.MkdirTemp("", "proto-test") require.NoError(t, err) @@ -113,7 +116,8 @@ func Test_UseImportedMessage(t *testing.T) { } func Test_PhpNamespaceOptionInUse(t *testing.T) { - workdir, _ := os.Getwd() + workdir, err := os.Getwd() + require.NoError(t, err) tmpdir, err := os.MkdirTemp("", "proto-test") require.NoError(t, err) @@ -139,7 +143,8 @@ func Test_PhpNamespaceOptionInUse(t *testing.T) { } func Test_UseOfGoogleEmptyMessage(t *testing.T) { - workdir, _ := os.Getwd() + workdir, err := os.Getwd() + require.NoError(t, err) tmpdir, err := os.MkdirTemp("", "proto-test") require.NoError(t, err) @@ -166,7 +171,8 @@ func Test_UseOfGoogleEmptyMessage(t *testing.T) { } func Test_NoPackage(t *testing.T) { - workdir, _ := os.Getwd() + workdir, err := os.Getwd() + require.NoError(t, err) tmpdir, err := os.MkdirTemp("", "proto-test") require.NoError(t, err) diff --git a/protoc_plugins/testdata/NoPackage/Test/CustomImport/ServiceInterface.php b/protoc_plugins/testdata/NoPackage/Test/CustomImport/ServiceInterface.php index d383907..8e41b32 100644 --- a/protoc_plugins/testdata/NoPackage/Test/CustomImport/ServiceInterface.php +++ b/protoc_plugins/testdata/NoPackage/Test/CustomImport/ServiceInterface.php @@ -9,7 +9,7 @@ interface ServiceInterface extends GRPC\ServiceInterface { // GRPC specific service name. - public const NAME = ".Service"; + public const NAME = "Service"; /** * @param GRPC\ContextInterface $ctx From 53be8bbd5cea49fb44bf71108b6c4f5883301a1b Mon Sep 17 00:00:00 2001 From: Stuart Taylor Date: Sun, 12 May 2024 20:38:51 +0100 Subject: [PATCH 3/3] Default nil values --- .../protoc-gen-php-grpc/php/template.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/protoc_plugins/protoc-gen-php-grpc/php/template.go b/protoc_plugins/protoc-gen-php-grpc/php/template.go index a5a71fb..de097d4 100644 --- a/protoc_plugins/protoc-gen-php-grpc/php/template.go +++ b/protoc_plugins/protoc-gen-php-grpc/php/template.go @@ -96,11 +96,11 @@ func body(req *plugin.CodeGeneratorRequest, file *desc.FileDescriptorProto, serv }, "resolve_name_const": func(packagePath, serviceName *string) string { - if packagePath == nil || *packagePath == "" { - return *serviceName + if defaultOrVal(packagePath) == "" { + return defaultOrVal(serviceName) } - return *packagePath + "." + *serviceName + return *packagePath + "." + defaultOrVal(serviceName) }, }).Parse(phpBody)) @@ -112,3 +112,12 @@ func body(req *plugin.CodeGeneratorRequest, file *desc.FileDescriptorProto, serv return out.String() } + +func defaultOrVal[T any](val *T) T { + if val != nil { + return *val + } + + var def T + return def +}