本文整理汇总了Golang中go/format.Node函数的典型用法代码示例。如果您正苦于以下问题:Golang Node函数的具体用法?Golang Node怎么用?Golang Node使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Node函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Output
func (m Mocks) Output(pkg, dir string, chanSize int, dest io.Writer) error {
if _, err := dest.Write([]byte(commentHeader)); err != nil {
return err
}
fset := token.NewFileSet()
f := &ast.File{
Name: &ast.Ident{Name: pkg},
Decls: m.decls(chanSize),
}
var b bytes.Buffer
format.Node(&b, fset, f)
// TODO: Determine why adding imports without creating a new ast file
// will only allow one import to be printed to the file.
fset = token.NewFileSet()
file, err := parser.ParseFile(fset, pkg, &b, 0)
if err != nil {
return err
}
file, fset, err = addImports(file, fset, dir)
if err != nil {
return err
}
return format.Node(dest, fset, file)
}
开发者ID:nelsam,项目名称:hel,代码行数:30,代码来源:mocks.go
示例2: merge
func (b *builder) merge() ([]byte, error) {
var buf bytes.Buffer
if err := b.tpl.Execute(&buf, b); err != nil {
return nil, err
}
f, err := parser.ParseFile(b.fset, "", &buf, 0)
if err != nil {
return nil, err
}
// b.imports(f)
b.deleteImports(f)
b.files["main.go"] = f
pkg, _ := ast.NewPackage(b.fset, b.files, nil, nil)
pkg.Name = "main"
ret, err := ast.MergePackageFiles(pkg, 0), nil
if err != nil {
return nil, err
}
// @TODO: we reread the file, probably something goes wrong with position
buf.Reset()
if err = format.Node(&buf, b.fset, ret); err != nil {
return nil, err
}
ret, err = parser.ParseFile(b.fset, "", buf.Bytes(), 0)
if err != nil {
return nil, err
}
for _, spec := range b.imports {
var name string
if spec.Name != nil {
name = spec.Name.Name
}
ipath, _ := strconv.Unquote(spec.Path.Value)
addImport(b.fset, ret, name, ipath)
}
buf.Reset()
if err := format.Node(&buf, b.fset, ret); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
开发者ID:dasnook,项目名称:godog,代码行数:49,代码来源:builder.go
示例3: CodeBytes
func CodeBytes(fset *token.FileSet, node interface{}) ([]byte, error) {
var buf bytes.Buffer
if err := format.Node(&buf, fset, node); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
开发者ID:jmptrader,项目名称:og,代码行数:7,代码来源:ast.go
示例4: rewriteTestsInFile
/*
* Given a file path, rewrites any tests in the Ginkgo format.
* First, we parse the AST, and update the imports declaration.
* Then, we walk the first child elements in the file, returning tests to rewrite.
* A top level init func is declared, with a single Describe func inside.
* Then the test functions to rewrite are inserted as It statements inside the Describe.
* Finally we walk the rest of the file, replacing other usages of *testing.T
* Once that is complete, we write the AST back out again to its file.
*/
func rewriteTestsInFile(pathToFile string) {
fileSet := token.NewFileSet()
rootNode, err := parser.ParseFile(fileSet, pathToFile, nil, 0)
if err != nil {
panic(fmt.Sprintf("Error parsing test file '%s':\n%s\n", pathToFile, err.Error()))
}
addGinkgoImports(rootNode)
removeTestingImport(rootNode)
topLevelInitFunc := createInitBlock()
describeBlock := createDescribeBlock()
topLevelInitFunc.Body.List = append(topLevelInitFunc.Body.List, describeBlock)
for _, testFunc := range findTestFuncs(rootNode) {
rewriteTestFuncAsItStatement(testFunc, rootNode, describeBlock)
}
rootNode.Decls = append(rootNode.Decls, topLevelInitFunc)
rewriteOtherFuncsToUseGinkgoT(rootNode.Decls)
walkNodesInRootNodeReplacingTestingT(rootNode)
var buffer bytes.Buffer
if err = format.Node(&buffer, fileSet, rootNode); err != nil {
panic(fmt.Sprintf("Error formatting ast node after rewriting tests.\n%s\n", err.Error()))
}
fileInfo, err := os.Stat(pathToFile)
if err != nil {
panic(fmt.Sprintf("Error stat'ing file: %s\n", pathToFile))
}
ioutil.WriteFile(pathToFile, buffer.Bytes(), fileInfo.Mode())
return
}
开发者ID:nkts,项目名称:golang-devops-stuff,代码行数:44,代码来源:testfile_rewriter.go
示例5: Output
func (m Mocks) Output(pkg string, chanSize int, dest io.Writer) error {
f := &ast.File{
Name: &ast.Ident{Name: pkg},
Decls: m.decls(chanSize),
}
return format.Node(dest, token.NewFileSet(), f)
}
开发者ID:jasonkeene,项目名称:hel,代码行数:7,代码来源:mocks.go
示例6: TestExamples
func TestExamples(t *testing.T) {
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, "test.go", strings.NewReader(exampleTestFile), parser.ParseComments)
if err != nil {
t.Fatal(err)
}
for i, e := range doc.Examples(file) {
c := exampleTestCases[i]
if e.Name != c.Name {
t.Errorf("got Name == %q, want %q", e.Name, c.Name)
}
if w := c.Play; w != "" {
var g string // hah
if e.Play == nil {
g = "<nil>"
} else {
var buf bytes.Buffer
if err := format.Node(&buf, fset, e.Play); err != nil {
t.Fatal(err)
}
g = buf.String()
}
if g != w {
t.Errorf("%s: got Play == %q, want %q", c.Name, g, w)
}
}
if g, w := e.Output, c.Output; g != w {
t.Errorf("%s: got Output == %q, want %q", c.Name, g, w)
}
}
}
开发者ID:Clarifai,项目名称:kubernetes,代码行数:31,代码来源:example_test.go
示例7: Gen
// Gen generates Go code for a set of table mappings.
func (c *Code) Gen(mapper *Map, pkg string, out io.Writer) {
data := struct {
Package string
Imports []importSpec
TableMaps []tableMapTmpl
}{
Package: pkg,
Imports: mapper.Imports(),
}
for i, tableMap := range *mapper {
log.Printf("%d: generating map %s -> %s", i, tableMap.Table, tableMap.Struct)
data.TableMaps = append(data.TableMaps, c.genMapper(tableMap))
}
if err := c.tmpl.Execute(c.buf, data); err != nil {
// TODO(paulsmith): return error
log.Fatal(err)
}
// gofmt
fset := token.NewFileSet()
ast, err := parser.ParseFile(fset, "", c.buf.Bytes(), parser.ParseComments)
if err != nil {
// TODO(paulsmith): return error
log.Fatal(err)
}
err = format.Node(out, fset, ast)
if err != nil {
// TODO(paulsmith): return error
log.Fatal(err)
}
}
开发者ID:jeremyjbowers,项目名称:tablestruct,代码行数:34,代码来源:code.go
示例8: gofmt
func gofmt(n interface{}) string {
gofmtBuf.Reset()
if err := format.Node(&gofmtBuf, fset, n); err != nil {
return "<" + err.Error() + ">"
}
return gofmtBuf.String()
}
开发者ID:danny8002,项目名称:go,代码行数:7,代码来源:main.go
示例9: FormatCode
// FormatCode runs "goimports -w" on the source file.
func (f *SourceFile) FormatCode() error {
// Parse file into AST
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, f.Abs(), nil, parser.ParseComments)
if err != nil {
content, _ := ioutil.ReadFile(f.Abs())
var buf bytes.Buffer
scanner.PrintError(&buf, err)
return fmt.Errorf("%s\n========\nContent:\n%s", buf.String(), content)
}
// Clean unused imports
imports := astutil.Imports(fset, file)
for _, group := range imports {
for _, imp := range group {
path := strings.Trim(imp.Path.Value, `"`)
if !astutil.UsesImport(file, path) {
if imp.Name != nil {
astutil.DeleteNamedImport(fset, file, imp.Name.Name, path)
} else {
astutil.DeleteImport(fset, file, path)
}
}
}
}
ast.SortImports(fset, file)
// Open file to be written
w, err := os.OpenFile(f.Abs(), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)
if err != nil {
return err
}
defer w.Close()
// Write formatted code without unused imports
return format.Node(w, fset, file)
}
开发者ID:smessier,项目名称:goa,代码行数:35,代码来源:workspace.go
示例10: nodeString
// nodeString returns a string representation of n.
func nodeString(n ast.Node) string {
var buf bytes.Buffer
if err := format.Node(&buf, fset, n); err != nil {
log.Fatal(err) // should always succeed
}
return buf.String()
}
开发者ID:Harvey-OS,项目名称:go,代码行数:8,代码来源:fmt_test.go
示例11: TranspileFile
func TranspileFile(goFilename, phpFilename, phpStr string, gosrc io.Writer) error {
parser := parser.NewParser()
file, err := parser.Parse(phpFilename, phpStr)
if err != nil {
return fmt.Errorf("found errors while parsing %s: %s", phpFilename, err)
}
tg := Togo{currentScope: parser.FileSet.Scope}
nodes := []goast.Node{}
for _, node := range tg.beginScope(tg.currentScope) {
nodes = append(nodes, node)
}
for _, phpNode := range file.Nodes {
nodes = append(nodes, tg.ToGoStmt(phpNode.(phpast.Statement)))
}
buf := &bytes.Buffer{}
if err = format.Node(buf, token.NewFileSet(), File(phpFilename[:len(phpFilename)-4], nodes...)); err != nil {
return fmt.Errorf("error while formatting %s: %s", phpFilename, err)
}
imported, err := imports.Process(goFilename, buf.Bytes(), &imports.Options{AllErrors: true, Comments: true, TabIndent: true, TabWidth: 8})
if err != nil {
return fmt.Errorf("error while getting imports for %s: %s", phpFilename, err)
}
_, err = gosrc.Write(imported)
return err
}
开发者ID:henrylee2cn,项目名称:php,代码行数:31,代码来源:togo.go
示例12: print
func print(t *testing.T, name string, f *ast.File) string {
var buf bytes.Buffer
if err := format.Node(&buf, fset, f); err != nil {
t.Fatalf("%s gofmt: %v", name, err)
}
return string(buf.Bytes())
}
开发者ID:Karthikvb,项目名称:15640_projects,代码行数:7,代码来源:imports_test.go
示例13: FormatCode
// FormatCode runs "goimports -w" on the source file.
func (f *SourceFile) FormatCode() error {
if NoFormat {
return nil
}
// Parse file into AST
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, f.Abs(), nil, parser.ParseComments)
if err != nil {
return err
}
// Clean unused imports
imports := astutil.Imports(fset, file)
for _, group := range imports {
for _, imp := range group {
path := strings.Trim(imp.Path.Value, `"`)
if !astutil.UsesImport(file, path) {
astutil.DeleteImport(fset, file, path)
}
}
}
ast.SortImports(fset, file)
// Open file to be written
w, err := os.OpenFile(f.Abs(), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)
if err != nil {
return err
}
defer w.Close()
// Write formatted code without unused imports
return format.Node(w, fset, file)
}
开发者ID:wbmcloud,项目名称:goa,代码行数:31,代码来源:workspace.go
示例14: Rewrite
// Rewrite modifies the AST to rewrite import statements and package import comments.
// src should be compatible with go/parser/#ParseFile:
// (The type of the argument for the src parameter must be string, []byte, or io.Reader.)
//
// return of nil, nil (no result, no error) means no changes are needed
func Rewrite(fname string, src interface{}, prefix string, remove bool) (buf *bytes.Buffer, err error) {
// Create the AST by parsing src.
fset := token.NewFileSet() // positions are relative to fset
f, err := parser.ParseFile(fset, fname, src, parser.ParseComments)
if err != nil {
log.Printf("Error parsing file %s, source: [%s], error: %s", fname, src, err)
return nil, err
}
// normalize the prefix ending with a trailing slash
if prefix[len(prefix)-1] != '/' {
prefix += "/"
}
changed, err := RewriteImports(f, prefix, remove)
if err != nil {
log.Printf("Error rewriting imports in the AST: file %s - %s", fname, err)
return nil, err
}
changed2, err := RewriteImportComments(f, fset, prefix, remove)
if err != nil {
log.Printf("Error rewriting import comments in the AST: file %s - %s", fname, err)
return nil, err
}
if !changed && !changed2 {
return nil, nil
}
buf = &bytes.Buffer{}
err = format.Node(buf, fset, f)
return buf, err
}
开发者ID:postfix,项目名称:prewrite,代码行数:35,代码来源:rewrite.go
示例15: example_htmlFunc
func (p *Presentation) example_htmlFunc(info *PageInfo, funcName string) string {
var buf bytes.Buffer
for _, eg := range info.Examples {
name := stripExampleSuffix(eg.Name)
if name != funcName {
continue
}
// print code
cnode := &printer.CommentedNode{Node: eg.Code, Comments: eg.Comments}
code := p.node_htmlFunc(info, cnode, true)
out := eg.Output
wholeFile := true
// Additional formatting if this is a function body.
if n := len(code); n >= 2 && code[0] == '{' && code[n-1] == '}' {
wholeFile = false
// remove surrounding braces
code = code[1 : n-1]
// unindent
code = strings.Replace(code, "\n ", "\n", -1)
// remove output comment
if loc := exampleOutputRx.FindStringIndex(code); loc != nil {
code = strings.TrimSpace(code[:loc[0]])
}
}
// Write out the playground code in standard Go style
// (use tabs, no comment highlight, etc).
play := ""
if eg.Play != nil && p.ShowPlayground {
var buf bytes.Buffer
if err := format.Node(&buf, info.FSet, eg.Play); err != nil {
log.Print(err)
} else {
play = buf.String()
}
}
// Drop output, as the output comment will appear in the code.
if wholeFile && play == "" {
out = ""
}
if p.ExampleHTML == nil {
out = ""
return ""
}
err := p.ExampleHTML.Execute(&buf, struct {
Name, Doc, Code, Play, Output string
Share bool
}{eg.Name, eg.Doc, code, play, out, info.Share})
if err != nil {
log.Print(err)
}
}
return buf.String()
}
开发者ID:ChloeTigre,项目名称:golang-tools,代码行数:60,代码来源:godoc.go
示例16: TestFilterDuplicates
func TestFilterDuplicates(t *testing.T) {
// parse input
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, "", input, 0)
if err != nil {
t.Fatal(err)
}
// create package
files := map[string]*ast.File{"": file}
pkg, err := ast.NewPackage(fset, files, nil, nil)
if err != nil {
t.Fatal(err)
}
// filter
merged := ast.MergePackageFiles(pkg, ast.FilterFuncDuplicates)
// pretty-print
var buf bytes.Buffer
if err := format.Node(&buf, fset, merged); err != nil {
t.Fatal(err)
}
output := buf.String()
if output != golden {
t.Errorf("incorrect output:\n%s", output)
}
}
开发者ID:Clarifai,项目名称:kubernetes,代码行数:29,代码来源:filter_test.go
示例17: parseTemplateAndArgs
// Parse the arguments string Template(A, B, C)
func parseTemplateAndArgs(s string) (name string, args []string) {
expr, err := parser.ParseExpr(s)
if err != nil {
fatalf("Failed to parse %q: %v", s, err)
}
debugf("expr = %#v\n", expr)
callExpr, ok := expr.(*ast.CallExpr)
if !ok {
fatalf("Failed to parse %q: expecting Identifier(...)", s)
}
debugf("fun = %#v", callExpr.Fun)
fn, ok := callExpr.Fun.(*ast.Ident)
if !ok {
fatalf("Failed to parse %q: expecting Identifier(...)", s)
}
name = fn.Name
for i, arg := range callExpr.Args {
var buf bytes.Buffer
debugf("arg[%d] = %#v", i, arg)
format.Node(&buf, token.NewFileSet(), arg)
s := buf.String()
debugf("parsed = %q", s)
args = append(args, s)
}
return
}
开发者ID:tjyang,项目名称:gotemplate,代码行数:27,代码来源:template.go
示例18: gofmtFile
func gofmtFile(f *ast.File) ([]byte, error) {
var buf bytes.Buffer
if err := format.Node(&buf, fset, f); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
开发者ID:danny8002,项目名称:go,代码行数:7,代码来源:main.go
示例19: rewriteFile
func rewriteFile(fset *token.FileSet, f *ast.File, filename string) error {
var buf bytes.Buffer
if err := format.Node(&buf, fset, f); err != nil {
return fmt.Errorf("failed to pretty-print syntax tree: %v", err)
}
return ioutil.WriteFile(filename, buf.Bytes(), 0644)
}
开发者ID:rakyll,项目名称:GCSolutions,代码行数:7,代码来源:unexport.go
示例20: annotate
func annotate(file string) {
fset = token.NewFileSet()
f, err := parser.ParseFile(fset, file, nil, parser.ParseComments)
if err != nil {
log.Fatal(err)
}
for _, imp := range f.Imports {
if imp.Name != nil && imp.Name.Name == importName {
log.Printf(`"%s" already imported. skipping %s`, importName, file)
return
}
if imp.Path.Value == importPath {
log.Printf(`"%s", already imported. skipping %s`, importPath, file)
return
}
}
edits := editList{packageName: f.Name.Name}
// insert our import directly after the package line
edits.Add(int(f.Name.End()), []byte(importStmt))
ast.Inspect(f, edits.inspect)
var buf bytes.Buffer
if err := format.Node(&buf, fset, f); err != nil {
log.Fatal("format.Node", err)
}
data := buf.Bytes()
var pos int
var out []byte
for _, e := range edits.edits {
out = append(out, data[pos:e.pos]...)
out = append(out, []byte(e.val)...)
pos = e.pos
}
out = append(out, data[pos:]...)
// it's easier to append the setup code at the end
out = append(out, []byte(setup)...)
src, err := format.Source(out)
if err != nil {
log.Fatal("format.Source ", err)
}
if !writeFiles {
fmt.Println(string(src))
return
}
err = ioutil.WriteFile(file, src, 0)
if err != nil {
log.Fatal(err)
}
}
开发者ID:dewrich,项目名称:gotrace,代码行数:59,代码来源:trace.go
注:本文中的go/format.Node函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论