This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/skywalking-go.git
The following commit(s) were added to refs/heads/main by this push: new 322daeb Fix enhance param error when there are multiple params (#162) 322daeb is described below commit 322daeb60b64b05ce7d174b433100c64834835b2 Author: Starry <codeprince2...@163.com> AuthorDate: Mon Jan 22 01:30:57 2024 +0800 Fix enhance param error when there are multiple params (#162) --- CHANGES.md | 1 + tools/go-agent/tools/enhancement.go | 1 - tools/go-agent/tools/enhancement_test.go | 55 ++++++++++++++++++++++++++++---- 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b4c2a70..a6ef940 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,6 +20,7 @@ Release Notes. * Fix ParseVendorModule error for special case in vendor/modules.txt. * Fix enhance method error when unknown parameter type. * Fix wrong tracing context when trace have been sampled. +* Fix enhance param error when there are multiple params. #### Issues and PR - All issues are [here](https://github.com/apache/skywalking/milestone/197?closed=1) diff --git a/tools/go-agent/tools/enhancement.go b/tools/go-agent/tools/enhancement.go index 4171f61..04a3052 100644 --- a/tools/go-agent/tools/enhancement.go +++ b/tools/go-agent/tools/enhancement.go @@ -88,7 +88,6 @@ func EnhanceParameterNames(fields *dst.FieldList, fieldType FieldListType) []*Pa for _, n := range f.Names { result = append(result, newParameterInfo(n.Name, f.Type)) - break } } } diff --git a/tools/go-agent/tools/enhancement_test.go b/tools/go-agent/tools/enhancement_test.go index e2a8c51..3bd5d6c 100644 --- a/tools/go-agent/tools/enhancement_test.go +++ b/tools/go-agent/tools/enhancement_test.go @@ -30,13 +30,15 @@ func buildParameterValidateInfo(name, typeName string) *ParameterInfo { } } +type TestEnhanceParameterInfo struct { + funcCode string + recvs []*ParameterInfo + params []*ParameterInfo + results []*ParameterInfo +} + func TestEnhanceParameterNames(t *testing.T) { - tests := []struct { - funcCode string - recvs []*ParameterInfo - params []*ParameterInfo - results []*ParameterInfo - }{ + tests := []TestEnhanceParameterInfo{ { funcCode: `func (*Example) Test(int) bool { return false @@ -67,6 +69,47 @@ func TestEnhanceParameterNames(t *testing.T) { }, } + validateParameterTestList(t, tests) +} + +func TestEnhanceParameterNamesMultiParams(t *testing.T) { + tests := []TestEnhanceParameterInfo{ + { + funcCode: `func (*Example) Test(n, m int) bool { + return false + }`, + recvs: []*ParameterInfo{ + buildParameterValidateInfo("skywalking_recv_0", "*Example"), + }, + params: []*ParameterInfo{ + buildParameterValidateInfo("n", "int"), + buildParameterValidateInfo("m", "int"), + }, + results: []*ParameterInfo{ + buildParameterValidateInfo("skywalking_result_0", "bool"), + }, + }, + { + funcCode: `func (e *Example) Test(n, m int) (b bool) { + return false +}`, + recvs: []*ParameterInfo{ + buildParameterValidateInfo("e", "*Example"), + }, + params: []*ParameterInfo{ + buildParameterValidateInfo("n", "int"), + buildParameterValidateInfo("m", "int"), + }, + results: []*ParameterInfo{ + buildParameterValidateInfo("b", "bool"), + }, + }, + } + + validateParameterTestList(t, tests) +} + +func validateParameterTestList(t *testing.T, tests []TestEnhanceParameterInfo) { for i, test := range tests { fun := GoStringToDecls(test.funcCode)[0].(*dst.FuncDecl) var actualRecv, actualParams, actualResults []*ParameterInfo