func (rp *rewritePackage) wrapCallExprWithInterpolatedT(basicLit *ast.BasicLit, callExpr *ast.CallExpr, argIndex int) { valueWithoutQuotes, _ := strconv.Unquote(basicLit.Value) i18nStringInfo, ok := rp.ExtractedStrings[valueWithoutQuotes] if !ok && rp.ExtractedStrings != nil { rp.wrapExprArgs(callExpr.Args) return } templatedString := common.ConvertToTemplatedString(valueWithoutQuotes) basicLit.Value = strconv.Quote(templatedString) if rp.ExtractedStrings != nil { rp.updateExtractedStrings(i18nStringInfo, templatedString) } rp.wrapCallExprWithTemplatedT(basicLit, callExpr, argIndex) }
func TestExtractsLiteral(t *testing.T) { var root ast.BasicLit root.Kind = token.INT root.Value = "0" replace, fn := ExtractFnFromExpr("t", &root) if replace.Fun.(*ast.Ident).Name != "t" { t.Fail() } if fn.Recv != nil { t.Fail() } if fn.Name.Name != "t" { t.Fail() } if len(fn.Body.List) != 1 { t.Fail() } switch x := fn.Body.List[0].(type) { case *ast.ReturnStmt: if len(x.Results) != 1 { t.Fail() } else { if x.Results[0].(*ast.BasicLit).Kind != token.INT { t.Fail() } if x.Results[0].(*ast.BasicLit).Value != "0" { t.Fail() } } default: t.Fail() } printer.Fprint(os.Stdout, token.NewFileSet(), fn) printer.Fprint(os.Stdout, token.NewFileSet(), replace) }