func ModifyCase()

in scripts/inspectRequest/modifyCase.go [14:141]


func ModifyCase(filename string, api *Api, apsaraApi *Api) bool {
	apiname := api.Name
	requestModify := make(map[string]string)
	for _, beforeRequest := range api.Requests {
		for _, afterRequest := range apsaraApi.Requests {
			if strings.EqualFold(beforeRequest.Name, afterRequest.Name) {
				requestModify[beforeRequest.Name] = afterRequest.Name
			}
		}
	}
	if len(requestModify) == 0 {
		return false
	}

	fs := token.NewFileSet()
	node, err := parser.ParseFile(fs, filename, nil, parser.ParseComments)
	if err != nil {
		fmt.Println(err)
		return false
	}

	ast.Inspect(node, func(n ast.Node) bool {
		switch x := n.(type) {
		case *ast.BlockStmt:
			lock := false
			//先检查Apiname
			for _, stmt := range x.List {
				if assignStmt, ok := stmt.(*ast.AssignStmt); ok {
					for _, rhs := range assignStmt.Rhs {
						call, ok := rhs.(*ast.CallExpr)
						var pkName, fnName string
						if ok {
							fnName = getFuncName(call)
							pkName = getPackageName(call)
						}

						//部分不规范的product
						if pkName == "cr_ee" {
							pkName = "cr"
						}
						if pkName == "r_kvstore" {
							pkName = "R-kvstore"
						}
						if pkName == "slsPop" {
							pkName = "Sls"
						}

						if fnName == "NewCommonRequest" {
							for _, stmt := range x.List {
								if assignStmt, ok := stmt.(*ast.AssignStmt); ok {
									if lhs, ok := assignStmt.Lhs[0].(*ast.SelectorExpr); ok {
										if lhsx, ok := lhs.X.(*ast.Ident); ok && lhsx.Name == "request" {
											if rhs, ok := assignStmt.Rhs[0].(*ast.BasicLit); ok {
												value := rhs.Value[1 : len(rhs.Value)-1]
												if lhs.Sel.Name == "ApiName" {
													if value == apiname {
														lock = true
													}
												}

											}
										}
									}
								}
							}
						}
					}
				}
			}
			//检查参数并修复
			for _, stmt := range x.List {
				if assignStmt, ok := stmt.(*ast.AssignStmt); ok {
					if lhs, ok := assignStmt.Lhs[0].(*ast.SelectorExpr); ok {
						if lhs.Sel.Name == "QueryParams" {
							rhs, ok := assignStmt.Rhs[0].(*ast.CompositeLit)
							if !ok {
								continue
							}
							elts := rhs.Elts
							for i := 0; i < len(elts); i++ {
								e := elts[i]
								kv := e.(*ast.KeyValueExpr)
								k := kv.Key.(*ast.BasicLit)
								request := k.Value[1 : len(k.Value)-1]
								if request == "AccessKeyId" || request == "RegionId" || request == "AccessKeySecret" || request == "Product" || request == "Action" || request == "Version" || request == "ProductName" || request == "Department" || request == "ResourceGroup" {
									continue
								}
								if request == "X-acs-body" || request == "SignatureVersion" || request == "Language" || request == "SignatureMethod" || request == "AccountInfo" {
									continue
								}
								for beforeRequest, afterRequest := range requestModify {
									if request == beforeRequest && lock == true {
										modify := "\"" + afterRequest + "\""
										k.Value = modify
										break
									}
								}
							}
						} else if lhsx, ok := lhs.X.(*ast.Ident); ok && lhsx.Name == "request" {
							if rhs, ok := assignStmt.Rhs[0].(*ast.BasicLit); ok {
								value := rhs.Value[1 : len(rhs.Value)-1]
								if lhs.Sel.Name == "ApiName" {
									if value == apiname {
										lock = true
									}
								}

							}
						}
					}
				}
			}
		}

		return true
	})

	file, _ := os.Create(filename)
	var output strings.Builder
	if err = printer.Fprint(&output, fs, node); err != nil {
		return false
	}
	file.WriteString(output.String())
	log.Println("参数不规范修复    ", "文件名:", filename, "    sdk:", api.Name)
	log.Println(requestModify)
	log.Println("-----------------------------------")
	return true
}