本文整理汇总了Golang中go/ast.BasicLit.ValuePos方法的典型用法代码示例。如果您正苦于以下问题:Golang BasicLit.ValuePos方法的具体用法?Golang BasicLit.ValuePos怎么用?Golang BasicLit.ValuePos使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类go/ast.BasicLit
的用法示例。
在下文中一共展示了BasicLit.ValuePos方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: wrapBasicLitWithTemplatedT
func (rp *rewritePackage) wrapBasicLitWithTemplatedT(basicLit *ast.BasicLit, args []ast.Expr, callExpr *ast.CallExpr, argIndex int) ast.Expr {
valueWithoutQuotes, _ := strconv.Unquote(basicLit.Value) //basicLit.Value[1 : len(basicLit.Value)-1]
_, ok := rp.ExtractedStrings[valueWithoutQuotes]
if !ok && rp.ExtractedStrings != nil {
return callExpr
}
rp.TotalStrings++
tIdent := &ast.Ident{Name: "T"}
argNames := common.GetTemplatedStringArgs(valueWithoutQuotes)
compositeExpr := []ast.Expr{}
processedArgsMap := make(map[string]bool)
for i, argName := range argNames {
if callExpr, ok := args[argIndex+i+1].(*ast.CallExpr); ok {
rp.callExprTFunc(callExpr)
} else if basicLit, ok := args[argIndex+i+1].(*ast.BasicLit); ok {
args[argIndex+i] = rp.wrapBasicLitWithT(basicLit)
}
if processedArgsMap[argName] != true {
quotedArgName := "\"" + argName + "\""
basicLit.ValuePos = 0
valueExpr := args[argIndex+i+1]
if basicLit, ok := args[argIndex+i+1].(*ast.BasicLit); ok {
valueExpr = rp.wrapBasicLitWithT(basicLit)
}
keyValueExpr := &ast.KeyValueExpr{Key: &ast.BasicLit{Kind: 9, Value: quotedArgName}, Value: valueExpr}
processedArgsMap[argName] = true
compositeExpr = append(compositeExpr, keyValueExpr)
}
}
mapInterfaceType := &ast.InterfaceType{Interface: 142, Methods: &ast.FieldList{List: nil, Opening: 1, Closing: 2}, Incomplete: false}
mapType := &ast.MapType{Map: 131, Key: &ast.Ident{Name: "string"}, Value: mapInterfaceType}
compositeLit := &ast.CompositeLit{Type: mapType, Elts: compositeExpr}
return &ast.CallExpr{Fun: tIdent, Args: []ast.Expr{basicLit, compositeLit}}
}