astrewrite

Go tool to walk & rewrite AST

  • Owner: fatih/astrewrite
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

This project is archived and not maintained. There is a better implementation
and solution in the
golang.org/x/tools/go/ast/astutil
package that you can use.

astrewrite GoDoc Build Status

astrewrite provides a Walk() function, similar to ast.Inspect() from the
ast package. The only difference is that the passed walk function can also
return a node, which is used to rewrite the parent node. This provides an easy
way to rewrite a given ast.Node while walking the AST.

Example

package main

import (
	"bytes"
	"fmt"
	"go/ast"
	"go/parser"
	"go/printer"
	"go/token"

	"github.com/fatih/astrewrite"
)

func main() {
	src := `package main

type Foo struct{}`

	fset := token.NewFileSet()
	file, err := parser.ParseFile(fset, "foo.go", src, parser.ParseComments)
	if err != nil {
		panic(err)
	}

	rewriteFunc := func(n ast.Node) (ast.Node, bool) {
		x, ok := n.(*ast.TypeSpec)
		if !ok {
			return n, true
		}

		// change struct type name to "Bar"
		x.Name.Name = "Bar"
		return x, true
	}

	rewritten := astrewrite.Walk(file, rewriteFunc)

	var buf bytes.Buffer
	printer.Fprint(&buf, fset, rewritten)
	fmt.Println(buf.String())
	// Output:
	// package main
	//
	// type Bar struct{}
}

Main metrics

Overview
Name With Ownerfatih/astrewrite
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2017-01-10 08:36:47
Pushed At2019-12-07 15:40:17
Last Commit At2019-12-07 07:40:02
Release Count0
用户参与
Stargazers Count170
Watchers Count6
Fork Count13
Commits Count7
Has Issues Enabled
Issues Count2
Issue Open Count0
Pull Requests Count0
Pull Requests Open Count0
Pull Requests Close Count1
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private