diff --git a/pkg/infrastructure/ast/cocago/cocago_builder.go b/pkg/infrastructure/ast/cocago/cocago_builder.go index 51d9e0d942f9826a89047fcb300ca874397b8fbc..e32846a21902a948a3c0f5d03d05ddcf46db7c72 100644 --- a/pkg/infrastructure/ast/cocago/cocago_builder.go +++ b/pkg/infrastructure/ast/cocago/cocago_builder.go @@ -109,22 +109,27 @@ func BuildFieldToProperty(fieldList []*ast.Field) []CodeProperty { return properties } -func BuildMethodCall(codeFunc *CodeFunction, item ast.Stmt, fields []CodeField, localVars []CodeProperty, imports []CodeImport, packageName string) ([]CodeProperty, CodeCall) { +func BuildMethodCall(codeFunc *CodeFunction, item ast.Stmt, fields []CodeField, localVars []CodeProperty, imports []CodeImport, packageName string) ([]CodeProperty, *CodeCall) { var call CodeCall switch it := item.(type) { case *ast.ExprStmt: - BuildMethodCallExprStmt(it, codeFunc, fields, imports, packageName, localVars) + call = *BuildMethodCallExprStmt(it, codeFunc, fields, imports, packageName, localVars) case *ast.DeferStmt: - call = BuildCallFromExpr(it.Call, codeFunc, fields, imports, packageName, localVars) + call = *BuildCallFromExpr(it.Call, codeFunc, fields, imports, packageName, localVars) codeFunc.FunctionCalls = append(codeFunc.FunctionCalls, call) case *ast.AssignStmt: vars := BuildLocalVars(it) localVars = vars + case *ast.ReturnStmt: + for _, result := range it.Results { + expr, s, s2 := BuildExpr(result) + fmt.Println(expr, s, s2) + } default: fmt.Fprintf(output, "methodCall %s\n", reflect.TypeOf(it)) } - return localVars, call + return localVars, &call } func BuildLocalVars(it *ast.AssignStmt) []CodeProperty { @@ -149,17 +154,20 @@ func BuildLocalVars(it *ast.AssignStmt) []CodeProperty { return vars } -func BuildMethodCallExprStmt(it *ast.ExprStmt, codeFunc *CodeFunction, fields []CodeField, imports []CodeImport, currentPackage string, localVars []CodeProperty) { +func BuildMethodCallExprStmt(it *ast.ExprStmt, codeFunc *CodeFunction, fields []CodeField, imports []CodeImport, currentPackage string, localVars []CodeProperty) *CodeCall { + var call *CodeCall switch expr := it.X.(type) { case *ast.CallExpr: - call := BuildCallFromExpr(expr, nil, fields, imports, currentPackage, localVars) - codeFunc.FunctionCalls = append(codeFunc.FunctionCalls, call) + call = BuildCallFromExpr(expr, codeFunc, fields, imports, currentPackage, localVars) + codeFunc.FunctionCalls = append(codeFunc.FunctionCalls, *call) default: fmt.Fprintf(output, "BuildMethodCallExprStmt: %s\n", reflect.TypeOf(expr)) } + + return call } -func BuildCallFromExpr(expr *ast.CallExpr, codeFunc *CodeFunction, fields []CodeField, imports []CodeImport, currentPackage string, localVars []CodeProperty) CodeCall { +func BuildCallFromExpr(expr *ast.CallExpr, codeFunc *CodeFunction, fields []CodeField, imports []CodeImport, currentPackage string, localVars []CodeProperty) *CodeCall { _, selector, selName := BuildExpr(expr.Fun.(ast.Expr)) target := ParseTarget(selector, fields, localVars) packageName := getPackageName(target, imports) @@ -180,13 +188,12 @@ func BuildCallFromExpr(expr *ast.CallExpr, codeFunc *CodeFunction, fields []Code for _, item := range funcLit.Body.List { _, methodCall := BuildMethodCall(codeFunc, item, fields, localVars, imports, packageName) - fmt.Println("...", methodCall) + fmt.Println(methodCall) if methodCall.NodeName != "" { - fmt.Println(methodCall.NodeName) - codeFunc.FunctionCalls = append(codeFunc.FunctionCalls, methodCall) + codeFunc.FunctionCalls = append(codeFunc.FunctionCalls, *methodCall) } } - } + } _, value, kind := BuildExpr(arg.(ast.Expr)) property := &CodeProperty{ @@ -196,7 +203,8 @@ func BuildCallFromExpr(expr *ast.CallExpr, codeFunc *CodeFunction, fields []Code call.Parameters = append(call.Parameters, *property) } - return call + + return &call } func getPackageName(target string, imports []CodeImport) string { diff --git a/pkg/infrastructure/ast/cocago/cocago_parser.go b/pkg/infrastructure/ast/cocago/cocago_parser.go index f29974cc01fab3b368badf90845334659172f19d..e7c968ae50a928a9552fde1d389cc3aa9d287214 100644 --- a/pkg/infrastructure/ast/cocago/cocago_parser.go +++ b/pkg/infrastructure/ast/cocago/cocago_parser.go @@ -295,6 +295,8 @@ func BuildExpr(expr ast.Expr) (string, string, string) { case *ast.FuncLit: // inner function fmt.Println(x.Body.List) + case *ast.BinaryExpr: + //fmt.Println(x.Op) default: fmt.Fprintf(output, "BuildExpr %s\n", reflect.TypeOf(x)) }